@toloka-platform/sdk 0.1.0-preview.8 → 0.1.0-preview.9

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.
@@ -1,45 +1,45 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun @bytecode @bun-cjs
3
- (function(exports, require, module, __filename, __dirname) {var YW=Object.create;var{getPrototypeOf:NW,defineProperty:hr,getOwnPropertyNames:XW}=Object;var SW=Object.prototype.hasOwnProperty;function xW(e){return this[e]}var JW,EW,be=(e,t,i)=>{var n=e!=null&&typeof e==="object";if(n){var o=t?JW??=new WeakMap:EW??=new WeakMap,s=o.get(e);if(s)return s}i=e!=null?YW(NW(e)):{};let r=t||!e||!e.__esModule?hr(i,"default",{value:e,enumerable:!0}):i;if(e&&typeof e==="object"||typeof e==="function"){for(let g of XW(e))if(!SW.call(r,g))hr(r,g,{get:xW.bind(e,g),enumerable:!0})}if(n)o.set(e,r);return r};var y=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var UW=(e)=>e;function OW(e,t){this[e]=UW.bind(null,t)}var TW=(e,t)=>{for(var i in t)hr(e,i,{get:t[i],enumerable:!0,configurable:!0,set:OW.bind(t,i)})};var bn=y(function(J){Object.defineProperty(J,"__esModule",{value:!0});J.regexpCode=J.getEsmExportName=J.getProperty=J.safeStringify=J.stringify=J.strConcat=J.addCodeArg=J.str=J._=J.nil=J._Code=J.Name=J.IDENTIFIER=J._CodeOrName=void 0;class ko{}J._CodeOrName=ko;J.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class bi extends ko{constructor(e){super();if(!J.IDENTIFIER.test(e))throw Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}J.Name=bi;class Ue extends ko{constructor(e){super();this._items=typeof e==="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((t,i)=>`${t}${i}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((t,i)=>{if(i instanceof bi)t[i.str]=(t[i.str]||0)+1;return t},{})}}J._Code=Ue;J.nil=new Ue("");function Ed(e,...t){let i=[e[0]],n=0;while(n<t.length)Ur(i,t[n]),i.push(e[++n]);return new Ue(i)}J._=Ed;var Er=new Ue("+");function Ud(e,...t){let i=[Zn(e[0])],n=0;while(n<t.length)i.push(Er),Ur(i,t[n]),i.push(Er,Zn(e[++n]));return aB(i),new Ue(i)}J.str=Ud;function Ur(e,t){if(t instanceof Ue)e.push(...t._items);else if(t instanceof bi)e.push(t);else e.push(dB(t))}J.addCodeArg=Ur;function aB(e){let t=1;while(t<e.length-1){if(e[t]===Er){let i=lB(e[t-1],e[t+1]);if(i!==void 0){e.splice(t-1,3,i);continue}e[t++]="+"}t++}}function lB(e,t){if(t==='""')return e;if(e==='""')return t;if(typeof e=="string"){if(t instanceof bi||e[e.length-1]!=='"')return;if(typeof t!="string")return`${e.slice(0,-1)}${t}"`;if(t[0]==='"')return e.slice(0,-1)+t.slice(1);return}if(typeof t=="string"&&t[0]==='"'&&!(e instanceof bi))return`"${e}${t.slice(1)}`;return}function IB(e,t){return t.emptyStr()?e:e.emptyStr()?t:Ud`${e}${t}`}J.strConcat=IB;function dB(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:Zn(Array.isArray(e)?e.join(","):e)}function cB(e){return new Ue(Zn(e))}J.stringify=cB;function Zn(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}J.safeStringify=Zn;function CB(e){return typeof e=="string"&&J.IDENTIFIER.test(e)?new Ue(`.${e}`):Ed`[${e}]`}J.getProperty=CB;function uB(e){if(typeof e=="string"&&J.IDENTIFIER.test(e))return new Ue(`${e}`);throw Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}J.getEsmExportName=uB;function mB(e){return new Ue(e.toString())}J.regexpCode=mB});var zr=y(function(he){Object.defineProperty(he,"__esModule",{value:!0});he.ValueScope=he.ValueScopeName=he.Scope=he.varKinds=he.UsedValueState=void 0;var We=bn();class Od extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`);this.value=e.value}}var Po;(function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"})(Po||(he.UsedValueState=Po={}));he.varKinds={const:new We.Name("const"),let:new We.Name("let"),var:new We.Name("var")};class Or{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof We.Name?e:this.name(e)}name(e){return new We.Name(this._newName(e))}_newName(e){let t=this._names[e]||this._nameGroup(e);return`${e}${t.index++}`}_nameGroup(e){var t,i;if(((i=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||i===void 0?void 0:i.has(e))||this._prefixes&&!this._prefixes.has(e))throw Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}he.Scope=Or;class Tr extends We.Name{constructor(e,t){super(t);this.prefix=e}setValue(e,{property:t,itemIndex:i}){this.value=e,this.scopePath=We._`.${new We.Name(t)}[${i}]`}}he.ValueScopeName=Tr;var pB=We._`\n`;class Td extends Or{constructor(e){super(e);this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?pB:We.nil}}get(){return this._scope}name(e){return new Tr(e,this._newName(e))}value(e,t){var i;if(t.ref===void 0)throw Error("CodeGen: ref must be passed in value");let n=this.toName(e),{prefix:o}=n,s=(i=t.key)!==null&&i!==void 0?i:t.ref,r=this._values[o];if(r){let l=r.get(s);if(l)return l}else r=this._values[o]=new Map;r.set(s,n);let g=this._scope[o]||(this._scope[o]=[]),a=g.length;return g[a]=t.ref,n.setValue(t,{property:o,itemIndex:a}),n}getValue(e,t){let i=this._values[e];if(!i)return;return i.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(i)=>{if(i.scopePath===void 0)throw Error(`CodeGen: name "${i}" has no value`);return We._`${e}${i.scopePath}`})}scopeCode(e=this._values,t,i){return this._reduceValues(e,(n)=>{if(n.value===void 0)throw Error(`CodeGen: name "${n}" has no value`);return n.value.code},t,i)}_reduceValues(e,t,i={},n){let o=We.nil;for(let s in e){let r=e[s];if(!r)continue;let g=i[s]=i[s]||new Map;r.forEach((a)=>{if(g.has(a))return;g.set(a,Po.Started);let l=t(a);if(l){let I=this.opts.es5?he.varKinds.var:he.varKinds.const;o=We._`${o}${I} ${a} = ${l};${this.opts._n}`}else if(l=n===null||n===void 0?void 0:n(a))o=We._`${o}${l}${this.opts._n}`;else throw new Od(a);g.set(a,Po.Completed)})}return o}}he.ValueScope=Td});var v=y(function(P){Object.defineProperty(P,"__esModule",{value:!0});P.or=P.and=P.not=P.CodeGen=P.operators=P.varKinds=P.ValueScopeName=P.ValueScope=P.Scope=P.Name=P.regexpCode=P.stringify=P.getProperty=P.nil=P.strConcat=P.str=P._=void 0;var X=bn(),Oe=zr(),Bt=bn();Object.defineProperty(P,"_",{enumerable:!0,get:function(){return Bt._}});Object.defineProperty(P,"str",{enumerable:!0,get:function(){return Bt.str}});Object.defineProperty(P,"strConcat",{enumerable:!0,get:function(){return Bt.strConcat}});Object.defineProperty(P,"nil",{enumerable:!0,get:function(){return Bt.nil}});Object.defineProperty(P,"getProperty",{enumerable:!0,get:function(){return Bt.getProperty}});Object.defineProperty(P,"stringify",{enumerable:!0,get:function(){return Bt.stringify}});Object.defineProperty(P,"regexpCode",{enumerable:!0,get:function(){return Bt.regexpCode}});Object.defineProperty(P,"Name",{enumerable:!0,get:function(){return Bt.Name}});var Jo=zr();Object.defineProperty(P,"Scope",{enumerable:!0,get:function(){return Jo.Scope}});Object.defineProperty(P,"ValueScope",{enumerable:!0,get:function(){return Jo.ValueScope}});Object.defineProperty(P,"ValueScopeName",{enumerable:!0,get:function(){return Jo.ValueScopeName}});Object.defineProperty(P,"varKinds",{enumerable:!0,get:function(){return Jo.varKinds}});P.operators={GT:new X._Code(">"),GTE:new X._Code(">="),LT:new X._Code("<"),LTE:new X._Code("<="),EQ:new X._Code("==="),NEQ:new X._Code("!=="),NOT:new X._Code("!"),OR:new X._Code("||"),AND:new X._Code("&&"),ADD:new X._Code("+")};class Rt{optimizeNodes(){return this}optimizeNames(e,t){return this}}class zd extends Rt{constructor(e,t,i){super();this.varKind=e,this.name=t,this.rhs=i}render({es5:e,_n:t}){let i=e?Oe.varKinds.var:this.varKind,n=this.rhs===void 0?"":` = ${this.rhs}`;return`${i} ${this.name}${n};`+t}optimizeNames(e,t){if(!e[this.name.str])return;if(this.rhs)this.rhs=hi(this.rhs,e,t);return this}get names(){return this.rhs instanceof X._CodeOrName?this.rhs.names:{}}}class Qr extends Rt{constructor(e,t,i){super();this.lhs=e,this.rhs=t,this.sideEffects=i}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(this.lhs instanceof X.Name&&!e[this.lhs.str]&&!this.sideEffects)return;return this.rhs=hi(this.rhs,e,t),this}get names(){let e=this.lhs instanceof X.Name?{}:{...this.lhs.names};return xo(e,this.rhs)}}class jd extends Qr{constructor(e,t,i,n){super(e,i,n);this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class Dd extends Rt{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class Qd extends Rt{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class _d extends Rt{constructor(e){super();this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class Kd extends Rt{constructor(e){super();this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=hi(this.code,e,t),this}get names(){return this.code instanceof X._CodeOrName?this.code.names:{}}}class Eo extends Rt{constructor(e=[]){super();this.nodes=e}render(e){return this.nodes.reduce((t,i)=>t+i.render(e),"")}optimizeNodes(){let{nodes:e}=this,t=e.length;while(t--){let i=e[t].optimizeNodes();if(Array.isArray(i))e.splice(t,1,...i);else if(i)e[t]=i;else e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){let{nodes:i}=this,n=i.length;while(n--){let o=i[n];if(o.optimizeNames(e,t))continue;AB(e,o.names),i.splice(n,1)}return i.length>0?this:void 0}get names(){return this.nodes.reduce((e,t)=>Ot(e,t.names),{})}}class Gt extends Eo{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class Ld extends Eo{}class Wn extends Gt{}Wn.kind="else";class mt extends Gt{constructor(e,t){super(t);this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);if(this.else)t+="else "+this.else.render(e);return t}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let t=this.else;if(t){let i=t.optimizeNodes();t=this.else=Array.isArray(i)?new Wn(i):i}if(t){if(e===!1)return t instanceof mt?t:t.nodes;if(this.nodes.length)return this;return new mt(tc(e),t instanceof mt?[t]:t.nodes)}if(e===!1||!this.nodes.length)return;return this}optimizeNames(e,t){var i;if(this.else=(i=this.else)===null||i===void 0?void 0:i.optimizeNames(e,t),!(super.optimizeNames(e,t)||this.else))return;return this.condition=hi(this.condition,e,t),this}get names(){let e=super.names;if(xo(e,this.condition),this.else)Ot(e,this.else.names);return e}}mt.kind="if";class Wi extends Gt{}Wi.kind="for";class Md extends Wi{constructor(e){super();this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iteration=hi(this.iteration,e,t),this}get names(){return Ot(super.names,this.iteration.names)}}class $d extends Wi{constructor(e,t,i,n){super();this.varKind=e,this.name=t,this.from=i,this.to=n}render(e){let t=e.es5?Oe.varKinds.var:this.varKind,{name:i,from:n,to:o}=this;return`for(${t} ${i}=${n}; ${i}<${o}; ${i}++)`+super.render(e)}get names(){let e=xo(super.names,this.from);return xo(e,this.to)}}class jr extends Wi{constructor(e,t,i,n){super();this.loop=e,this.varKind=t,this.name=i,this.iterable=n}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iterable=hi(this.iterable,e,t),this}get names(){return Ot(super.names,this.iterable.names)}}class Yo extends Gt{constructor(e,t,i){super();this.name=e,this.args=t,this.async=i}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}Yo.kind="func";class No extends Eo{render(e){return"return "+super.render(e)}}No.kind="return";class qd extends Gt{render(e){let t="try"+super.render(e);if(this.catch)t+=this.catch.render(e);if(this.finally)t+=this.finally.render(e);return t}optimizeNodes(){var e,t;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(e,t){var i,n;return super.optimizeNames(e,t),(i=this.catch)===null||i===void 0||i.optimizeNames(e,t),(n=this.finally)===null||n===void 0||n.optimizeNames(e,t),this}get names(){let e=super.names;if(this.catch)Ot(e,this.catch.names);if(this.finally)Ot(e,this.finally.names);return e}}class Xo extends Gt{constructor(e){super();this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}Xo.kind="catch";class So extends Gt{render(e){return"finally"+super.render(e)}}So.kind="finally";class ec{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
4
- `:""},this._extScope=e,this._scope=new Oe.Scope({parent:e}),this._nodes=[new Ld]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){let i=this._extScope.value(e,t);return(this._values[i.prefix]||(this._values[i.prefix]=new Set)).add(i),i}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,i,n){let o=this._scope.toName(t);if(i!==void 0&&n)this._constants[o.str]=i;return this._leafNode(new zd(e,o,i)),o}const(e,t,i){return this._def(Oe.varKinds.const,e,t,i)}let(e,t,i){return this._def(Oe.varKinds.let,e,t,i)}var(e,t,i){return this._def(Oe.varKinds.var,e,t,i)}assign(e,t,i){return this._leafNode(new Qr(e,t,i))}add(e,t){return this._leafNode(new jd(e,P.operators.ADD,t))}code(e){if(typeof e=="function")e();else if(e!==X.nil)this._leafNode(new Kd(e));return this}object(...e){let t=["{"];for(let[i,n]of e){if(t.length>1)t.push(",");if(t.push(i),i!==n||this.opts.es5)t.push(":"),(0,X.addCodeArg)(t,n)}return t.push("}"),new X._Code(t)}if(e,t,i){if(this._blockNode(new mt(e)),t&&i)this.code(t).else().code(i).endIf();else if(t)this.code(t).endIf();else if(i)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new mt(e))}else(){return this._elseNode(new Wn)}endIf(){return this._endBlockNode(mt,Wn)}_for(e,t){if(this._blockNode(e),t)this.code(t).endFor();return this}for(e,t){return this._for(new Md(e),t)}forRange(e,t,i,n,o=this.opts.es5?Oe.varKinds.var:Oe.varKinds.let){let s=this._scope.toName(e);return this._for(new $d(o,s,t,i),()=>n(s))}forOf(e,t,i,n=Oe.varKinds.const){let o=this._scope.toName(e);if(this.opts.es5){let s=t instanceof X.Name?t:this.var("_arr",t);return this.forRange("_i",0,X._`${s}.length`,(r)=>{this.var(o,X._`${s}[${r}]`),i(o)})}return this._for(new jr("of",n,o,t),()=>i(o))}forIn(e,t,i,n=this.opts.es5?Oe.varKinds.var:Oe.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,X._`Object.keys(${t})`,i);let o=this._scope.toName(e);return this._for(new jr("in",n,o,t),()=>i(o))}endFor(){return this._endBlockNode(Wi)}label(e){return this._leafNode(new Dd(e))}break(e){return this._leafNode(new Qd(e))}return(e){let t=new No;if(this._blockNode(t),this.code(e),t.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(No)}try(e,t,i){if(!t&&!i)throw Error('CodeGen: "try" without "catch" and "finally"');let n=new qd;if(this._blockNode(n),this.code(e),t){let o=this.name("e");this._currNode=n.catch=new Xo(o),t(o)}if(i)this._currNode=n.finally=new So,this.code(i);return this._endBlockNode(Xo,So)}throw(e){return this._leafNode(new _d(e))}block(e,t){if(this._blockStarts.push(this._nodes.length),e)this.code(e).endBlock(t);return this}endBlock(e){let t=this._blockStarts.pop();if(t===void 0)throw Error("CodeGen: not in self-balancing block");let i=this._nodes.length-t;if(i<0||e!==void 0&&i!==e)throw Error(`CodeGen: wrong number of nodes: ${i} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=X.nil,i,n){if(this._blockNode(new Yo(e,t,i)),n)this.code(n).endFunc();return this}endFunc(){return this._endBlockNode(Yo)}optimize(e=1){while(e-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,t){let i=this._currNode;if(i instanceof e||t&&i instanceof t)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${t?`${e.kind}/${t.kind}`:e.kind}"`)}_elseNode(e){let t=this._currNode;if(!(t instanceof mt))throw Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let t=this._nodes;t[t.length-1]=e}}P.CodeGen=ec;function Ot(e,t){for(let i in t)e[i]=(e[i]||0)+(t[i]||0);return e}function xo(e,t){return t instanceof X._CodeOrName?Ot(e,t.names):e}function hi(e,t,i){if(e instanceof X.Name)return n(e);if(!o(e))return e;return new X._Code(e._items.reduce((s,r)=>{if(r instanceof X.Name)r=n(r);if(r instanceof X._Code)s.push(...r._items);else s.push(r);return s},[]));function n(s){let r=i[s.str];if(r===void 0||t[s.str]!==1)return s;return delete t[s.str],r}function o(s){return s instanceof X._Code&&s._items.some((r)=>r instanceof X.Name&&t[r.str]===1&&i[r.str]!==void 0)}}function AB(e,t){for(let i in t)e[i]=(e[i]||0)-(t[i]||0)}function tc(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:X._`!${Dr(e)}`}P.not=tc;var ZB=ic(P.operators.AND);function bB(...e){return e.reduce(ZB)}P.and=bB;var WB=ic(P.operators.OR);function hB(...e){return e.reduce(WB)}P.or=hB;function ic(e){return(t,i)=>t===X.nil?i:i===X.nil?t:X._`${Dr(t)} ${e} ${Dr(i)}`}function Dr(e){return e instanceof X.Name?e:X._`(${e})`}});var N=y(function(Y){Object.defineProperty(Y,"__esModule",{value:!0});Y.checkStrictMode=Y.getErrorPath=Y.Type=Y.useFunc=Y.setEvaluated=Y.evaluatedPropsToName=Y.mergeEvaluated=Y.eachItem=Y.unescapeJsonPointer=Y.escapeJsonPointer=Y.escapeFragment=Y.unescapeFragment=Y.schemaRefOrVal=Y.schemaHasRulesButRef=Y.schemaHasRules=Y.checkUnknownRules=Y.alwaysValidSchema=Y.toHash=void 0;var T=v(),fB=bn();function yB(e){let t={};for(let i of e)t[i]=!0;return t}Y.toHash=yB;function VB(e,t){if(typeof t=="boolean")return t;if(Object.keys(t).length===0)return!0;return sc(e,t),!rc(t,e.self.RULES.all)}Y.alwaysValidSchema=VB;function sc(e,t=e.schema){let{opts:i,self:n}=e;if(!i.strictSchema)return;if(typeof t==="boolean")return;let o=n.RULES.keywords;for(let s in t)if(!o[s])lc(e,`unknown keyword: "${s}"`)}Y.checkUnknownRules=sc;function rc(e,t){if(typeof e=="boolean")return!e;for(let i in e)if(t[i])return!0;return!1}Y.schemaHasRules=rc;function BB(e,t){if(typeof e=="boolean")return!e;for(let i in e)if(i!=="$ref"&&t.all[i])return!0;return!1}Y.schemaHasRulesButRef=BB;function RB({topSchemaRef:e,schemaPath:t},i,n,o){if(!o){if(typeof i=="number"||typeof i=="boolean")return i;if(typeof i=="string")return T._`${i}`}return T._`${e}${t}${(0,T.getProperty)(n)}`}Y.schemaRefOrVal=RB;function GB(e){return gc(decodeURIComponent(e))}Y.unescapeFragment=GB;function wB(e){return encodeURIComponent(Kr(e))}Y.escapeFragment=wB;function Kr(e){if(typeof e=="number")return`${e}`;return e.replace(/~/g,"~0").replace(/\//g,"~1")}Y.escapeJsonPointer=Kr;function gc(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}Y.unescapeJsonPointer=gc;function FB(e,t){if(Array.isArray(e))for(let i of e)t(i);else t(e)}Y.eachItem=FB;function nc({mergeNames:e,mergeToName:t,mergeValues:i,resultToName:n}){return(o,s,r,g)=>{let a=r===void 0?s:r instanceof T.Name?(s instanceof T.Name?e(o,s,r):t(o,s,r),r):s instanceof T.Name?(t(o,r,s),s):i(s,r);return g===T.Name&&!(a instanceof T.Name)?n(o,a):a}}Y.mergeEvaluated={props:nc({mergeNames:(e,t,i)=>e.if(T._`${i} !== true && ${t} !== undefined`,()=>{e.if(T._`${t} === true`,()=>e.assign(i,!0),()=>e.assign(i,T._`${i} || {}`).code(T._`Object.assign(${i}, ${t})`))}),mergeToName:(e,t,i)=>e.if(T._`${i} !== true`,()=>{if(t===!0)e.assign(i,!0);else e.assign(i,T._`${i} || {}`),Lr(e,i,t)}),mergeValues:(e,t)=>e===!0?!0:{...e,...t},resultToName:ac}),items:nc({mergeNames:(e,t,i)=>e.if(T._`${i} !== true && ${t} !== undefined`,()=>e.assign(i,T._`${t} === true ? true : ${i} > ${t} ? ${i} : ${t}`)),mergeToName:(e,t,i)=>e.if(T._`${i} !== true`,()=>e.assign(i,t===!0?!0:T._`${i} > ${t} ? ${i} : ${t}`)),mergeValues:(e,t)=>e===!0?!0:Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})};function ac(e,t){if(t===!0)return e.var("props",!0);let i=e.var("props",T._`{}`);if(t!==void 0)Lr(e,i,t);return i}Y.evaluatedPropsToName=ac;function Lr(e,t,i){Object.keys(i).forEach((n)=>e.assign(T._`${t}${(0,T.getProperty)(n)}`,!0))}Y.setEvaluated=Lr;var oc={};function HB(e,t){return e.scopeValue("func",{ref:t,code:oc[t.code]||(oc[t.code]=new fB._Code(t.code))})}Y.useFunc=HB;var _r;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(_r||(Y.Type=_r={}));function vB(e,t,i){if(e instanceof T.Name){let n=t===_r.Num;return i?n?T._`"[" + ${e} + "]"`:T._`"['" + ${e} + "']"`:n?T._`"/" + ${e}`:T._`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return i?(0,T.getProperty)(e).toString():"/"+Kr(e)}Y.getErrorPath=vB;function lc(e,t,i=e.opts.strictSchema){if(!i)return;if(t=`strict mode: ${t}`,i===!0)throw Error(t);e.self.logger.warn(t)}Y.checkStrictMode=lc});var ve=y(function(Mr){Object.defineProperty(Mr,"__esModule",{value:!0});var ae=v(),kB={data:new ae.Name("data"),valCxt:new ae.Name("valCxt"),instancePath:new ae.Name("instancePath"),parentData:new ae.Name("parentData"),parentDataProperty:new ae.Name("parentDataProperty"),rootData:new ae.Name("rootData"),dynamicAnchors:new ae.Name("dynamicAnchors"),vErrors:new ae.Name("vErrors"),errors:new ae.Name("errors"),this:new ae.Name("this"),self:new ae.Name("self"),scope:new ae.Name("scope"),json:new ae.Name("json"),jsonPos:new ae.Name("jsonPos"),jsonLen:new ae.Name("jsonLen"),jsonPart:new ae.Name("jsonPart")};Mr.default=kB});var hn=y(function(le){Object.defineProperty(le,"__esModule",{value:!0});le.extendErrors=le.resetErrorsCount=le.reportExtraError=le.reportError=le.keyword$DataError=le.keywordError=void 0;var S=v(),Uo=N(),ue=ve();le.keywordError={message:({keyword:e})=>S.str`must pass "${e}" keyword validation`};le.keyword$DataError={message:({keyword:e,schemaType:t})=>t?S.str`"${e}" keyword must be ${t} ($data)`:S.str`"${e}" keyword is invalid ($data)`};function PB(e,t=le.keywordError,i,n){let{it:o}=e,{gen:s,compositeRule:r,allErrors:g}=o,a=cc(e,t,i);if(n!==null&&n!==void 0?n:r||g)Ic(s,a);else dc(o,S._`[${a}]`)}le.reportError=PB;function YB(e,t=le.keywordError,i){let{it:n}=e,{gen:o,compositeRule:s,allErrors:r}=n,g=cc(e,t,i);if(Ic(o,g),!(s||r))dc(n,ue.default.vErrors)}le.reportExtraError=YB;function NB(e,t){e.assign(ue.default.errors,t),e.if(S._`${ue.default.vErrors} !== null`,()=>e.if(t,()=>e.assign(S._`${ue.default.vErrors}.length`,t),()=>e.assign(ue.default.vErrors,null)))}le.resetErrorsCount=NB;function XB({gen:e,keyword:t,schemaValue:i,data:n,errsCount:o,it:s}){if(o===void 0)throw Error("ajv implementation error");let r=e.name("err");e.forRange("i",o,ue.default.errors,(g)=>{if(e.const(r,S._`${ue.default.vErrors}[${g}]`),e.if(S._`${r}.instancePath === undefined`,()=>e.assign(S._`${r}.instancePath`,(0,S.strConcat)(ue.default.instancePath,s.errorPath))),e.assign(S._`${r}.schemaPath`,S.str`${s.errSchemaPath}/${t}`),s.opts.verbose)e.assign(S._`${r}.schema`,i),e.assign(S._`${r}.data`,n)})}le.extendErrors=XB;function Ic(e,t){let i=e.const("err",t);e.if(S._`${ue.default.vErrors} === null`,()=>e.assign(ue.default.vErrors,S._`[${i}]`),S._`${ue.default.vErrors}.push(${i})`),e.code(S._`${ue.default.errors}++`)}function dc(e,t){let{gen:i,validateName:n,schemaEnv:o}=e;if(o.$async)i.throw(S._`new ${e.ValidationError}(${t})`);else i.assign(S._`${n}.errors`,t),i.return(!1)}var Tt={keyword:new S.Name("keyword"),schemaPath:new S.Name("schemaPath"),params:new S.Name("params"),propertyName:new S.Name("propertyName"),message:new S.Name("message"),schema:new S.Name("schema"),parentSchema:new S.Name("parentSchema")};function cc(e,t,i){let{createErrors:n}=e.it;if(n===!1)return S._`{}`;return SB(e,t,i)}function SB(e,t,i={}){let{gen:n,it:o}=e,s=[xB(o,i),JB(e,i)];return EB(e,t,s),n.object(...s)}function xB({errorPath:e},{instancePath:t}){let i=t?S.str`${e}${(0,Uo.getErrorPath)(t,Uo.Type.Str)}`:e;return[ue.default.instancePath,(0,S.strConcat)(ue.default.instancePath,i)]}function JB({keyword:e,it:{errSchemaPath:t}},{schemaPath:i,parentSchema:n}){let o=n?t:S.str`${t}/${e}`;if(i)o=S.str`${o}${(0,Uo.getErrorPath)(i,Uo.Type.Str)}`;return[Tt.schemaPath,o]}function EB(e,{params:t,message:i},n){let{keyword:o,data:s,schemaValue:r,it:g}=e,{opts:a,propertyName:l,topSchemaRef:I,schemaPath:d}=g;if(n.push([Tt.keyword,o],[Tt.params,typeof t=="function"?t(e):t||S._`{}`]),a.messages)n.push([Tt.message,typeof i=="function"?i(e):i]);if(a.verbose)n.push([Tt.schema,r],[Tt.parentSchema,S._`${I}${d}`],[ue.default.data,s]);if(l)n.push([Tt.propertyName,l])}});var uc=y(function(fi){Object.defineProperty(fi,"__esModule",{value:!0});fi.boolOrEmptySchema=fi.topBoolOrEmptySchema=void 0;var UB=hn(),OB=v(),TB=ve(),zB={message:"boolean schema is false"};function jB(e){let{gen:t,schema:i,validateName:n}=e;if(i===!1)Cc(e,!1);else if(typeof i=="object"&&i.$async===!0)t.return(TB.default.data);else t.assign(OB._`${n}.errors`,null),t.return(!0)}fi.topBoolOrEmptySchema=jB;function DB(e,t){let{gen:i,schema:n}=e;if(n===!1)i.var(t,!1),Cc(e);else i.var(t,!0)}fi.boolOrEmptySchema=DB;function Cc(e,t){let{gen:i,data:n}=e,o={gen:i,keyword:"false schema",data:n,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,UB.reportError)(o,zB,void 0,t)}});var $r=y(function(yi){Object.defineProperty(yi,"__esModule",{value:!0});yi.getRules=yi.isJSONType=void 0;var QB=["string","number","integer","boolean","null","object","array"],_B=new Set(QB);function KB(e){return typeof e=="string"&&_B.has(e)}yi.isJSONType=KB;function LB(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}yi.getRules=LB});var qr=y(function(wt){Object.defineProperty(wt,"__esModule",{value:!0});wt.shouldUseRule=wt.shouldUseGroup=wt.schemaHasRulesForType=void 0;function MB({schema:e,self:t},i){let n=t.RULES.types[i];return n&&n!==!0&&mc(e,n)}wt.schemaHasRulesForType=MB;function mc(e,t){return t.rules.some((i)=>pc(e,i))}wt.shouldUseGroup=mc;function pc(e,t){var i;return e[t.keyword]!==void 0||((i=t.definition.implements)===null||i===void 0?void 0:i.some((n)=>e[n]!==void 0))}wt.shouldUseRule=pc});var fn=y(function(Ie){Object.defineProperty(Ie,"__esModule",{value:!0});Ie.reportTypeError=Ie.checkDataTypes=Ie.checkDataType=Ie.coerceAndCheckDataType=Ie.getJSONTypes=Ie.getSchemaTypes=Ie.DataType=void 0;var $B=$r(),qB=qr(),eR=hn(),k=v(),Ac=N(),Vi;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(Vi||(Ie.DataType=Vi={}));function tR(e){let t=Zc(e.type);if(t.includes("null")){if(e.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!t.length&&e.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(e.nullable===!0)t.push("null")}return t}Ie.getSchemaTypes=tR;function Zc(e){let t=Array.isArray(e)?e:e?[e]:[];if(t.every($B.isJSONType))return t;throw Error("type must be JSONType or JSONType[]: "+t.join(","))}Ie.getJSONTypes=Zc;function iR(e,t){let{gen:i,data:n,opts:o}=e,s=nR(t,o.coerceTypes),r=t.length>0&&!(s.length===0&&t.length===1&&(0,qB.schemaHasRulesForType)(e,t[0]));if(r){let g=tg(t,n,o.strictNumbers,Vi.Wrong);i.if(g,()=>{if(s.length)oR(e,t,s);else ig(e)})}return r}Ie.coerceAndCheckDataType=iR;var bc=new Set(["string","number","integer","boolean","null"]);function nR(e,t){return t?e.filter((i)=>bc.has(i)||t==="array"&&i==="array"):[]}function oR(e,t,i){let{gen:n,data:o,opts:s}=e,r=n.let("dataType",k._`typeof ${o}`),g=n.let("coerced",k._`undefined`);if(s.coerceTypes==="array")n.if(k._`${r} == 'object' && Array.isArray(${o}) && ${o}.length == 1`,()=>n.assign(o,k._`${o}[0]`).assign(r,k._`typeof ${o}`).if(tg(t,o,s.strictNumbers),()=>n.assign(g,o)));n.if(k._`${g} !== undefined`);for(let l of i)if(bc.has(l)||l==="array"&&s.coerceTypes==="array")a(l);n.else(),ig(e),n.endIf(),n.if(k._`${g} !== undefined`,()=>{n.assign(o,g),sR(e,g)});function a(l){switch(l){case"string":n.elseIf(k._`${r} == "number" || ${r} == "boolean"`).assign(g,k._`"" + ${o}`).elseIf(k._`${o} === null`).assign(g,k._`""`);return;case"number":n.elseIf(k._`${r} == "boolean" || ${o} === null
3
+ (function(exports, require, module, __filename, __dirname) {var NW=Object.create;var{getPrototypeOf:XW,defineProperty:yr,getOwnPropertyNames:SW}=Object;var xW=Object.prototype.hasOwnProperty;function JW(e){return this[e]}var EW,UW,be=(e,t,i)=>{var n=e!=null&&typeof e==="object";if(n){var o=t?EW??=new WeakMap:UW??=new WeakMap,s=o.get(e);if(s)return s}i=e!=null?NW(XW(e)):{};let r=t||!e||!e.__esModule?yr(i,"default",{value:e,enumerable:!0}):i;if(e&&typeof e==="object"||typeof e==="function"){for(let g of SW(e))if(!xW.call(r,g))yr(r,g,{get:JW.bind(e,g),enumerable:!0})}if(n)o.set(e,r);return r};var y=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var OW=(e)=>e;function TW(e,t){this[e]=OW.bind(null,t)}var zW=(e,t)=>{for(var i in t)yr(e,i,{get:t[i],enumerable:!0,configurable:!0,set:TW.bind(t,i)})};var Wn=y(function(J){Object.defineProperty(J,"__esModule",{value:!0});J.regexpCode=J.getEsmExportName=J.getProperty=J.safeStringify=J.stringify=J.strConcat=J.addCodeArg=J.str=J._=J.nil=J._Code=J.Name=J.IDENTIFIER=J._CodeOrName=void 0;class No{}J._CodeOrName=No;J.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class Wi extends No{constructor(e){super();if(!J.IDENTIFIER.test(e))throw Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}J.Name=Wi;class Oe extends No{constructor(e){super();this._items=typeof e==="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((t,i)=>`${t}${i}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((t,i)=>{if(i instanceof Wi)t[i.str]=(t[i.str]||0)+1;return t},{})}}J._Code=Oe;J.nil=new Oe("");function Od(e,...t){let i=[e[0]],n=0;while(n<t.length)Tr(i,t[n]),i.push(e[++n]);return new Oe(i)}J._=Od;var Or=new Oe("+");function Td(e,...t){let i=[bn(e[0])],n=0;while(n<t.length)i.push(Or),Tr(i,t[n]),i.push(Or,bn(e[++n]));return lB(i),new Oe(i)}J.str=Td;function Tr(e,t){if(t instanceof Oe)e.push(...t._items);else if(t instanceof Wi)e.push(t);else e.push(cB(t))}J.addCodeArg=Tr;function lB(e){let t=1;while(t<e.length-1){if(e[t]===Or){let i=IB(e[t-1],e[t+1]);if(i!==void 0){e.splice(t-1,3,i);continue}e[t++]="+"}t++}}function IB(e,t){if(t==='""')return e;if(e==='""')return t;if(typeof e=="string"){if(t instanceof Wi||e[e.length-1]!=='"')return;if(typeof t!="string")return`${e.slice(0,-1)}${t}"`;if(t[0]==='"')return e.slice(0,-1)+t.slice(1);return}if(typeof t=="string"&&t[0]==='"'&&!(e instanceof Wi))return`"${e}${t.slice(1)}`;return}function dB(e,t){return t.emptyStr()?e:e.emptyStr()?t:Td`${e}${t}`}J.strConcat=dB;function cB(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:bn(Array.isArray(e)?e.join(","):e)}function CB(e){return new Oe(bn(e))}J.stringify=CB;function bn(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}J.safeStringify=bn;function uB(e){return typeof e=="string"&&J.IDENTIFIER.test(e)?new Oe(`.${e}`):Od`[${e}]`}J.getProperty=uB;function mB(e){if(typeof e=="string"&&J.IDENTIFIER.test(e))return new Oe(`${e}`);throw Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}J.getEsmExportName=mB;function pB(e){return new Oe(e.toString())}J.regexpCode=pB});var Dr=y(function(he){Object.defineProperty(he,"__esModule",{value:!0});he.ValueScope=he.ValueScopeName=he.Scope=he.varKinds=he.UsedValueState=void 0;var We=Wn();class zd extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`);this.value=e.value}}var Xo;(function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"})(Xo||(he.UsedValueState=Xo={}));he.varKinds={const:new We.Name("const"),let:new We.Name("let"),var:new We.Name("var")};class zr{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof We.Name?e:this.name(e)}name(e){return new We.Name(this._newName(e))}_newName(e){let t=this._names[e]||this._nameGroup(e);return`${e}${t.index++}`}_nameGroup(e){var t,i;if(((i=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||i===void 0?void 0:i.has(e))||this._prefixes&&!this._prefixes.has(e))throw Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}he.Scope=zr;class jr extends We.Name{constructor(e,t){super(t);this.prefix=e}setValue(e,{property:t,itemIndex:i}){this.value=e,this.scopePath=We._`.${new We.Name(t)}[${i}]`}}he.ValueScopeName=jr;var AB=We._`\n`;class jd extends zr{constructor(e){super(e);this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?AB:We.nil}}get(){return this._scope}name(e){return new jr(e,this._newName(e))}value(e,t){var i;if(t.ref===void 0)throw Error("CodeGen: ref must be passed in value");let n=this.toName(e),{prefix:o}=n,s=(i=t.key)!==null&&i!==void 0?i:t.ref,r=this._values[o];if(r){let l=r.get(s);if(l)return l}else r=this._values[o]=new Map;r.set(s,n);let g=this._scope[o]||(this._scope[o]=[]),a=g.length;return g[a]=t.ref,n.setValue(t,{property:o,itemIndex:a}),n}getValue(e,t){let i=this._values[e];if(!i)return;return i.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(i)=>{if(i.scopePath===void 0)throw Error(`CodeGen: name "${i}" has no value`);return We._`${e}${i.scopePath}`})}scopeCode(e=this._values,t,i){return this._reduceValues(e,(n)=>{if(n.value===void 0)throw Error(`CodeGen: name "${n}" has no value`);return n.value.code},t,i)}_reduceValues(e,t,i={},n){let o=We.nil;for(let s in e){let r=e[s];if(!r)continue;let g=i[s]=i[s]||new Map;r.forEach((a)=>{if(g.has(a))return;g.set(a,Xo.Started);let l=t(a);if(l){let I=this.opts.es5?he.varKinds.var:he.varKinds.const;o=We._`${o}${I} ${a} = ${l};${this.opts._n}`}else if(l=n===null||n===void 0?void 0:n(a))o=We._`${o}${l}${this.opts._n}`;else throw new zd(a);g.set(a,Xo.Completed)})}return o}}he.ValueScope=jd});var v=y(function(P){Object.defineProperty(P,"__esModule",{value:!0});P.or=P.and=P.not=P.CodeGen=P.operators=P.varKinds=P.ValueScopeName=P.ValueScope=P.Scope=P.Name=P.regexpCode=P.stringify=P.getProperty=P.nil=P.strConcat=P.str=P._=void 0;var X=Wn(),Te=Dr(),Bt=Wn();Object.defineProperty(P,"_",{enumerable:!0,get:function(){return Bt._}});Object.defineProperty(P,"str",{enumerable:!0,get:function(){return Bt.str}});Object.defineProperty(P,"strConcat",{enumerable:!0,get:function(){return Bt.strConcat}});Object.defineProperty(P,"nil",{enumerable:!0,get:function(){return Bt.nil}});Object.defineProperty(P,"getProperty",{enumerable:!0,get:function(){return Bt.getProperty}});Object.defineProperty(P,"stringify",{enumerable:!0,get:function(){return Bt.stringify}});Object.defineProperty(P,"regexpCode",{enumerable:!0,get:function(){return Bt.regexpCode}});Object.defineProperty(P,"Name",{enumerable:!0,get:function(){return Bt.Name}});var Oo=Dr();Object.defineProperty(P,"Scope",{enumerable:!0,get:function(){return Oo.Scope}});Object.defineProperty(P,"ValueScope",{enumerable:!0,get:function(){return Oo.ValueScope}});Object.defineProperty(P,"ValueScopeName",{enumerable:!0,get:function(){return Oo.ValueScopeName}});Object.defineProperty(P,"varKinds",{enumerable:!0,get:function(){return Oo.varKinds}});P.operators={GT:new X._Code(">"),GTE:new X._Code(">="),LT:new X._Code("<"),LTE:new X._Code("<="),EQ:new X._Code("==="),NEQ:new X._Code("!=="),NOT:new X._Code("!"),OR:new X._Code("||"),AND:new X._Code("&&"),ADD:new X._Code("+")};class Rt{optimizeNodes(){return this}optimizeNames(e,t){return this}}class Dd extends Rt{constructor(e,t,i){super();this.varKind=e,this.name=t,this.rhs=i}render({es5:e,_n:t}){let i=e?Te.varKinds.var:this.varKind,n=this.rhs===void 0?"":` = ${this.rhs}`;return`${i} ${this.name}${n};`+t}optimizeNames(e,t){if(!e[this.name.str])return;if(this.rhs)this.rhs=fi(this.rhs,e,t);return this}get names(){return this.rhs instanceof X._CodeOrName?this.rhs.names:{}}}class Kr extends Rt{constructor(e,t,i){super();this.lhs=e,this.rhs=t,this.sideEffects=i}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(this.lhs instanceof X.Name&&!e[this.lhs.str]&&!this.sideEffects)return;return this.rhs=fi(this.rhs,e,t),this}get names(){let e=this.lhs instanceof X.Name?{}:{...this.lhs.names};return Uo(e,this.rhs)}}class Qd extends Kr{constructor(e,t,i,n){super(e,i,n);this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class _d extends Rt{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class Kd extends Rt{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class Ld extends Rt{constructor(e){super();this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class Md extends Rt{constructor(e){super();this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=fi(this.code,e,t),this}get names(){return this.code instanceof X._CodeOrName?this.code.names:{}}}class To extends Rt{constructor(e=[]){super();this.nodes=e}render(e){return this.nodes.reduce((t,i)=>t+i.render(e),"")}optimizeNodes(){let{nodes:e}=this,t=e.length;while(t--){let i=e[t].optimizeNodes();if(Array.isArray(i))e.splice(t,1,...i);else if(i)e[t]=i;else e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){let{nodes:i}=this,n=i.length;while(n--){let o=i[n];if(o.optimizeNames(e,t))continue;ZB(e,o.names),i.splice(n,1)}return i.length>0?this:void 0}get names(){return this.nodes.reduce((e,t)=>Ot(e,t.names),{})}}class Gt extends To{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class $d extends To{}class hn extends Gt{}hn.kind="else";class mt extends Gt{constructor(e,t){super(t);this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);if(this.else)t+="else "+this.else.render(e);return t}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let t=this.else;if(t){let i=t.optimizeNodes();t=this.else=Array.isArray(i)?new hn(i):i}if(t){if(e===!1)return t instanceof mt?t:t.nodes;if(this.nodes.length)return this;return new mt(nc(e),t instanceof mt?[t]:t.nodes)}if(e===!1||!this.nodes.length)return;return this}optimizeNames(e,t){var i;if(this.else=(i=this.else)===null||i===void 0?void 0:i.optimizeNames(e,t),!(super.optimizeNames(e,t)||this.else))return;return this.condition=fi(this.condition,e,t),this}get names(){let e=super.names;if(Uo(e,this.condition),this.else)Ot(e,this.else.names);return e}}mt.kind="if";class hi extends Gt{}hi.kind="for";class qd extends hi{constructor(e){super();this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iteration=fi(this.iteration,e,t),this}get names(){return Ot(super.names,this.iteration.names)}}class ec extends hi{constructor(e,t,i,n){super();this.varKind=e,this.name=t,this.from=i,this.to=n}render(e){let t=e.es5?Te.varKinds.var:this.varKind,{name:i,from:n,to:o}=this;return`for(${t} ${i}=${n}; ${i}<${o}; ${i}++)`+super.render(e)}get names(){let e=Uo(super.names,this.from);return Uo(e,this.to)}}class Qr extends hi{constructor(e,t,i,n){super();this.loop=e,this.varKind=t,this.name=i,this.iterable=n}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iterable=fi(this.iterable,e,t),this}get names(){return Ot(super.names,this.iterable.names)}}class So extends Gt{constructor(e,t,i){super();this.name=e,this.args=t,this.async=i}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}So.kind="func";class xo extends To{render(e){return"return "+super.render(e)}}xo.kind="return";class tc extends Gt{render(e){let t="try"+super.render(e);if(this.catch)t+=this.catch.render(e);if(this.finally)t+=this.finally.render(e);return t}optimizeNodes(){var e,t;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(e,t){var i,n;return super.optimizeNames(e,t),(i=this.catch)===null||i===void 0||i.optimizeNames(e,t),(n=this.finally)===null||n===void 0||n.optimizeNames(e,t),this}get names(){let e=super.names;if(this.catch)Ot(e,this.catch.names);if(this.finally)Ot(e,this.finally.names);return e}}class Jo extends Gt{constructor(e){super();this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}Jo.kind="catch";class Eo extends Gt{render(e){return"finally"+super.render(e)}}Eo.kind="finally";class ic{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
4
+ `:""},this._extScope=e,this._scope=new Te.Scope({parent:e}),this._nodes=[new $d]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){let i=this._extScope.value(e,t);return(this._values[i.prefix]||(this._values[i.prefix]=new Set)).add(i),i}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,i,n){let o=this._scope.toName(t);if(i!==void 0&&n)this._constants[o.str]=i;return this._leafNode(new Dd(e,o,i)),o}const(e,t,i){return this._def(Te.varKinds.const,e,t,i)}let(e,t,i){return this._def(Te.varKinds.let,e,t,i)}var(e,t,i){return this._def(Te.varKinds.var,e,t,i)}assign(e,t,i){return this._leafNode(new Kr(e,t,i))}add(e,t){return this._leafNode(new Qd(e,P.operators.ADD,t))}code(e){if(typeof e=="function")e();else if(e!==X.nil)this._leafNode(new Md(e));return this}object(...e){let t=["{"];for(let[i,n]of e){if(t.length>1)t.push(",");if(t.push(i),i!==n||this.opts.es5)t.push(":"),(0,X.addCodeArg)(t,n)}return t.push("}"),new X._Code(t)}if(e,t,i){if(this._blockNode(new mt(e)),t&&i)this.code(t).else().code(i).endIf();else if(t)this.code(t).endIf();else if(i)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new mt(e))}else(){return this._elseNode(new hn)}endIf(){return this._endBlockNode(mt,hn)}_for(e,t){if(this._blockNode(e),t)this.code(t).endFor();return this}for(e,t){return this._for(new qd(e),t)}forRange(e,t,i,n,o=this.opts.es5?Te.varKinds.var:Te.varKinds.let){let s=this._scope.toName(e);return this._for(new ec(o,s,t,i),()=>n(s))}forOf(e,t,i,n=Te.varKinds.const){let o=this._scope.toName(e);if(this.opts.es5){let s=t instanceof X.Name?t:this.var("_arr",t);return this.forRange("_i",0,X._`${s}.length`,(r)=>{this.var(o,X._`${s}[${r}]`),i(o)})}return this._for(new Qr("of",n,o,t),()=>i(o))}forIn(e,t,i,n=this.opts.es5?Te.varKinds.var:Te.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,X._`Object.keys(${t})`,i);let o=this._scope.toName(e);return this._for(new Qr("in",n,o,t),()=>i(o))}endFor(){return this._endBlockNode(hi)}label(e){return this._leafNode(new _d(e))}break(e){return this._leafNode(new Kd(e))}return(e){let t=new xo;if(this._blockNode(t),this.code(e),t.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(xo)}try(e,t,i){if(!t&&!i)throw Error('CodeGen: "try" without "catch" and "finally"');let n=new tc;if(this._blockNode(n),this.code(e),t){let o=this.name("e");this._currNode=n.catch=new Jo(o),t(o)}if(i)this._currNode=n.finally=new Eo,this.code(i);return this._endBlockNode(Jo,Eo)}throw(e){return this._leafNode(new Ld(e))}block(e,t){if(this._blockStarts.push(this._nodes.length),e)this.code(e).endBlock(t);return this}endBlock(e){let t=this._blockStarts.pop();if(t===void 0)throw Error("CodeGen: not in self-balancing block");let i=this._nodes.length-t;if(i<0||e!==void 0&&i!==e)throw Error(`CodeGen: wrong number of nodes: ${i} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=X.nil,i,n){if(this._blockNode(new So(e,t,i)),n)this.code(n).endFunc();return this}endFunc(){return this._endBlockNode(So)}optimize(e=1){while(e-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,t){let i=this._currNode;if(i instanceof e||t&&i instanceof t)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${t?`${e.kind}/${t.kind}`:e.kind}"`)}_elseNode(e){let t=this._currNode;if(!(t instanceof mt))throw Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let t=this._nodes;t[t.length-1]=e}}P.CodeGen=ic;function Ot(e,t){for(let i in t)e[i]=(e[i]||0)+(t[i]||0);return e}function Uo(e,t){return t instanceof X._CodeOrName?Ot(e,t.names):e}function fi(e,t,i){if(e instanceof X.Name)return n(e);if(!o(e))return e;return new X._Code(e._items.reduce((s,r)=>{if(r instanceof X.Name)r=n(r);if(r instanceof X._Code)s.push(...r._items);else s.push(r);return s},[]));function n(s){let r=i[s.str];if(r===void 0||t[s.str]!==1)return s;return delete t[s.str],r}function o(s){return s instanceof X._Code&&s._items.some((r)=>r instanceof X.Name&&t[r.str]===1&&i[r.str]!==void 0)}}function ZB(e,t){for(let i in t)e[i]=(e[i]||0)-(t[i]||0)}function nc(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:X._`!${_r(e)}`}P.not=nc;var bB=oc(P.operators.AND);function WB(...e){return e.reduce(bB)}P.and=WB;var hB=oc(P.operators.OR);function fB(...e){return e.reduce(hB)}P.or=fB;function oc(e){return(t,i)=>t===X.nil?i:i===X.nil?t:X._`${_r(t)} ${e} ${_r(i)}`}function _r(e){return e instanceof X.Name?e:X._`(${e})`}});var N=y(function(Y){Object.defineProperty(Y,"__esModule",{value:!0});Y.checkStrictMode=Y.getErrorPath=Y.Type=Y.useFunc=Y.setEvaluated=Y.evaluatedPropsToName=Y.mergeEvaluated=Y.eachItem=Y.unescapeJsonPointer=Y.escapeJsonPointer=Y.escapeFragment=Y.unescapeFragment=Y.schemaRefOrVal=Y.schemaHasRulesButRef=Y.schemaHasRules=Y.checkUnknownRules=Y.alwaysValidSchema=Y.toHash=void 0;var T=v(),yB=Wn();function VB(e){let t={};for(let i of e)t[i]=!0;return t}Y.toHash=VB;function BB(e,t){if(typeof t=="boolean")return t;if(Object.keys(t).length===0)return!0;return gc(e,t),!ac(t,e.self.RULES.all)}Y.alwaysValidSchema=BB;function gc(e,t=e.schema){let{opts:i,self:n}=e;if(!i.strictSchema)return;if(typeof t==="boolean")return;let o=n.RULES.keywords;for(let s in t)if(!o[s])dc(e,`unknown keyword: "${s}"`)}Y.checkUnknownRules=gc;function ac(e,t){if(typeof e=="boolean")return!e;for(let i in e)if(t[i])return!0;return!1}Y.schemaHasRules=ac;function RB(e,t){if(typeof e=="boolean")return!e;for(let i in e)if(i!=="$ref"&&t.all[i])return!0;return!1}Y.schemaHasRulesButRef=RB;function GB({topSchemaRef:e,schemaPath:t},i,n,o){if(!o){if(typeof i=="number"||typeof i=="boolean")return i;if(typeof i=="string")return T._`${i}`}return T._`${e}${t}${(0,T.getProperty)(n)}`}Y.schemaRefOrVal=GB;function wB(e){return lc(decodeURIComponent(e))}Y.unescapeFragment=wB;function FB(e){return encodeURIComponent(Mr(e))}Y.escapeFragment=FB;function Mr(e){if(typeof e=="number")return`${e}`;return e.replace(/~/g,"~0").replace(/\//g,"~1")}Y.escapeJsonPointer=Mr;function lc(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}Y.unescapeJsonPointer=lc;function HB(e,t){if(Array.isArray(e))for(let i of e)t(i);else t(e)}Y.eachItem=HB;function sc({mergeNames:e,mergeToName:t,mergeValues:i,resultToName:n}){return(o,s,r,g)=>{let a=r===void 0?s:r instanceof T.Name?(s instanceof T.Name?e(o,s,r):t(o,s,r),r):s instanceof T.Name?(t(o,r,s),s):i(s,r);return g===T.Name&&!(a instanceof T.Name)?n(o,a):a}}Y.mergeEvaluated={props:sc({mergeNames:(e,t,i)=>e.if(T._`${i} !== true && ${t} !== undefined`,()=>{e.if(T._`${t} === true`,()=>e.assign(i,!0),()=>e.assign(i,T._`${i} || {}`).code(T._`Object.assign(${i}, ${t})`))}),mergeToName:(e,t,i)=>e.if(T._`${i} !== true`,()=>{if(t===!0)e.assign(i,!0);else e.assign(i,T._`${i} || {}`),$r(e,i,t)}),mergeValues:(e,t)=>e===!0?!0:{...e,...t},resultToName:Ic}),items:sc({mergeNames:(e,t,i)=>e.if(T._`${i} !== true && ${t} !== undefined`,()=>e.assign(i,T._`${t} === true ? true : ${i} > ${t} ? ${i} : ${t}`)),mergeToName:(e,t,i)=>e.if(T._`${i} !== true`,()=>e.assign(i,t===!0?!0:T._`${i} > ${t} ? ${i} : ${t}`)),mergeValues:(e,t)=>e===!0?!0:Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})};function Ic(e,t){if(t===!0)return e.var("props",!0);let i=e.var("props",T._`{}`);if(t!==void 0)$r(e,i,t);return i}Y.evaluatedPropsToName=Ic;function $r(e,t,i){Object.keys(i).forEach((n)=>e.assign(T._`${t}${(0,T.getProperty)(n)}`,!0))}Y.setEvaluated=$r;var rc={};function vB(e,t){return e.scopeValue("func",{ref:t,code:rc[t.code]||(rc[t.code]=new yB._Code(t.code))})}Y.useFunc=vB;var Lr;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(Lr||(Y.Type=Lr={}));function kB(e,t,i){if(e instanceof T.Name){let n=t===Lr.Num;return i?n?T._`"[" + ${e} + "]"`:T._`"['" + ${e} + "']"`:n?T._`"/" + ${e}`:T._`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return i?(0,T.getProperty)(e).toString():"/"+Mr(e)}Y.getErrorPath=kB;function dc(e,t,i=e.opts.strictSchema){if(!i)return;if(t=`strict mode: ${t}`,i===!0)throw Error(t);e.self.logger.warn(t)}Y.checkStrictMode=dc});var ke=y(function(qr){Object.defineProperty(qr,"__esModule",{value:!0});var ae=v(),PB={data:new ae.Name("data"),valCxt:new ae.Name("valCxt"),instancePath:new ae.Name("instancePath"),parentData:new ae.Name("parentData"),parentDataProperty:new ae.Name("parentDataProperty"),rootData:new ae.Name("rootData"),dynamicAnchors:new ae.Name("dynamicAnchors"),vErrors:new ae.Name("vErrors"),errors:new ae.Name("errors"),this:new ae.Name("this"),self:new ae.Name("self"),scope:new ae.Name("scope"),json:new ae.Name("json"),jsonPos:new ae.Name("jsonPos"),jsonLen:new ae.Name("jsonLen"),jsonPart:new ae.Name("jsonPart")};qr.default=PB});var fn=y(function(le){Object.defineProperty(le,"__esModule",{value:!0});le.extendErrors=le.resetErrorsCount=le.reportExtraError=le.reportError=le.keyword$DataError=le.keywordError=void 0;var S=v(),zo=N(),Ce=ke();le.keywordError={message:({keyword:e})=>S.str`must pass "${e}" keyword validation`};le.keyword$DataError={message:({keyword:e,schemaType:t})=>t?S.str`"${e}" keyword must be ${t} ($data)`:S.str`"${e}" keyword is invalid ($data)`};function YB(e,t=le.keywordError,i,n){let{it:o}=e,{gen:s,compositeRule:r,allErrors:g}=o,a=uc(e,t,i);if(n!==null&&n!==void 0?n:r||g)cc(s,a);else Cc(o,S._`[${a}]`)}le.reportError=YB;function NB(e,t=le.keywordError,i){let{it:n}=e,{gen:o,compositeRule:s,allErrors:r}=n,g=uc(e,t,i);if(cc(o,g),!(s||r))Cc(n,Ce.default.vErrors)}le.reportExtraError=NB;function XB(e,t){e.assign(Ce.default.errors,t),e.if(S._`${Ce.default.vErrors} !== null`,()=>e.if(t,()=>e.assign(S._`${Ce.default.vErrors}.length`,t),()=>e.assign(Ce.default.vErrors,null)))}le.resetErrorsCount=XB;function SB({gen:e,keyword:t,schemaValue:i,data:n,errsCount:o,it:s}){if(o===void 0)throw Error("ajv implementation error");let r=e.name("err");e.forRange("i",o,Ce.default.errors,(g)=>{if(e.const(r,S._`${Ce.default.vErrors}[${g}]`),e.if(S._`${r}.instancePath === undefined`,()=>e.assign(S._`${r}.instancePath`,(0,S.strConcat)(Ce.default.instancePath,s.errorPath))),e.assign(S._`${r}.schemaPath`,S.str`${s.errSchemaPath}/${t}`),s.opts.verbose)e.assign(S._`${r}.schema`,i),e.assign(S._`${r}.data`,n)})}le.extendErrors=SB;function cc(e,t){let i=e.const("err",t);e.if(S._`${Ce.default.vErrors} === null`,()=>e.assign(Ce.default.vErrors,S._`[${i}]`),S._`${Ce.default.vErrors}.push(${i})`),e.code(S._`${Ce.default.errors}++`)}function Cc(e,t){let{gen:i,validateName:n,schemaEnv:o}=e;if(o.$async)i.throw(S._`new ${e.ValidationError}(${t})`);else i.assign(S._`${n}.errors`,t),i.return(!1)}var Tt={keyword:new S.Name("keyword"),schemaPath:new S.Name("schemaPath"),params:new S.Name("params"),propertyName:new S.Name("propertyName"),message:new S.Name("message"),schema:new S.Name("schema"),parentSchema:new S.Name("parentSchema")};function uc(e,t,i){let{createErrors:n}=e.it;if(n===!1)return S._`{}`;return xB(e,t,i)}function xB(e,t,i={}){let{gen:n,it:o}=e,s=[JB(o,i),EB(e,i)];return UB(e,t,s),n.object(...s)}function JB({errorPath:e},{instancePath:t}){let i=t?S.str`${e}${(0,zo.getErrorPath)(t,zo.Type.Str)}`:e;return[Ce.default.instancePath,(0,S.strConcat)(Ce.default.instancePath,i)]}function EB({keyword:e,it:{errSchemaPath:t}},{schemaPath:i,parentSchema:n}){let o=n?t:S.str`${t}/${e}`;if(i)o=S.str`${o}${(0,zo.getErrorPath)(i,zo.Type.Str)}`;return[Tt.schemaPath,o]}function UB(e,{params:t,message:i},n){let{keyword:o,data:s,schemaValue:r,it:g}=e,{opts:a,propertyName:l,topSchemaRef:I,schemaPath:d}=g;if(n.push([Tt.keyword,o],[Tt.params,typeof t=="function"?t(e):t||S._`{}`]),a.messages)n.push([Tt.message,typeof i=="function"?i(e):i]);if(a.verbose)n.push([Tt.schema,r],[Tt.parentSchema,S._`${I}${d}`],[Ce.default.data,s]);if(l)n.push([Tt.propertyName,l])}});var pc=y(function(yi){Object.defineProperty(yi,"__esModule",{value:!0});yi.boolOrEmptySchema=yi.topBoolOrEmptySchema=void 0;var OB=fn(),TB=v(),zB=ke(),jB={message:"boolean schema is false"};function DB(e){let{gen:t,schema:i,validateName:n}=e;if(i===!1)mc(e,!1);else if(typeof i=="object"&&i.$async===!0)t.return(zB.default.data);else t.assign(TB._`${n}.errors`,null),t.return(!0)}yi.topBoolOrEmptySchema=DB;function QB(e,t){let{gen:i,schema:n}=e;if(n===!1)i.var(t,!1),mc(e);else i.var(t,!0)}yi.boolOrEmptySchema=QB;function mc(e,t){let{gen:i,data:n}=e,o={gen:i,keyword:"false schema",data:n,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,OB.reportError)(o,jB,void 0,t)}});var eg=y(function(Vi){Object.defineProperty(Vi,"__esModule",{value:!0});Vi.getRules=Vi.isJSONType=void 0;var _B=["string","number","integer","boolean","null","object","array"],KB=new Set(_B);function LB(e){return typeof e=="string"&&KB.has(e)}Vi.isJSONType=LB;function MB(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}Vi.getRules=MB});var tg=y(function(wt){Object.defineProperty(wt,"__esModule",{value:!0});wt.shouldUseRule=wt.shouldUseGroup=wt.schemaHasRulesForType=void 0;function $B({schema:e,self:t},i){let n=t.RULES.types[i];return n&&n!==!0&&Ac(e,n)}wt.schemaHasRulesForType=$B;function Ac(e,t){return t.rules.some((i)=>Zc(e,i))}wt.shouldUseGroup=Ac;function Zc(e,t){var i;return e[t.keyword]!==void 0||((i=t.definition.implements)===null||i===void 0?void 0:i.some((n)=>e[n]!==void 0))}wt.shouldUseRule=Zc});var yn=y(function(Ie){Object.defineProperty(Ie,"__esModule",{value:!0});Ie.reportTypeError=Ie.checkDataTypes=Ie.checkDataType=Ie.coerceAndCheckDataType=Ie.getJSONTypes=Ie.getSchemaTypes=Ie.DataType=void 0;var qB=eg(),eR=tg(),tR=fn(),k=v(),bc=N(),Bi;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(Bi||(Ie.DataType=Bi={}));function iR(e){let t=Wc(e.type);if(t.includes("null")){if(e.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!t.length&&e.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(e.nullable===!0)t.push("null")}return t}Ie.getSchemaTypes=iR;function Wc(e){let t=Array.isArray(e)?e:e?[e]:[];if(t.every(qB.isJSONType))return t;throw Error("type must be JSONType or JSONType[]: "+t.join(","))}Ie.getJSONTypes=Wc;function nR(e,t){let{gen:i,data:n,opts:o}=e,s=oR(t,o.coerceTypes),r=t.length>0&&!(s.length===0&&t.length===1&&(0,eR.schemaHasRulesForType)(e,t[0]));if(r){let g=ng(t,n,o.strictNumbers,Bi.Wrong);i.if(g,()=>{if(s.length)sR(e,t,s);else og(e)})}return r}Ie.coerceAndCheckDataType=nR;var hc=new Set(["string","number","integer","boolean","null"]);function oR(e,t){return t?e.filter((i)=>hc.has(i)||t==="array"&&i==="array"):[]}function sR(e,t,i){let{gen:n,data:o,opts:s}=e,r=n.let("dataType",k._`typeof ${o}`),g=n.let("coerced",k._`undefined`);if(s.coerceTypes==="array")n.if(k._`${r} == 'object' && Array.isArray(${o}) && ${o}.length == 1`,()=>n.assign(o,k._`${o}[0]`).assign(r,k._`typeof ${o}`).if(ng(t,o,s.strictNumbers),()=>n.assign(g,o)));n.if(k._`${g} !== undefined`);for(let l of i)if(hc.has(l)||l==="array"&&s.coerceTypes==="array")a(l);n.else(),og(e),n.endIf(),n.if(k._`${g} !== undefined`,()=>{n.assign(o,g),rR(e,g)});function a(l){switch(l){case"string":n.elseIf(k._`${r} == "number" || ${r} == "boolean"`).assign(g,k._`"" + ${o}`).elseIf(k._`${o} === null`).assign(g,k._`""`);return;case"number":n.elseIf(k._`${r} == "boolean" || ${o} === null
5
5
  || (${r} == "string" && ${o} && ${o} == +${o})`).assign(g,k._`+${o}`);return;case"integer":n.elseIf(k._`${r} === "boolean" || ${o} === null
6
6
  || (${r} === "string" && ${o} && ${o} == +${o} && !(${o} % 1))`).assign(g,k._`+${o}`);return;case"boolean":n.elseIf(k._`${o} === "false" || ${o} === 0 || ${o} === null`).assign(g,!1).elseIf(k._`${o} === "true" || ${o} === 1`).assign(g,!0);return;case"null":n.elseIf(k._`${o} === "" || ${o} === 0 || ${o} === false`),n.assign(g,null);return;case"array":n.elseIf(k._`${r} === "string" || ${r} === "number"
7
- || ${r} === "boolean" || ${o} === null`).assign(g,k._`[${o}]`)}}}function sR({gen:e,parentData:t,parentDataProperty:i},n){e.if(k._`${t} !== undefined`,()=>e.assign(k._`${t}[${i}]`,n))}function eg(e,t,i,n=Vi.Correct){let o=n===Vi.Correct?k.operators.EQ:k.operators.NEQ,s;switch(e){case"null":return k._`${t} ${o} null`;case"array":s=k._`Array.isArray(${t})`;break;case"object":s=k._`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":s=r(k._`!(${t} % 1) && !isNaN(${t})`);break;case"number":s=r();break;default:return k._`typeof ${t} ${o} ${e}`}return n===Vi.Correct?s:(0,k.not)(s);function r(g=k.nil){return(0,k.and)(k._`typeof ${t} == "number"`,g,i?k._`isFinite(${t})`:k.nil)}}Ie.checkDataType=eg;function tg(e,t,i,n){if(e.length===1)return eg(e[0],t,i,n);let o,s=(0,Ac.toHash)(e);if(s.array&&s.object){let r=k._`typeof ${t} != "object"`;o=s.null?r:k._`!${t} || ${r}`,delete s.null,delete s.array,delete s.object}else o=k.nil;if(s.number)delete s.integer;for(let r in s)o=(0,k.and)(o,eg(r,t,i,n));return o}Ie.checkDataTypes=tg;var rR={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e=="string"?k._`{type: ${e}}`:k._`{type: ${t}}`};function ig(e){let t=gR(e);(0,eR.reportError)(t,rR)}Ie.reportTypeError=ig;function gR(e){let{gen:t,data:i,schema:n}=e,o=(0,Ac.schemaRefOrVal)(e,n,"type");return{gen:t,keyword:"type",data:i,schema:n.type,schemaCode:o,schemaValue:o,parentSchema:n,params:{},it:e}}});var hc=y(function(Oo){Object.defineProperty(Oo,"__esModule",{value:!0});Oo.assignDefaults=void 0;var Bi=v(),aR=N();function lR(e,t){let{properties:i,items:n}=e.schema;if(t==="object"&&i)for(let o in i)Wc(e,o,i[o].default);else if(t==="array"&&Array.isArray(n))n.forEach((o,s)=>Wc(e,s,o.default))}Oo.assignDefaults=lR;function Wc(e,t,i){let{gen:n,compositeRule:o,data:s,opts:r}=e;if(i===void 0)return;let g=Bi._`${s}${(0,Bi.getProperty)(t)}`;if(o){(0,aR.checkStrictMode)(e,`default is ignored for: ${g}`);return}let a=Bi._`${g} === undefined`;if(r.useDefaults==="empty")a=Bi._`${a} || ${g} === null || ${g} === ""`;n.if(a,Bi._`${g} = ${(0,Bi.stringify)(i)}`)}});var ke=y(function(O){Object.defineProperty(O,"__esModule",{value:!0});O.validateUnion=O.validateArray=O.usePattern=O.callValidateCode=O.schemaProperties=O.allSchemaProperties=O.noPropertyInData=O.propertyInData=O.isOwnProperty=O.hasPropFunc=O.reportMissingProp=O.checkMissingProp=O.checkReportMissingProp=void 0;var j=v(),ng=N(),Ft=ve(),IR=N();function dR(e,t){let{gen:i,data:n,it:o}=e;i.if(sg(i,n,t,o.opts.ownProperties),()=>{e.setParams({missingProperty:j._`${t}`},!0),e.error()})}O.checkReportMissingProp=dR;function cR({gen:e,data:t,it:{opts:i}},n,o){return(0,j.or)(...n.map((s)=>(0,j.and)(sg(e,t,s,i.ownProperties),j._`${o} = ${s}`)))}O.checkMissingProp=cR;function CR(e,t){e.setParams({missingProperty:t},!0),e.error()}O.reportMissingProp=CR;function fc(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:j._`Object.prototype.hasOwnProperty`})}O.hasPropFunc=fc;function og(e,t,i){return j._`${fc(e)}.call(${t}, ${i})`}O.isOwnProperty=og;function uR(e,t,i,n){let o=j._`${t}${(0,j.getProperty)(i)} !== undefined`;return n?j._`${o} && ${og(e,t,i)}`:o}O.propertyInData=uR;function sg(e,t,i,n){let o=j._`${t}${(0,j.getProperty)(i)} === undefined`;return n?(0,j.or)(o,(0,j.not)(og(e,t,i))):o}O.noPropertyInData=sg;function yc(e){return e?Object.keys(e).filter((t)=>t!=="__proto__"):[]}O.allSchemaProperties=yc;function mR(e,t){return yc(t).filter((i)=>!(0,ng.alwaysValidSchema)(e,t[i]))}O.schemaProperties=mR;function pR({schemaCode:e,data:t,it:{gen:i,topSchemaRef:n,schemaPath:o,errorPath:s},it:r},g,a,l){let I=l?j._`${e}, ${t}, ${n}${o}`:t,d=[[Ft.default.instancePath,(0,j.strConcat)(Ft.default.instancePath,s)],[Ft.default.parentData,r.parentData],[Ft.default.parentDataProperty,r.parentDataProperty],[Ft.default.rootData,Ft.default.rootData]];if(r.opts.dynamicRef)d.push([Ft.default.dynamicAnchors,Ft.default.dynamicAnchors]);let u=j._`${I}, ${i.object(...d)}`;return a!==j.nil?j._`${g}.call(${a}, ${u})`:j._`${g}(${u})`}O.callValidateCode=pR;var AR=j._`new RegExp`;function ZR({gen:e,it:{opts:t}},i){let n=t.unicodeRegExp?"u":"",{regExp:o}=t.code,s=o(i,n);return e.scopeValue("pattern",{key:s.toString(),ref:s,code:j._`${o.code==="new RegExp"?AR:(0,IR.useFunc)(e,o)}(${i}, ${n})`})}O.usePattern=ZR;function bR(e){let{gen:t,data:i,keyword:n,it:o}=e,s=t.name("valid");if(o.allErrors){let g=t.let("valid",!0);return r(()=>t.assign(g,!1)),g}return t.var(s,!0),r(()=>t.break()),s;function r(g){let a=t.const("len",j._`${i}.length`);t.forRange("i",0,a,(l)=>{e.subschema({keyword:n,dataProp:l,dataPropType:ng.Type.Num},s),t.if((0,j.not)(s),g)})}}O.validateArray=bR;function WR(e){let{gen:t,schema:i,keyword:n,it:o}=e;if(!Array.isArray(i))throw Error("ajv implementation error");if(i.some((a)=>(0,ng.alwaysValidSchema)(o,a))&&!o.opts.unevaluated)return;let r=t.let("valid",!1),g=t.name("_valid");t.block(()=>i.forEach((a,l)=>{let I=e.subschema({keyword:n,schemaProp:l,compositeRule:!0},g);if(t.assign(r,j._`${r} || ${g}`),!e.mergeValidEvaluated(I,g))t.if((0,j.not)(r))})),e.result(r,()=>e.reset(),()=>e.error(!0))}O.validateUnion=WR});var Rc=y(function($e){Object.defineProperty($e,"__esModule",{value:!0});$e.validateKeywordUsage=$e.validSchemaType=$e.funcKeywordCode=$e.macroKeywordCode=void 0;var me=v(),zt=ve(),hR=ke(),fR=hn();function yR(e,t){let{gen:i,keyword:n,schema:o,parentSchema:s,it:r}=e,g=t.macro.call(r.self,o,s,r),a=Bc(i,n,g);if(r.opts.validateSchema!==!1)r.self.validateSchema(g,!0);let l=i.name("valid");e.subschema({schema:g,schemaPath:me.nil,errSchemaPath:`${r.errSchemaPath}/${n}`,topSchemaRef:a,compositeRule:!0},l),e.pass(l,()=>e.error(!0))}$e.macroKeywordCode=yR;function VR(e,t){var i;let{gen:n,keyword:o,schema:s,parentSchema:r,$data:g,it:a}=e;RR(a,t);let l=!g&&t.compile?t.compile.call(a.self,s,r,a):t.validate,I=Bc(n,o,l),d=n.let("valid");e.block$data(d,u),e.ok((i=t.valid)!==null&&i!==void 0?i:d);function u(){if(t.errors===!1){if(A(),t.modifying)Vc(e);m(()=>e.error())}else{let p=t.async?c():C();if(t.modifying)Vc(e);m(()=>BR(e,p))}}function c(){let p=n.let("ruleErrs",null);return n.try(()=>A(me._`await `),(Z)=>n.assign(d,!1).if(me._`${Z} instanceof ${a.ValidationError}`,()=>n.assign(p,me._`${Z}.errors`),()=>n.throw(Z))),p}function C(){let p=me._`${I}.errors`;return n.assign(p,null),A(me.nil),p}function A(p=t.async?me._`await `:me.nil){let Z=a.opts.passContext?zt.default.this:zt.default.self,W=!(("compile"in t)&&!g||t.schema===!1);n.assign(d,me._`${p}${(0,hR.callValidateCode)(e,I,Z,W)}`,t.modifying)}function m(p){var Z;n.if((0,me.not)((Z=t.valid)!==null&&Z!==void 0?Z:d),p)}}$e.funcKeywordCode=VR;function Vc(e){let{gen:t,data:i,it:n}=e;t.if(n.parentData,()=>t.assign(i,me._`${n.parentData}[${n.parentDataProperty}]`))}function BR(e,t){let{gen:i}=e;i.if(me._`Array.isArray(${t})`,()=>{i.assign(zt.default.vErrors,me._`${zt.default.vErrors} === null ? ${t} : ${zt.default.vErrors}.concat(${t})`).assign(zt.default.errors,me._`${zt.default.vErrors}.length`),(0,fR.extendErrors)(e)},()=>e.error())}function RR({schemaEnv:e},t){if(t.async&&!e.$async)throw Error("async keyword in sync schema")}function Bc(e,t,i){if(i===void 0)throw Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword",typeof i=="function"?{ref:i}:{ref:i,code:(0,me.stringify)(i)})}function GR(e,t,i=!1){return!t.length||t.some((n)=>n==="array"?Array.isArray(e):n==="object"?e&&typeof e=="object"&&!Array.isArray(e):typeof e==n||i&&typeof e>"u")}$e.validSchemaType=GR;function wR({schema:e,opts:t,self:i,errSchemaPath:n},o,s){if(Array.isArray(o.keyword)?!o.keyword.includes(s):o.keyword!==s)throw Error("ajv implementation error");let r=o.dependencies;if(r===null||r===void 0?void 0:r.some((g)=>!Object.prototype.hasOwnProperty.call(e,g)))throw Error(`parent schema must have dependencies of ${s}: ${r.join(",")}`);if(o.validateSchema){if(!o.validateSchema(e[s])){let a=`keyword "${s}" value is invalid at path "${n}": `+i.errorsText(o.validateSchema.errors);if(t.validateSchema==="log")i.logger.error(a);else throw Error(a)}}}$e.validateKeywordUsage=wR});var wc=y(function(Ht){Object.defineProperty(Ht,"__esModule",{value:!0});Ht.extendSubschemaMode=Ht.extendSubschemaData=Ht.getSubschema=void 0;var qe=v(),Gc=N();function FR(e,{keyword:t,schemaProp:i,schema:n,schemaPath:o,errSchemaPath:s,topSchemaRef:r}){if(t!==void 0&&n!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(t!==void 0){let g=e.schema[t];return i===void 0?{schema:g,schemaPath:qe._`${e.schemaPath}${(0,qe.getProperty)(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:g[i],schemaPath:qe._`${e.schemaPath}${(0,qe.getProperty)(t)}${(0,qe.getProperty)(i)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${(0,Gc.escapeFragment)(i)}`}}if(n!==void 0){if(o===void 0||s===void 0||r===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:n,schemaPath:o,topSchemaRef:r,errSchemaPath:s}}throw Error('either "keyword" or "schema" must be passed')}Ht.getSubschema=FR;function HR(e,t,{dataProp:i,dataPropType:n,data:o,dataTypes:s,propertyName:r}){if(o!==void 0&&i!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:g}=t;if(i!==void 0){let{errorPath:l,dataPathArr:I,opts:d}=t,u=g.let("data",qe._`${t.data}${(0,qe.getProperty)(i)}`,!0);a(u),e.errorPath=qe.str`${l}${(0,Gc.getErrorPath)(i,n,d.jsPropertySyntax)}`,e.parentDataProperty=qe._`${i}`,e.dataPathArr=[...I,e.parentDataProperty]}if(o!==void 0){let l=o instanceof qe.Name?o:g.let("data",o,!0);if(a(l),r!==void 0)e.propertyName=r}if(s)e.dataTypes=s;function a(l){e.data=l,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,l]}}Ht.extendSubschemaData=HR;function vR(e,{jtdDiscriminator:t,jtdMetadata:i,compositeRule:n,createErrors:o,allErrors:s}){if(n!==void 0)e.compositeRule=n;if(o!==void 0)e.createErrors=o;if(s!==void 0)e.allErrors=s;e.jtdDiscriminator=t,e.jtdMetadata=i}Ht.extendSubschemaMode=vR});var rg=y(function(vX,Fc){Fc.exports=function e(t,i){if(t===i)return!0;if(t&&i&&typeof t=="object"&&typeof i=="object"){if(t.constructor!==i.constructor)return!1;var n,o,s;if(Array.isArray(t)){if(n=t.length,n!=i.length)return!1;for(o=n;o--!==0;)if(!e(t[o],i[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===i.source&&t.flags===i.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===i.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===i.toString();if(s=Object.keys(t),n=s.length,n!==Object.keys(i).length)return!1;for(o=n;o--!==0;)if(!Object.prototype.hasOwnProperty.call(i,s[o]))return!1;for(o=n;o--!==0;){var r=s[o];if(!e(t[r],i[r]))return!1}return!0}return t!==t&&i!==i}});var vc=y(function(kX,Hc){var vt=Hc.exports=function(e,t,i){if(typeof t=="function")i=t,t={};i=t.cb||i;var n=typeof i=="function"?i:i.pre||function(){},o=i.post||function(){};To(t,n,o,e,"",e)};vt.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};vt.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};vt.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};vt.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function To(e,t,i,n,o,s,r,g,a,l){if(n&&typeof n=="object"&&!Array.isArray(n)){t(n,o,s,r,g,a,l);for(var I in n){var d=n[I];if(Array.isArray(d)){if(I in vt.arrayKeywords)for(var u=0;u<d.length;u++)To(e,t,i,d[u],o+"/"+I+"/"+u,s,o,I,n,u)}else if(I in vt.propsKeywords){if(d&&typeof d=="object")for(var c in d)To(e,t,i,d[c],o+"/"+I+"/"+kR(c),s,o,I,n,c)}else if(I in vt.keywords||e.allKeys&&!(I in vt.skipKeywords))To(e,t,i,d,o+"/"+I,s,o,I,n)}i(n,o,s,r,g,a,l)}}function kR(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}});var yn=y(function(fe){Object.defineProperty(fe,"__esModule",{value:!0});fe.getSchemaRefs=fe.resolveUrl=fe.normalizeId=fe._getFullPath=fe.getFullPath=fe.inlineRef=void 0;var PR=N(),YR=rg(),NR=vc(),XR=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function SR(e,t=!0){if(typeof e=="boolean")return!0;if(t===!0)return!gg(e);if(!t)return!1;return kc(e)<=t}fe.inlineRef=SR;var xR=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function gg(e){for(let t in e){if(xR.has(t))return!0;let i=e[t];if(Array.isArray(i)&&i.some(gg))return!0;if(typeof i=="object"&&gg(i))return!0}return!1}function kc(e){let t=0;for(let i in e){if(i==="$ref")return 1/0;if(t++,XR.has(i))continue;if(typeof e[i]=="object")(0,PR.eachItem)(e[i],(n)=>t+=kc(n));if(t===1/0)return 1/0}return t}function Pc(e,t="",i){if(i!==!1)t=Ri(t);let n=e.parse(t);return Yc(e,n)}fe.getFullPath=Pc;function Yc(e,t){return e.serialize(t).split("#")[0]+"#"}fe._getFullPath=Yc;var JR=/#\/?$/;function Ri(e){return e?e.replace(JR,""):""}fe.normalizeId=Ri;function ER(e,t,i){return i=Ri(i),e.resolve(t,i)}fe.resolveUrl=ER;var UR=/^[a-z_][-a-z0-9._]*$/i;function OR(e,t){if(typeof e=="boolean")return{};let{schemaId:i,uriResolver:n}=this.opts,o=Ri(e[i]||t),s={"":o},r=Pc(n,o,!1),g={},a=new Set;return NR(e,{allKeys:!0},(d,u,c,C)=>{if(C===void 0)return;let A=r+u,m=s[C];if(typeof d[i]=="string")m=p.call(this,d[i]);Z.call(this,d.$anchor),Z.call(this,d.$dynamicAnchor),s[u]=m;function p(W){let h=this.opts.uriResolver.resolve;if(W=Ri(m?h(m,W):W),a.has(W))throw I(W);a.add(W);let f=this.refs[W];if(typeof f=="string")f=this.refs[f];if(typeof f=="object")l(d,f.schema,W);else if(W!==Ri(A))if(W[0]==="#")l(d,g[W],W),g[W]=d;else this.refs[W]=A;return W}function Z(W){if(typeof W=="string"){if(!UR.test(W))throw Error(`invalid anchor "${W}"`);p.call(this,`#${W}`)}}}),g;function l(d,u,c){if(u!==void 0&&!YR(d,u))throw I(c)}function I(d){return Error(`reference "${d}" resolves to more than one schema`)}}fe.getSchemaRefs=OR});var Gi=y(function(kt){Object.defineProperty(kt,"__esModule",{value:!0});kt.getData=kt.KeywordCxt=kt.validateFunctionCode=void 0;var Jc=uc(),Nc=fn(),lg=qr(),zo=fn(),TR=hc(),Bn=Rc(),ag=wc(),G=v(),H=ve(),zR=yn(),pt=N(),Vn=hn();function jR(e){if(Oc(e)){if(Tc(e),Uc(e)){_R(e);return}}Ec(e,()=>(0,Jc.topBoolOrEmptySchema)(e))}kt.validateFunctionCode=jR;function Ec({gen:e,validateName:t,schema:i,schemaEnv:n,opts:o},s){if(o.code.es5)e.func(t,G._`${H.default.data}, ${H.default.valCxt}`,n.$async,()=>{e.code(G._`"use strict"; ${Xc(i,o)}`),QR(e,o),e.code(s)});else e.func(t,G._`${H.default.data}, ${DR(o)}`,n.$async,()=>e.code(Xc(i,o)).code(s))}function DR(e){return G._`{${H.default.instancePath}="", ${H.default.parentData}, ${H.default.parentDataProperty}, ${H.default.rootData}=${H.default.data}${e.dynamicRef?G._`, ${H.default.dynamicAnchors}={}`:G.nil}}={}`}function QR(e,t){e.if(H.default.valCxt,()=>{if(e.var(H.default.instancePath,G._`${H.default.valCxt}.${H.default.instancePath}`),e.var(H.default.parentData,G._`${H.default.valCxt}.${H.default.parentData}`),e.var(H.default.parentDataProperty,G._`${H.default.valCxt}.${H.default.parentDataProperty}`),e.var(H.default.rootData,G._`${H.default.valCxt}.${H.default.rootData}`),t.dynamicRef)e.var(H.default.dynamicAnchors,G._`${H.default.valCxt}.${H.default.dynamicAnchors}`)},()=>{if(e.var(H.default.instancePath,G._`""`),e.var(H.default.parentData,G._`undefined`),e.var(H.default.parentDataProperty,G._`undefined`),e.var(H.default.rootData,H.default.data),t.dynamicRef)e.var(H.default.dynamicAnchors,G._`{}`)})}function _R(e){let{schema:t,opts:i,gen:n}=e;Ec(e,()=>{if(i.$comment&&t.$comment)jc(e);if(qR(e),n.let(H.default.vErrors,null),n.let(H.default.errors,0),i.unevaluated)KR(e);zc(e),iG(e)});return}function KR(e){let{gen:t,validateName:i}=e;e.evaluated=t.const("evaluated",G._`${i}.evaluated`),t.if(G._`${e.evaluated}.dynamicProps`,()=>t.assign(G._`${e.evaluated}.props`,G._`undefined`)),t.if(G._`${e.evaluated}.dynamicItems`,()=>t.assign(G._`${e.evaluated}.items`,G._`undefined`))}function Xc(e,t){let i=typeof e=="object"&&e[t.schemaId];return i&&(t.code.source||t.code.process)?G._`/*# sourceURL=${i} */`:G.nil}function LR(e,t){if(Oc(e)){if(Tc(e),Uc(e)){MR(e,t);return}}(0,Jc.boolOrEmptySchema)(e,t)}function Uc({schema:e,self:t}){if(typeof e=="boolean")return!e;for(let i in e)if(t.RULES.all[i])return!0;return!1}function Oc(e){return typeof e.schema!="boolean"}function MR(e,t){let{schema:i,gen:n,opts:o}=e;if(o.$comment&&i.$comment)jc(e);eG(e),tG(e);let s=n.const("_errs",H.default.errors);zc(e,s),n.var(t,G._`${s} === ${H.default.errors}`)}function Tc(e){(0,pt.checkUnknownRules)(e),$R(e)}function zc(e,t){if(e.opts.jtd)return Sc(e,[],!1,t);let i=(0,Nc.getSchemaTypes)(e.schema),n=(0,Nc.coerceAndCheckDataType)(e,i);Sc(e,i,!n,t)}function $R(e){let{schema:t,errSchemaPath:i,opts:n,self:o}=e;if(t.$ref&&n.ignoreKeywordsWithRef&&(0,pt.schemaHasRulesButRef)(t,o.RULES))o.logger.warn(`$ref: keywords ignored in schema at path "${i}"`)}function qR(e){let{schema:t,opts:i}=e;if(t.default!==void 0&&i.useDefaults&&i.strictSchema)(0,pt.checkStrictMode)(e,"default is ignored in the schema root")}function eG(e){let t=e.schema[e.opts.schemaId];if(t)e.baseId=(0,zR.resolveUrl)(e.opts.uriResolver,e.baseId,t)}function tG(e){if(e.schema.$async&&!e.schemaEnv.$async)throw Error("async schema in sync schema")}function jc({gen:e,schemaEnv:t,schema:i,errSchemaPath:n,opts:o}){let s=i.$comment;if(o.$comment===!0)e.code(G._`${H.default.self}.logger.log(${s})`);else if(typeof o.$comment=="function"){let r=G.str`${n}/$comment`,g=e.scopeValue("root",{ref:t.root});e.code(G._`${H.default.self}.opts.$comment(${s}, ${r}, ${g}.schema)`)}}function iG(e){let{gen:t,schemaEnv:i,validateName:n,ValidationError:o,opts:s}=e;if(i.$async)t.if(G._`${H.default.errors} === 0`,()=>t.return(H.default.data),()=>t.throw(G._`new ${o}(${H.default.vErrors})`));else{if(t.assign(G._`${n}.errors`,H.default.vErrors),s.unevaluated)nG(e);t.return(G._`${H.default.errors} === 0`)}}function nG({gen:e,evaluated:t,props:i,items:n}){if(i instanceof G.Name)e.assign(G._`${t}.props`,i);if(n instanceof G.Name)e.assign(G._`${t}.items`,n)}function Sc(e,t,i,n){let{gen:o,schema:s,data:r,allErrors:g,opts:a,self:l}=e,{RULES:I}=l;if(s.$ref&&(a.ignoreKeywordsWithRef||!(0,pt.schemaHasRulesButRef)(s,I))){o.block(()=>Qc(e,"$ref",I.all.$ref.definition));return}if(!a.jtd)oG(e,t);o.block(()=>{for(let u of I.rules)d(u);d(I.post)});function d(u){if(!(0,lg.shouldUseGroup)(s,u))return;if(u.type){if(o.if((0,zo.checkDataType)(u.type,r,a.strictNumbers)),xc(e,u),t.length===1&&t[0]===u.type&&i)o.else(),(0,zo.reportTypeError)(e);o.endIf()}else xc(e,u);if(!g)o.if(G._`${H.default.errors} === ${n||0}`)}}function xc(e,t){let{gen:i,schema:n,opts:{useDefaults:o}}=e;if(o)(0,TR.assignDefaults)(e,t.type);i.block(()=>{for(let s of t.rules)if((0,lg.shouldUseRule)(n,s))Qc(e,s.keyword,s.definition,t.type)})}function oG(e,t){if(e.schemaEnv.meta||!e.opts.strictTypes)return;if(sG(e,t),!e.opts.allowUnionTypes)rG(e,t);gG(e,e.dataTypes)}function sG(e,t){if(!t.length)return;if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach((i)=>{if(!Dc(e.dataTypes,i))Ig(e,`type "${i}" not allowed by context "${e.dataTypes.join(",")}"`)}),lG(e,t)}function rG(e,t){if(t.length>1&&!(t.length===2&&t.includes("null")))Ig(e,"use allowUnionTypes to allow union type keyword")}function gG(e,t){let i=e.self.RULES.all;for(let n in i){let o=i[n];if(typeof o=="object"&&(0,lg.shouldUseRule)(e.schema,o)){let{type:s}=o.definition;if(s.length&&!s.some((r)=>aG(t,r)))Ig(e,`missing type "${s.join(",")}" for keyword "${n}"`)}}}function aG(e,t){return e.includes(t)||t==="number"&&e.includes("integer")}function Dc(e,t){return e.includes(t)||t==="integer"&&e.includes("number")}function lG(e,t){let i=[];for(let n of e.dataTypes)if(Dc(t,n))i.push(n);else if(t.includes("integer")&&n==="number")i.push("integer");e.dataTypes=i}function Ig(e,t){let i=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${i}" (strictTypes)`,(0,pt.checkStrictMode)(e,t,e.opts.strictTypes)}class dg{constructor(e,t,i){if((0,Bn.validateKeywordUsage)(e,t,i),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=i,this.data=e.data,this.schema=e.schema[i],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,pt.schemaRefOrVal)(e,this.schema,i,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",_c(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,Bn.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw Error(`${i} value must be ${JSON.stringify(t.schemaType)}`);if("code"in t?t.trackErrors:t.errors!==!1)this.errsCount=e.gen.const("_errs",H.default.errors)}result(e,t,i){this.failResult((0,G.not)(e),t,i)}failResult(e,t,i){if(this.gen.if(e),i)i();else this.error();if(t){if(this.gen.else(),t(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(e,t){this.failResult((0,G.not)(e),void 0,t)}fail(e){if(e===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(e),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:t}=this;this.fail(G._`${t} !== undefined && (${(0,G.or)(this.invalid$data(),e)})`)}error(e,t,i){if(t){this.setParams(t),this._error(e,i),this.setParams({});return}this._error(e,i)}_error(e,t){(e?Vn.reportExtraError:Vn.reportError)(this,this.def.error,t)}$dataError(){(0,Vn.reportError)(this,this.def.$dataError||Vn.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');(0,Vn.resetErrorsCount)(this.gen,this.errsCount)}ok(e){if(!this.allErrors)this.gen.if(e)}setParams(e,t){if(t)Object.assign(this.params,e);else this.params=e}block$data(e,t,i=G.nil){this.gen.block(()=>{this.check$data(e,i),t()})}check$data(e=G.nil,t=G.nil){if(!this.$data)return;let{gen:i,schemaCode:n,schemaType:o,def:s}=this;if(i.if((0,G.or)(G._`${n} === undefined`,t)),e!==G.nil)i.assign(e,!0);if(o.length||s.validateSchema){if(i.elseIf(this.invalid$data()),this.$dataError(),e!==G.nil)i.assign(e,!1)}i.else()}invalid$data(){let{gen:e,schemaCode:t,schemaType:i,def:n,it:o}=this;return(0,G.or)(s(),r());function s(){if(i.length){if(!(t instanceof G.Name))throw Error("ajv implementation error");let g=Array.isArray(i)?i:[i];return G._`${(0,zo.checkDataTypes)(g,t,o.opts.strictNumbers,zo.DataType.Wrong)}`}return G.nil}function r(){if(n.validateSchema){let g=e.scopeValue("validate$data",{ref:n.validateSchema});return G._`!${g}(${t})`}return G.nil}}subschema(e,t){let i=(0,ag.getSubschema)(this.it,e);(0,ag.extendSubschemaData)(i,this.it,e),(0,ag.extendSubschemaMode)(i,e);let n={...this.it,...i,items:void 0,props:void 0};return LR(n,t),n}mergeEvaluated(e,t){let{it:i,gen:n}=this;if(!i.opts.unevaluated)return;if(i.props!==!0&&e.props!==void 0)i.props=pt.mergeEvaluated.props(n,e.props,i.props,t);if(i.items!==!0&&e.items!==void 0)i.items=pt.mergeEvaluated.items(n,e.items,i.items,t)}mergeValidEvaluated(e,t){let{it:i,gen:n}=this;if(i.opts.unevaluated&&(i.props!==!0||i.items!==!0))return n.if(t,()=>this.mergeEvaluated(e,G.Name)),!0}}kt.KeywordCxt=dg;function Qc(e,t,i,n){let o=new dg(e,i,t);if("code"in i)i.code(o,n);else if(o.$data&&i.validate)(0,Bn.funcKeywordCode)(o,i);else if("macro"in i)(0,Bn.macroKeywordCode)(o,i);else if(i.compile||i.validate)(0,Bn.funcKeywordCode)(o,i)}var IG=/^\/(?:[^~]|~0|~1)*$/,dG=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function _c(e,{dataLevel:t,dataNames:i,dataPathArr:n}){let o,s;if(e==="")return H.default.rootData;if(e[0]==="/"){if(!IG.test(e))throw Error(`Invalid JSON-pointer: ${e}`);o=e,s=H.default.rootData}else{let l=dG.exec(e);if(!l)throw Error(`Invalid JSON-pointer: ${e}`);let I=+l[1];if(o=l[2],o==="#"){if(I>=t)throw Error(a("property/index",I));return n[t-I]}if(I>t)throw Error(a("data",I));if(s=i[t-I],!o)return s}let r=s,g=o.split("/");for(let l of g)if(l)s=G._`${s}${(0,G.getProperty)((0,pt.unescapeJsonPointer)(l))}`,r=G._`${r} && ${s}`;return r;function a(l,I){return`Cannot access ${l} ${I} levels up, current level is ${t}`}}kt.getData=_c});var Rn=y(function(cg){Object.defineProperty(cg,"__esModule",{value:!0});class Kc extends Error{constructor(e){super("validation failed");this.errors=e,this.ajv=this.validation=!0}}cg.default=Kc});var wi=y(function(ug){Object.defineProperty(ug,"__esModule",{value:!0});var Cg=yn();class Lc extends Error{constructor(e,t,i,n){super(n||`can't resolve reference ${i} from id ${t}`);this.missingRef=(0,Cg.resolveUrl)(e,t,i),this.missingSchema=(0,Cg.normalizeId)((0,Cg.getFullPath)(e,this.missingRef))}}ug.default=Lc});var wn=y(function(Pe){Object.defineProperty(Pe,"__esModule",{value:!0});Pe.resolveSchema=Pe.getCompilingSchema=Pe.resolveRef=Pe.compileSchema=Pe.SchemaEnv=void 0;var Te=v(),cG=Rn(),jt=ve(),ze=yn(),Mc=N(),CG=Gi();class Gn{constructor(e){var t;this.refs={},this.dynamicAnchors={};let i;if(typeof e.schema=="object")i=e.schema;this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(t=e.baseId)!==null&&t!==void 0?t:(0,ze.normalizeId)(i===null||i===void 0?void 0:i[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=i===null||i===void 0?void 0:i.$async,this.refs={}}}Pe.SchemaEnv=Gn;function pg(e){let t=$c.call(this,e);if(t)return t;let i=(0,ze.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:n,lines:o}=this.opts.code,{ownProperties:s}=this.opts,r=new Te.CodeGen(this.scope,{es5:n,lines:o,ownProperties:s}),g;if(e.$async)g=r.scopeValue("Error",{ref:cG.default,code:Te._`require("ajv/dist/runtime/validation_error").default`});let a=r.scopeName("validate");e.validateName=a;let l={gen:r,allErrors:this.opts.allErrors,data:jt.default.data,parentData:jt.default.parentData,parentDataProperty:jt.default.parentDataProperty,dataNames:[jt.default.data],dataPathArr:[Te.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:r.scopeValue("schema",this.opts.code.source===!0?{ref:e.schema,code:(0,Te.stringify)(e.schema)}:{ref:e.schema}),validateName:a,ValidationError:g,schema:e.schema,schemaEnv:e,rootId:i,baseId:e.baseId||i,schemaPath:Te.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:Te._`""`,opts:this.opts,self:this},I;try{this._compilations.add(e),(0,CG.validateFunctionCode)(l),r.optimize(this.opts.code.optimize);let d=r.toString();if(I=`${r.scopeRefs(jt.default.scope)}return ${d}`,this.opts.code.process)I=this.opts.code.process(I,e);let c=Function(`${jt.default.self}`,`${jt.default.scope}`,I)(this,this.scope.get());if(this.scope.value(a,{ref:c}),c.errors=null,c.schema=e.schema,c.schemaEnv=e,e.$async)c.$async=!0;if(this.opts.code.source===!0)c.source={validateName:a,validateCode:d,scopeValues:r._values};if(this.opts.unevaluated){let{props:C,items:A}=l;if(c.evaluated={props:C instanceof Te.Name?void 0:C,items:A instanceof Te.Name?void 0:A,dynamicProps:C instanceof Te.Name,dynamicItems:A instanceof Te.Name},c.source)c.source.evaluated=(0,Te.stringify)(c.evaluated)}return e.validate=c,e}catch(d){if(delete e.validate,delete e.validateName,I)this.logger.error("Error compiling schema, function code:",I);throw d}finally{this._compilations.delete(e)}}Pe.compileSchema=pg;function uG(e,t,i){var n;i=(0,ze.resolveUrl)(this.opts.uriResolver,t,i);let o=e.refs[i];if(o)return o;let s=AG.call(this,e,i);if(s===void 0){let r=(n=e.localRefs)===null||n===void 0?void 0:n[i],{schemaId:g}=this.opts;if(r)s=new Gn({schema:r,schemaId:g,root:e,baseId:t})}if(s===void 0)return;return e.refs[i]=mG.call(this,s)}Pe.resolveRef=uG;function mG(e){if((0,ze.inlineRef)(e.schema,this.opts.inlineRefs))return e.schema;return e.validate?e:pg.call(this,e)}function $c(e){for(let t of this._compilations)if(pG(t,e))return t}Pe.getCompilingSchema=$c;function pG(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function AG(e,t){let i;while(typeof(i=this.refs[t])=="string")t=i;return i||this.schemas[t]||jo.call(this,e,t)}function jo(e,t){let i=this.opts.uriResolver.parse(t),n=(0,ze._getFullPath)(this.opts.uriResolver,i),o=(0,ze.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&n===o)return mg.call(this,i,e);let s=(0,ze.normalizeId)(n),r=this.refs[s]||this.schemas[s];if(typeof r=="string"){let g=jo.call(this,e,r);if(typeof(g===null||g===void 0?void 0:g.schema)!=="object")return;return mg.call(this,i,g)}if(typeof(r===null||r===void 0?void 0:r.schema)!=="object")return;if(!r.validate)pg.call(this,r);if(s===(0,ze.normalizeId)(t)){let{schema:g}=r,{schemaId:a}=this.opts,l=g[a];if(l)o=(0,ze.resolveUrl)(this.opts.uriResolver,o,l);return new Gn({schema:g,schemaId:a,root:e,baseId:o})}return mg.call(this,i,r)}Pe.resolveSchema=jo;var ZG=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function mg(e,{baseId:t,schema:i,root:n}){var o;if(((o=e.fragment)===null||o===void 0?void 0:o[0])!=="/")return;for(let g of e.fragment.slice(1).split("/")){if(typeof i==="boolean")return;let a=i[(0,Mc.unescapeFragment)(g)];if(a===void 0)return;i=a;let l=typeof i==="object"&&i[this.opts.schemaId];if(!ZG.has(g)&&l)t=(0,ze.resolveUrl)(this.opts.uriResolver,t,l)}let s;if(typeof i!="boolean"&&i.$ref&&!(0,Mc.schemaHasRulesButRef)(i,this.RULES)){let g=(0,ze.resolveUrl)(this.opts.uriResolver,t,i.$ref);s=jo.call(this,n,g)}let{schemaId:r}=this.opts;if(s=s||new Gn({schema:i,schemaId:r,root:n,baseId:t}),s.schema!==s.root.schema)return s;return}});var qc=y(function(xX,bG){bG.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var Zg=y(function(JX,nC){var WG=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),tC=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function Ag(e){let t="",i=0,n=0;for(n=0;n<e.length;n++){if(i=e[n].charCodeAt(0),i===48)continue;if(!(i>=48&&i<=57||i>=65&&i<=70||i>=97&&i<=102))return"";t+=e[n];break}for(n+=1;n<e.length;n++){if(i=e[n].charCodeAt(0),!(i>=48&&i<=57||i>=65&&i<=70||i>=97&&i<=102))return"";t+=e[n]}return t}var hG=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function eC(e){return e.length=0,!0}function fG(e,t,i){if(e.length){let n=Ag(e);if(n!=="")t.push(n);else return i.error=!0,!1;e.length=0}return!0}function yG(e){let t=0,i={error:!1,address:"",zone:""},n=[],o=[],s=!1,r=!1,g=fG;for(let a=0;a<e.length;a++){let l=e[a];if(l==="["||l==="]")continue;if(l===":"){if(s===!0)r=!0;if(!g(o,n,i))break;if(++t>7){i.error=!0;break}if(a>0&&e[a-1]===":")s=!0;n.push(":");continue}else if(l==="%"){if(!g(o,n,i))break;g=eC}else{o.push(l);continue}}if(o.length)if(g===eC)i.zone=o.join("");else if(r)n.push(o.join(""));else n.push(Ag(o));return i.address=n.join(""),i}function iC(e){if(VG(e,":")<2)return{host:e,isIPV6:!1};let t=yG(e);if(!t.error){let{address:i,address:n}=t;if(t.zone)i+="%"+t.zone,n+="%25"+t.zone;return{host:i,isIPV6:!0,escapedHost:n}}else return{host:e,isIPV6:!1}}function VG(e,t){let i=0;for(let n=0;n<e.length;n++)if(e[n]===t)i++;return i}function BG(e){let t=e,i=[],n=-1,o=0;while(o=t.length){if(o===1)if(t===".")break;else if(t==="/"){i.push("/");break}else{i.push(t);break}else if(o===2){if(t[0]==="."){if(t[1]===".")break;else if(t[1]==="/"){t=t.slice(2);continue}}else if(t[0]==="/"){if(t[1]==="."||t[1]==="/"){i.push("/");break}}}else if(o===3){if(t==="/.."){if(i.length!==0)i.pop();i.push("/");break}}if(t[0]==="."){if(t[1]==="."){if(t[2]==="/"){t=t.slice(3);continue}}else if(t[1]==="/"){t=t.slice(2);continue}}else if(t[0]==="/"){if(t[1]==="."){if(t[2]==="/"){t=t.slice(2);continue}else if(t[2]==="."){if(t[3]==="/"){if(t=t.slice(3),i.length!==0)i.pop();continue}}}}if((n=t.indexOf("/",1))===-1){i.push(t);break}else i.push(t.slice(0,n)),t=t.slice(n)}return i.join("")}function RG(e,t){let i=t!==!0?escape:unescape;if(e.scheme!==void 0)e.scheme=i(e.scheme);if(e.userinfo!==void 0)e.userinfo=i(e.userinfo);if(e.host!==void 0)e.host=i(e.host);if(e.path!==void 0)e.path=i(e.path);if(e.query!==void 0)e.query=i(e.query);if(e.fragment!==void 0)e.fragment=i(e.fragment);return e}function GG(e){let t=[];if(e.userinfo!==void 0)t.push(e.userinfo),t.push("@");if(e.host!==void 0){let i=unescape(e.host);if(!tC(i)){let n=iC(i);if(n.isIPV6===!0)i=`[${n.escapedHost}]`;else i=e.host}t.push(i)}if(typeof e.port==="number"||typeof e.port==="string")t.push(":"),t.push(String(e.port));return t.length?t.join(""):void 0}nC.exports={nonSimpleDomain:hG,recomposeAuthority:GG,normalizeComponentEncoding:RG,removeDotSegments:BG,isIPv4:tC,isUUID:WG,normalizeIPv6:iC,stringArrayToHexStripped:Ag}});var aC=y(function(EX,gC){var{isUUID:wG}=Zg(),FG=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,HG=["http","https","ws","wss","urn","urn:uuid"];function vG(e){return HG.indexOf(e)!==-1}function bg(e){if(e.secure===!0)return!0;else if(e.secure===!1)return!1;else if(e.scheme)return e.scheme.length===3&&(e.scheme[0]==="w"||e.scheme[0]==="W")&&(e.scheme[1]==="s"||e.scheme[1]==="S")&&(e.scheme[2]==="s"||e.scheme[2]==="S");else return!1}function oC(e){if(!e.host)e.error=e.error||"HTTP URIs must have a host.";return e}function sC(e){let t=String(e.scheme).toLowerCase()==="https";if(e.port===(t?443:80)||e.port==="")e.port=void 0;if(!e.path)e.path="/";return e}function kG(e){return e.secure=bg(e),e.resourceName=(e.path||"/")+(e.query?"?"+e.query:""),e.path=void 0,e.query=void 0,e}function PG(e){if(e.port===(bg(e)?443:80)||e.port==="")e.port=void 0;if(typeof e.secure==="boolean")e.scheme=e.secure?"wss":"ws",e.secure=void 0;if(e.resourceName){let[t,i]=e.resourceName.split("?");e.path=t&&t!=="/"?t:void 0,e.query=i,e.resourceName=void 0}return e.fragment=void 0,e}function YG(e,t){if(!e.path)return e.error="URN can not be parsed",e;let i=e.path.match(FG);if(i){let n=t.scheme||e.scheme||"urn";e.nid=i[1].toLowerCase(),e.nss=i[2];let o=`${n}:${t.nid||e.nid}`,s=Wg(o);if(e.path=void 0,s)e=s.parse(e,t)}else e.error=e.error||"URN can not be parsed.";return e}function NG(e,t){if(e.nid===void 0)throw Error("URN without nid cannot be serialized");let i=t.scheme||e.scheme||"urn",n=e.nid.toLowerCase(),o=`${i}:${t.nid||n}`,s=Wg(o);if(s)e=s.serialize(e,t);let r=e,g=e.nss;return r.path=`${n||t.nid}:${g}`,t.skipEscape=!0,r}function XG(e,t){let i=e;if(i.uuid=i.nss,i.nss=void 0,!t.tolerant&&(!i.uuid||!wG(i.uuid)))i.error=i.error||"UUID is not valid.";return i}function SG(e){let t=e;return t.nss=(e.uuid||"").toLowerCase(),t}var rC={scheme:"http",domainHost:!0,parse:oC,serialize:sC},xG={scheme:"https",domainHost:rC.domainHost,parse:oC,serialize:sC},Do={scheme:"ws",domainHost:!0,parse:kG,serialize:PG},JG={scheme:"wss",domainHost:Do.domainHost,parse:Do.parse,serialize:Do.serialize},EG={scheme:"urn",parse:YG,serialize:NG,skipNormalize:!0},UG={scheme:"urn:uuid",parse:XG,serialize:SG,skipNormalize:!0},Qo={http:rC,https:xG,ws:Do,wss:JG,urn:EG,"urn:uuid":UG};Object.setPrototypeOf(Qo,null);function Wg(e){return e&&(Qo[e]||Qo[e.toLowerCase()])||void 0}gC.exports={wsIsSecure:bg,SCHEMES:Qo,isValidSchemeName:vG,getSchemeHandler:Wg}});var dC=y(function(UX,Ko){var{normalizeIPv6:OG,removeDotSegments:Fn,recomposeAuthority:TG,normalizeComponentEncoding:_o,isIPv4:zG,nonSimpleDomain:jG}=Zg(),{SCHEMES:DG,getSchemeHandler:lC}=aC();function QG(e,t){if(typeof e==="string")e=et(At(e,t),t);else if(typeof e==="object")e=At(et(e,t),t);return e}function _G(e,t,i){let n=i?Object.assign({scheme:"null"},i):{scheme:"null"},o=IC(At(e,n),At(t,n),n,!0);return n.skipEscape=!0,et(o,n)}function IC(e,t,i,n){let o={};if(!n)e=At(et(e,i),i),t=At(et(t,i),i);if(i=i||{},!i.tolerant&&t.scheme)o.scheme=t.scheme,o.userinfo=t.userinfo,o.host=t.host,o.port=t.port,o.path=Fn(t.path||""),o.query=t.query;else{if(t.userinfo!==void 0||t.host!==void 0||t.port!==void 0)o.userinfo=t.userinfo,o.host=t.host,o.port=t.port,o.path=Fn(t.path||""),o.query=t.query;else{if(!t.path)if(o.path=e.path,t.query!==void 0)o.query=t.query;else o.query=e.query;else{if(t.path[0]==="/")o.path=Fn(t.path);else{if((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path)o.path="/"+t.path;else if(!e.path)o.path=t.path;else o.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path;o.path=Fn(o.path)}o.query=t.query}o.userinfo=e.userinfo,o.host=e.host,o.port=e.port}o.scheme=e.scheme}return o.fragment=t.fragment,o}function KG(e,t,i){if(typeof e==="string")e=unescape(e),e=et(_o(At(e,i),!0),{...i,skipEscape:!0});else if(typeof e==="object")e=et(_o(e,!0),{...i,skipEscape:!0});if(typeof t==="string")t=unescape(t),t=et(_o(At(t,i),!0),{...i,skipEscape:!0});else if(typeof t==="object")t=et(_o(t,!0),{...i,skipEscape:!0});return e.toLowerCase()===t.toLowerCase()}function et(e,t){let i={host:e.host,scheme:e.scheme,userinfo:e.userinfo,port:e.port,path:e.path,query:e.query,nid:e.nid,nss:e.nss,uuid:e.uuid,fragment:e.fragment,reference:e.reference,resourceName:e.resourceName,secure:e.secure,error:""},n=Object.assign({},t),o=[],s=lC(n.scheme||i.scheme);if(s&&s.serialize)s.serialize(i,n);if(i.path!==void 0)if(!n.skipEscape){if(i.path=escape(i.path),i.scheme!==void 0)i.path=i.path.split("%3A").join(":")}else i.path=unescape(i.path);if(n.reference!=="suffix"&&i.scheme)o.push(i.scheme,":");let r=TG(i);if(r!==void 0){if(n.reference!=="suffix")o.push("//");if(o.push(r),i.path&&i.path[0]!=="/")o.push("/")}if(i.path!==void 0){let g=i.path;if(!n.absolutePath&&(!s||!s.absolutePath))g=Fn(g);if(r===void 0&&g[0]==="/"&&g[1]==="/")g="/%2F"+g.slice(2);o.push(g)}if(i.query!==void 0)o.push("?",i.query);if(i.fragment!==void 0)o.push("#",i.fragment);return o.join("")}var LG=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function At(e,t){let i=Object.assign({},t),n={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},o=!1;if(i.reference==="suffix")if(i.scheme)e=i.scheme+":"+e;else e="//"+e;let s=e.match(LG);if(s){if(n.scheme=s[1],n.userinfo=s[3],n.host=s[4],n.port=parseInt(s[5],10),n.path=s[6]||"",n.query=s[7],n.fragment=s[8],isNaN(n.port))n.port=s[5];if(n.host)if(zG(n.host)===!1){let a=OG(n.host);n.host=a.host.toLowerCase(),o=a.isIPV6}else o=!0;if(n.scheme===void 0&&n.userinfo===void 0&&n.host===void 0&&n.port===void 0&&n.query===void 0&&!n.path)n.reference="same-document";else if(n.scheme===void 0)n.reference="relative";else if(n.fragment===void 0)n.reference="absolute";else n.reference="uri";if(i.reference&&i.reference!=="suffix"&&i.reference!==n.reference)n.error=n.error||"URI is not a "+i.reference+" reference.";let r=lC(i.scheme||n.scheme);if(!i.unicodeSupport&&(!r||!r.unicodeSupport)){if(n.host&&(i.domainHost||r&&r.domainHost)&&o===!1&&jG(n.host))try{n.host=URL.domainToASCII(n.host.toLowerCase())}catch(g){n.error=n.error||"Host's domain name can not be converted to ASCII: "+g}}if(!r||r&&!r.skipNormalize){if(e.indexOf("%")!==-1){if(n.scheme!==void 0)n.scheme=unescape(n.scheme);if(n.host!==void 0)n.host=unescape(n.host)}if(n.path)n.path=escape(unescape(n.path));if(n.fragment)n.fragment=encodeURI(decodeURIComponent(n.fragment))}if(r&&r.parse)r.parse(n,i)}else n.error=n.error||"URI can not be parsed.";return n}var hg={SCHEMES:DG,normalize:QG,resolve:_G,resolveComponent:IC,equal:KG,serialize:et,parse:At};Ko.exports=hg;Ko.exports.default=hg;Ko.exports.fastUri=hg});var CC=y(function(fg){Object.defineProperty(fg,"__esModule",{value:!0});var cC=dC();cC.code='require("ajv/dist/runtime/uri").default';fg.default=cC});var Bg=y(function(oe){Object.defineProperty(oe,"__esModule",{value:!0});oe.CodeGen=oe.Name=oe.nil=oe.stringify=oe.str=oe._=oe.KeywordCxt=void 0;var MG=Gi();Object.defineProperty(oe,"KeywordCxt",{enumerable:!0,get:function(){return MG.KeywordCxt}});var Fi=v();Object.defineProperty(oe,"_",{enumerable:!0,get:function(){return Fi._}});Object.defineProperty(oe,"str",{enumerable:!0,get:function(){return Fi.str}});Object.defineProperty(oe,"stringify",{enumerable:!0,get:function(){return Fi.stringify}});Object.defineProperty(oe,"nil",{enumerable:!0,get:function(){return Fi.nil}});Object.defineProperty(oe,"Name",{enumerable:!0,get:function(){return Fi.Name}});Object.defineProperty(oe,"CodeGen",{enumerable:!0,get:function(){return Fi.CodeGen}});var $G=Rn(),ZC=wi(),qG=$r(),Hn=wn(),e0=v(),vn=yn(),Lo=fn(),Vg=N(),uC=qc(),t0=CC(),bC=(e,t)=>new RegExp(e,t);bC.code="new RegExp";var i0=["removeAdditional","useDefaults","coerceTypes"],n0=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),o0={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},s0={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},mC=200;function r0(e){var t,i,n,o,s,r,g,a,l,I,d,u,c,C,A,m,p,Z,W,h,f,V,B,F,R;let U=e.strict,K=(t=e.code)===null||t===void 0?void 0:t.optimize,ee=K===!0||K===void 0?1:K||0,He=(n=(i=e.code)===null||i===void 0?void 0:i.regExp)!==null&&n!==void 0?n:bC,Cn=(o=e.uriResolver)!==null&&o!==void 0?o:t0.default;return{strictSchema:(r=(s=e.strictSchema)!==null&&s!==void 0?s:U)!==null&&r!==void 0?r:!0,strictNumbers:(a=(g=e.strictNumbers)!==null&&g!==void 0?g:U)!==null&&a!==void 0?a:!0,strictTypes:(I=(l=e.strictTypes)!==null&&l!==void 0?l:U)!==null&&I!==void 0?I:"log",strictTuples:(u=(d=e.strictTuples)!==null&&d!==void 0?d:U)!==null&&u!==void 0?u:"log",strictRequired:(C=(c=e.strictRequired)!==null&&c!==void 0?c:U)!==null&&C!==void 0?C:!1,code:e.code?{...e.code,optimize:ee,regExp:He}:{optimize:ee,regExp:He},loopRequired:(A=e.loopRequired)!==null&&A!==void 0?A:mC,loopEnum:(m=e.loopEnum)!==null&&m!==void 0?m:mC,meta:(p=e.meta)!==null&&p!==void 0?p:!0,messages:(Z=e.messages)!==null&&Z!==void 0?Z:!0,inlineRefs:(W=e.inlineRefs)!==null&&W!==void 0?W:!0,schemaId:(h=e.schemaId)!==null&&h!==void 0?h:"$id",addUsedSchema:(f=e.addUsedSchema)!==null&&f!==void 0?f:!0,validateSchema:(V=e.validateSchema)!==null&&V!==void 0?V:!0,validateFormats:(B=e.validateFormats)!==null&&B!==void 0?B:!0,unicodeRegExp:(F=e.unicodeRegExp)!==null&&F!==void 0?F:!0,int32range:(R=e.int32range)!==null&&R!==void 0?R:!0,uriResolver:Cn}}class Mo{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...r0(e)};let{es5:t,lines:i}=this.opts.code;this.scope=new e0.ValueScope({scope:{},prefixes:n0,es5:t,lines:i}),this.logger=c0(e.logger);let n=e.validateFormats;if(e.validateFormats=!1,this.RULES=(0,qG.getRules)(),pC.call(this,o0,e,"NOT SUPPORTED"),pC.call(this,s0,e,"DEPRECATED","warn"),this._metaOpts=I0.call(this),e.formats)a0.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords)l0.call(this,e.keywords);if(typeof e.meta=="object")this.addMetaSchema(e.meta);g0.call(this),e.validateFormats=n}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:t,schemaId:i}=this.opts,n=uC;if(i==="id")n={...uC},n.id=n.$id,delete n.$id;if(t&&e)this.addMetaSchema(n,n[i],!1)}defaultMeta(){let{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[t]||e:void 0}validate(e,t){let i;if(typeof e=="string"){if(i=this.getSchema(e),!i)throw Error(`no schema with key or ref "${e}"`)}else i=this.compile(e);let n=i(t);if(!("$async"in i))this.errors=i.errors;return n}compile(e,t){let i=this._addSchema(e,t);return i.validate||this._compileSchemaEnv(i)}compileAsync(e,t){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:i}=this.opts;return n.call(this,e,t);async function n(l,I){await o.call(this,l.$schema);let d=this._addSchema(l,I);return d.validate||s.call(this,d)}async function o(l){if(l&&!this.getSchema(l))await n.call(this,{$ref:l},!0)}async function s(l){try{return this._compileSchemaEnv(l)}catch(I){if(!(I instanceof ZC.default))throw I;return r.call(this,I),await g.call(this,I.missingSchema),s.call(this,l)}}function r({missingSchema:l,missingRef:I}){if(this.refs[l])throw Error(`AnySchema ${l} is loaded but ${I} cannot be resolved`)}async function g(l){let I=await a.call(this,l);if(!this.refs[l])await o.call(this,I.$schema);if(!this.refs[l])this.addSchema(I,l,t)}async function a(l){let I=this._loading[l];if(I)return I;try{return await(this._loading[l]=i(l))}finally{delete this._loading[l]}}}addSchema(e,t,i,n=this.opts.validateSchema){if(Array.isArray(e)){for(let s of e)this.addSchema(s,void 0,i,n);return this}let o;if(typeof e==="object"){let{schemaId:s}=this.opts;if(o=e[s],o!==void 0&&typeof o!="string")throw Error(`schema ${s} must be string`)}return t=(0,vn.normalizeId)(t||o),this._checkUnique(t),this.schemas[t]=this._addSchema(e,i,t,n,!0),this}addMetaSchema(e,t,i=this.opts.validateSchema){return this.addSchema(e,t,!0,i),this}validateSchema(e,t){if(typeof e=="boolean")return!0;let i;if(i=e.$schema,i!==void 0&&typeof i!="string")throw Error("$schema must be a string");if(i=i||this.opts.defaultMeta||this.defaultMeta(),!i)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let n=this.validate(i,e);if(!n&&t){let o="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(o);else throw Error(o)}return n}getSchema(e){let t;while(typeof(t=AC.call(this,e))=="string")e=t;if(t===void 0){let{schemaId:i}=this.opts,n=new Hn.SchemaEnv({schema:{},schemaId:i});if(t=Hn.resolveSchema.call(this,n,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let t=AC.call(this,e);if(typeof t=="object")this._cache.delete(t.schema);return delete this.schemas[e],delete this.refs[e],this}case"object":{let t=e;this._cache.delete(t);let i=e[this.opts.schemaId];if(i)i=(0,vn.normalizeId)(i),delete this.schemas[i],delete this.refs[i];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let t of e)this.addKeyword(t);return this}addKeyword(e,t){let i;if(typeof e=="string"){if(i=e,typeof t=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=i}else if(typeof e=="object"&&t===void 0){if(t=e,i=t.keyword,Array.isArray(i)&&!i.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(u0.call(this,i,t),!t)return(0,Vg.eachItem)(i,(o)=>yg.call(this,o)),this;p0.call(this,t);let n={...t,type:(0,Lo.getJSONTypes)(t.type),schemaType:(0,Lo.getJSONTypes)(t.schemaType)};return(0,Vg.eachItem)(i,n.type.length===0?(o)=>yg.call(this,o,n):(o)=>n.type.forEach((s)=>yg.call(this,o,n,s))),this}getKeyword(e){let t=this.RULES.all[e];return typeof t=="object"?t.definition:!!t}removeKeyword(e){let{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(let i of t.rules){let n=i.rules.findIndex((o)=>o.keyword===e);if(n>=0)i.rules.splice(n,1)}return this}addFormat(e,t){if(typeof t=="string")t=new RegExp(t);return this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=", ",dataVar:i="data"}={}){if(!e||e.length===0)return"No errors";return e.map((n)=>`${i}${n.instancePath} ${n.message}`).reduce((n,o)=>n+t+o)}$dataMetaSchema(e,t){let i=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let n of t){let o=n.split("/").slice(1),s=e;for(let r of o)s=s[r];for(let r in i){let g=i[r];if(typeof g!="object")continue;let{$data:a}=g.definition,l=s[r];if(a&&l)s[r]=WC(l)}}return e}_removeAllSchemas(e,t){for(let i in e){let n=e[i];if(!t||t.test(i)){if(typeof n=="string")delete e[i];else if(n&&!n.meta)this._cache.delete(n.schema),delete e[i]}}}_addSchema(e,t,i,n=this.opts.validateSchema,o=this.opts.addUsedSchema){let s,{schemaId:r}=this.opts;if(typeof e=="object")s=e[r];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof e!="boolean")throw Error("schema must be object or boolean");let g=this._cache.get(e);if(g!==void 0)return g;i=(0,vn.normalizeId)(s||i);let a=vn.getSchemaRefs.call(this,e,i);if(g=new Hn.SchemaEnv({schema:e,schemaId:r,meta:t,baseId:i,localRefs:a}),this._cache.set(g.schema,g),o&&!i.startsWith("#")){if(i)this._checkUnique(i);this.refs[i]=g}if(n)this.validateSchema(e,!0);return g}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta)this._compileMetaSchema(e);else Hn.compileSchema.call(this,e);if(!e.validate)throw Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let t=this.opts;this.opts=this._metaOpts;try{Hn.compileSchema.call(this,e)}finally{this.opts=t}}}Mo.ValidationError=$G.default;Mo.MissingRefError=ZC.default;oe.default=Mo;function pC(e,t,i,n="error"){for(let o in e){let s=o;if(s in t)this.logger[n](`${i}: option ${o}. ${e[s]}`)}}function AC(e){return e=(0,vn.normalizeId)(e),this.schemas[e]||this.refs[e]}function g0(){let e=this.opts.schemas;if(!e)return;if(Array.isArray(e))this.addSchema(e);else for(let t in e)this.addSchema(e[t],t)}function a0(){for(let e in this.opts.formats){let t=this.opts.formats[e];if(t)this.addFormat(e,t)}}function l0(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let t in e){let i=e[t];if(!i.keyword)i.keyword=t;this.addKeyword(i)}}function I0(){let e={...this.opts};for(let t of i0)delete e[t];return e}var d0={log(){},warn(){},error(){}};function c0(e){if(e===!1)return d0;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw Error("logger must implement log, warn and error methods")}var C0=/^[a-z_$][a-z0-9_$:-]*$/i;function u0(e,t){let{RULES:i}=this;if((0,Vg.eachItem)(e,(n)=>{if(i.keywords[n])throw Error(`Keyword ${n} is already defined`);if(!C0.test(n))throw Error(`Keyword ${n} has invalid name`)}),!t)return;if(t.$data&&!(("code"in t)||("validate"in t)))throw Error('$data keyword must have "code" or "validate" function')}function yg(e,t,i){var n;let o=t===null||t===void 0?void 0:t.post;if(i&&o)throw Error('keyword with "post" flag cannot have "type"');let{RULES:s}=this,r=o?s.post:s.rules.find(({type:a})=>a===i);if(!r)r={type:i,rules:[]},s.rules.push(r);if(s.keywords[e]=!0,!t)return;let g={keyword:e,definition:{...t,type:(0,Lo.getJSONTypes)(t.type),schemaType:(0,Lo.getJSONTypes)(t.schemaType)}};if(t.before)m0.call(this,r,g,t.before);else r.rules.push(g);s.all[e]=g,(n=t.implements)===null||n===void 0||n.forEach((a)=>this.addKeyword(a))}function m0(e,t,i){let n=e.rules.findIndex((o)=>o.keyword===i);if(n>=0)e.rules.splice(n,0,t);else e.rules.push(t),this.logger.warn(`rule ${i} is not defined`)}function p0(e){let{metaSchema:t}=e;if(t===void 0)return;if(e.$data&&this.opts.$data)t=WC(t);e.validateSchema=this.compile(t,!0)}var A0={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function WC(e){return{anyOf:[e,A0]}}});var hC=y(function(Rg){Object.defineProperty(Rg,"__esModule",{value:!0});var Z0={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};Rg.default=Z0});var es=y(function(Dt){Object.defineProperty(Dt,"__esModule",{value:!0});Dt.callRef=Dt.getValidate=void 0;var b0=wi(),fC=ke(),ye=v(),Hi=ve(),yC=wn(),$o=N(),W0={keyword:"$ref",schemaType:"string",code(e){let{gen:t,schema:i,it:n}=e,{baseId:o,schemaEnv:s,validateName:r,opts:g,self:a}=n,{root:l}=s;if((i==="#"||i==="#/")&&o===l.baseId)return d();let I=yC.resolveRef.call(a,l,o,i);if(I===void 0)throw new b0.default(n.opts.uriResolver,o,i);if(I instanceof yC.SchemaEnv)return u(I);return c(I);function d(){if(s===l)return qo(e,r,s,s.$async);let C=t.scopeValue("root",{ref:l});return qo(e,ye._`${C}.validate`,l,l.$async)}function u(C){let A=VC(e,C);qo(e,A,C,C.$async)}function c(C){let A=t.scopeValue("schema",g.code.source===!0?{ref:C,code:(0,ye.stringify)(C)}:{ref:C}),m=t.name("valid"),p=e.subschema({schema:C,dataTypes:[],schemaPath:ye.nil,topSchemaRef:A,errSchemaPath:i},m);e.mergeEvaluated(p),e.ok(m)}}};function VC(e,t){let{gen:i}=e;return t.validate?i.scopeValue("validate",{ref:t.validate}):ye._`${i.scopeValue("wrapper",{ref:t})}.validate`}Dt.getValidate=VC;function qo(e,t,i,n){let{gen:o,it:s}=e,{allErrors:r,schemaEnv:g,opts:a}=s,l=a.passContext?Hi.default.this:ye.nil;if(n)I();else d();function I(){if(!g.$async)throw Error("async schema referenced by sync schema");let C=o.let("valid");o.try(()=>{if(o.code(ye._`await ${(0,fC.callValidateCode)(e,t,l)}`),c(t),!r)o.assign(C,!0)},(A)=>{if(o.if(ye._`!(${A} instanceof ${s.ValidationError})`,()=>o.throw(A)),u(A),!r)o.assign(C,!1)}),e.ok(C)}function d(){e.result((0,fC.callValidateCode)(e,t,l),()=>c(t),()=>u(t))}function u(C){let A=ye._`${C}.errors`;o.assign(Hi.default.vErrors,ye._`${Hi.default.vErrors} === null ? ${A} : ${Hi.default.vErrors}.concat(${A})`),o.assign(Hi.default.errors,ye._`${Hi.default.vErrors}.length`)}function c(C){var A;if(!s.opts.unevaluated)return;let m=(A=i===null||i===void 0?void 0:i.validate)===null||A===void 0?void 0:A.evaluated;if(s.props!==!0)if(m&&!m.dynamicProps){if(m.props!==void 0)s.props=$o.mergeEvaluated.props(o,m.props,s.props)}else{let p=o.var("props",ye._`${C}.evaluated.props`);s.props=$o.mergeEvaluated.props(o,p,s.props,ye.Name)}if(s.items!==!0)if(m&&!m.dynamicItems){if(m.items!==void 0)s.items=$o.mergeEvaluated.items(o,m.items,s.items)}else{let p=o.var("items",ye._`${C}.evaluated.items`);s.items=$o.mergeEvaluated.items(o,p,s.items,ye.Name)}}}Dt.callRef=qo;Dt.default=W0});var wg=y(function(Gg){Object.defineProperty(Gg,"__esModule",{value:!0});var h0=hC(),f0=es(),y0=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",h0.default,f0.default];Gg.default=y0});var BC=y(function(Fg){Object.defineProperty(Fg,"__esModule",{value:!0});var ts=v(),Pt=ts.operators,is={maximum:{okStr:"<=",ok:Pt.LTE,fail:Pt.GT},minimum:{okStr:">=",ok:Pt.GTE,fail:Pt.LT},exclusiveMaximum:{okStr:"<",ok:Pt.LT,fail:Pt.GTE},exclusiveMinimum:{okStr:">",ok:Pt.GT,fail:Pt.LTE}},V0={message:({keyword:e,schemaCode:t})=>ts.str`must be ${is[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>ts._`{comparison: ${is[e].okStr}, limit: ${t}}`},B0={keyword:Object.keys(is),type:"number",schemaType:"number",$data:!0,error:V0,code(e){let{keyword:t,data:i,schemaCode:n}=e;e.fail$data(ts._`${i} ${is[t].fail} ${n} || isNaN(${i})`)}};Fg.default=B0});var RC=y(function(Hg){Object.defineProperty(Hg,"__esModule",{value:!0});var kn=v(),R0={message:({schemaCode:e})=>kn.str`must be multiple of ${e}`,params:({schemaCode:e})=>kn._`{multipleOf: ${e}}`},G0={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:R0,code(e){let{gen:t,data:i,schemaCode:n,it:o}=e,s=o.opts.multipleOfPrecision,r=t.let("res"),g=s?kn._`Math.abs(Math.round(${r}) - ${r}) > 1e-${s}`:kn._`${r} !== parseInt(${r})`;e.fail$data(kn._`(${n} === 0 || (${r} = ${i}/${n}, ${g}))`)}};Hg.default=G0});var wC=y(function(vg){Object.defineProperty(vg,"__esModule",{value:!0});function GC(e){let t=e.length,i=0,n=0,o;while(n<t)if(i++,o=e.charCodeAt(n++),o>=55296&&o<=56319&&n<t){if(o=e.charCodeAt(n),(o&64512)===56320)n++}return i}vg.default=GC;GC.code='require("ajv/dist/runtime/ucs2length").default'});var FC=y(function(kg){Object.defineProperty(kg,"__esModule",{value:!0});var Qt=v(),w0=N(),F0=wC(),H0={message({keyword:e,schemaCode:t}){let i=e==="maxLength"?"more":"fewer";return Qt.str`must NOT have ${i} than ${t} characters`},params:({schemaCode:e})=>Qt._`{limit: ${e}}`},v0={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:H0,code(e){let{keyword:t,data:i,schemaCode:n,it:o}=e,s=t==="maxLength"?Qt.operators.GT:Qt.operators.LT,r=o.opts.unicode===!1?Qt._`${i}.length`:Qt._`${(0,w0.useFunc)(e.gen,F0.default)}(${i})`;e.fail$data(Qt._`${r} ${s} ${n}`)}};kg.default=v0});var HC=y(function(Pg){Object.defineProperty(Pg,"__esModule",{value:!0});var k0=ke(),ns=v(),P0={message:({schemaCode:e})=>ns.str`must match pattern "${e}"`,params:({schemaCode:e})=>ns._`{pattern: ${e}}`},Y0={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:P0,code(e){let{data:t,$data:i,schema:n,schemaCode:o,it:s}=e,r=s.opts.unicodeRegExp?"u":"",g=i?ns._`(new RegExp(${o}, ${r}))`:(0,k0.usePattern)(e,n);e.fail$data(ns._`!${g}.test(${t})`)}};Pg.default=Y0});var vC=y(function(Yg){Object.defineProperty(Yg,"__esModule",{value:!0});var Pn=v(),N0={message({keyword:e,schemaCode:t}){let i=e==="maxProperties"?"more":"fewer";return Pn.str`must NOT have ${i} than ${t} properties`},params:({schemaCode:e})=>Pn._`{limit: ${e}}`},X0={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:N0,code(e){let{keyword:t,data:i,schemaCode:n}=e,o=t==="maxProperties"?Pn.operators.GT:Pn.operators.LT;e.fail$data(Pn._`Object.keys(${i}).length ${o} ${n}`)}};Yg.default=X0});var kC=y(function(Ng){Object.defineProperty(Ng,"__esModule",{value:!0});var Yn=ke(),Nn=v(),S0=N(),x0={message:({params:{missingProperty:e}})=>Nn.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>Nn._`{missingProperty: ${e}}`},J0={keyword:"required",type:"object",schemaType:"array",$data:!0,error:x0,code(e){let{gen:t,schema:i,schemaCode:n,data:o,$data:s,it:r}=e,{opts:g}=r;if(!s&&i.length===0)return;let a=i.length>=g.loopRequired;if(r.allErrors)l();else I();if(g.strictRequired){let c=e.parentSchema.properties,{definedProperties:C}=e.it;for(let A of i)if((c===null||c===void 0?void 0:c[A])===void 0&&!C.has(A)){let m=r.schemaEnv.baseId+r.errSchemaPath,p=`required property "${A}" is not defined at "${m}" (strictRequired)`;(0,S0.checkStrictMode)(r,p,r.opts.strictRequired)}}function l(){if(a||s)e.block$data(Nn.nil,d);else for(let c of i)(0,Yn.checkReportMissingProp)(e,c)}function I(){let c=t.let("missing");if(a||s){let C=t.let("valid",!0);e.block$data(C,()=>u(c,C)),e.ok(C)}else t.if((0,Yn.checkMissingProp)(e,i,c)),(0,Yn.reportMissingProp)(e,c),t.else()}function d(){t.forOf("prop",n,(c)=>{e.setParams({missingProperty:c}),t.if((0,Yn.noPropertyInData)(t,o,c,g.ownProperties),()=>e.error())})}function u(c,C){e.setParams({missingProperty:c}),t.forOf(c,n,()=>{t.assign(C,(0,Yn.propertyInData)(t,o,c,g.ownProperties)),t.if((0,Nn.not)(C),()=>{e.error(),t.break()})},Nn.nil)}}};Ng.default=J0});var PC=y(function(Xg){Object.defineProperty(Xg,"__esModule",{value:!0});var Xn=v(),E0={message({keyword:e,schemaCode:t}){let i=e==="maxItems"?"more":"fewer";return Xn.str`must NOT have ${i} than ${t} items`},params:({schemaCode:e})=>Xn._`{limit: ${e}}`},U0={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:E0,code(e){let{keyword:t,data:i,schemaCode:n}=e,o=t==="maxItems"?Xn.operators.GT:Xn.operators.LT;e.fail$data(Xn._`${i}.length ${o} ${n}`)}};Xg.default=U0});var os=y(function(Sg){Object.defineProperty(Sg,"__esModule",{value:!0});var YC=rg();YC.code='require("ajv/dist/runtime/equal").default';Sg.default=YC});var NC=y(function(Jg){Object.defineProperty(Jg,"__esModule",{value:!0});var xg=fn(),se=v(),O0=N(),T0=os(),z0={message:({params:{i:e,j:t}})=>se.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>se._`{i: ${e}, j: ${t}}`},j0={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:z0,code(e){let{gen:t,data:i,$data:n,schema:o,parentSchema:s,schemaCode:r,it:g}=e;if(!n&&!o)return;let a=t.let("valid"),l=s.items?(0,xg.getSchemaTypes)(s.items):[];e.block$data(a,I,se._`${r} === false`),e.ok(a);function I(){let C=t.let("i",se._`${i}.length`),A=t.let("j");e.setParams({i:C,j:A}),t.assign(a,!0),t.if(se._`${C} > 1`,()=>(d()?u:c)(C,A))}function d(){return l.length>0&&!l.some((C)=>C==="object"||C==="array")}function u(C,A){let m=t.name("item"),p=(0,xg.checkDataTypes)(l,m,g.opts.strictNumbers,xg.DataType.Wrong),Z=t.const("indices",se._`{}`);t.for(se._`;${C}--;`,()=>{if(t.let(m,se._`${i}[${C}]`),t.if(p,se._`continue`),l.length>1)t.if(se._`typeof ${m} == "string"`,se._`${m} += "_"`);t.if(se._`typeof ${Z}[${m}] == "number"`,()=>{t.assign(A,se._`${Z}[${m}]`),e.error(),t.assign(a,!1).break()}).code(se._`${Z}[${m}] = ${C}`)})}function c(C,A){let m=(0,O0.useFunc)(t,T0.default),p=t.name("outer");t.label(p).for(se._`;${C}--;`,()=>t.for(se._`${A} = ${C}; ${A}--;`,()=>t.if(se._`${m}(${i}[${C}], ${i}[${A}])`,()=>{e.error(),t.assign(a,!1).break(p)})))}}};Jg.default=j0});var XC=y(function(Ug){Object.defineProperty(Ug,"__esModule",{value:!0});var Eg=v(),D0=N(),Q0=os(),_0={message:"must be equal to constant",params:({schemaCode:e})=>Eg._`{allowedValue: ${e}}`},K0={keyword:"const",$data:!0,error:_0,code(e){let{gen:t,data:i,$data:n,schemaCode:o,schema:s}=e;if(n||s&&typeof s=="object")e.fail$data(Eg._`!${(0,D0.useFunc)(t,Q0.default)}(${i}, ${o})`);else e.fail(Eg._`${s} !== ${i}`)}};Ug.default=K0});var SC=y(function(Og){Object.defineProperty(Og,"__esModule",{value:!0});var Sn=v(),L0=N(),M0=os(),$0={message:"must be equal to one of the allowed values",params:({schemaCode:e})=>Sn._`{allowedValues: ${e}}`},q0={keyword:"enum",schemaType:"array",$data:!0,error:$0,code(e){let{gen:t,data:i,$data:n,schema:o,schemaCode:s,it:r}=e;if(!n&&o.length===0)throw Error("enum must have non-empty array");let g=o.length>=r.opts.loopEnum,a,l=()=>a!==null&&a!==void 0?a:a=(0,L0.useFunc)(t,M0.default),I;if(g||n)I=t.let("valid"),e.block$data(I,d);else{if(!Array.isArray(o))throw Error("ajv implementation error");let c=t.const("vSchema",s);I=(0,Sn.or)(...o.map((C,A)=>u(c,A)))}e.pass(I);function d(){t.assign(I,!1),t.forOf("v",s,(c)=>t.if(Sn._`${l()}(${i}, ${c})`,()=>t.assign(I,!0).break()))}function u(c,C){let A=o[C];return typeof A==="object"&&A!==null?Sn._`${l()}(${i}, ${c}[${C}])`:Sn._`${i} === ${A}`}}};Og.default=q0});var zg=y(function(Tg){Object.defineProperty(Tg,"__esModule",{value:!0});var ew=BC(),tw=RC(),iw=FC(),nw=HC(),ow=vC(),sw=kC(),rw=PC(),gw=NC(),aw=XC(),lw=SC(),Iw=[ew.default,tw.default,iw.default,nw.default,ow.default,sw.default,rw.default,gw.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},aw.default,lw.default];Tg.default=Iw});var Dg=y(function(xn){Object.defineProperty(xn,"__esModule",{value:!0});xn.validateAdditionalItems=void 0;var _t=v(),jg=N(),dw={message:({params:{len:e}})=>_t.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>_t._`{limit: ${e}}`},cw={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:dw,code(e){let{parentSchema:t,it:i}=e,{items:n}=t;if(!Array.isArray(n)){(0,jg.checkStrictMode)(i,'"additionalItems" is ignored when "items" is not an array of schemas');return}xC(e,n)}};function xC(e,t){let{gen:i,schema:n,data:o,keyword:s,it:r}=e;r.items=!0;let g=i.const("len",_t._`${o}.length`);if(n===!1)e.setParams({len:t.length}),e.pass(_t._`${g} <= ${t.length}`);else if(typeof n=="object"&&!(0,jg.alwaysValidSchema)(r,n)){let l=i.var("valid",_t._`${g} <= ${t.length}`);i.if((0,_t.not)(l),()=>a(l)),e.ok(l)}function a(l){i.forRange("i",t.length,g,(I)=>{if(e.subschema({keyword:s,dataProp:I,dataPropType:jg.Type.Num},l),!r.allErrors)i.if((0,_t.not)(l),()=>i.break())})}}xn.validateAdditionalItems=xC;xn.default=cw});var Qg=y(function(Jn){Object.defineProperty(Jn,"__esModule",{value:!0});Jn.validateTuple=void 0;var JC=v(),ss=N(),Cw=ke(),uw={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){let{schema:t,it:i}=e;if(Array.isArray(t))return EC(e,"additionalItems",t);if(i.items=!0,(0,ss.alwaysValidSchema)(i,t))return;e.ok((0,Cw.validateArray)(e))}};function EC(e,t,i=e.schema){let{gen:n,parentSchema:o,data:s,keyword:r,it:g}=e;if(I(o),g.opts.unevaluated&&i.length&&g.items!==!0)g.items=ss.mergeEvaluated.items(n,i.length,g.items);let a=n.name("valid"),l=n.const("len",JC._`${s}.length`);i.forEach((d,u)=>{if((0,ss.alwaysValidSchema)(g,d))return;n.if(JC._`${l} > ${u}`,()=>e.subschema({keyword:r,schemaProp:u,dataProp:u},a)),e.ok(a)});function I(d){let{opts:u,errSchemaPath:c}=g,C=i.length,A=C===d.minItems&&(C===d.maxItems||d[t]===!1);if(u.strictTuples&&!A){let m=`"${r}" is ${C}-tuple, but minItems or maxItems/${t} are not specified or different at path "${c}"`;(0,ss.checkStrictMode)(g,m,u.strictTuples)}}}Jn.validateTuple=EC;Jn.default=uw});var UC=y(function(_g){Object.defineProperty(_g,"__esModule",{value:!0});var mw=Qg(),pw={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(e)=>(0,mw.validateTuple)(e,"items")};_g.default=pw});var TC=y(function(Kg){Object.defineProperty(Kg,"__esModule",{value:!0});var OC=v(),Aw=N(),Zw=ke(),bw=Dg(),Ww={message:({params:{len:e}})=>OC.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>OC._`{limit: ${e}}`},hw={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:Ww,code(e){let{schema:t,parentSchema:i,it:n}=e,{prefixItems:o}=i;if(n.items=!0,(0,Aw.alwaysValidSchema)(n,t))return;if(o)(0,bw.validateAdditionalItems)(e,o);else e.ok((0,Zw.validateArray)(e))}};Kg.default=hw});var zC=y(function(Lg){Object.defineProperty(Lg,"__esModule",{value:!0});var Ye=v(),rs=N(),fw={message:({params:{min:e,max:t}})=>t===void 0?Ye.str`must contain at least ${e} valid item(s)`:Ye.str`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>t===void 0?Ye._`{minContains: ${e}}`:Ye._`{minContains: ${e}, maxContains: ${t}}`},yw={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:fw,code(e){let{gen:t,schema:i,parentSchema:n,data:o,it:s}=e,r,g,{minContains:a,maxContains:l}=n;if(s.opts.next)r=a===void 0?1:a,g=l;else r=1;let I=t.const("len",Ye._`${o}.length`);if(e.setParams({min:r,max:g}),g===void 0&&r===0){(0,rs.checkStrictMode)(s,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(g!==void 0&&r>g){(0,rs.checkStrictMode)(s,'"minContains" > "maxContains" is always invalid'),e.fail();return}if((0,rs.alwaysValidSchema)(s,i)){let A=Ye._`${I} >= ${r}`;if(g!==void 0)A=Ye._`${A} && ${I} <= ${g}`;e.pass(A);return}s.items=!0;let d=t.name("valid");if(g===void 0&&r===1)c(d,()=>t.if(d,()=>t.break()));else if(r===0){if(t.let(d,!0),g!==void 0)t.if(Ye._`${o}.length > 0`,u)}else t.let(d,!1),u();e.result(d,()=>e.reset());function u(){let A=t.name("_valid"),m=t.let("count",0);c(A,()=>t.if(A,()=>C(m)))}function c(A,m){t.forRange("i",0,I,(p)=>{e.subschema({keyword:"contains",dataProp:p,dataPropType:rs.Type.Num,compositeRule:!0},A),m()})}function C(A){if(t.code(Ye._`${A}++`),g===void 0)t.if(Ye._`${A} >= ${r}`,()=>t.assign(d,!0).break());else if(t.if(Ye._`${A} > ${g}`,()=>t.assign(d,!1).break()),r===1)t.assign(d,!0);else t.if(Ye._`${A} >= ${r}`,()=>t.assign(d,!0))}}};Lg.default=yw});var gs=y(function(tt){Object.defineProperty(tt,"__esModule",{value:!0});tt.validateSchemaDeps=tt.validatePropertyDeps=tt.error=void 0;var Mg=v(),Vw=N(),En=ke();tt.error={message:({params:{property:e,depsCount:t,deps:i}})=>{let n=t===1?"property":"properties";return Mg.str`must have ${n} ${i} when property ${e} is present`},params:({params:{property:e,depsCount:t,deps:i,missingProperty:n}})=>Mg._`{property: ${e},
7
+ || ${r} === "boolean" || ${o} === null`).assign(g,k._`[${o}]`)}}}function rR({gen:e,parentData:t,parentDataProperty:i},n){e.if(k._`${t} !== undefined`,()=>e.assign(k._`${t}[${i}]`,n))}function ig(e,t,i,n=Bi.Correct){let o=n===Bi.Correct?k.operators.EQ:k.operators.NEQ,s;switch(e){case"null":return k._`${t} ${o} null`;case"array":s=k._`Array.isArray(${t})`;break;case"object":s=k._`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":s=r(k._`!(${t} % 1) && !isNaN(${t})`);break;case"number":s=r();break;default:return k._`typeof ${t} ${o} ${e}`}return n===Bi.Correct?s:(0,k.not)(s);function r(g=k.nil){return(0,k.and)(k._`typeof ${t} == "number"`,g,i?k._`isFinite(${t})`:k.nil)}}Ie.checkDataType=ig;function ng(e,t,i,n){if(e.length===1)return ig(e[0],t,i,n);let o,s=(0,bc.toHash)(e);if(s.array&&s.object){let r=k._`typeof ${t} != "object"`;o=s.null?r:k._`!${t} || ${r}`,delete s.null,delete s.array,delete s.object}else o=k.nil;if(s.number)delete s.integer;for(let r in s)o=(0,k.and)(o,ig(r,t,i,n));return o}Ie.checkDataTypes=ng;var gR={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e=="string"?k._`{type: ${e}}`:k._`{type: ${t}}`};function og(e){let t=aR(e);(0,tR.reportError)(t,gR)}Ie.reportTypeError=og;function aR(e){let{gen:t,data:i,schema:n}=e,o=(0,bc.schemaRefOrVal)(e,n,"type");return{gen:t,keyword:"type",data:i,schema:n.type,schemaCode:o,schemaValue:o,parentSchema:n,params:{},it:e}}});var yc=y(function(jo){Object.defineProperty(jo,"__esModule",{value:!0});jo.assignDefaults=void 0;var Ri=v(),lR=N();function IR(e,t){let{properties:i,items:n}=e.schema;if(t==="object"&&i)for(let o in i)fc(e,o,i[o].default);else if(t==="array"&&Array.isArray(n))n.forEach((o,s)=>fc(e,s,o.default))}jo.assignDefaults=IR;function fc(e,t,i){let{gen:n,compositeRule:o,data:s,opts:r}=e;if(i===void 0)return;let g=Ri._`${s}${(0,Ri.getProperty)(t)}`;if(o){(0,lR.checkStrictMode)(e,`default is ignored for: ${g}`);return}let a=Ri._`${g} === undefined`;if(r.useDefaults==="empty")a=Ri._`${a} || ${g} === null || ${g} === ""`;n.if(a,Ri._`${g} = ${(0,Ri.stringify)(i)}`)}});var Pe=y(function(O){Object.defineProperty(O,"__esModule",{value:!0});O.validateUnion=O.validateArray=O.usePattern=O.callValidateCode=O.schemaProperties=O.allSchemaProperties=O.noPropertyInData=O.propertyInData=O.isOwnProperty=O.hasPropFunc=O.reportMissingProp=O.checkMissingProp=O.checkReportMissingProp=void 0;var j=v(),sg=N(),Ft=ke(),dR=N();function cR(e,t){let{gen:i,data:n,it:o}=e;i.if(gg(i,n,t,o.opts.ownProperties),()=>{e.setParams({missingProperty:j._`${t}`},!0),e.error()})}O.checkReportMissingProp=cR;function CR({gen:e,data:t,it:{opts:i}},n,o){return(0,j.or)(...n.map((s)=>(0,j.and)(gg(e,t,s,i.ownProperties),j._`${o} = ${s}`)))}O.checkMissingProp=CR;function uR(e,t){e.setParams({missingProperty:t},!0),e.error()}O.reportMissingProp=uR;function Vc(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:j._`Object.prototype.hasOwnProperty`})}O.hasPropFunc=Vc;function rg(e,t,i){return j._`${Vc(e)}.call(${t}, ${i})`}O.isOwnProperty=rg;function mR(e,t,i,n){let o=j._`${t}${(0,j.getProperty)(i)} !== undefined`;return n?j._`${o} && ${rg(e,t,i)}`:o}O.propertyInData=mR;function gg(e,t,i,n){let o=j._`${t}${(0,j.getProperty)(i)} === undefined`;return n?(0,j.or)(o,(0,j.not)(rg(e,t,i))):o}O.noPropertyInData=gg;function Bc(e){return e?Object.keys(e).filter((t)=>t!=="__proto__"):[]}O.allSchemaProperties=Bc;function pR(e,t){return Bc(t).filter((i)=>!(0,sg.alwaysValidSchema)(e,t[i]))}O.schemaProperties=pR;function AR({schemaCode:e,data:t,it:{gen:i,topSchemaRef:n,schemaPath:o,errorPath:s},it:r},g,a,l){let I=l?j._`${e}, ${t}, ${n}${o}`:t,d=[[Ft.default.instancePath,(0,j.strConcat)(Ft.default.instancePath,s)],[Ft.default.parentData,r.parentData],[Ft.default.parentDataProperty,r.parentDataProperty],[Ft.default.rootData,Ft.default.rootData]];if(r.opts.dynamicRef)d.push([Ft.default.dynamicAnchors,Ft.default.dynamicAnchors]);let u=j._`${I}, ${i.object(...d)}`;return a!==j.nil?j._`${g}.call(${a}, ${u})`:j._`${g}(${u})`}O.callValidateCode=AR;var ZR=j._`new RegExp`;function bR({gen:e,it:{opts:t}},i){let n=t.unicodeRegExp?"u":"",{regExp:o}=t.code,s=o(i,n);return e.scopeValue("pattern",{key:s.toString(),ref:s,code:j._`${o.code==="new RegExp"?ZR:(0,dR.useFunc)(e,o)}(${i}, ${n})`})}O.usePattern=bR;function WR(e){let{gen:t,data:i,keyword:n,it:o}=e,s=t.name("valid");if(o.allErrors){let g=t.let("valid",!0);return r(()=>t.assign(g,!1)),g}return t.var(s,!0),r(()=>t.break()),s;function r(g){let a=t.const("len",j._`${i}.length`);t.forRange("i",0,a,(l)=>{e.subschema({keyword:n,dataProp:l,dataPropType:sg.Type.Num},s),t.if((0,j.not)(s),g)})}}O.validateArray=WR;function hR(e){let{gen:t,schema:i,keyword:n,it:o}=e;if(!Array.isArray(i))throw Error("ajv implementation error");if(i.some((a)=>(0,sg.alwaysValidSchema)(o,a))&&!o.opts.unevaluated)return;let r=t.let("valid",!1),g=t.name("_valid");t.block(()=>i.forEach((a,l)=>{let I=e.subschema({keyword:n,schemaProp:l,compositeRule:!0},g);if(t.assign(r,j._`${r} || ${g}`),!e.mergeValidEvaluated(I,g))t.if((0,j.not)(r))})),e.result(r,()=>e.reset(),()=>e.error(!0))}O.validateUnion=hR});var wc=y(function($e){Object.defineProperty($e,"__esModule",{value:!0});$e.validateKeywordUsage=$e.validSchemaType=$e.funcKeywordCode=$e.macroKeywordCode=void 0;var ue=v(),zt=ke(),fR=Pe(),yR=fn();function VR(e,t){let{gen:i,keyword:n,schema:o,parentSchema:s,it:r}=e,g=t.macro.call(r.self,o,s,r),a=Gc(i,n,g);if(r.opts.validateSchema!==!1)r.self.validateSchema(g,!0);let l=i.name("valid");e.subschema({schema:g,schemaPath:ue.nil,errSchemaPath:`${r.errSchemaPath}/${n}`,topSchemaRef:a,compositeRule:!0},l),e.pass(l,()=>e.error(!0))}$e.macroKeywordCode=VR;function BR(e,t){var i;let{gen:n,keyword:o,schema:s,parentSchema:r,$data:g,it:a}=e;GR(a,t);let l=!g&&t.compile?t.compile.call(a.self,s,r,a):t.validate,I=Gc(n,o,l),d=n.let("valid");e.block$data(d,u),e.ok((i=t.valid)!==null&&i!==void 0?i:d);function u(){if(t.errors===!1){if(A(),t.modifying)Rc(e);m(()=>e.error())}else{let p=t.async?c():C();if(t.modifying)Rc(e);m(()=>RR(e,p))}}function c(){let p=n.let("ruleErrs",null);return n.try(()=>A(ue._`await `),(Z)=>n.assign(d,!1).if(ue._`${Z} instanceof ${a.ValidationError}`,()=>n.assign(p,ue._`${Z}.errors`),()=>n.throw(Z))),p}function C(){let p=ue._`${I}.errors`;return n.assign(p,null),A(ue.nil),p}function A(p=t.async?ue._`await `:ue.nil){let Z=a.opts.passContext?zt.default.this:zt.default.self,W=!(("compile"in t)&&!g||t.schema===!1);n.assign(d,ue._`${p}${(0,fR.callValidateCode)(e,I,Z,W)}`,t.modifying)}function m(p){var Z;n.if((0,ue.not)((Z=t.valid)!==null&&Z!==void 0?Z:d),p)}}$e.funcKeywordCode=BR;function Rc(e){let{gen:t,data:i,it:n}=e;t.if(n.parentData,()=>t.assign(i,ue._`${n.parentData}[${n.parentDataProperty}]`))}function RR(e,t){let{gen:i}=e;i.if(ue._`Array.isArray(${t})`,()=>{i.assign(zt.default.vErrors,ue._`${zt.default.vErrors} === null ? ${t} : ${zt.default.vErrors}.concat(${t})`).assign(zt.default.errors,ue._`${zt.default.vErrors}.length`),(0,yR.extendErrors)(e)},()=>e.error())}function GR({schemaEnv:e},t){if(t.async&&!e.$async)throw Error("async keyword in sync schema")}function Gc(e,t,i){if(i===void 0)throw Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword",typeof i=="function"?{ref:i}:{ref:i,code:(0,ue.stringify)(i)})}function wR(e,t,i=!1){return!t.length||t.some((n)=>n==="array"?Array.isArray(e):n==="object"?e&&typeof e=="object"&&!Array.isArray(e):typeof e==n||i&&typeof e>"u")}$e.validSchemaType=wR;function FR({schema:e,opts:t,self:i,errSchemaPath:n},o,s){if(Array.isArray(o.keyword)?!o.keyword.includes(s):o.keyword!==s)throw Error("ajv implementation error");let r=o.dependencies;if(r===null||r===void 0?void 0:r.some((g)=>!Object.prototype.hasOwnProperty.call(e,g)))throw Error(`parent schema must have dependencies of ${s}: ${r.join(",")}`);if(o.validateSchema){if(!o.validateSchema(e[s])){let a=`keyword "${s}" value is invalid at path "${n}": `+i.errorsText(o.validateSchema.errors);if(t.validateSchema==="log")i.logger.error(a);else throw Error(a)}}}$e.validateKeywordUsage=FR});var Hc=y(function(Ht){Object.defineProperty(Ht,"__esModule",{value:!0});Ht.extendSubschemaMode=Ht.extendSubschemaData=Ht.getSubschema=void 0;var qe=v(),Fc=N();function HR(e,{keyword:t,schemaProp:i,schema:n,schemaPath:o,errSchemaPath:s,topSchemaRef:r}){if(t!==void 0&&n!==void 0)throw Error('both "keyword" and "schema" passed, only one allowed');if(t!==void 0){let g=e.schema[t];return i===void 0?{schema:g,schemaPath:qe._`${e.schemaPath}${(0,qe.getProperty)(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:g[i],schemaPath:qe._`${e.schemaPath}${(0,qe.getProperty)(t)}${(0,qe.getProperty)(i)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${(0,Fc.escapeFragment)(i)}`}}if(n!==void 0){if(o===void 0||s===void 0||r===void 0)throw Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:n,schemaPath:o,topSchemaRef:r,errSchemaPath:s}}throw Error('either "keyword" or "schema" must be passed')}Ht.getSubschema=HR;function vR(e,t,{dataProp:i,dataPropType:n,data:o,dataTypes:s,propertyName:r}){if(o!==void 0&&i!==void 0)throw Error('both "data" and "dataProp" passed, only one allowed');let{gen:g}=t;if(i!==void 0){let{errorPath:l,dataPathArr:I,opts:d}=t,u=g.let("data",qe._`${t.data}${(0,qe.getProperty)(i)}`,!0);a(u),e.errorPath=qe.str`${l}${(0,Fc.getErrorPath)(i,n,d.jsPropertySyntax)}`,e.parentDataProperty=qe._`${i}`,e.dataPathArr=[...I,e.parentDataProperty]}if(o!==void 0){let l=o instanceof qe.Name?o:g.let("data",o,!0);if(a(l),r!==void 0)e.propertyName=r}if(s)e.dataTypes=s;function a(l){e.data=l,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,l]}}Ht.extendSubschemaData=vR;function kR(e,{jtdDiscriminator:t,jtdMetadata:i,compositeRule:n,createErrors:o,allErrors:s}){if(n!==void 0)e.compositeRule=n;if(o!==void 0)e.createErrors=o;if(s!==void 0)e.allErrors=s;e.jtdDiscriminator=t,e.jtdMetadata=i}Ht.extendSubschemaMode=kR});var ag=y(function(PX,vc){vc.exports=function e(t,i){if(t===i)return!0;if(t&&i&&typeof t=="object"&&typeof i=="object"){if(t.constructor!==i.constructor)return!1;var n,o,s;if(Array.isArray(t)){if(n=t.length,n!=i.length)return!1;for(o=n;o--!==0;)if(!e(t[o],i[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===i.source&&t.flags===i.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===i.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===i.toString();if(s=Object.keys(t),n=s.length,n!==Object.keys(i).length)return!1;for(o=n;o--!==0;)if(!Object.prototype.hasOwnProperty.call(i,s[o]))return!1;for(o=n;o--!==0;){var r=s[o];if(!e(t[r],i[r]))return!1}return!0}return t!==t&&i!==i}});var Pc=y(function(YX,kc){var vt=kc.exports=function(e,t,i){if(typeof t=="function")i=t,t={};i=t.cb||i;var n=typeof i=="function"?i:i.pre||function(){},o=i.post||function(){};Do(t,n,o,e,"",e)};vt.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};vt.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};vt.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};vt.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function Do(e,t,i,n,o,s,r,g,a,l){if(n&&typeof n=="object"&&!Array.isArray(n)){t(n,o,s,r,g,a,l);for(var I in n){var d=n[I];if(Array.isArray(d)){if(I in vt.arrayKeywords)for(var u=0;u<d.length;u++)Do(e,t,i,d[u],o+"/"+I+"/"+u,s,o,I,n,u)}else if(I in vt.propsKeywords){if(d&&typeof d=="object")for(var c in d)Do(e,t,i,d[c],o+"/"+I+"/"+PR(c),s,o,I,n,c)}else if(I in vt.keywords||e.allKeys&&!(I in vt.skipKeywords))Do(e,t,i,d,o+"/"+I,s,o,I,n)}i(n,o,s,r,g,a,l)}}function PR(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}});var Vn=y(function(fe){Object.defineProperty(fe,"__esModule",{value:!0});fe.getSchemaRefs=fe.resolveUrl=fe.normalizeId=fe._getFullPath=fe.getFullPath=fe.inlineRef=void 0;var YR=N(),NR=ag(),XR=Pc(),SR=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function xR(e,t=!0){if(typeof e=="boolean")return!0;if(t===!0)return!lg(e);if(!t)return!1;return Yc(e)<=t}fe.inlineRef=xR;var JR=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function lg(e){for(let t in e){if(JR.has(t))return!0;let i=e[t];if(Array.isArray(i)&&i.some(lg))return!0;if(typeof i=="object"&&lg(i))return!0}return!1}function Yc(e){let t=0;for(let i in e){if(i==="$ref")return 1/0;if(t++,SR.has(i))continue;if(typeof e[i]=="object")(0,YR.eachItem)(e[i],(n)=>t+=Yc(n));if(t===1/0)return 1/0}return t}function Nc(e,t="",i){if(i!==!1)t=Gi(t);let n=e.parse(t);return Xc(e,n)}fe.getFullPath=Nc;function Xc(e,t){return e.serialize(t).split("#")[0]+"#"}fe._getFullPath=Xc;var ER=/#\/?$/;function Gi(e){return e?e.replace(ER,""):""}fe.normalizeId=Gi;function UR(e,t,i){return i=Gi(i),e.resolve(t,i)}fe.resolveUrl=UR;var OR=/^[a-z_][-a-z0-9._]*$/i;function TR(e,t){if(typeof e=="boolean")return{};let{schemaId:i,uriResolver:n}=this.opts,o=Gi(e[i]||t),s={"":o},r=Nc(n,o,!1),g={},a=new Set;return XR(e,{allKeys:!0},(d,u,c,C)=>{if(C===void 0)return;let A=r+u,m=s[C];if(typeof d[i]=="string")m=p.call(this,d[i]);Z.call(this,d.$anchor),Z.call(this,d.$dynamicAnchor),s[u]=m;function p(W){let h=this.opts.uriResolver.resolve;if(W=Gi(m?h(m,W):W),a.has(W))throw I(W);a.add(W);let f=this.refs[W];if(typeof f=="string")f=this.refs[f];if(typeof f=="object")l(d,f.schema,W);else if(W!==Gi(A))if(W[0]==="#")l(d,g[W],W),g[W]=d;else this.refs[W]=A;return W}function Z(W){if(typeof W=="string"){if(!OR.test(W))throw Error(`invalid anchor "${W}"`);p.call(this,`#${W}`)}}}),g;function l(d,u,c){if(u!==void 0&&!NR(d,u))throw I(c)}function I(d){return Error(`reference "${d}" resolves to more than one schema`)}}fe.getSchemaRefs=TR});var wi=y(function(kt){Object.defineProperty(kt,"__esModule",{value:!0});kt.getData=kt.KeywordCxt=kt.validateFunctionCode=void 0;var Uc=pc(),Sc=yn(),dg=tg(),Qo=yn(),zR=yc(),Rn=wc(),Ig=Hc(),G=v(),H=ke(),jR=Vn(),pt=N(),Bn=fn();function DR(e){if(zc(e)){if(jc(e),Tc(e)){KR(e);return}}Oc(e,()=>(0,Uc.topBoolOrEmptySchema)(e))}kt.validateFunctionCode=DR;function Oc({gen:e,validateName:t,schema:i,schemaEnv:n,opts:o},s){if(o.code.es5)e.func(t,G._`${H.default.data}, ${H.default.valCxt}`,n.$async,()=>{e.code(G._`"use strict"; ${xc(i,o)}`),_R(e,o),e.code(s)});else e.func(t,G._`${H.default.data}, ${QR(o)}`,n.$async,()=>e.code(xc(i,o)).code(s))}function QR(e){return G._`{${H.default.instancePath}="", ${H.default.parentData}, ${H.default.parentDataProperty}, ${H.default.rootData}=${H.default.data}${e.dynamicRef?G._`, ${H.default.dynamicAnchors}={}`:G.nil}}={}`}function _R(e,t){e.if(H.default.valCxt,()=>{if(e.var(H.default.instancePath,G._`${H.default.valCxt}.${H.default.instancePath}`),e.var(H.default.parentData,G._`${H.default.valCxt}.${H.default.parentData}`),e.var(H.default.parentDataProperty,G._`${H.default.valCxt}.${H.default.parentDataProperty}`),e.var(H.default.rootData,G._`${H.default.valCxt}.${H.default.rootData}`),t.dynamicRef)e.var(H.default.dynamicAnchors,G._`${H.default.valCxt}.${H.default.dynamicAnchors}`)},()=>{if(e.var(H.default.instancePath,G._`""`),e.var(H.default.parentData,G._`undefined`),e.var(H.default.parentDataProperty,G._`undefined`),e.var(H.default.rootData,H.default.data),t.dynamicRef)e.var(H.default.dynamicAnchors,G._`{}`)})}function KR(e){let{schema:t,opts:i,gen:n}=e;Oc(e,()=>{if(i.$comment&&t.$comment)Qc(e);if(eG(e),n.let(H.default.vErrors,null),n.let(H.default.errors,0),i.unevaluated)LR(e);Dc(e),nG(e)});return}function LR(e){let{gen:t,validateName:i}=e;e.evaluated=t.const("evaluated",G._`${i}.evaluated`),t.if(G._`${e.evaluated}.dynamicProps`,()=>t.assign(G._`${e.evaluated}.props`,G._`undefined`)),t.if(G._`${e.evaluated}.dynamicItems`,()=>t.assign(G._`${e.evaluated}.items`,G._`undefined`))}function xc(e,t){let i=typeof e=="object"&&e[t.schemaId];return i&&(t.code.source||t.code.process)?G._`/*# sourceURL=${i} */`:G.nil}function MR(e,t){if(zc(e)){if(jc(e),Tc(e)){$R(e,t);return}}(0,Uc.boolOrEmptySchema)(e,t)}function Tc({schema:e,self:t}){if(typeof e=="boolean")return!e;for(let i in e)if(t.RULES.all[i])return!0;return!1}function zc(e){return typeof e.schema!="boolean"}function $R(e,t){let{schema:i,gen:n,opts:o}=e;if(o.$comment&&i.$comment)Qc(e);tG(e),iG(e);let s=n.const("_errs",H.default.errors);Dc(e,s),n.var(t,G._`${s} === ${H.default.errors}`)}function jc(e){(0,pt.checkUnknownRules)(e),qR(e)}function Dc(e,t){if(e.opts.jtd)return Jc(e,[],!1,t);let i=(0,Sc.getSchemaTypes)(e.schema),n=(0,Sc.coerceAndCheckDataType)(e,i);Jc(e,i,!n,t)}function qR(e){let{schema:t,errSchemaPath:i,opts:n,self:o}=e;if(t.$ref&&n.ignoreKeywordsWithRef&&(0,pt.schemaHasRulesButRef)(t,o.RULES))o.logger.warn(`$ref: keywords ignored in schema at path "${i}"`)}function eG(e){let{schema:t,opts:i}=e;if(t.default!==void 0&&i.useDefaults&&i.strictSchema)(0,pt.checkStrictMode)(e,"default is ignored in the schema root")}function tG(e){let t=e.schema[e.opts.schemaId];if(t)e.baseId=(0,jR.resolveUrl)(e.opts.uriResolver,e.baseId,t)}function iG(e){if(e.schema.$async&&!e.schemaEnv.$async)throw Error("async schema in sync schema")}function Qc({gen:e,schemaEnv:t,schema:i,errSchemaPath:n,opts:o}){let s=i.$comment;if(o.$comment===!0)e.code(G._`${H.default.self}.logger.log(${s})`);else if(typeof o.$comment=="function"){let r=G.str`${n}/$comment`,g=e.scopeValue("root",{ref:t.root});e.code(G._`${H.default.self}.opts.$comment(${s}, ${r}, ${g}.schema)`)}}function nG(e){let{gen:t,schemaEnv:i,validateName:n,ValidationError:o,opts:s}=e;if(i.$async)t.if(G._`${H.default.errors} === 0`,()=>t.return(H.default.data),()=>t.throw(G._`new ${o}(${H.default.vErrors})`));else{if(t.assign(G._`${n}.errors`,H.default.vErrors),s.unevaluated)oG(e);t.return(G._`${H.default.errors} === 0`)}}function oG({gen:e,evaluated:t,props:i,items:n}){if(i instanceof G.Name)e.assign(G._`${t}.props`,i);if(n instanceof G.Name)e.assign(G._`${t}.items`,n)}function Jc(e,t,i,n){let{gen:o,schema:s,data:r,allErrors:g,opts:a,self:l}=e,{RULES:I}=l;if(s.$ref&&(a.ignoreKeywordsWithRef||!(0,pt.schemaHasRulesButRef)(s,I))){o.block(()=>Kc(e,"$ref",I.all.$ref.definition));return}if(!a.jtd)sG(e,t);o.block(()=>{for(let u of I.rules)d(u);d(I.post)});function d(u){if(!(0,dg.shouldUseGroup)(s,u))return;if(u.type){if(o.if((0,Qo.checkDataType)(u.type,r,a.strictNumbers)),Ec(e,u),t.length===1&&t[0]===u.type&&i)o.else(),(0,Qo.reportTypeError)(e);o.endIf()}else Ec(e,u);if(!g)o.if(G._`${H.default.errors} === ${n||0}`)}}function Ec(e,t){let{gen:i,schema:n,opts:{useDefaults:o}}=e;if(o)(0,zR.assignDefaults)(e,t.type);i.block(()=>{for(let s of t.rules)if((0,dg.shouldUseRule)(n,s))Kc(e,s.keyword,s.definition,t.type)})}function sG(e,t){if(e.schemaEnv.meta||!e.opts.strictTypes)return;if(rG(e,t),!e.opts.allowUnionTypes)gG(e,t);aG(e,e.dataTypes)}function rG(e,t){if(!t.length)return;if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach((i)=>{if(!_c(e.dataTypes,i))cg(e,`type "${i}" not allowed by context "${e.dataTypes.join(",")}"`)}),IG(e,t)}function gG(e,t){if(t.length>1&&!(t.length===2&&t.includes("null")))cg(e,"use allowUnionTypes to allow union type keyword")}function aG(e,t){let i=e.self.RULES.all;for(let n in i){let o=i[n];if(typeof o=="object"&&(0,dg.shouldUseRule)(e.schema,o)){let{type:s}=o.definition;if(s.length&&!s.some((r)=>lG(t,r)))cg(e,`missing type "${s.join(",")}" for keyword "${n}"`)}}}function lG(e,t){return e.includes(t)||t==="number"&&e.includes("integer")}function _c(e,t){return e.includes(t)||t==="integer"&&e.includes("number")}function IG(e,t){let i=[];for(let n of e.dataTypes)if(_c(t,n))i.push(n);else if(t.includes("integer")&&n==="number")i.push("integer");e.dataTypes=i}function cg(e,t){let i=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${i}" (strictTypes)`,(0,pt.checkStrictMode)(e,t,e.opts.strictTypes)}class Cg{constructor(e,t,i){if((0,Rn.validateKeywordUsage)(e,t,i),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=i,this.data=e.data,this.schema=e.schema[i],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,pt.schemaRefOrVal)(e,this.schema,i,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",Lc(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,Rn.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw Error(`${i} value must be ${JSON.stringify(t.schemaType)}`);if("code"in t?t.trackErrors:t.errors!==!1)this.errsCount=e.gen.const("_errs",H.default.errors)}result(e,t,i){this.failResult((0,G.not)(e),t,i)}failResult(e,t,i){if(this.gen.if(e),i)i();else this.error();if(t){if(this.gen.else(),t(),this.allErrors)this.gen.endIf()}else if(this.allErrors)this.gen.endIf();else this.gen.else()}pass(e,t){this.failResult((0,G.not)(e),void 0,t)}fail(e){if(e===void 0){if(this.error(),!this.allErrors)this.gen.if(!1);return}if(this.gen.if(e),this.error(),this.allErrors)this.gen.endIf();else this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:t}=this;this.fail(G._`${t} !== undefined && (${(0,G.or)(this.invalid$data(),e)})`)}error(e,t,i){if(t){this.setParams(t),this._error(e,i),this.setParams({});return}this._error(e,i)}_error(e,t){(e?Bn.reportExtraError:Bn.reportError)(this,this.def.error,t)}$dataError(){(0,Bn.reportError)(this,this.def.$dataError||Bn.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error('add "trackErrors" to keyword definition');(0,Bn.resetErrorsCount)(this.gen,this.errsCount)}ok(e){if(!this.allErrors)this.gen.if(e)}setParams(e,t){if(t)Object.assign(this.params,e);else this.params=e}block$data(e,t,i=G.nil){this.gen.block(()=>{this.check$data(e,i),t()})}check$data(e=G.nil,t=G.nil){if(!this.$data)return;let{gen:i,schemaCode:n,schemaType:o,def:s}=this;if(i.if((0,G.or)(G._`${n} === undefined`,t)),e!==G.nil)i.assign(e,!0);if(o.length||s.validateSchema){if(i.elseIf(this.invalid$data()),this.$dataError(),e!==G.nil)i.assign(e,!1)}i.else()}invalid$data(){let{gen:e,schemaCode:t,schemaType:i,def:n,it:o}=this;return(0,G.or)(s(),r());function s(){if(i.length){if(!(t instanceof G.Name))throw Error("ajv implementation error");let g=Array.isArray(i)?i:[i];return G._`${(0,Qo.checkDataTypes)(g,t,o.opts.strictNumbers,Qo.DataType.Wrong)}`}return G.nil}function r(){if(n.validateSchema){let g=e.scopeValue("validate$data",{ref:n.validateSchema});return G._`!${g}(${t})`}return G.nil}}subschema(e,t){let i=(0,Ig.getSubschema)(this.it,e);(0,Ig.extendSubschemaData)(i,this.it,e),(0,Ig.extendSubschemaMode)(i,e);let n={...this.it,...i,items:void 0,props:void 0};return MR(n,t),n}mergeEvaluated(e,t){let{it:i,gen:n}=this;if(!i.opts.unevaluated)return;if(i.props!==!0&&e.props!==void 0)i.props=pt.mergeEvaluated.props(n,e.props,i.props,t);if(i.items!==!0&&e.items!==void 0)i.items=pt.mergeEvaluated.items(n,e.items,i.items,t)}mergeValidEvaluated(e,t){let{it:i,gen:n}=this;if(i.opts.unevaluated&&(i.props!==!0||i.items!==!0))return n.if(t,()=>this.mergeEvaluated(e,G.Name)),!0}}kt.KeywordCxt=Cg;function Kc(e,t,i,n){let o=new Cg(e,i,t);if("code"in i)i.code(o,n);else if(o.$data&&i.validate)(0,Rn.funcKeywordCode)(o,i);else if("macro"in i)(0,Rn.macroKeywordCode)(o,i);else if(i.compile||i.validate)(0,Rn.funcKeywordCode)(o,i)}var dG=/^\/(?:[^~]|~0|~1)*$/,cG=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Lc(e,{dataLevel:t,dataNames:i,dataPathArr:n}){let o,s;if(e==="")return H.default.rootData;if(e[0]==="/"){if(!dG.test(e))throw Error(`Invalid JSON-pointer: ${e}`);o=e,s=H.default.rootData}else{let l=cG.exec(e);if(!l)throw Error(`Invalid JSON-pointer: ${e}`);let I=+l[1];if(o=l[2],o==="#"){if(I>=t)throw Error(a("property/index",I));return n[t-I]}if(I>t)throw Error(a("data",I));if(s=i[t-I],!o)return s}let r=s,g=o.split("/");for(let l of g)if(l)s=G._`${s}${(0,G.getProperty)((0,pt.unescapeJsonPointer)(l))}`,r=G._`${r} && ${s}`;return r;function a(l,I){return`Cannot access ${l} ${I} levels up, current level is ${t}`}}kt.getData=Lc});var Gn=y(function(ug){Object.defineProperty(ug,"__esModule",{value:!0});class Mc extends Error{constructor(e){super("validation failed");this.errors=e,this.ajv=this.validation=!0}}ug.default=Mc});var Fi=y(function(pg){Object.defineProperty(pg,"__esModule",{value:!0});var mg=Vn();class $c extends Error{constructor(e,t,i,n){super(n||`can't resolve reference ${i} from id ${t}`);this.missingRef=(0,mg.resolveUrl)(e,t,i),this.missingSchema=(0,mg.normalizeId)((0,mg.getFullPath)(e,this.missingRef))}}pg.default=$c});var Fn=y(function(Ye){Object.defineProperty(Ye,"__esModule",{value:!0});Ye.resolveSchema=Ye.getCompilingSchema=Ye.resolveRef=Ye.compileSchema=Ye.SchemaEnv=void 0;var ze=v(),CG=Gn(),jt=ke(),je=Vn(),qc=N(),uG=wi();class wn{constructor(e){var t;this.refs={},this.dynamicAnchors={};let i;if(typeof e.schema=="object")i=e.schema;this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(t=e.baseId)!==null&&t!==void 0?t:(0,je.normalizeId)(i===null||i===void 0?void 0:i[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=i===null||i===void 0?void 0:i.$async,this.refs={}}}Ye.SchemaEnv=wn;function Zg(e){let t=eC.call(this,e);if(t)return t;let i=(0,je.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:n,lines:o}=this.opts.code,{ownProperties:s}=this.opts,r=new ze.CodeGen(this.scope,{es5:n,lines:o,ownProperties:s}),g;if(e.$async)g=r.scopeValue("Error",{ref:CG.default,code:ze._`require("ajv/dist/runtime/validation_error").default`});let a=r.scopeName("validate");e.validateName=a;let l={gen:r,allErrors:this.opts.allErrors,data:jt.default.data,parentData:jt.default.parentData,parentDataProperty:jt.default.parentDataProperty,dataNames:[jt.default.data],dataPathArr:[ze.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:r.scopeValue("schema",this.opts.code.source===!0?{ref:e.schema,code:(0,ze.stringify)(e.schema)}:{ref:e.schema}),validateName:a,ValidationError:g,schema:e.schema,schemaEnv:e,rootId:i,baseId:e.baseId||i,schemaPath:ze.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:ze._`""`,opts:this.opts,self:this},I;try{this._compilations.add(e),(0,uG.validateFunctionCode)(l),r.optimize(this.opts.code.optimize);let d=r.toString();if(I=`${r.scopeRefs(jt.default.scope)}return ${d}`,this.opts.code.process)I=this.opts.code.process(I,e);let c=Function(`${jt.default.self}`,`${jt.default.scope}`,I)(this,this.scope.get());if(this.scope.value(a,{ref:c}),c.errors=null,c.schema=e.schema,c.schemaEnv=e,e.$async)c.$async=!0;if(this.opts.code.source===!0)c.source={validateName:a,validateCode:d,scopeValues:r._values};if(this.opts.unevaluated){let{props:C,items:A}=l;if(c.evaluated={props:C instanceof ze.Name?void 0:C,items:A instanceof ze.Name?void 0:A,dynamicProps:C instanceof ze.Name,dynamicItems:A instanceof ze.Name},c.source)c.source.evaluated=(0,ze.stringify)(c.evaluated)}return e.validate=c,e}catch(d){if(delete e.validate,delete e.validateName,I)this.logger.error("Error compiling schema, function code:",I);throw d}finally{this._compilations.delete(e)}}Ye.compileSchema=Zg;function mG(e,t,i){var n;i=(0,je.resolveUrl)(this.opts.uriResolver,t,i);let o=e.refs[i];if(o)return o;let s=ZG.call(this,e,i);if(s===void 0){let r=(n=e.localRefs)===null||n===void 0?void 0:n[i],{schemaId:g}=this.opts;if(r)s=new wn({schema:r,schemaId:g,root:e,baseId:t})}if(s===void 0)return;return e.refs[i]=pG.call(this,s)}Ye.resolveRef=mG;function pG(e){if((0,je.inlineRef)(e.schema,this.opts.inlineRefs))return e.schema;return e.validate?e:Zg.call(this,e)}function eC(e){for(let t of this._compilations)if(AG(t,e))return t}Ye.getCompilingSchema=eC;function AG(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function ZG(e,t){let i;while(typeof(i=this.refs[t])=="string")t=i;return i||this.schemas[t]||_o.call(this,e,t)}function _o(e,t){let i=this.opts.uriResolver.parse(t),n=(0,je._getFullPath)(this.opts.uriResolver,i),o=(0,je.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&n===o)return Ag.call(this,i,e);let s=(0,je.normalizeId)(n),r=this.refs[s]||this.schemas[s];if(typeof r=="string"){let g=_o.call(this,e,r);if(typeof(g===null||g===void 0?void 0:g.schema)!=="object")return;return Ag.call(this,i,g)}if(typeof(r===null||r===void 0?void 0:r.schema)!=="object")return;if(!r.validate)Zg.call(this,r);if(s===(0,je.normalizeId)(t)){let{schema:g}=r,{schemaId:a}=this.opts,l=g[a];if(l)o=(0,je.resolveUrl)(this.opts.uriResolver,o,l);return new wn({schema:g,schemaId:a,root:e,baseId:o})}return Ag.call(this,i,r)}Ye.resolveSchema=_o;var bG=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function Ag(e,{baseId:t,schema:i,root:n}){var o;if(((o=e.fragment)===null||o===void 0?void 0:o[0])!=="/")return;for(let g of e.fragment.slice(1).split("/")){if(typeof i==="boolean")return;let a=i[(0,qc.unescapeFragment)(g)];if(a===void 0)return;i=a;let l=typeof i==="object"&&i[this.opts.schemaId];if(!bG.has(g)&&l)t=(0,je.resolveUrl)(this.opts.uriResolver,t,l)}let s;if(typeof i!="boolean"&&i.$ref&&!(0,qc.schemaHasRulesButRef)(i,this.RULES)){let g=(0,je.resolveUrl)(this.opts.uriResolver,t,i.$ref);s=_o.call(this,n,g)}let{schemaId:r}=this.opts;if(s=s||new wn({schema:i,schemaId:r,root:n,baseId:t}),s.schema!==s.root.schema)return s;return}});var tC=y(function(EX,WG){WG.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var Wg=y(function(UX,sC){var hG=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),nC=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function bg(e){let t="",i=0,n=0;for(n=0;n<e.length;n++){if(i=e[n].charCodeAt(0),i===48)continue;if(!(i>=48&&i<=57||i>=65&&i<=70||i>=97&&i<=102))return"";t+=e[n];break}for(n+=1;n<e.length;n++){if(i=e[n].charCodeAt(0),!(i>=48&&i<=57||i>=65&&i<=70||i>=97&&i<=102))return"";t+=e[n]}return t}var fG=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function iC(e){return e.length=0,!0}function yG(e,t,i){if(e.length){let n=bg(e);if(n!=="")t.push(n);else return i.error=!0,!1;e.length=0}return!0}function VG(e){let t=0,i={error:!1,address:"",zone:""},n=[],o=[],s=!1,r=!1,g=yG;for(let a=0;a<e.length;a++){let l=e[a];if(l==="["||l==="]")continue;if(l===":"){if(s===!0)r=!0;if(!g(o,n,i))break;if(++t>7){i.error=!0;break}if(a>0&&e[a-1]===":")s=!0;n.push(":");continue}else if(l==="%"){if(!g(o,n,i))break;g=iC}else{o.push(l);continue}}if(o.length)if(g===iC)i.zone=o.join("");else if(r)n.push(o.join(""));else n.push(bg(o));return i.address=n.join(""),i}function oC(e){if(BG(e,":")<2)return{host:e,isIPV6:!1};let t=VG(e);if(!t.error){let{address:i,address:n}=t;if(t.zone)i+="%"+t.zone,n+="%25"+t.zone;return{host:i,isIPV6:!0,escapedHost:n}}else return{host:e,isIPV6:!1}}function BG(e,t){let i=0;for(let n=0;n<e.length;n++)if(e[n]===t)i++;return i}function RG(e){let t=e,i=[],n=-1,o=0;while(o=t.length){if(o===1)if(t===".")break;else if(t==="/"){i.push("/");break}else{i.push(t);break}else if(o===2){if(t[0]==="."){if(t[1]===".")break;else if(t[1]==="/"){t=t.slice(2);continue}}else if(t[0]==="/"){if(t[1]==="."||t[1]==="/"){i.push("/");break}}}else if(o===3){if(t==="/.."){if(i.length!==0)i.pop();i.push("/");break}}if(t[0]==="."){if(t[1]==="."){if(t[2]==="/"){t=t.slice(3);continue}}else if(t[1]==="/"){t=t.slice(2);continue}}else if(t[0]==="/"){if(t[1]==="."){if(t[2]==="/"){t=t.slice(2);continue}else if(t[2]==="."){if(t[3]==="/"){if(t=t.slice(3),i.length!==0)i.pop();continue}}}}if((n=t.indexOf("/",1))===-1){i.push(t);break}else i.push(t.slice(0,n)),t=t.slice(n)}return i.join("")}function GG(e,t){let i=t!==!0?escape:unescape;if(e.scheme!==void 0)e.scheme=i(e.scheme);if(e.userinfo!==void 0)e.userinfo=i(e.userinfo);if(e.host!==void 0)e.host=i(e.host);if(e.path!==void 0)e.path=i(e.path);if(e.query!==void 0)e.query=i(e.query);if(e.fragment!==void 0)e.fragment=i(e.fragment);return e}function wG(e){let t=[];if(e.userinfo!==void 0)t.push(e.userinfo),t.push("@");if(e.host!==void 0){let i=unescape(e.host);if(!nC(i)){let n=oC(i);if(n.isIPV6===!0)i=`[${n.escapedHost}]`;else i=e.host}t.push(i)}if(typeof e.port==="number"||typeof e.port==="string")t.push(":"),t.push(String(e.port));return t.length?t.join(""):void 0}sC.exports={nonSimpleDomain:fG,recomposeAuthority:wG,normalizeComponentEncoding:GG,removeDotSegments:RG,isIPv4:nC,isUUID:hG,normalizeIPv6:oC,stringArrayToHexStripped:bg}});var IC=y(function(OX,lC){var{isUUID:FG}=Wg(),HG=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,vG=["http","https","ws","wss","urn","urn:uuid"];function kG(e){return vG.indexOf(e)!==-1}function hg(e){if(e.secure===!0)return!0;else if(e.secure===!1)return!1;else if(e.scheme)return e.scheme.length===3&&(e.scheme[0]==="w"||e.scheme[0]==="W")&&(e.scheme[1]==="s"||e.scheme[1]==="S")&&(e.scheme[2]==="s"||e.scheme[2]==="S");else return!1}function rC(e){if(!e.host)e.error=e.error||"HTTP URIs must have a host.";return e}function gC(e){let t=String(e.scheme).toLowerCase()==="https";if(e.port===(t?443:80)||e.port==="")e.port=void 0;if(!e.path)e.path="/";return e}function PG(e){return e.secure=hg(e),e.resourceName=(e.path||"/")+(e.query?"?"+e.query:""),e.path=void 0,e.query=void 0,e}function YG(e){if(e.port===(hg(e)?443:80)||e.port==="")e.port=void 0;if(typeof e.secure==="boolean")e.scheme=e.secure?"wss":"ws",e.secure=void 0;if(e.resourceName){let[t,i]=e.resourceName.split("?");e.path=t&&t!=="/"?t:void 0,e.query=i,e.resourceName=void 0}return e.fragment=void 0,e}function NG(e,t){if(!e.path)return e.error="URN can not be parsed",e;let i=e.path.match(HG);if(i){let n=t.scheme||e.scheme||"urn";e.nid=i[1].toLowerCase(),e.nss=i[2];let o=`${n}:${t.nid||e.nid}`,s=fg(o);if(e.path=void 0,s)e=s.parse(e,t)}else e.error=e.error||"URN can not be parsed.";return e}function XG(e,t){if(e.nid===void 0)throw Error("URN without nid cannot be serialized");let i=t.scheme||e.scheme||"urn",n=e.nid.toLowerCase(),o=`${i}:${t.nid||n}`,s=fg(o);if(s)e=s.serialize(e,t);let r=e,g=e.nss;return r.path=`${n||t.nid}:${g}`,t.skipEscape=!0,r}function SG(e,t){let i=e;if(i.uuid=i.nss,i.nss=void 0,!t.tolerant&&(!i.uuid||!FG(i.uuid)))i.error=i.error||"UUID is not valid.";return i}function xG(e){let t=e;return t.nss=(e.uuid||"").toLowerCase(),t}var aC={scheme:"http",domainHost:!0,parse:rC,serialize:gC},JG={scheme:"https",domainHost:aC.domainHost,parse:rC,serialize:gC},Ko={scheme:"ws",domainHost:!0,parse:PG,serialize:YG},EG={scheme:"wss",domainHost:Ko.domainHost,parse:Ko.parse,serialize:Ko.serialize},UG={scheme:"urn",parse:NG,serialize:XG,skipNormalize:!0},OG={scheme:"urn:uuid",parse:SG,serialize:xG,skipNormalize:!0},Lo={http:aC,https:JG,ws:Ko,wss:EG,urn:UG,"urn:uuid":OG};Object.setPrototypeOf(Lo,null);function fg(e){return e&&(Lo[e]||Lo[e.toLowerCase()])||void 0}lC.exports={wsIsSecure:hg,SCHEMES:Lo,isValidSchemeName:kG,getSchemeHandler:fg}});var CC=y(function(TX,$o){var{normalizeIPv6:TG,removeDotSegments:Hn,recomposeAuthority:zG,normalizeComponentEncoding:Mo,isIPv4:jG,nonSimpleDomain:DG}=Wg(),{SCHEMES:QG,getSchemeHandler:dC}=IC();function _G(e,t){if(typeof e==="string")e=et(At(e,t),t);else if(typeof e==="object")e=At(et(e,t),t);return e}function KG(e,t,i){let n=i?Object.assign({scheme:"null"},i):{scheme:"null"},o=cC(At(e,n),At(t,n),n,!0);return n.skipEscape=!0,et(o,n)}function cC(e,t,i,n){let o={};if(!n)e=At(et(e,i),i),t=At(et(t,i),i);if(i=i||{},!i.tolerant&&t.scheme)o.scheme=t.scheme,o.userinfo=t.userinfo,o.host=t.host,o.port=t.port,o.path=Hn(t.path||""),o.query=t.query;else{if(t.userinfo!==void 0||t.host!==void 0||t.port!==void 0)o.userinfo=t.userinfo,o.host=t.host,o.port=t.port,o.path=Hn(t.path||""),o.query=t.query;else{if(!t.path)if(o.path=e.path,t.query!==void 0)o.query=t.query;else o.query=e.query;else{if(t.path[0]==="/")o.path=Hn(t.path);else{if((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path)o.path="/"+t.path;else if(!e.path)o.path=t.path;else o.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path;o.path=Hn(o.path)}o.query=t.query}o.userinfo=e.userinfo,o.host=e.host,o.port=e.port}o.scheme=e.scheme}return o.fragment=t.fragment,o}function LG(e,t,i){if(typeof e==="string")e=unescape(e),e=et(Mo(At(e,i),!0),{...i,skipEscape:!0});else if(typeof e==="object")e=et(Mo(e,!0),{...i,skipEscape:!0});if(typeof t==="string")t=unescape(t),t=et(Mo(At(t,i),!0),{...i,skipEscape:!0});else if(typeof t==="object")t=et(Mo(t,!0),{...i,skipEscape:!0});return e.toLowerCase()===t.toLowerCase()}function et(e,t){let i={host:e.host,scheme:e.scheme,userinfo:e.userinfo,port:e.port,path:e.path,query:e.query,nid:e.nid,nss:e.nss,uuid:e.uuid,fragment:e.fragment,reference:e.reference,resourceName:e.resourceName,secure:e.secure,error:""},n=Object.assign({},t),o=[],s=dC(n.scheme||i.scheme);if(s&&s.serialize)s.serialize(i,n);if(i.path!==void 0)if(!n.skipEscape){if(i.path=escape(i.path),i.scheme!==void 0)i.path=i.path.split("%3A").join(":")}else i.path=unescape(i.path);if(n.reference!=="suffix"&&i.scheme)o.push(i.scheme,":");let r=zG(i);if(r!==void 0){if(n.reference!=="suffix")o.push("//");if(o.push(r),i.path&&i.path[0]!=="/")o.push("/")}if(i.path!==void 0){let g=i.path;if(!n.absolutePath&&(!s||!s.absolutePath))g=Hn(g);if(r===void 0&&g[0]==="/"&&g[1]==="/")g="/%2F"+g.slice(2);o.push(g)}if(i.query!==void 0)o.push("?",i.query);if(i.fragment!==void 0)o.push("#",i.fragment);return o.join("")}var MG=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function At(e,t){let i=Object.assign({},t),n={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},o=!1;if(i.reference==="suffix")if(i.scheme)e=i.scheme+":"+e;else e="//"+e;let s=e.match(MG);if(s){if(n.scheme=s[1],n.userinfo=s[3],n.host=s[4],n.port=parseInt(s[5],10),n.path=s[6]||"",n.query=s[7],n.fragment=s[8],isNaN(n.port))n.port=s[5];if(n.host)if(jG(n.host)===!1){let a=TG(n.host);n.host=a.host.toLowerCase(),o=a.isIPV6}else o=!0;if(n.scheme===void 0&&n.userinfo===void 0&&n.host===void 0&&n.port===void 0&&n.query===void 0&&!n.path)n.reference="same-document";else if(n.scheme===void 0)n.reference="relative";else if(n.fragment===void 0)n.reference="absolute";else n.reference="uri";if(i.reference&&i.reference!=="suffix"&&i.reference!==n.reference)n.error=n.error||"URI is not a "+i.reference+" reference.";let r=dC(i.scheme||n.scheme);if(!i.unicodeSupport&&(!r||!r.unicodeSupport)){if(n.host&&(i.domainHost||r&&r.domainHost)&&o===!1&&DG(n.host))try{n.host=URL.domainToASCII(n.host.toLowerCase())}catch(g){n.error=n.error||"Host's domain name can not be converted to ASCII: "+g}}if(!r||r&&!r.skipNormalize){if(e.indexOf("%")!==-1){if(n.scheme!==void 0)n.scheme=unescape(n.scheme);if(n.host!==void 0)n.host=unescape(n.host)}if(n.path)n.path=escape(unescape(n.path));if(n.fragment)n.fragment=encodeURI(decodeURIComponent(n.fragment))}if(r&&r.parse)r.parse(n,i)}else n.error=n.error||"URI can not be parsed.";return n}var yg={SCHEMES:QG,normalize:_G,resolve:KG,resolveComponent:cC,equal:LG,serialize:et,parse:At};$o.exports=yg;$o.exports.default=yg;$o.exports.fastUri=yg});var mC=y(function(Vg){Object.defineProperty(Vg,"__esModule",{value:!0});var uC=CC();uC.code='require("ajv/dist/runtime/uri").default';Vg.default=uC});var Gg=y(function(oe){Object.defineProperty(oe,"__esModule",{value:!0});oe.CodeGen=oe.Name=oe.nil=oe.stringify=oe.str=oe._=oe.KeywordCxt=void 0;var $G=wi();Object.defineProperty(oe,"KeywordCxt",{enumerable:!0,get:function(){return $G.KeywordCxt}});var Hi=v();Object.defineProperty(oe,"_",{enumerable:!0,get:function(){return Hi._}});Object.defineProperty(oe,"str",{enumerable:!0,get:function(){return Hi.str}});Object.defineProperty(oe,"stringify",{enumerable:!0,get:function(){return Hi.stringify}});Object.defineProperty(oe,"nil",{enumerable:!0,get:function(){return Hi.nil}});Object.defineProperty(oe,"Name",{enumerable:!0,get:function(){return Hi.Name}});Object.defineProperty(oe,"CodeGen",{enumerable:!0,get:function(){return Hi.CodeGen}});var qG=Gn(),WC=Fi(),e0=eg(),vn=Fn(),t0=v(),kn=Vn(),qo=yn(),Rg=N(),pC=tC(),i0=mC(),hC=(e,t)=>new RegExp(e,t);hC.code="new RegExp";var n0=["removeAdditional","useDefaults","coerceTypes"],o0=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),s0={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},r0={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},AC=200;function g0(e){var t,i,n,o,s,r,g,a,l,I,d,u,c,C,A,m,p,Z,W,h,f,V,B,F,R;let U=e.strict,K=(t=e.code)===null||t===void 0?void 0:t.optimize,ee=K===!0||K===void 0?1:K||0,ve=(n=(i=e.code)===null||i===void 0?void 0:i.regExp)!==null&&n!==void 0?n:hC,un=(o=e.uriResolver)!==null&&o!==void 0?o:i0.default;return{strictSchema:(r=(s=e.strictSchema)!==null&&s!==void 0?s:U)!==null&&r!==void 0?r:!0,strictNumbers:(a=(g=e.strictNumbers)!==null&&g!==void 0?g:U)!==null&&a!==void 0?a:!0,strictTypes:(I=(l=e.strictTypes)!==null&&l!==void 0?l:U)!==null&&I!==void 0?I:"log",strictTuples:(u=(d=e.strictTuples)!==null&&d!==void 0?d:U)!==null&&u!==void 0?u:"log",strictRequired:(C=(c=e.strictRequired)!==null&&c!==void 0?c:U)!==null&&C!==void 0?C:!1,code:e.code?{...e.code,optimize:ee,regExp:ve}:{optimize:ee,regExp:ve},loopRequired:(A=e.loopRequired)!==null&&A!==void 0?A:AC,loopEnum:(m=e.loopEnum)!==null&&m!==void 0?m:AC,meta:(p=e.meta)!==null&&p!==void 0?p:!0,messages:(Z=e.messages)!==null&&Z!==void 0?Z:!0,inlineRefs:(W=e.inlineRefs)!==null&&W!==void 0?W:!0,schemaId:(h=e.schemaId)!==null&&h!==void 0?h:"$id",addUsedSchema:(f=e.addUsedSchema)!==null&&f!==void 0?f:!0,validateSchema:(V=e.validateSchema)!==null&&V!==void 0?V:!0,validateFormats:(B=e.validateFormats)!==null&&B!==void 0?B:!0,unicodeRegExp:(F=e.unicodeRegExp)!==null&&F!==void 0?F:!0,int32range:(R=e.int32range)!==null&&R!==void 0?R:!0,uriResolver:un}}class es{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...g0(e)};let{es5:t,lines:i}=this.opts.code;this.scope=new t0.ValueScope({scope:{},prefixes:o0,es5:t,lines:i}),this.logger=C0(e.logger);let n=e.validateFormats;if(e.validateFormats=!1,this.RULES=(0,e0.getRules)(),ZC.call(this,s0,e,"NOT SUPPORTED"),ZC.call(this,r0,e,"DEPRECATED","warn"),this._metaOpts=d0.call(this),e.formats)l0.call(this);if(this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords)I0.call(this,e.keywords);if(typeof e.meta=="object")this.addMetaSchema(e.meta);a0.call(this),e.validateFormats=n}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:t,schemaId:i}=this.opts,n=pC;if(i==="id")n={...pC},n.id=n.$id,delete n.$id;if(t&&e)this.addMetaSchema(n,n[i],!1)}defaultMeta(){let{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[t]||e:void 0}validate(e,t){let i;if(typeof e=="string"){if(i=this.getSchema(e),!i)throw Error(`no schema with key or ref "${e}"`)}else i=this.compile(e);let n=i(t);if(!("$async"in i))this.errors=i.errors;return n}compile(e,t){let i=this._addSchema(e,t);return i.validate||this._compileSchemaEnv(i)}compileAsync(e,t){if(typeof this.opts.loadSchema!="function")throw Error("options.loadSchema should be a function");let{loadSchema:i}=this.opts;return n.call(this,e,t);async function n(l,I){await o.call(this,l.$schema);let d=this._addSchema(l,I);return d.validate||s.call(this,d)}async function o(l){if(l&&!this.getSchema(l))await n.call(this,{$ref:l},!0)}async function s(l){try{return this._compileSchemaEnv(l)}catch(I){if(!(I instanceof WC.default))throw I;return r.call(this,I),await g.call(this,I.missingSchema),s.call(this,l)}}function r({missingSchema:l,missingRef:I}){if(this.refs[l])throw Error(`AnySchema ${l} is loaded but ${I} cannot be resolved`)}async function g(l){let I=await a.call(this,l);if(!this.refs[l])await o.call(this,I.$schema);if(!this.refs[l])this.addSchema(I,l,t)}async function a(l){let I=this._loading[l];if(I)return I;try{return await(this._loading[l]=i(l))}finally{delete this._loading[l]}}}addSchema(e,t,i,n=this.opts.validateSchema){if(Array.isArray(e)){for(let s of e)this.addSchema(s,void 0,i,n);return this}let o;if(typeof e==="object"){let{schemaId:s}=this.opts;if(o=e[s],o!==void 0&&typeof o!="string")throw Error(`schema ${s} must be string`)}return t=(0,kn.normalizeId)(t||o),this._checkUnique(t),this.schemas[t]=this._addSchema(e,i,t,n,!0),this}addMetaSchema(e,t,i=this.opts.validateSchema){return this.addSchema(e,t,!0,i),this}validateSchema(e,t){if(typeof e=="boolean")return!0;let i;if(i=e.$schema,i!==void 0&&typeof i!="string")throw Error("$schema must be a string");if(i=i||this.opts.defaultMeta||this.defaultMeta(),!i)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let n=this.validate(i,e);if(!n&&t){let o="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(o);else throw Error(o)}return n}getSchema(e){let t;while(typeof(t=bC.call(this,e))=="string")e=t;if(t===void 0){let{schemaId:i}=this.opts,n=new vn.SchemaEnv({schema:{},schemaId:i});if(t=vn.resolveSchema.call(this,n,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let t=bC.call(this,e);if(typeof t=="object")this._cache.delete(t.schema);return delete this.schemas[e],delete this.refs[e],this}case"object":{let t=e;this._cache.delete(t);let i=e[this.opts.schemaId];if(i)i=(0,kn.normalizeId)(i),delete this.schemas[i],delete this.refs[i];return this}default:throw Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let t of e)this.addKeyword(t);return this}addKeyword(e,t){let i;if(typeof e=="string"){if(i=e,typeof t=="object")this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=i}else if(typeof e=="object"&&t===void 0){if(t=e,i=t.keyword,Array.isArray(i)&&!i.length)throw Error("addKeywords: keyword must be string or non-empty array")}else throw Error("invalid addKeywords parameters");if(m0.call(this,i,t),!t)return(0,Rg.eachItem)(i,(o)=>Bg.call(this,o)),this;A0.call(this,t);let n={...t,type:(0,qo.getJSONTypes)(t.type),schemaType:(0,qo.getJSONTypes)(t.schemaType)};return(0,Rg.eachItem)(i,n.type.length===0?(o)=>Bg.call(this,o,n):(o)=>n.type.forEach((s)=>Bg.call(this,o,n,s))),this}getKeyword(e){let t=this.RULES.all[e];return typeof t=="object"?t.definition:!!t}removeKeyword(e){let{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(let i of t.rules){let n=i.rules.findIndex((o)=>o.keyword===e);if(n>=0)i.rules.splice(n,1)}return this}addFormat(e,t){if(typeof t=="string")t=new RegExp(t);return this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=", ",dataVar:i="data"}={}){if(!e||e.length===0)return"No errors";return e.map((n)=>`${i}${n.instancePath} ${n.message}`).reduce((n,o)=>n+t+o)}$dataMetaSchema(e,t){let i=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let n of t){let o=n.split("/").slice(1),s=e;for(let r of o)s=s[r];for(let r in i){let g=i[r];if(typeof g!="object")continue;let{$data:a}=g.definition,l=s[r];if(a&&l)s[r]=fC(l)}}return e}_removeAllSchemas(e,t){for(let i in e){let n=e[i];if(!t||t.test(i)){if(typeof n=="string")delete e[i];else if(n&&!n.meta)this._cache.delete(n.schema),delete e[i]}}}_addSchema(e,t,i,n=this.opts.validateSchema,o=this.opts.addUsedSchema){let s,{schemaId:r}=this.opts;if(typeof e=="object")s=e[r];else if(this.opts.jtd)throw Error("schema must be object");else if(typeof e!="boolean")throw Error("schema must be object or boolean");let g=this._cache.get(e);if(g!==void 0)return g;i=(0,kn.normalizeId)(s||i);let a=kn.getSchemaRefs.call(this,e,i);if(g=new vn.SchemaEnv({schema:e,schemaId:r,meta:t,baseId:i,localRefs:a}),this._cache.set(g.schema,g),o&&!i.startsWith("#")){if(i)this._checkUnique(i);this.refs[i]=g}if(n)this.validateSchema(e,!0);return g}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta)this._compileMetaSchema(e);else vn.compileSchema.call(this,e);if(!e.validate)throw Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let t=this.opts;this.opts=this._metaOpts;try{vn.compileSchema.call(this,e)}finally{this.opts=t}}}es.ValidationError=qG.default;es.MissingRefError=WC.default;oe.default=es;function ZC(e,t,i,n="error"){for(let o in e){let s=o;if(s in t)this.logger[n](`${i}: option ${o}. ${e[s]}`)}}function bC(e){return e=(0,kn.normalizeId)(e),this.schemas[e]||this.refs[e]}function a0(){let e=this.opts.schemas;if(!e)return;if(Array.isArray(e))this.addSchema(e);else for(let t in e)this.addSchema(e[t],t)}function l0(){for(let e in this.opts.formats){let t=this.opts.formats[e];if(t)this.addFormat(e,t)}}function I0(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let t in e){let i=e[t];if(!i.keyword)i.keyword=t;this.addKeyword(i)}}function d0(){let e={...this.opts};for(let t of n0)delete e[t];return e}var c0={log(){},warn(){},error(){}};function C0(e){if(e===!1)return c0;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw Error("logger must implement log, warn and error methods")}var u0=/^[a-z_$][a-z0-9_$:-]*$/i;function m0(e,t){let{RULES:i}=this;if((0,Rg.eachItem)(e,(n)=>{if(i.keywords[n])throw Error(`Keyword ${n} is already defined`);if(!u0.test(n))throw Error(`Keyword ${n} has invalid name`)}),!t)return;if(t.$data&&!(("code"in t)||("validate"in t)))throw Error('$data keyword must have "code" or "validate" function')}function Bg(e,t,i){var n;let o=t===null||t===void 0?void 0:t.post;if(i&&o)throw Error('keyword with "post" flag cannot have "type"');let{RULES:s}=this,r=o?s.post:s.rules.find(({type:a})=>a===i);if(!r)r={type:i,rules:[]},s.rules.push(r);if(s.keywords[e]=!0,!t)return;let g={keyword:e,definition:{...t,type:(0,qo.getJSONTypes)(t.type),schemaType:(0,qo.getJSONTypes)(t.schemaType)}};if(t.before)p0.call(this,r,g,t.before);else r.rules.push(g);s.all[e]=g,(n=t.implements)===null||n===void 0||n.forEach((a)=>this.addKeyword(a))}function p0(e,t,i){let n=e.rules.findIndex((o)=>o.keyword===i);if(n>=0)e.rules.splice(n,0,t);else e.rules.push(t),this.logger.warn(`rule ${i} is not defined`)}function A0(e){let{metaSchema:t}=e;if(t===void 0)return;if(e.$data&&this.opts.$data)t=fC(t);e.validateSchema=this.compile(t,!0)}var Z0={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function fC(e){return{anyOf:[e,Z0]}}});var yC=y(function(wg){Object.defineProperty(wg,"__esModule",{value:!0});var b0={keyword:"id",code(){throw Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};wg.default=b0});var ns=y(function(Dt){Object.defineProperty(Dt,"__esModule",{value:!0});Dt.callRef=Dt.getValidate=void 0;var W0=Fi(),VC=Pe(),ye=v(),vi=ke(),BC=Fn(),ts=N(),h0={keyword:"$ref",schemaType:"string",code(e){let{gen:t,schema:i,it:n}=e,{baseId:o,schemaEnv:s,validateName:r,opts:g,self:a}=n,{root:l}=s;if((i==="#"||i==="#/")&&o===l.baseId)return d();let I=BC.resolveRef.call(a,l,o,i);if(I===void 0)throw new W0.default(n.opts.uriResolver,o,i);if(I instanceof BC.SchemaEnv)return u(I);return c(I);function d(){if(s===l)return is(e,r,s,s.$async);let C=t.scopeValue("root",{ref:l});return is(e,ye._`${C}.validate`,l,l.$async)}function u(C){let A=RC(e,C);is(e,A,C,C.$async)}function c(C){let A=t.scopeValue("schema",g.code.source===!0?{ref:C,code:(0,ye.stringify)(C)}:{ref:C}),m=t.name("valid"),p=e.subschema({schema:C,dataTypes:[],schemaPath:ye.nil,topSchemaRef:A,errSchemaPath:i},m);e.mergeEvaluated(p),e.ok(m)}}};function RC(e,t){let{gen:i}=e;return t.validate?i.scopeValue("validate",{ref:t.validate}):ye._`${i.scopeValue("wrapper",{ref:t})}.validate`}Dt.getValidate=RC;function is(e,t,i,n){let{gen:o,it:s}=e,{allErrors:r,schemaEnv:g,opts:a}=s,l=a.passContext?vi.default.this:ye.nil;if(n)I();else d();function I(){if(!g.$async)throw Error("async schema referenced by sync schema");let C=o.let("valid");o.try(()=>{if(o.code(ye._`await ${(0,VC.callValidateCode)(e,t,l)}`),c(t),!r)o.assign(C,!0)},(A)=>{if(o.if(ye._`!(${A} instanceof ${s.ValidationError})`,()=>o.throw(A)),u(A),!r)o.assign(C,!1)}),e.ok(C)}function d(){e.result((0,VC.callValidateCode)(e,t,l),()=>c(t),()=>u(t))}function u(C){let A=ye._`${C}.errors`;o.assign(vi.default.vErrors,ye._`${vi.default.vErrors} === null ? ${A} : ${vi.default.vErrors}.concat(${A})`),o.assign(vi.default.errors,ye._`${vi.default.vErrors}.length`)}function c(C){var A;if(!s.opts.unevaluated)return;let m=(A=i===null||i===void 0?void 0:i.validate)===null||A===void 0?void 0:A.evaluated;if(s.props!==!0)if(m&&!m.dynamicProps){if(m.props!==void 0)s.props=ts.mergeEvaluated.props(o,m.props,s.props)}else{let p=o.var("props",ye._`${C}.evaluated.props`);s.props=ts.mergeEvaluated.props(o,p,s.props,ye.Name)}if(s.items!==!0)if(m&&!m.dynamicItems){if(m.items!==void 0)s.items=ts.mergeEvaluated.items(o,m.items,s.items)}else{let p=o.var("items",ye._`${C}.evaluated.items`);s.items=ts.mergeEvaluated.items(o,p,s.items,ye.Name)}}}Dt.callRef=is;Dt.default=h0});var Hg=y(function(Fg){Object.defineProperty(Fg,"__esModule",{value:!0});var f0=yC(),y0=ns(),V0=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",f0.default,y0.default];Fg.default=V0});var GC=y(function(vg){Object.defineProperty(vg,"__esModule",{value:!0});var os=v(),Pt=os.operators,ss={maximum:{okStr:"<=",ok:Pt.LTE,fail:Pt.GT},minimum:{okStr:">=",ok:Pt.GTE,fail:Pt.LT},exclusiveMaximum:{okStr:"<",ok:Pt.LT,fail:Pt.GTE},exclusiveMinimum:{okStr:">",ok:Pt.GT,fail:Pt.LTE}},B0={message:({keyword:e,schemaCode:t})=>os.str`must be ${ss[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>os._`{comparison: ${ss[e].okStr}, limit: ${t}}`},R0={keyword:Object.keys(ss),type:"number",schemaType:"number",$data:!0,error:B0,code(e){let{keyword:t,data:i,schemaCode:n}=e;e.fail$data(os._`${i} ${ss[t].fail} ${n} || isNaN(${i})`)}};vg.default=R0});var wC=y(function(kg){Object.defineProperty(kg,"__esModule",{value:!0});var Pn=v(),G0={message:({schemaCode:e})=>Pn.str`must be multiple of ${e}`,params:({schemaCode:e})=>Pn._`{multipleOf: ${e}}`},w0={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:G0,code(e){let{gen:t,data:i,schemaCode:n,it:o}=e,s=o.opts.multipleOfPrecision,r=t.let("res"),g=s?Pn._`Math.abs(Math.round(${r}) - ${r}) > 1e-${s}`:Pn._`${r} !== parseInt(${r})`;e.fail$data(Pn._`(${n} === 0 || (${r} = ${i}/${n}, ${g}))`)}};kg.default=w0});var HC=y(function(Pg){Object.defineProperty(Pg,"__esModule",{value:!0});function FC(e){let t=e.length,i=0,n=0,o;while(n<t)if(i++,o=e.charCodeAt(n++),o>=55296&&o<=56319&&n<t){if(o=e.charCodeAt(n),(o&64512)===56320)n++}return i}Pg.default=FC;FC.code='require("ajv/dist/runtime/ucs2length").default'});var vC=y(function(Yg){Object.defineProperty(Yg,"__esModule",{value:!0});var Qt=v(),F0=N(),H0=HC(),v0={message({keyword:e,schemaCode:t}){let i=e==="maxLength"?"more":"fewer";return Qt.str`must NOT have ${i} than ${t} characters`},params:({schemaCode:e})=>Qt._`{limit: ${e}}`},k0={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:v0,code(e){let{keyword:t,data:i,schemaCode:n,it:o}=e,s=t==="maxLength"?Qt.operators.GT:Qt.operators.LT,r=o.opts.unicode===!1?Qt._`${i}.length`:Qt._`${(0,F0.useFunc)(e.gen,H0.default)}(${i})`;e.fail$data(Qt._`${r} ${s} ${n}`)}};Yg.default=k0});var kC=y(function(Ng){Object.defineProperty(Ng,"__esModule",{value:!0});var P0=Pe(),rs=v(),Y0={message:({schemaCode:e})=>rs.str`must match pattern "${e}"`,params:({schemaCode:e})=>rs._`{pattern: ${e}}`},N0={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:Y0,code(e){let{data:t,$data:i,schema:n,schemaCode:o,it:s}=e,r=s.opts.unicodeRegExp?"u":"",g=i?rs._`(new RegExp(${o}, ${r}))`:(0,P0.usePattern)(e,n);e.fail$data(rs._`!${g}.test(${t})`)}};Ng.default=N0});var PC=y(function(Xg){Object.defineProperty(Xg,"__esModule",{value:!0});var Yn=v(),X0={message({keyword:e,schemaCode:t}){let i=e==="maxProperties"?"more":"fewer";return Yn.str`must NOT have ${i} than ${t} properties`},params:({schemaCode:e})=>Yn._`{limit: ${e}}`},S0={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:X0,code(e){let{keyword:t,data:i,schemaCode:n}=e,o=t==="maxProperties"?Yn.operators.GT:Yn.operators.LT;e.fail$data(Yn._`Object.keys(${i}).length ${o} ${n}`)}};Xg.default=S0});var YC=y(function(Sg){Object.defineProperty(Sg,"__esModule",{value:!0});var Nn=Pe(),Xn=v(),x0=N(),J0={message:({params:{missingProperty:e}})=>Xn.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>Xn._`{missingProperty: ${e}}`},E0={keyword:"required",type:"object",schemaType:"array",$data:!0,error:J0,code(e){let{gen:t,schema:i,schemaCode:n,data:o,$data:s,it:r}=e,{opts:g}=r;if(!s&&i.length===0)return;let a=i.length>=g.loopRequired;if(r.allErrors)l();else I();if(g.strictRequired){let c=e.parentSchema.properties,{definedProperties:C}=e.it;for(let A of i)if((c===null||c===void 0?void 0:c[A])===void 0&&!C.has(A)){let m=r.schemaEnv.baseId+r.errSchemaPath,p=`required property "${A}" is not defined at "${m}" (strictRequired)`;(0,x0.checkStrictMode)(r,p,r.opts.strictRequired)}}function l(){if(a||s)e.block$data(Xn.nil,d);else for(let c of i)(0,Nn.checkReportMissingProp)(e,c)}function I(){let c=t.let("missing");if(a||s){let C=t.let("valid",!0);e.block$data(C,()=>u(c,C)),e.ok(C)}else t.if((0,Nn.checkMissingProp)(e,i,c)),(0,Nn.reportMissingProp)(e,c),t.else()}function d(){t.forOf("prop",n,(c)=>{e.setParams({missingProperty:c}),t.if((0,Nn.noPropertyInData)(t,o,c,g.ownProperties),()=>e.error())})}function u(c,C){e.setParams({missingProperty:c}),t.forOf(c,n,()=>{t.assign(C,(0,Nn.propertyInData)(t,o,c,g.ownProperties)),t.if((0,Xn.not)(C),()=>{e.error(),t.break()})},Xn.nil)}}};Sg.default=E0});var NC=y(function(xg){Object.defineProperty(xg,"__esModule",{value:!0});var Sn=v(),U0={message({keyword:e,schemaCode:t}){let i=e==="maxItems"?"more":"fewer";return Sn.str`must NOT have ${i} than ${t} items`},params:({schemaCode:e})=>Sn._`{limit: ${e}}`},O0={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:U0,code(e){let{keyword:t,data:i,schemaCode:n}=e,o=t==="maxItems"?Sn.operators.GT:Sn.operators.LT;e.fail$data(Sn._`${i}.length ${o} ${n}`)}};xg.default=O0});var gs=y(function(Jg){Object.defineProperty(Jg,"__esModule",{value:!0});var XC=ag();XC.code='require("ajv/dist/runtime/equal").default';Jg.default=XC});var SC=y(function(Ug){Object.defineProperty(Ug,"__esModule",{value:!0});var Eg=yn(),se=v(),T0=N(),z0=gs(),j0={message:({params:{i:e,j:t}})=>se.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>se._`{i: ${e}, j: ${t}}`},D0={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:j0,code(e){let{gen:t,data:i,$data:n,schema:o,parentSchema:s,schemaCode:r,it:g}=e;if(!n&&!o)return;let a=t.let("valid"),l=s.items?(0,Eg.getSchemaTypes)(s.items):[];e.block$data(a,I,se._`${r} === false`),e.ok(a);function I(){let C=t.let("i",se._`${i}.length`),A=t.let("j");e.setParams({i:C,j:A}),t.assign(a,!0),t.if(se._`${C} > 1`,()=>(d()?u:c)(C,A))}function d(){return l.length>0&&!l.some((C)=>C==="object"||C==="array")}function u(C,A){let m=t.name("item"),p=(0,Eg.checkDataTypes)(l,m,g.opts.strictNumbers,Eg.DataType.Wrong),Z=t.const("indices",se._`{}`);t.for(se._`;${C}--;`,()=>{if(t.let(m,se._`${i}[${C}]`),t.if(p,se._`continue`),l.length>1)t.if(se._`typeof ${m} == "string"`,se._`${m} += "_"`);t.if(se._`typeof ${Z}[${m}] == "number"`,()=>{t.assign(A,se._`${Z}[${m}]`),e.error(),t.assign(a,!1).break()}).code(se._`${Z}[${m}] = ${C}`)})}function c(C,A){let m=(0,T0.useFunc)(t,z0.default),p=t.name("outer");t.label(p).for(se._`;${C}--;`,()=>t.for(se._`${A} = ${C}; ${A}--;`,()=>t.if(se._`${m}(${i}[${C}], ${i}[${A}])`,()=>{e.error(),t.assign(a,!1).break(p)})))}}};Ug.default=D0});var xC=y(function(Tg){Object.defineProperty(Tg,"__esModule",{value:!0});var Og=v(),Q0=N(),_0=gs(),K0={message:"must be equal to constant",params:({schemaCode:e})=>Og._`{allowedValue: ${e}}`},L0={keyword:"const",$data:!0,error:K0,code(e){let{gen:t,data:i,$data:n,schemaCode:o,schema:s}=e;if(n||s&&typeof s=="object")e.fail$data(Og._`!${(0,Q0.useFunc)(t,_0.default)}(${i}, ${o})`);else e.fail(Og._`${s} !== ${i}`)}};Tg.default=L0});var JC=y(function(zg){Object.defineProperty(zg,"__esModule",{value:!0});var xn=v(),M0=N(),$0=gs(),q0={message:"must be equal to one of the allowed values",params:({schemaCode:e})=>xn._`{allowedValues: ${e}}`},ew={keyword:"enum",schemaType:"array",$data:!0,error:q0,code(e){let{gen:t,data:i,$data:n,schema:o,schemaCode:s,it:r}=e;if(!n&&o.length===0)throw Error("enum must have non-empty array");let g=o.length>=r.opts.loopEnum,a,l=()=>a!==null&&a!==void 0?a:a=(0,M0.useFunc)(t,$0.default),I;if(g||n)I=t.let("valid"),e.block$data(I,d);else{if(!Array.isArray(o))throw Error("ajv implementation error");let c=t.const("vSchema",s);I=(0,xn.or)(...o.map((C,A)=>u(c,A)))}e.pass(I);function d(){t.assign(I,!1),t.forOf("v",s,(c)=>t.if(xn._`${l()}(${i}, ${c})`,()=>t.assign(I,!0).break()))}function u(c,C){let A=o[C];return typeof A==="object"&&A!==null?xn._`${l()}(${i}, ${c}[${C}])`:xn._`${i} === ${A}`}}};zg.default=ew});var Dg=y(function(jg){Object.defineProperty(jg,"__esModule",{value:!0});var tw=GC(),iw=wC(),nw=vC(),ow=kC(),sw=PC(),rw=YC(),gw=NC(),aw=SC(),lw=xC(),Iw=JC(),dw=[tw.default,iw.default,nw.default,ow.default,sw.default,rw.default,gw.default,aw.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},lw.default,Iw.default];jg.default=dw});var _g=y(function(Jn){Object.defineProperty(Jn,"__esModule",{value:!0});Jn.validateAdditionalItems=void 0;var _t=v(),Qg=N(),cw={message:({params:{len:e}})=>_t.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>_t._`{limit: ${e}}`},Cw={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:cw,code(e){let{parentSchema:t,it:i}=e,{items:n}=t;if(!Array.isArray(n)){(0,Qg.checkStrictMode)(i,'"additionalItems" is ignored when "items" is not an array of schemas');return}EC(e,n)}};function EC(e,t){let{gen:i,schema:n,data:o,keyword:s,it:r}=e;r.items=!0;let g=i.const("len",_t._`${o}.length`);if(n===!1)e.setParams({len:t.length}),e.pass(_t._`${g} <= ${t.length}`);else if(typeof n=="object"&&!(0,Qg.alwaysValidSchema)(r,n)){let l=i.var("valid",_t._`${g} <= ${t.length}`);i.if((0,_t.not)(l),()=>a(l)),e.ok(l)}function a(l){i.forRange("i",t.length,g,(I)=>{if(e.subschema({keyword:s,dataProp:I,dataPropType:Qg.Type.Num},l),!r.allErrors)i.if((0,_t.not)(l),()=>i.break())})}}Jn.validateAdditionalItems=EC;Jn.default=Cw});var Kg=y(function(En){Object.defineProperty(En,"__esModule",{value:!0});En.validateTuple=void 0;var UC=v(),as=N(),uw=Pe(),mw={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){let{schema:t,it:i}=e;if(Array.isArray(t))return OC(e,"additionalItems",t);if(i.items=!0,(0,as.alwaysValidSchema)(i,t))return;e.ok((0,uw.validateArray)(e))}};function OC(e,t,i=e.schema){let{gen:n,parentSchema:o,data:s,keyword:r,it:g}=e;if(I(o),g.opts.unevaluated&&i.length&&g.items!==!0)g.items=as.mergeEvaluated.items(n,i.length,g.items);let a=n.name("valid"),l=n.const("len",UC._`${s}.length`);i.forEach((d,u)=>{if((0,as.alwaysValidSchema)(g,d))return;n.if(UC._`${l} > ${u}`,()=>e.subschema({keyword:r,schemaProp:u,dataProp:u},a)),e.ok(a)});function I(d){let{opts:u,errSchemaPath:c}=g,C=i.length,A=C===d.minItems&&(C===d.maxItems||d[t]===!1);if(u.strictTuples&&!A){let m=`"${r}" is ${C}-tuple, but minItems or maxItems/${t} are not specified or different at path "${c}"`;(0,as.checkStrictMode)(g,m,u.strictTuples)}}}En.validateTuple=OC;En.default=mw});var TC=y(function(Lg){Object.defineProperty(Lg,"__esModule",{value:!0});var pw=Kg(),Aw={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:(e)=>(0,pw.validateTuple)(e,"items")};Lg.default=Aw});var jC=y(function(Mg){Object.defineProperty(Mg,"__esModule",{value:!0});var zC=v(),Zw=N(),bw=Pe(),Ww=_g(),hw={message:({params:{len:e}})=>zC.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>zC._`{limit: ${e}}`},fw={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:hw,code(e){let{schema:t,parentSchema:i,it:n}=e,{prefixItems:o}=i;if(n.items=!0,(0,Zw.alwaysValidSchema)(n,t))return;if(o)(0,Ww.validateAdditionalItems)(e,o);else e.ok((0,bw.validateArray)(e))}};Mg.default=fw});var DC=y(function($g){Object.defineProperty($g,"__esModule",{value:!0});var Ne=v(),ls=N(),yw={message:({params:{min:e,max:t}})=>t===void 0?Ne.str`must contain at least ${e} valid item(s)`:Ne.str`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>t===void 0?Ne._`{minContains: ${e}}`:Ne._`{minContains: ${e}, maxContains: ${t}}`},Vw={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:yw,code(e){let{gen:t,schema:i,parentSchema:n,data:o,it:s}=e,r,g,{minContains:a,maxContains:l}=n;if(s.opts.next)r=a===void 0?1:a,g=l;else r=1;let I=t.const("len",Ne._`${o}.length`);if(e.setParams({min:r,max:g}),g===void 0&&r===0){(0,ls.checkStrictMode)(s,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(g!==void 0&&r>g){(0,ls.checkStrictMode)(s,'"minContains" > "maxContains" is always invalid'),e.fail();return}if((0,ls.alwaysValidSchema)(s,i)){let A=Ne._`${I} >= ${r}`;if(g!==void 0)A=Ne._`${A} && ${I} <= ${g}`;e.pass(A);return}s.items=!0;let d=t.name("valid");if(g===void 0&&r===1)c(d,()=>t.if(d,()=>t.break()));else if(r===0){if(t.let(d,!0),g!==void 0)t.if(Ne._`${o}.length > 0`,u)}else t.let(d,!1),u();e.result(d,()=>e.reset());function u(){let A=t.name("_valid"),m=t.let("count",0);c(A,()=>t.if(A,()=>C(m)))}function c(A,m){t.forRange("i",0,I,(p)=>{e.subschema({keyword:"contains",dataProp:p,dataPropType:ls.Type.Num,compositeRule:!0},A),m()})}function C(A){if(t.code(Ne._`${A}++`),g===void 0)t.if(Ne._`${A} >= ${r}`,()=>t.assign(d,!0).break());else if(t.if(Ne._`${A} > ${g}`,()=>t.assign(d,!1).break()),r===1)t.assign(d,!0);else t.if(Ne._`${A} >= ${r}`,()=>t.assign(d,!0))}}};$g.default=Vw});var Is=y(function(tt){Object.defineProperty(tt,"__esModule",{value:!0});tt.validateSchemaDeps=tt.validatePropertyDeps=tt.error=void 0;var qg=v(),Bw=N(),Un=Pe();tt.error={message:({params:{property:e,depsCount:t,deps:i}})=>{let n=t===1?"property":"properties";return qg.str`must have ${n} ${i} when property ${e} is present`},params:({params:{property:e,depsCount:t,deps:i,missingProperty:n}})=>qg._`{property: ${e},
8
8
  missingProperty: ${n},
9
9
  depsCount: ${t},
10
- deps: ${i}}`};var Bw={keyword:"dependencies",type:"object",schemaType:"object",error:tt.error,code(e){let[t,i]=Rw(e);jC(e,t),DC(e,i)}};function Rw({schema:e}){let t={},i={};for(let n in e){if(n==="__proto__")continue;let o=Array.isArray(e[n])?t:i;o[n]=e[n]}return[t,i]}function jC(e,t=e.schema){let{gen:i,data:n,it:o}=e;if(Object.keys(t).length===0)return;let s=i.let("missing");for(let r in t){let g=t[r];if(g.length===0)continue;let a=(0,En.propertyInData)(i,n,r,o.opts.ownProperties);if(e.setParams({property:r,depsCount:g.length,deps:g.join(", ")}),o.allErrors)i.if(a,()=>{for(let l of g)(0,En.checkReportMissingProp)(e,l)});else i.if(Mg._`${a} && (${(0,En.checkMissingProp)(e,g,s)})`),(0,En.reportMissingProp)(e,s),i.else()}}tt.validatePropertyDeps=jC;function DC(e,t=e.schema){let{gen:i,data:n,keyword:o,it:s}=e,r=i.name("valid");for(let g in t){if((0,Vw.alwaysValidSchema)(s,t[g]))continue;i.if((0,En.propertyInData)(i,n,g,s.opts.ownProperties),()=>{let a=e.subschema({keyword:o,schemaProp:g},r);e.mergeValidEvaluated(a,r)},()=>i.var(r,!0)),e.ok(r)}}tt.validateSchemaDeps=DC;tt.default=Bw});var _C=y(function($g){Object.defineProperty($g,"__esModule",{value:!0});var QC=v(),Gw=N(),ww={message:"property name must be valid",params:({params:e})=>QC._`{propertyName: ${e.propertyName}}`},Fw={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:ww,code(e){let{gen:t,schema:i,data:n,it:o}=e;if((0,Gw.alwaysValidSchema)(o,i))return;let s=t.name("valid");t.forIn("key",n,(r)=>{e.setParams({propertyName:r}),e.subschema({keyword:"propertyNames",data:r,dataTypes:["string"],propertyName:r,compositeRule:!0},s),t.if((0,QC.not)(s),()=>{if(e.error(!0),!o.allErrors)t.break()})}),e.ok(s)}};$g.default=Fw});var ea=y(function(qg){Object.defineProperty(qg,"__esModule",{value:!0});var as=ke(),je=v(),Hw=ve(),ls=N(),vw={message:"must NOT have additional properties",params:({params:e})=>je._`{additionalProperty: ${e.additionalProperty}}`},kw={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:vw,code(e){let{gen:t,schema:i,parentSchema:n,data:o,errsCount:s,it:r}=e;if(!s)throw Error("ajv implementation error");let{allErrors:g,opts:a}=r;if(r.props=!0,a.removeAdditional!=="all"&&(0,ls.alwaysValidSchema)(r,i))return;let l=(0,as.allSchemaProperties)(n.properties),I=(0,as.allSchemaProperties)(n.patternProperties);d(),e.ok(je._`${s} === ${Hw.default.errors}`);function d(){t.forIn("key",o,(m)=>{if(!l.length&&!I.length)C(m);else t.if(u(m),()=>C(m))})}function u(m){let p;if(l.length>8){let Z=(0,ls.schemaRefOrVal)(r,n.properties,"properties");p=(0,as.isOwnProperty)(t,Z,m)}else if(l.length)p=(0,je.or)(...l.map((Z)=>je._`${m} === ${Z}`));else p=je.nil;if(I.length)p=(0,je.or)(p,...I.map((Z)=>je._`${(0,as.usePattern)(e,Z)}.test(${m})`));return(0,je.not)(p)}function c(m){t.code(je._`delete ${o}[${m}]`)}function C(m){if(a.removeAdditional==="all"||a.removeAdditional&&i===!1){c(m);return}if(i===!1){if(e.setParams({additionalProperty:m}),e.error(),!g)t.break();return}if(typeof i=="object"&&!(0,ls.alwaysValidSchema)(r,i)){let p=t.name("valid");if(a.removeAdditional==="failing")A(m,p,!1),t.if((0,je.not)(p),()=>{e.reset(),c(m)});else if(A(m,p),!g)t.if((0,je.not)(p),()=>t.break())}}function A(m,p,Z){let W={keyword:"additionalProperties",dataProp:m,dataPropType:ls.Type.Str};if(Z===!1)Object.assign(W,{compositeRule:!0,createErrors:!1,allErrors:!1});e.subschema(W,p)}}};qg.default=kw});var MC=y(function(ia){Object.defineProperty(ia,"__esModule",{value:!0});var Pw=Gi(),KC=ke(),ta=N(),LC=ea(),Yw={keyword:"properties",type:"object",schemaType:"object",code(e){let{gen:t,schema:i,parentSchema:n,data:o,it:s}=e;if(s.opts.removeAdditional==="all"&&n.additionalProperties===void 0)LC.default.code(new Pw.KeywordCxt(s,LC.default,"additionalProperties"));let r=(0,KC.allSchemaProperties)(i);for(let d of r)s.definedProperties.add(d);if(s.opts.unevaluated&&r.length&&s.props!==!0)s.props=ta.mergeEvaluated.props(t,(0,ta.toHash)(r),s.props);let g=r.filter((d)=>!(0,ta.alwaysValidSchema)(s,i[d]));if(g.length===0)return;let a=t.name("valid");for(let d of g){if(l(d))I(d);else{if(t.if((0,KC.propertyInData)(t,o,d,s.opts.ownProperties)),I(d),!s.allErrors)t.else().var(a,!0);t.endIf()}e.it.definedProperties.add(d),e.ok(a)}function l(d){return s.opts.useDefaults&&!s.compositeRule&&i[d].default!==void 0}function I(d){e.subschema({keyword:"properties",schemaProp:d,dataProp:d},a)}}};ia.default=Yw});var tu=y(function(na){Object.defineProperty(na,"__esModule",{value:!0});var $C=ke(),Is=v(),qC=N(),eu=N(),Nw={keyword:"patternProperties",type:"object",schemaType:"object",code(e){let{gen:t,schema:i,data:n,parentSchema:o,it:s}=e,{opts:r}=s,g=(0,$C.allSchemaProperties)(i),a=g.filter((A)=>(0,qC.alwaysValidSchema)(s,i[A]));if(g.length===0||a.length===g.length&&(!s.opts.unevaluated||s.props===!0))return;let l=r.strictSchema&&!r.allowMatchingProperties&&o.properties,I=t.name("valid");if(s.props!==!0&&!(s.props instanceof Is.Name))s.props=(0,eu.evaluatedPropsToName)(t,s.props);let{props:d}=s;u();function u(){for(let A of g){if(l)c(A);if(s.allErrors)C(A);else t.var(I,!0),C(A),t.if(I)}}function c(A){for(let m in l)if(new RegExp(A).test(m))(0,qC.checkStrictMode)(s,`property ${m} matches pattern ${A} (use allowMatchingProperties)`)}function C(A){t.forIn("key",n,(m)=>{t.if(Is._`${(0,$C.usePattern)(e,A)}.test(${m})`,()=>{let p=a.includes(A);if(!p)e.subschema({keyword:"patternProperties",schemaProp:A,dataProp:m,dataPropType:eu.Type.Str},I);if(s.opts.unevaluated&&d!==!0)t.assign(Is._`${d}[${m}]`,!0);else if(!p&&!s.allErrors)t.if((0,Is.not)(I),()=>t.break())})})}}};na.default=Nw});var iu=y(function(oa){Object.defineProperty(oa,"__esModule",{value:!0});var Xw=N(),Sw={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){let{gen:t,schema:i,it:n}=e;if((0,Xw.alwaysValidSchema)(n,i)){e.fail();return}let o=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},o),e.failResult(o,()=>e.reset(),()=>e.error())},error:{message:"must NOT be valid"}};oa.default=Sw});var nu=y(function(sa){Object.defineProperty(sa,"__esModule",{value:!0});var xw=ke(),Jw={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:xw.validateUnion,error:{message:"must match a schema in anyOf"}};sa.default=Jw});var ou=y(function(ra){Object.defineProperty(ra,"__esModule",{value:!0});var ds=v(),Ew=N(),Uw={message:"must match exactly one schema in oneOf",params:({params:e})=>ds._`{passingSchemas: ${e.passing}}`},Ow={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:Uw,code(e){let{gen:t,schema:i,parentSchema:n,it:o}=e;if(!Array.isArray(i))throw Error("ajv implementation error");if(o.opts.discriminator&&n.discriminator)return;let s=i,r=t.let("valid",!1),g=t.let("passing",null),a=t.name("_valid");e.setParams({passing:g}),t.block(l),e.result(r,()=>e.reset(),()=>e.error(!0));function l(){s.forEach((I,d)=>{let u;if((0,Ew.alwaysValidSchema)(o,I))t.var(a,!0);else u=e.subschema({keyword:"oneOf",schemaProp:d,compositeRule:!0},a);if(d>0)t.if(ds._`${a} && ${r}`).assign(r,!1).assign(g,ds._`[${g}, ${d}]`).else();t.if(a,()=>{if(t.assign(r,!0),t.assign(g,d),u)e.mergeEvaluated(u,ds.Name)})})}}};ra.default=Ow});var su=y(function(ga){Object.defineProperty(ga,"__esModule",{value:!0});var Tw=N(),zw={keyword:"allOf",schemaType:"array",code(e){let{gen:t,schema:i,it:n}=e;if(!Array.isArray(i))throw Error("ajv implementation error");let o=t.name("valid");i.forEach((s,r)=>{if((0,Tw.alwaysValidSchema)(n,s))return;let g=e.subschema({keyword:"allOf",schemaProp:r},o);e.ok(o),e.mergeEvaluated(g)})}};ga.default=zw});var au=y(function(aa){Object.defineProperty(aa,"__esModule",{value:!0});var cs=v(),gu=N(),jw={message:({params:e})=>cs.str`must match "${e.ifClause}" schema`,params:({params:e})=>cs._`{failingKeyword: ${e.ifClause}}`},Dw={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:jw,code(e){let{gen:t,parentSchema:i,it:n}=e;if(i.then===void 0&&i.else===void 0)(0,gu.checkStrictMode)(n,'"if" without "then" and "else" is ignored');let o=ru(n,"then"),s=ru(n,"else");if(!o&&!s)return;let r=t.let("valid",!0),g=t.name("_valid");if(a(),e.reset(),o&&s){let I=t.let("ifClause");e.setParams({ifClause:I}),t.if(g,l("then",I),l("else",I))}else if(o)t.if(g,l("then"));else t.if((0,cs.not)(g),l("else"));e.pass(r,()=>e.error(!0));function a(){let I=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},g);e.mergeEvaluated(I)}function l(I,d){return()=>{let u=e.subschema({keyword:I},g);if(t.assign(r,g),e.mergeValidEvaluated(u,r),d)t.assign(d,cs._`${I}`);else e.setParams({ifClause:I})}}}};function ru(e,t){let i=e.schema[t];return i!==void 0&&!(0,gu.alwaysValidSchema)(e,i)}aa.default=Dw});var lu=y(function(la){Object.defineProperty(la,"__esModule",{value:!0});var Qw=N(),_w={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:i}){if(t.if===void 0)(0,Qw.checkStrictMode)(i,`"${e}" without "if" is ignored`)}};la.default=_w});var da=y(function(Ia){Object.defineProperty(Ia,"__esModule",{value:!0});var Kw=Dg(),Lw=UC(),Mw=Qg(),$w=TC(),qw=zC(),eF=gs(),tF=_C(),iF=ea(),nF=MC(),oF=tu(),sF=iu(),rF=nu(),gF=ou(),aF=su(),lF=au(),IF=lu();function dF(e=!1){let t=[sF.default,rF.default,gF.default,aF.default,lF.default,IF.default,tF.default,iF.default,eF.default,nF.default,oF.default];if(e)t.push(Lw.default,$w.default);else t.push(Kw.default,Mw.default);return t.push(qw.default),t}Ia.default=dF});var Ca=y(function(Un){Object.defineProperty(Un,"__esModule",{value:!0});Un.dynamicAnchor=void 0;var ca=v(),cF=ve(),Iu=wn(),CF=es(),uF={keyword:"$dynamicAnchor",schemaType:"string",code:(e)=>du(e,e.schema)};function du(e,t){let{gen:i,it:n}=e;n.schemaEnv.root.dynamicAnchors[t]=!0;let o=ca._`${cF.default.dynamicAnchors}${(0,ca.getProperty)(t)}`,s=n.errSchemaPath==="#"?n.validateName:mF(e);i.if(ca._`!${o}`,()=>i.assign(o,s))}Un.dynamicAnchor=du;function mF(e){let{schemaEnv:t,schema:i,self:n}=e.it,{root:o,baseId:s,localRefs:r,meta:g}=t.root,{schemaId:a}=n.opts,l=new Iu.SchemaEnv({schema:i,schemaId:a,root:o,baseId:s,localRefs:r,meta:g});return Iu.compileSchema.call(n,l),(0,CF.getValidate)(e,l)}Un.default=uF});var ua=y(function(On){Object.defineProperty(On,"__esModule",{value:!0});On.dynamicRef=void 0;var cu=v(),pF=ve(),Cu=es(),AF={keyword:"$dynamicRef",schemaType:"string",code:(e)=>uu(e,e.schema)};function uu(e,t){let{gen:i,keyword:n,it:o}=e;if(t[0]!=="#")throw Error(`"${n}" only supports hash fragment reference`);let s=t.slice(1);if(o.allErrors)r();else{let a=i.let("valid",!1);r(a),e.ok(a)}function r(a){if(o.schemaEnv.root.dynamicAnchors[s]){let l=i.let("_v",cu._`${pF.default.dynamicAnchors}${(0,cu.getProperty)(s)}`);i.if(l,g(l,a),g(o.validateName,a))}else g(o.validateName,a)()}function g(a,l){return l?()=>i.block(()=>{(0,Cu.callRef)(e,a),i.let(l,!0)}):()=>(0,Cu.callRef)(e,a)}}On.dynamicRef=uu;On.default=AF});var mu=y(function(ma){Object.defineProperty(ma,"__esModule",{value:!0});var ZF=Ca(),bF=N(),WF={keyword:"$recursiveAnchor",schemaType:"boolean",code(e){if(e.schema)(0,ZF.dynamicAnchor)(e,"");else(0,bF.checkStrictMode)(e.it,"$recursiveAnchor: false is ignored")}};ma.default=WF});var pu=y(function(pa){Object.defineProperty(pa,"__esModule",{value:!0});var hF=ua(),fF={keyword:"$recursiveRef",schemaType:"string",code:(e)=>(0,hF.dynamicRef)(e,e.schema)};pa.default=fF});var Au=y(function(Aa){Object.defineProperty(Aa,"__esModule",{value:!0});var yF=Ca(),VF=ua(),BF=mu(),RF=pu(),GF=[yF.default,VF.default,BF.default,RF.default];Aa.default=GF});var bu=y(function(Za){Object.defineProperty(Za,"__esModule",{value:!0});var Zu=gs(),wF={keyword:"dependentRequired",type:"object",schemaType:"object",error:Zu.error,code:(e)=>(0,Zu.validatePropertyDeps)(e)};Za.default=wF});var Wu=y(function(ba){Object.defineProperty(ba,"__esModule",{value:!0});var FF=gs(),HF={keyword:"dependentSchemas",type:"object",schemaType:"object",code:(e)=>(0,FF.validateSchemaDeps)(e)};ba.default=HF});var hu=y(function(Wa){Object.defineProperty(Wa,"__esModule",{value:!0});var vF=N(),kF={keyword:["maxContains","minContains"],type:"array",schemaType:"number",code({keyword:e,parentSchema:t,it:i}){if(t.contains===void 0)(0,vF.checkStrictMode)(i,`"${e}" without "contains" is ignored`)}};Wa.default=kF});var fu=y(function(ha){Object.defineProperty(ha,"__esModule",{value:!0});var PF=bu(),YF=Wu(),NF=hu(),XF=[PF.default,YF.default,NF.default];ha.default=XF});var Vu=y(function(fa){Object.defineProperty(fa,"__esModule",{value:!0});var Yt=v(),yu=N(),SF=ve(),xF={message:"must NOT have unevaluated properties",params:({params:e})=>Yt._`{unevaluatedProperty: ${e.unevaluatedProperty}}`},JF={keyword:"unevaluatedProperties",type:"object",schemaType:["boolean","object"],trackErrors:!0,error:xF,code(e){let{gen:t,schema:i,data:n,errsCount:o,it:s}=e;if(!o)throw Error("ajv implementation error");let{allErrors:r,props:g}=s;if(g instanceof Yt.Name)t.if(Yt._`${g} !== true`,()=>t.forIn("key",n,(d)=>t.if(l(g,d),()=>a(d))));else if(g!==!0)t.forIn("key",n,(d)=>g===void 0?a(d):t.if(I(g,d),()=>a(d)));s.props=!0,e.ok(Yt._`${o} === ${SF.default.errors}`);function a(d){if(i===!1){if(e.setParams({unevaluatedProperty:d}),e.error(),!r)t.break();return}if(!(0,yu.alwaysValidSchema)(s,i)){let u=t.name("valid");if(e.subschema({keyword:"unevaluatedProperties",dataProp:d,dataPropType:yu.Type.Str},u),!r)t.if((0,Yt.not)(u),()=>t.break())}}function l(d,u){return Yt._`!${d} || !${d}[${u}]`}function I(d,u){let c=[];for(let C in d)if(d[C]===!0)c.push(Yt._`${u} !== ${C}`);return(0,Yt.and)(...c)}}};fa.default=JF});var Ru=y(function(ya){Object.defineProperty(ya,"__esModule",{value:!0});var Kt=v(),Bu=N(),EF={message:({params:{len:e}})=>Kt.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>Kt._`{limit: ${e}}`},UF={keyword:"unevaluatedItems",type:"array",schemaType:["boolean","object"],error:EF,code(e){let{gen:t,schema:i,data:n,it:o}=e,s=o.items||0;if(s===!0)return;let r=t.const("len",Kt._`${n}.length`);if(i===!1)e.setParams({len:s}),e.fail(Kt._`${r} > ${s}`);else if(typeof i=="object"&&!(0,Bu.alwaysValidSchema)(o,i)){let a=t.var("valid",Kt._`${r} <= ${s}`);t.if((0,Kt.not)(a),()=>g(a,s)),e.ok(a)}o.items=!0;function g(a,l){t.forRange("i",l,r,(I)=>{if(e.subschema({keyword:"unevaluatedItems",dataProp:I,dataPropType:Bu.Type.Num},a),!o.allErrors)t.if((0,Kt.not)(a),()=>t.break())})}}};ya.default=UF});var Gu=y(function(Va){Object.defineProperty(Va,"__esModule",{value:!0});var OF=Vu(),TF=Ru(),zF=[OF.default,TF.default];Va.default=zF});var wu=y(function(Ba){Object.defineProperty(Ba,"__esModule",{value:!0});var L=v(),jF={message:({schemaCode:e})=>L.str`must match format "${e}"`,params:({schemaCode:e})=>L._`{format: ${e}}`},DF={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:jF,code(e,t){let{gen:i,data:n,$data:o,schema:s,schemaCode:r,it:g}=e,{opts:a,errSchemaPath:l,schemaEnv:I,self:d}=g;if(!a.validateFormats)return;if(o)u();else c();function u(){let C=i.scopeValue("formats",{ref:d.formats,code:a.code.formats}),A=i.const("fDef",L._`${C}[${r}]`),m=i.let("fType"),p=i.let("format");i.if(L._`typeof ${A} == "object" && !(${A} instanceof RegExp)`,()=>i.assign(m,L._`${A}.type || "string"`).assign(p,L._`${A}.validate`),()=>i.assign(m,L._`"string"`).assign(p,A)),e.fail$data((0,L.or)(Z(),W()));function Z(){if(a.strictSchema===!1)return L.nil;return L._`${r} && !${p}`}function W(){let h=I.$async?L._`(${A}.async ? await ${p}(${n}) : ${p}(${n}))`:L._`${p}(${n})`,f=L._`(typeof ${p} == "function" ? ${h} : ${p}.test(${n}))`;return L._`${p} && ${p} !== true && ${m} === ${t} && !${f}`}}function c(){let C=d.formats[s];if(!C){Z();return}if(C===!0)return;let[A,m,p]=W(C);if(A===t)e.pass(h());function Z(){if(a.strictSchema===!1){d.logger.warn(f());return}throw Error(f());function f(){return`unknown format "${s}" ignored in schema at path "${l}"`}}function W(f){let V=f instanceof RegExp?(0,L.regexpCode)(f):a.code.formats?L._`${a.code.formats}${(0,L.getProperty)(s)}`:void 0,B=i.scopeValue("formats",{key:s,ref:f,code:V});if(typeof f=="object"&&!(f instanceof RegExp))return[f.type||"string",f.validate,L._`${B}.validate`];return["string",f,B]}function h(){if(typeof C=="object"&&!(C instanceof RegExp)&&C.async){if(!I.$async)throw Error("async format in sync schema");return L._`await ${p}(${n})`}return typeof m=="function"?L._`${p}(${n})`:L._`${p}.test(${n})`}}}};Ba.default=DF});var Ga=y(function(Ra){Object.defineProperty(Ra,"__esModule",{value:!0});var QF=wu(),_F=[QF.default];Ra.default=_F});var wa=y(function(vi){Object.defineProperty(vi,"__esModule",{value:!0});vi.contentVocabulary=vi.metadataVocabulary=void 0;vi.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];vi.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var Hu=y(function(Fa){Object.defineProperty(Fa,"__esModule",{value:!0});var KF=wg(),LF=zg(),MF=da(),$F=Au(),qF=fu(),eH=Gu(),tH=Ga(),Fu=wa(),iH=[$F.default,KF.default,LF.default,(0,MF.default)(!0),tH.default,Fu.metadataVocabulary,Fu.contentVocabulary,qF.default,eH.default];Fa.default=iH});var ku=y(function(Cs){Object.defineProperty(Cs,"__esModule",{value:!0});Cs.DiscrError=void 0;var vu;(function(e){e.Tag="tag",e.Mapping="mapping"})(vu||(Cs.DiscrError=vu={}))});var ka=y(function(va){Object.defineProperty(va,"__esModule",{value:!0});var ki=v(),Ha=ku(),Pu=wn(),nH=wi(),oH=N(),sH={message:({params:{discrError:e,tagName:t}})=>e===Ha.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:i}})=>ki._`{error: ${e}, tag: ${i}, tagValue: ${t}}`},rH={keyword:"discriminator",type:"object",schemaType:"object",error:sH,code(e){let{gen:t,data:i,schema:n,parentSchema:o,it:s}=e,{oneOf:r}=o;if(!s.opts.discriminator)throw Error("discriminator: requires discriminator option");let g=n.propertyName;if(typeof g!="string")throw Error("discriminator: requires propertyName");if(n.mapping)throw Error("discriminator: mapping is not supported");if(!r)throw Error("discriminator: requires oneOf keyword");let a=t.let("valid",!1),l=t.const("tag",ki._`${i}${(0,ki.getProperty)(g)}`);t.if(ki._`typeof ${l} == "string"`,()=>I(),()=>e.error(!1,{discrError:Ha.DiscrError.Tag,tag:l,tagName:g})),e.ok(a);function I(){let c=u();t.if(!1);for(let C in c)t.elseIf(ki._`${l} === ${C}`),t.assign(a,d(c[C]));t.else(),e.error(!1,{discrError:Ha.DiscrError.Mapping,tag:l,tagName:g}),t.endIf()}function d(c){let C=t.name("valid"),A=e.subschema({keyword:"oneOf",schemaProp:c},C);return e.mergeEvaluated(A,ki.Name),C}function u(){var c;let C={},A=p(o),m=!0;for(let h=0;h<r.length;h++){let f=r[h];if((f===null||f===void 0?void 0:f.$ref)&&!(0,oH.schemaHasRulesButRef)(f,s.self.RULES)){let B=f.$ref;if(f=Pu.resolveRef.call(s.self,s.schemaEnv.root,s.baseId,B),f instanceof Pu.SchemaEnv)f=f.schema;if(f===void 0)throw new nH.default(s.opts.uriResolver,s.baseId,B)}let V=(c=f===null||f===void 0?void 0:f.properties)===null||c===void 0?void 0:c[g];if(typeof V!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${g}"`);m=m&&(A||p(f)),Z(V,h)}if(!m)throw Error(`discriminator: "${g}" must be required`);return C;function p({required:h}){return Array.isArray(h)&&h.includes(g)}function Z(h,f){if(h.const)W(h.const,f);else if(h.enum)for(let V of h.enum)W(V,f);else throw Error(`discriminator: "properties/${g}" must have "const" or "enum"`)}function W(h,f){if(typeof h!="string"||h in C)throw Error(`discriminator: "${g}" values must be unique strings`);C[h]=f}}}};va.default=rH});var Yu=y(function(US,gH){gH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/schema",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0,"https://json-schema.org/draft/2020-12/vocab/applicator":!0,"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0,"https://json-schema.org/draft/2020-12/vocab/validation":!0,"https://json-schema.org/draft/2020-12/vocab/meta-data":!0,"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0,"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Core and Validation specifications meta-schema",allOf:[{$ref:"meta/core"},{$ref:"meta/applicator"},{$ref:"meta/unevaluated"},{$ref:"meta/validation"},{$ref:"meta/meta-data"},{$ref:"meta/format-annotation"},{$ref:"meta/content"}],type:["object","boolean"],$comment:"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.",properties:{definitions:{$comment:'"definitions" has been replaced by "$defs".',type:"object",additionalProperties:{$dynamicRef:"#meta"},deprecated:!0,default:{}},dependencies:{$comment:'"dependencies" has been split and replaced by "dependentSchemas" and "dependentRequired" in order to serve their differing semantics.',type:"object",additionalProperties:{anyOf:[{$dynamicRef:"#meta"},{$ref:"meta/validation#/$defs/stringArray"}]},deprecated:!0,default:{}},$recursiveAnchor:{$comment:'"$recursiveAnchor" has been replaced by "$dynamicAnchor".',$ref:"meta/core#/$defs/anchorString",deprecated:!0},$recursiveRef:{$comment:'"$recursiveRef" has been replaced by "$dynamicRef".',$ref:"meta/core#/$defs/uriReferenceString",deprecated:!0}}}});var Nu=y(function(OS,aH){aH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/applicator",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/applicator":!0},$dynamicAnchor:"meta",title:"Applicator vocabulary meta-schema",type:["object","boolean"],properties:{prefixItems:{$ref:"#/$defs/schemaArray"},items:{$dynamicRef:"#meta"},contains:{$dynamicRef:"#meta"},additionalProperties:{$dynamicRef:"#meta"},properties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},patternProperties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},propertyNames:{format:"regex"},default:{}},dependentSchemas:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},propertyNames:{$dynamicRef:"#meta"},if:{$dynamicRef:"#meta"},then:{$dynamicRef:"#meta"},else:{$dynamicRef:"#meta"},allOf:{$ref:"#/$defs/schemaArray"},anyOf:{$ref:"#/$defs/schemaArray"},oneOf:{$ref:"#/$defs/schemaArray"},not:{$dynamicRef:"#meta"}},$defs:{schemaArray:{type:"array",minItems:1,items:{$dynamicRef:"#meta"}}}}});var Xu=y(function(TS,lH){lH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/unevaluated",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0},$dynamicAnchor:"meta",title:"Unevaluated applicator vocabulary meta-schema",type:["object","boolean"],properties:{unevaluatedItems:{$dynamicRef:"#meta"},unevaluatedProperties:{$dynamicRef:"#meta"}}}});var Su=y(function(zS,IH){IH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/content",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Content vocabulary meta-schema",type:["object","boolean"],properties:{contentEncoding:{type:"string"},contentMediaType:{type:"string"},contentSchema:{$dynamicRef:"#meta"}}}});var xu=y(function(jS,dH){dH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/core",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0},$dynamicAnchor:"meta",title:"Core vocabulary meta-schema",type:["object","boolean"],properties:{$id:{$ref:"#/$defs/uriReferenceString",$comment:"Non-empty fragments not allowed.",pattern:"^[^#]*#?$"},$schema:{$ref:"#/$defs/uriString"},$ref:{$ref:"#/$defs/uriReferenceString"},$anchor:{$ref:"#/$defs/anchorString"},$dynamicRef:{$ref:"#/$defs/uriReferenceString"},$dynamicAnchor:{$ref:"#/$defs/anchorString"},$vocabulary:{type:"object",propertyNames:{$ref:"#/$defs/uriString"},additionalProperties:{type:"boolean"}},$comment:{type:"string"},$defs:{type:"object",additionalProperties:{$dynamicRef:"#meta"}}},$defs:{anchorString:{type:"string",pattern:"^[A-Za-z_][-A-Za-z0-9._]*$"},uriString:{type:"string",format:"uri"},uriReferenceString:{type:"string",format:"uri-reference"}}}});var Ju=y(function(DS,cH){cH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/format-annotation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0},$dynamicAnchor:"meta",title:"Format vocabulary meta-schema for annotation results",type:["object","boolean"],properties:{format:{type:"string"}}}});var Eu=y(function(QS,CH){CH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/meta-data",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/meta-data":!0},$dynamicAnchor:"meta",title:"Meta-data vocabulary meta-schema",type:["object","boolean"],properties:{title:{type:"string"},description:{type:"string"},default:!0,deprecated:{type:"boolean",default:!1},readOnly:{type:"boolean",default:!1},writeOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0}}}});var Uu=y(function(_S,uH){uH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/validation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/validation":!0},$dynamicAnchor:"meta",title:"Validation vocabulary meta-schema",type:["object","boolean"],properties:{type:{anyOf:[{$ref:"#/$defs/simpleTypes"},{type:"array",items:{$ref:"#/$defs/simpleTypes"},minItems:1,uniqueItems:!0}]},const:!0,enum:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/$defs/nonNegativeInteger"},minLength:{$ref:"#/$defs/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},maxItems:{$ref:"#/$defs/nonNegativeInteger"},minItems:{$ref:"#/$defs/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},maxContains:{$ref:"#/$defs/nonNegativeInteger"},minContains:{$ref:"#/$defs/nonNegativeInteger",default:1},maxProperties:{$ref:"#/$defs/nonNegativeInteger"},minProperties:{$ref:"#/$defs/nonNegativeIntegerDefault0"},required:{$ref:"#/$defs/stringArray"},dependentRequired:{type:"object",additionalProperties:{$ref:"#/$defs/stringArray"}}},$defs:{nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{$ref:"#/$defs/nonNegativeInteger",default:0},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}}}});var Ou=y(function(Pa){Object.defineProperty(Pa,"__esModule",{value:!0});var mH=Yu(),pH=Nu(),AH=Xu(),ZH=Su(),bH=xu(),WH=Ju(),hH=Eu(),fH=Uu(),yH=["/properties"];function VH(e){return[mH,pH,AH,ZH,bH,t(this,WH),hH,t(this,fH)].forEach((i)=>this.addMetaSchema(i,void 0,!1)),this;function t(i,n){return e?i.$dataMetaSchema(n,yH):n}}Pa.default=VH});var Xa=y(function(D,Na){Object.defineProperty(D,"__esModule",{value:!0});D.MissingRefError=D.ValidationError=D.CodeGen=D.Name=D.nil=D.stringify=D.str=D._=D.KeywordCxt=D.Ajv2020=void 0;var BH=Bg(),RH=Hu(),GH=ka(),wH=Ou(),Ya="https://json-schema.org/draft/2020-12/schema";class Tn extends BH.default{constructor(e={}){super({...e,dynamicRef:!0,next:!0,unevaluated:!0})}_addVocabularies(){if(super._addVocabularies(),RH.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(GH.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema();let{$data:e,meta:t}=this.opts;if(!t)return;wH.default.call(this,e),this.refs["http://json-schema.org/schema"]=Ya}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(Ya)?Ya:void 0)}}D.Ajv2020=Tn;Na.exports=D=Tn;Na.exports.Ajv2020=Tn;Object.defineProperty(D,"__esModule",{value:!0});D.default=Tn;var FH=Gi();Object.defineProperty(D,"KeywordCxt",{enumerable:!0,get:function(){return FH.KeywordCxt}});var Pi=v();Object.defineProperty(D,"_",{enumerable:!0,get:function(){return Pi._}});Object.defineProperty(D,"str",{enumerable:!0,get:function(){return Pi.str}});Object.defineProperty(D,"stringify",{enumerable:!0,get:function(){return Pi.stringify}});Object.defineProperty(D,"nil",{enumerable:!0,get:function(){return Pi.nil}});Object.defineProperty(D,"Name",{enumerable:!0,get:function(){return Pi.Name}});Object.defineProperty(D,"CodeGen",{enumerable:!0,get:function(){return Pi.CodeGen}});var HH=Rn();Object.defineProperty(D,"ValidationError",{enumerable:!0,get:function(){return HH.default}});var vH=wi();Object.defineProperty(D,"MissingRefError",{enumerable:!0,get:function(){return vH.default}})});var mm=y(function(ot){Object.defineProperty(ot,"__esModule",{value:!0});ot.formatNames=ot.fastFormats=ot.fullFormats=void 0;function nt(e,t){return{validate:e,compare:t}}ot.fullFormats={date:nt(dm,$a),time:nt(La(!0),qa),"date-time":nt(am(!0),Cm),"iso-time":nt(La(),cm),"iso-date-time":nt(am(),um),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:tv,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:av,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:iv,int32:{type:"number",validate:sv},int64:{type:"number",validate:rv},float:{type:"number",validate:Im},double:{type:"number",validate:Im},password:!0,binary:!0};ot.fastFormats={...ot.fullFormats,date:nt(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,$a),time:nt(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,qa),"date-time":nt(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,Cm),"iso-time":nt(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,cm),"iso-date-time":nt(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,um),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};ot.formatNames=Object.keys(ot.fullFormats);function LH(e){return e%4===0&&(e%100!==0||e%400===0)}var MH=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,$H=[0,31,28,31,30,31,30,31,31,30,31,30,31];function dm(e){let t=MH.exec(e);if(!t)return!1;let i=+t[1],n=+t[2],o=+t[3];return n>=1&&n<=12&&o>=1&&o<=(n===2&&LH(i)?29:$H[n])}function $a(e,t){if(!(e&&t))return;if(e>t)return 1;if(e<t)return-1;return 0}var Ka=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function La(e){return function(i){let n=Ka.exec(i);if(!n)return!1;let o=+n[1],s=+n[2],r=+n[3],g=n[4],a=n[5]==="-"?-1:1,l=+(n[6]||0),I=+(n[7]||0);if(l>23||I>59||e&&!g)return!1;if(o<=23&&s<=59&&r<60)return!0;let d=s-I*a,u=o-l*a-(d<0?1:0);return(u===23||u===-1)&&(d===59||d===-1)&&r<61}}function qa(e,t){if(!(e&&t))return;let i=new Date("2020-01-01T"+e).valueOf(),n=new Date("2020-01-01T"+t).valueOf();if(!(i&&n))return;return i-n}function cm(e,t){if(!(e&&t))return;let i=Ka.exec(e),n=Ka.exec(t);if(!(i&&n))return;if(e=i[1]+i[2]+i[3],t=n[1]+n[2]+n[3],e>t)return 1;if(e<t)return-1;return 0}var Ma=/t|\s/i;function am(e){let t=La(e);return function(n){let o=n.split(Ma);return o.length===2&&dm(o[0])&&t(o[1])}}function Cm(e,t){if(!(e&&t))return;let i=new Date(e).valueOf(),n=new Date(t).valueOf();if(!(i&&n))return;return i-n}function um(e,t){if(!(e&&t))return;let[i,n]=e.split(Ma),[o,s]=t.split(Ma),r=$a(i,o);if(r===void 0)return;return r||qa(n,s)}var qH=/\/|:/,ev=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function tv(e){return qH.test(e)&&ev.test(e)}var lm=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function iv(e){return lm.lastIndex=0,lm.test(e)}var nv=-2147483648,ov=2147483647;function sv(e){return Number.isInteger(e)&&e<=ov&&e>=nv}function rv(e){return Number.isInteger(e)}function Im(){return!0}var gv=/[^\\]\\Z/;function av(e){if(gv.test(e))return!1;try{return new RegExp(e),!0}catch(t){return!1}}});var Am=y(function(el){Object.defineProperty(el,"__esModule",{value:!0});var lv=wg(),Iv=zg(),dv=da(),cv=Ga(),pm=wa(),Cv=[lv.default,Iv.default,(0,dv.default)(),cv.default,pm.metadataVocabulary,pm.contentVocabulary];el.default=Cv});var Zm=y(function(p2,uv){uv.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var Wm=y(function(Q,tl){Object.defineProperty(Q,"__esModule",{value:!0});Q.MissingRefError=Q.ValidationError=Q.CodeGen=Q.Name=Q.nil=Q.stringify=Q.str=Q._=Q.KeywordCxt=Q.Ajv=void 0;var mv=Bg(),pv=Am(),Av=ka(),bm=Zm(),Zv=["/properties"],ps="http://json-schema.org/draft-07/schema";class jn extends mv.default{_addVocabularies(){if(super._addVocabularies(),pv.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(Av.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(bm,Zv):bm;this.addMetaSchema(e,ps,!1),this.refs["http://json-schema.org/schema"]=ps}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(ps)?ps:void 0)}}Q.Ajv=jn;tl.exports=Q=jn;tl.exports.Ajv=jn;Object.defineProperty(Q,"__esModule",{value:!0});Q.default=jn;var bv=Gi();Object.defineProperty(Q,"KeywordCxt",{enumerable:!0,get:function(){return bv.KeywordCxt}});var Si=v();Object.defineProperty(Q,"_",{enumerable:!0,get:function(){return Si._}});Object.defineProperty(Q,"str",{enumerable:!0,get:function(){return Si.str}});Object.defineProperty(Q,"stringify",{enumerable:!0,get:function(){return Si.stringify}});Object.defineProperty(Q,"nil",{enumerable:!0,get:function(){return Si.nil}});Object.defineProperty(Q,"Name",{enumerable:!0,get:function(){return Si.Name}});Object.defineProperty(Q,"CodeGen",{enumerable:!0,get:function(){return Si.CodeGen}});var Wv=Rn();Object.defineProperty(Q,"ValidationError",{enumerable:!0,get:function(){return Wv.default}});var hv=wi();Object.defineProperty(Q,"MissingRefError",{enumerable:!0,get:function(){return hv.default}})});var hm=y(function(xi){Object.defineProperty(xi,"__esModule",{value:!0});xi.formatLimitDefinition=void 0;var fv=Wm(),Qe=v(),Nt=Qe.operators,As={formatMaximum:{okStr:"<=",ok:Nt.LTE,fail:Nt.GT},formatMinimum:{okStr:">=",ok:Nt.GTE,fail:Nt.LT},formatExclusiveMaximum:{okStr:"<",ok:Nt.LT,fail:Nt.GTE},formatExclusiveMinimum:{okStr:">",ok:Nt.GT,fail:Nt.LTE}},yv={message:({keyword:e,schemaCode:t})=>Qe.str`should be ${As[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>Qe._`{comparison: ${As[e].okStr}, limit: ${t}}`};xi.formatLimitDefinition={keyword:Object.keys(As),type:"string",schemaType:"string",$data:!0,error:yv,code(e){let{gen:t,data:i,schemaCode:n,keyword:o,it:s}=e,{opts:r,self:g}=s;if(!r.validateFormats)return;let a=new fv.KeywordCxt(s,g.RULES.all.format.definition,"format");if(a.$data)l();else I();function l(){let u=t.scopeValue("formats",{ref:g.formats,code:r.code.formats}),c=t.const("fmt",Qe._`${u}[${a.schemaCode}]`);e.fail$data((0,Qe.or)(Qe._`typeof ${c} != "object"`,Qe._`${c} instanceof RegExp`,Qe._`typeof ${c}.compare != "function"`,d(c)))}function I(){let u=a.schema,c=g.formats[u];if(!c||c===!0)return;if(typeof c!="object"||c instanceof RegExp||typeof c.compare!="function")throw Error(`"${o}": format "${u}" does not define "compare" function`);let C=t.scopeValue("formats",{key:u,ref:c,code:r.code.formats?Qe._`${r.code.formats}${(0,Qe.getProperty)(u)}`:void 0});e.fail$data(d(C))}function d(u){return Qe._`${u}.compare(${i}, ${n}) ${As[o].fail} 0`}},dependencies:["format"]};var Vv=(e)=>(e.addKeyword(xi.formatLimitDefinition),e);xi.default=Vv});var Bm=y(function(Dn,Vm){Object.defineProperty(Dn,"__esModule",{value:!0});var Ji=mm(),Bv=hm(),il=v(),fm=new il.Name("fullFormats"),Rv=new il.Name("fastFormats"),nl=(e,t={keywords:!0})=>{if(Array.isArray(t))return ym(e,t,Ji.fullFormats,fm),e;let[i,n]=t.mode==="fast"?[Ji.fastFormats,Rv]:[Ji.fullFormats,fm],o=t.formats||Ji.formatNames;if(ym(e,o,i,n),t.keywords)(0,Bv.default)(e);return e};nl.get=(e,t="full")=>{let n=(t==="fast"?Ji.fastFormats:Ji.fullFormats)[e];if(!n)throw Error(`Unknown format "${e}"`);return n};function ym(e,t,i,n){var o,s;(o=(s=e.opts.code).formats)!==null&&o!==void 0||(s.formats=il._`require("ajv-formats/dist/formats").${n}`);for(let r of t)e.addFormat(r,i[r])}Vm.exports=Dn=nl;Object.defineProperty(Dn,"__esModule",{value:!0});Dn.default=nl});var Fb=y(function(tz,wb){wb.exports=EN;function JN(e){let t={defaultWidth:0,output:process.stdout,tty:require("tty")};if(!e)return t;return Object.keys(t).forEach(function(i){if(!e[i])e[i]=t[i]}),e}function EN(e){let t=JN(e);if(t.output.getWindowSize)return t.output.getWindowSize()[0]||t.defaultWidth;if(t.tty.getWindowSize)return t.tty.getWindowSize()[1]||t.defaultWidth;if(t.output.columns)return t.output.columns;if(process.env.CLI_WIDTH){let i=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(i)&&i!==0)return i}return t.defaultWidth}});var _b=y(function(mz,Qb){var t1=require("stream");class Db extends t1{#i=null;constructor(e={}){super(e);this.writable=this.readable=!0,this.muted=!1,this.on("pipe",this._onpipe),this.replace=e.replace,this._prompt=e.prompt||null,this._hadControl=!1}#t(e,t){if(this._dest)return this._dest[e];if(this._src)return this._src[e];return t}#e(e,...t){if(typeof this._dest?.[e]==="function")this._dest[e](...t);if(typeof this._src?.[e]==="function")this._src[e](...t)}get isTTY(){if(this.#i!==null)return this.#i;return this.#t("isTTY",!1)}set isTTY(e){this.#i=e}get rows(){return this.#t("rows")}get columns(){return this.#t("columns")}mute(){this.muted=!0}unmute(){this.muted=!1}_onpipe(e){this._src=e}pipe(e,t){return this._dest=e,super.pipe(e,t)}pause(){if(this._src)return this._src.pause()}resume(){if(this._src)return this._src.resume()}write(e){if(this.muted){if(!this.replace)return!0;if(e.match(/^\u001b/)){if(e.indexOf(this._prompt)===0)e=e.slice(this._prompt.length),e=e.replace(/./g,this.replace),e=this._prompt+e;return this._hadControl=!0,this.emit("data",e)}else{if(this._prompt&&this._hadControl&&e.indexOf(this._prompt)===0)this._hadControl=!1,this.emit("data",this._prompt),e=e.slice(this._prompt.length);e=e.toString().replace(/./g,this.replace)}}this.emit("data",e)}end(e){if(this.muted)if(e&&this.replace)e=e.toString().replace(/./g,this.replace);else e=null;if(e)this.emit("data",e);this.emit("end")}destroy(...e){return this.#e("destroy",...e)}destroySoon(...e){return this.#e("destroySoon",...e)}close(...e){return this.#e("close",...e)}}Qb.exports=Db});class ct extends Error{constructor(e,t,i){super(i);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}}class Ct extends ct{constructor(e){super(1,"commander.invalidArgument",e);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}class wo{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue(e,t){if(t===this.defaultValue||!Array.isArray(t))return[e];return t.push(e),t}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,i)=>{if(!this.argChoices.includes(t))throw new Ct(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(t,i);return t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function Fo(e){let t=e.name()+(e.variadic===!0?"...":"");return e.required?"<"+t+">":"["+t+"]"}var MI=require("events"),vo=be(require("child_process")),Le=be(require("path")),pn=be(require("fs")),E=be(require("process")),$I=require("util");var QI=require("util");class Ho{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(e){this.helpWidth=this.helpWidth??e.helpWidth??80}visibleCommands(e){let t=e.commands.filter((n)=>!n._hidden),i=e._getHelpCommand();if(i&&!i._hidden)t.push(i);if(this.sortSubcommands)t.sort((n,o)=>n.name().localeCompare(o.name()));return t}compareOptions(e,t){let i=(n)=>n.short?n.short.replace(/^-/,""):n.long.replace(/^--/,"");return i(e).localeCompare(i(t))}visibleOptions(e){let t=e.options.filter((n)=>!n.hidden),i=e._getHelpOption();if(i&&!i.hidden){let n=i.short&&e._findOption(i.short),o=i.long&&e._findOption(i.long);if(!n&&!o)t.push(i);else if(i.long&&!o)t.push(e.createOption(i.long,i.description));else if(i.short&&!n)t.push(e.createOption(i.short,i.description))}if(this.sortOptions)t.sort(this.compareOptions);return t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let i=e.parent;i;i=i.parent){let n=i.options.filter((o)=>!o.hidden);t.push(...n)}if(this.sortOptions)t.sort(this.compareOptions);return t}visibleArguments(e){if(e._argsDescription)e.registeredArguments.forEach((t)=>{t.description=t.description||e._argsDescription[t.name()]||""});if(e.registeredArguments.find((t)=>t.description))return e.registeredArguments;return[]}subcommandTerm(e){let t=e.registeredArguments.map((i)=>Fo(i)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((i,n)=>Math.max(i,this.displayWidth(t.styleSubcommandTerm(t.subcommandTerm(n)))),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((i,n)=>Math.max(i,this.displayWidth(t.styleOptionTerm(t.optionTerm(n)))),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((i,n)=>Math.max(i,this.displayWidth(t.styleOptionTerm(t.optionTerm(n)))),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((i,n)=>Math.max(i,this.displayWidth(t.styleArgumentTerm(t.argumentTerm(n)))),0)}commandUsage(e){let t=e._name;if(e._aliases[0])t=t+"|"+e._aliases[0];let i="";for(let n=e.parent;n;n=n.parent)i=n.name()+" "+i;return i+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];if(e.argChoices)t.push(`choices: ${e.argChoices.map((i)=>JSON.stringify(i)).join(", ")}`);if(e.defaultValue!==void 0){if(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue==="boolean")t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`)}if(e.presetArg!==void 0&&e.optional)t.push(`preset: ${JSON.stringify(e.presetArg)}`);if(e.envVar!==void 0)t.push(`env: ${e.envVar}`);if(t.length>0){let i=`(${t.join(", ")})`;if(e.description)return`${e.description} ${i}`;return i}return e.description}argumentDescription(e){let t=[];if(e.argChoices)t.push(`choices: ${e.argChoices.map((i)=>JSON.stringify(i)).join(", ")}`);if(e.defaultValue!==void 0)t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`);if(t.length>0){let i=`(${t.join(", ")})`;if(e.description)return`${e.description} ${i}`;return i}return e.description}formatItemList(e,t,i){if(t.length===0)return[];return[i.styleTitle(e),...t,""]}groupItems(e,t,i){let n=new Map;return e.forEach((o)=>{let s=i(o);if(!n.has(s))n.set(s,[])}),t.forEach((o)=>{let s=i(o);if(!n.has(s))n.set(s,[]);n.get(s).push(o)}),n}formatHelp(e,t){let i=t.padWidth(e,t),n=t.helpWidth??80;function o(I,d){return t.formatItem(I,i,d,t)}let s=[`${t.styleTitle("Usage:")} ${t.styleUsage(t.commandUsage(e))}`,""],r=t.commandDescription(e);if(r.length>0)s=s.concat([t.boxWrap(t.styleCommandDescription(r),n),""]);let g=t.visibleArguments(e).map((I)=>o(t.styleArgumentTerm(t.argumentTerm(I)),t.styleArgumentDescription(t.argumentDescription(I))));if(s=s.concat(this.formatItemList("Arguments:",g,t)),this.groupItems(e.options,t.visibleOptions(e),(I)=>I.helpGroupHeading??"Options:").forEach((I,d)=>{let u=I.map((c)=>o(t.styleOptionTerm(t.optionTerm(c)),t.styleOptionDescription(t.optionDescription(c))));s=s.concat(this.formatItemList(d,u,t))}),t.showGlobalOptions){let I=t.visibleGlobalOptions(e).map((d)=>o(t.styleOptionTerm(t.optionTerm(d)),t.styleOptionDescription(t.optionDescription(d))));s=s.concat(this.formatItemList("Global Options:",I,t))}return this.groupItems(e.commands,t.visibleCommands(e),(I)=>I.helpGroup()||"Commands:").forEach((I,d)=>{let u=I.map((c)=>o(t.styleSubcommandTerm(t.subcommandTerm(c)),t.styleSubcommandDescription(t.subcommandDescription(c))));s=s.concat(this.formatItemList(d,u,t))}),s.join(`
11
- `)}displayWidth(e){return QI.stripVTControlCharacters(e).length}styleTitle(e){return e}styleUsage(e){return e.split(" ").map((t)=>{if(t==="[options]")return this.styleOptionText(t);if(t==="[command]")return this.styleSubcommandText(t);if(t[0]==="["||t[0]==="<")return this.styleArgumentText(t);return this.styleCommandText(t)}).join(" ")}styleCommandDescription(e){return this.styleDescriptionText(e)}styleOptionDescription(e){return this.styleDescriptionText(e)}styleSubcommandDescription(e){return this.styleDescriptionText(e)}styleArgumentDescription(e){return this.styleDescriptionText(e)}styleDescriptionText(e){return e}styleOptionTerm(e){return this.styleOptionText(e)}styleSubcommandTerm(e){return e.split(" ").map((t)=>{if(t==="[options]")return this.styleOptionText(t);if(t[0]==="["||t[0]==="<")return this.styleArgumentText(t);return this.styleSubcommandText(t)}).join(" ")}styleArgumentTerm(e){return this.styleArgumentText(e)}styleOptionText(e){return e}styleArgumentText(e){return e}styleSubcommandText(e){return e}styleCommandText(e){return e}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}preformatted(e){return/\n[^\S\r\n]/.test(e)}formatItem(e,t,i,n){let s=" ".repeat(2);if(!i)return s+e;let r=e.padEnd(t+e.length-n.displayWidth(e)),g=2,l=(this.helpWidth??80)-t-g-2,I;if(l<this.minWidthToWrap||n.preformatted(i))I=i;else I=n.boxWrap(i,l).replace(/\n/g,`
10
+ deps: ${i}}`};var Rw={keyword:"dependencies",type:"object",schemaType:"object",error:tt.error,code(e){let[t,i]=Gw(e);QC(e,t),_C(e,i)}};function Gw({schema:e}){let t={},i={};for(let n in e){if(n==="__proto__")continue;let o=Array.isArray(e[n])?t:i;o[n]=e[n]}return[t,i]}function QC(e,t=e.schema){let{gen:i,data:n,it:o}=e;if(Object.keys(t).length===0)return;let s=i.let("missing");for(let r in t){let g=t[r];if(g.length===0)continue;let a=(0,Un.propertyInData)(i,n,r,o.opts.ownProperties);if(e.setParams({property:r,depsCount:g.length,deps:g.join(", ")}),o.allErrors)i.if(a,()=>{for(let l of g)(0,Un.checkReportMissingProp)(e,l)});else i.if(qg._`${a} && (${(0,Un.checkMissingProp)(e,g,s)})`),(0,Un.reportMissingProp)(e,s),i.else()}}tt.validatePropertyDeps=QC;function _C(e,t=e.schema){let{gen:i,data:n,keyword:o,it:s}=e,r=i.name("valid");for(let g in t){if((0,Bw.alwaysValidSchema)(s,t[g]))continue;i.if((0,Un.propertyInData)(i,n,g,s.opts.ownProperties),()=>{let a=e.subschema({keyword:o,schemaProp:g},r);e.mergeValidEvaluated(a,r)},()=>i.var(r,!0)),e.ok(r)}}tt.validateSchemaDeps=_C;tt.default=Rw});var LC=y(function(ea){Object.defineProperty(ea,"__esModule",{value:!0});var KC=v(),ww=N(),Fw={message:"property name must be valid",params:({params:e})=>KC._`{propertyName: ${e.propertyName}}`},Hw={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:Fw,code(e){let{gen:t,schema:i,data:n,it:o}=e;if((0,ww.alwaysValidSchema)(o,i))return;let s=t.name("valid");t.forIn("key",n,(r)=>{e.setParams({propertyName:r}),e.subschema({keyword:"propertyNames",data:r,dataTypes:["string"],propertyName:r,compositeRule:!0},s),t.if((0,KC.not)(s),()=>{if(e.error(!0),!o.allErrors)t.break()})}),e.ok(s)}};ea.default=Hw});var ia=y(function(ta){Object.defineProperty(ta,"__esModule",{value:!0});var ds=Pe(),De=v(),vw=ke(),cs=N(),kw={message:"must NOT have additional properties",params:({params:e})=>De._`{additionalProperty: ${e.additionalProperty}}`},Pw={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:kw,code(e){let{gen:t,schema:i,parentSchema:n,data:o,errsCount:s,it:r}=e;if(!s)throw Error("ajv implementation error");let{allErrors:g,opts:a}=r;if(r.props=!0,a.removeAdditional!=="all"&&(0,cs.alwaysValidSchema)(r,i))return;let l=(0,ds.allSchemaProperties)(n.properties),I=(0,ds.allSchemaProperties)(n.patternProperties);d(),e.ok(De._`${s} === ${vw.default.errors}`);function d(){t.forIn("key",o,(m)=>{if(!l.length&&!I.length)C(m);else t.if(u(m),()=>C(m))})}function u(m){let p;if(l.length>8){let Z=(0,cs.schemaRefOrVal)(r,n.properties,"properties");p=(0,ds.isOwnProperty)(t,Z,m)}else if(l.length)p=(0,De.or)(...l.map((Z)=>De._`${m} === ${Z}`));else p=De.nil;if(I.length)p=(0,De.or)(p,...I.map((Z)=>De._`${(0,ds.usePattern)(e,Z)}.test(${m})`));return(0,De.not)(p)}function c(m){t.code(De._`delete ${o}[${m}]`)}function C(m){if(a.removeAdditional==="all"||a.removeAdditional&&i===!1){c(m);return}if(i===!1){if(e.setParams({additionalProperty:m}),e.error(),!g)t.break();return}if(typeof i=="object"&&!(0,cs.alwaysValidSchema)(r,i)){let p=t.name("valid");if(a.removeAdditional==="failing")A(m,p,!1),t.if((0,De.not)(p),()=>{e.reset(),c(m)});else if(A(m,p),!g)t.if((0,De.not)(p),()=>t.break())}}function A(m,p,Z){let W={keyword:"additionalProperties",dataProp:m,dataPropType:cs.Type.Str};if(Z===!1)Object.assign(W,{compositeRule:!0,createErrors:!1,allErrors:!1});e.subschema(W,p)}}};ta.default=Pw});var qC=y(function(oa){Object.defineProperty(oa,"__esModule",{value:!0});var Yw=wi(),MC=Pe(),na=N(),$C=ia(),Nw={keyword:"properties",type:"object",schemaType:"object",code(e){let{gen:t,schema:i,parentSchema:n,data:o,it:s}=e;if(s.opts.removeAdditional==="all"&&n.additionalProperties===void 0)$C.default.code(new Yw.KeywordCxt(s,$C.default,"additionalProperties"));let r=(0,MC.allSchemaProperties)(i);for(let d of r)s.definedProperties.add(d);if(s.opts.unevaluated&&r.length&&s.props!==!0)s.props=na.mergeEvaluated.props(t,(0,na.toHash)(r),s.props);let g=r.filter((d)=>!(0,na.alwaysValidSchema)(s,i[d]));if(g.length===0)return;let a=t.name("valid");for(let d of g){if(l(d))I(d);else{if(t.if((0,MC.propertyInData)(t,o,d,s.opts.ownProperties)),I(d),!s.allErrors)t.else().var(a,!0);t.endIf()}e.it.definedProperties.add(d),e.ok(a)}function l(d){return s.opts.useDefaults&&!s.compositeRule&&i[d].default!==void 0}function I(d){e.subschema({keyword:"properties",schemaProp:d,dataProp:d},a)}}};oa.default=Nw});var nu=y(function(sa){Object.defineProperty(sa,"__esModule",{value:!0});var eu=Pe(),Cs=v(),tu=N(),iu=N(),Xw={keyword:"patternProperties",type:"object",schemaType:"object",code(e){let{gen:t,schema:i,data:n,parentSchema:o,it:s}=e,{opts:r}=s,g=(0,eu.allSchemaProperties)(i),a=g.filter((A)=>(0,tu.alwaysValidSchema)(s,i[A]));if(g.length===0||a.length===g.length&&(!s.opts.unevaluated||s.props===!0))return;let l=r.strictSchema&&!r.allowMatchingProperties&&o.properties,I=t.name("valid");if(s.props!==!0&&!(s.props instanceof Cs.Name))s.props=(0,iu.evaluatedPropsToName)(t,s.props);let{props:d}=s;u();function u(){for(let A of g){if(l)c(A);if(s.allErrors)C(A);else t.var(I,!0),C(A),t.if(I)}}function c(A){for(let m in l)if(new RegExp(A).test(m))(0,tu.checkStrictMode)(s,`property ${m} matches pattern ${A} (use allowMatchingProperties)`)}function C(A){t.forIn("key",n,(m)=>{t.if(Cs._`${(0,eu.usePattern)(e,A)}.test(${m})`,()=>{let p=a.includes(A);if(!p)e.subschema({keyword:"patternProperties",schemaProp:A,dataProp:m,dataPropType:iu.Type.Str},I);if(s.opts.unevaluated&&d!==!0)t.assign(Cs._`${d}[${m}]`,!0);else if(!p&&!s.allErrors)t.if((0,Cs.not)(I),()=>t.break())})})}}};sa.default=Xw});var ou=y(function(ra){Object.defineProperty(ra,"__esModule",{value:!0});var Sw=N(),xw={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){let{gen:t,schema:i,it:n}=e;if((0,Sw.alwaysValidSchema)(n,i)){e.fail();return}let o=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},o),e.failResult(o,()=>e.reset(),()=>e.error())},error:{message:"must NOT be valid"}};ra.default=xw});var su=y(function(ga){Object.defineProperty(ga,"__esModule",{value:!0});var Jw=Pe(),Ew={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:Jw.validateUnion,error:{message:"must match a schema in anyOf"}};ga.default=Ew});var ru=y(function(aa){Object.defineProperty(aa,"__esModule",{value:!0});var us=v(),Uw=N(),Ow={message:"must match exactly one schema in oneOf",params:({params:e})=>us._`{passingSchemas: ${e.passing}}`},Tw={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:Ow,code(e){let{gen:t,schema:i,parentSchema:n,it:o}=e;if(!Array.isArray(i))throw Error("ajv implementation error");if(o.opts.discriminator&&n.discriminator)return;let s=i,r=t.let("valid",!1),g=t.let("passing",null),a=t.name("_valid");e.setParams({passing:g}),t.block(l),e.result(r,()=>e.reset(),()=>e.error(!0));function l(){s.forEach((I,d)=>{let u;if((0,Uw.alwaysValidSchema)(o,I))t.var(a,!0);else u=e.subschema({keyword:"oneOf",schemaProp:d,compositeRule:!0},a);if(d>0)t.if(us._`${a} && ${r}`).assign(r,!1).assign(g,us._`[${g}, ${d}]`).else();t.if(a,()=>{if(t.assign(r,!0),t.assign(g,d),u)e.mergeEvaluated(u,us.Name)})})}}};aa.default=Tw});var gu=y(function(la){Object.defineProperty(la,"__esModule",{value:!0});var zw=N(),jw={keyword:"allOf",schemaType:"array",code(e){let{gen:t,schema:i,it:n}=e;if(!Array.isArray(i))throw Error("ajv implementation error");let o=t.name("valid");i.forEach((s,r)=>{if((0,zw.alwaysValidSchema)(n,s))return;let g=e.subschema({keyword:"allOf",schemaProp:r},o);e.ok(o),e.mergeEvaluated(g)})}};la.default=jw});var Iu=y(function(Ia){Object.defineProperty(Ia,"__esModule",{value:!0});var ms=v(),lu=N(),Dw={message:({params:e})=>ms.str`must match "${e.ifClause}" schema`,params:({params:e})=>ms._`{failingKeyword: ${e.ifClause}}`},Qw={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:Dw,code(e){let{gen:t,parentSchema:i,it:n}=e;if(i.then===void 0&&i.else===void 0)(0,lu.checkStrictMode)(n,'"if" without "then" and "else" is ignored');let o=au(n,"then"),s=au(n,"else");if(!o&&!s)return;let r=t.let("valid",!0),g=t.name("_valid");if(a(),e.reset(),o&&s){let I=t.let("ifClause");e.setParams({ifClause:I}),t.if(g,l("then",I),l("else",I))}else if(o)t.if(g,l("then"));else t.if((0,ms.not)(g),l("else"));e.pass(r,()=>e.error(!0));function a(){let I=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},g);e.mergeEvaluated(I)}function l(I,d){return()=>{let u=e.subschema({keyword:I},g);if(t.assign(r,g),e.mergeValidEvaluated(u,r),d)t.assign(d,ms._`${I}`);else e.setParams({ifClause:I})}}}};function au(e,t){let i=e.schema[t];return i!==void 0&&!(0,lu.alwaysValidSchema)(e,i)}Ia.default=Qw});var du=y(function(da){Object.defineProperty(da,"__esModule",{value:!0});var _w=N(),Kw={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:i}){if(t.if===void 0)(0,_w.checkStrictMode)(i,`"${e}" without "if" is ignored`)}};da.default=Kw});var Ca=y(function(ca){Object.defineProperty(ca,"__esModule",{value:!0});var Lw=_g(),Mw=TC(),$w=Kg(),qw=jC(),eF=DC(),tF=Is(),iF=LC(),nF=ia(),oF=qC(),sF=nu(),rF=ou(),gF=su(),aF=ru(),lF=gu(),IF=Iu(),dF=du();function cF(e=!1){let t=[rF.default,gF.default,aF.default,lF.default,IF.default,dF.default,iF.default,nF.default,tF.default,oF.default,sF.default];if(e)t.push(Mw.default,qw.default);else t.push(Lw.default,$w.default);return t.push(eF.default),t}ca.default=cF});var ma=y(function(On){Object.defineProperty(On,"__esModule",{value:!0});On.dynamicAnchor=void 0;var ua=v(),CF=ke(),cu=Fn(),uF=ns(),mF={keyword:"$dynamicAnchor",schemaType:"string",code:(e)=>Cu(e,e.schema)};function Cu(e,t){let{gen:i,it:n}=e;n.schemaEnv.root.dynamicAnchors[t]=!0;let o=ua._`${CF.default.dynamicAnchors}${(0,ua.getProperty)(t)}`,s=n.errSchemaPath==="#"?n.validateName:pF(e);i.if(ua._`!${o}`,()=>i.assign(o,s))}On.dynamicAnchor=Cu;function pF(e){let{schemaEnv:t,schema:i,self:n}=e.it,{root:o,baseId:s,localRefs:r,meta:g}=t.root,{schemaId:a}=n.opts,l=new cu.SchemaEnv({schema:i,schemaId:a,root:o,baseId:s,localRefs:r,meta:g});return cu.compileSchema.call(n,l),(0,uF.getValidate)(e,l)}On.default=mF});var pa=y(function(Tn){Object.defineProperty(Tn,"__esModule",{value:!0});Tn.dynamicRef=void 0;var uu=v(),AF=ke(),mu=ns(),ZF={keyword:"$dynamicRef",schemaType:"string",code:(e)=>pu(e,e.schema)};function pu(e,t){let{gen:i,keyword:n,it:o}=e;if(t[0]!=="#")throw Error(`"${n}" only supports hash fragment reference`);let s=t.slice(1);if(o.allErrors)r();else{let a=i.let("valid",!1);r(a),e.ok(a)}function r(a){if(o.schemaEnv.root.dynamicAnchors[s]){let l=i.let("_v",uu._`${AF.default.dynamicAnchors}${(0,uu.getProperty)(s)}`);i.if(l,g(l,a),g(o.validateName,a))}else g(o.validateName,a)()}function g(a,l){return l?()=>i.block(()=>{(0,mu.callRef)(e,a),i.let(l,!0)}):()=>(0,mu.callRef)(e,a)}}Tn.dynamicRef=pu;Tn.default=ZF});var Au=y(function(Aa){Object.defineProperty(Aa,"__esModule",{value:!0});var bF=ma(),WF=N(),hF={keyword:"$recursiveAnchor",schemaType:"boolean",code(e){if(e.schema)(0,bF.dynamicAnchor)(e,"");else(0,WF.checkStrictMode)(e.it,"$recursiveAnchor: false is ignored")}};Aa.default=hF});var Zu=y(function(Za){Object.defineProperty(Za,"__esModule",{value:!0});var fF=pa(),yF={keyword:"$recursiveRef",schemaType:"string",code:(e)=>(0,fF.dynamicRef)(e,e.schema)};Za.default=yF});var bu=y(function(ba){Object.defineProperty(ba,"__esModule",{value:!0});var VF=ma(),BF=pa(),RF=Au(),GF=Zu(),wF=[VF.default,BF.default,RF.default,GF.default];ba.default=wF});var hu=y(function(Wa){Object.defineProperty(Wa,"__esModule",{value:!0});var Wu=Is(),FF={keyword:"dependentRequired",type:"object",schemaType:"object",error:Wu.error,code:(e)=>(0,Wu.validatePropertyDeps)(e)};Wa.default=FF});var fu=y(function(ha){Object.defineProperty(ha,"__esModule",{value:!0});var HF=Is(),vF={keyword:"dependentSchemas",type:"object",schemaType:"object",code:(e)=>(0,HF.validateSchemaDeps)(e)};ha.default=vF});var yu=y(function(fa){Object.defineProperty(fa,"__esModule",{value:!0});var kF=N(),PF={keyword:["maxContains","minContains"],type:"array",schemaType:"number",code({keyword:e,parentSchema:t,it:i}){if(t.contains===void 0)(0,kF.checkStrictMode)(i,`"${e}" without "contains" is ignored`)}};fa.default=PF});var Vu=y(function(ya){Object.defineProperty(ya,"__esModule",{value:!0});var YF=hu(),NF=fu(),XF=yu(),SF=[YF.default,NF.default,XF.default];ya.default=SF});var Ru=y(function(Va){Object.defineProperty(Va,"__esModule",{value:!0});var Yt=v(),Bu=N(),xF=ke(),JF={message:"must NOT have unevaluated properties",params:({params:e})=>Yt._`{unevaluatedProperty: ${e.unevaluatedProperty}}`},EF={keyword:"unevaluatedProperties",type:"object",schemaType:["boolean","object"],trackErrors:!0,error:JF,code(e){let{gen:t,schema:i,data:n,errsCount:o,it:s}=e;if(!o)throw Error("ajv implementation error");let{allErrors:r,props:g}=s;if(g instanceof Yt.Name)t.if(Yt._`${g} !== true`,()=>t.forIn("key",n,(d)=>t.if(l(g,d),()=>a(d))));else if(g!==!0)t.forIn("key",n,(d)=>g===void 0?a(d):t.if(I(g,d),()=>a(d)));s.props=!0,e.ok(Yt._`${o} === ${xF.default.errors}`);function a(d){if(i===!1){if(e.setParams({unevaluatedProperty:d}),e.error(),!r)t.break();return}if(!(0,Bu.alwaysValidSchema)(s,i)){let u=t.name("valid");if(e.subschema({keyword:"unevaluatedProperties",dataProp:d,dataPropType:Bu.Type.Str},u),!r)t.if((0,Yt.not)(u),()=>t.break())}}function l(d,u){return Yt._`!${d} || !${d}[${u}]`}function I(d,u){let c=[];for(let C in d)if(d[C]===!0)c.push(Yt._`${u} !== ${C}`);return(0,Yt.and)(...c)}}};Va.default=EF});var wu=y(function(Ba){Object.defineProperty(Ba,"__esModule",{value:!0});var Kt=v(),Gu=N(),UF={message:({params:{len:e}})=>Kt.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>Kt._`{limit: ${e}}`},OF={keyword:"unevaluatedItems",type:"array",schemaType:["boolean","object"],error:UF,code(e){let{gen:t,schema:i,data:n,it:o}=e,s=o.items||0;if(s===!0)return;let r=t.const("len",Kt._`${n}.length`);if(i===!1)e.setParams({len:s}),e.fail(Kt._`${r} > ${s}`);else if(typeof i=="object"&&!(0,Gu.alwaysValidSchema)(o,i)){let a=t.var("valid",Kt._`${r} <= ${s}`);t.if((0,Kt.not)(a),()=>g(a,s)),e.ok(a)}o.items=!0;function g(a,l){t.forRange("i",l,r,(I)=>{if(e.subschema({keyword:"unevaluatedItems",dataProp:I,dataPropType:Gu.Type.Num},a),!o.allErrors)t.if((0,Kt.not)(a),()=>t.break())})}}};Ba.default=OF});var Fu=y(function(Ra){Object.defineProperty(Ra,"__esModule",{value:!0});var TF=Ru(),zF=wu(),jF=[TF.default,zF.default];Ra.default=jF});var Hu=y(function(Ga){Object.defineProperty(Ga,"__esModule",{value:!0});var L=v(),DF={message:({schemaCode:e})=>L.str`must match format "${e}"`,params:({schemaCode:e})=>L._`{format: ${e}}`},QF={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:DF,code(e,t){let{gen:i,data:n,$data:o,schema:s,schemaCode:r,it:g}=e,{opts:a,errSchemaPath:l,schemaEnv:I,self:d}=g;if(!a.validateFormats)return;if(o)u();else c();function u(){let C=i.scopeValue("formats",{ref:d.formats,code:a.code.formats}),A=i.const("fDef",L._`${C}[${r}]`),m=i.let("fType"),p=i.let("format");i.if(L._`typeof ${A} == "object" && !(${A} instanceof RegExp)`,()=>i.assign(m,L._`${A}.type || "string"`).assign(p,L._`${A}.validate`),()=>i.assign(m,L._`"string"`).assign(p,A)),e.fail$data((0,L.or)(Z(),W()));function Z(){if(a.strictSchema===!1)return L.nil;return L._`${r} && !${p}`}function W(){let h=I.$async?L._`(${A}.async ? await ${p}(${n}) : ${p}(${n}))`:L._`${p}(${n})`,f=L._`(typeof ${p} == "function" ? ${h} : ${p}.test(${n}))`;return L._`${p} && ${p} !== true && ${m} === ${t} && !${f}`}}function c(){let C=d.formats[s];if(!C){Z();return}if(C===!0)return;let[A,m,p]=W(C);if(A===t)e.pass(h());function Z(){if(a.strictSchema===!1){d.logger.warn(f());return}throw Error(f());function f(){return`unknown format "${s}" ignored in schema at path "${l}"`}}function W(f){let V=f instanceof RegExp?(0,L.regexpCode)(f):a.code.formats?L._`${a.code.formats}${(0,L.getProperty)(s)}`:void 0,B=i.scopeValue("formats",{key:s,ref:f,code:V});if(typeof f=="object"&&!(f instanceof RegExp))return[f.type||"string",f.validate,L._`${B}.validate`];return["string",f,B]}function h(){if(typeof C=="object"&&!(C instanceof RegExp)&&C.async){if(!I.$async)throw Error("async format in sync schema");return L._`await ${p}(${n})`}return typeof m=="function"?L._`${p}(${n})`:L._`${p}.test(${n})`}}}};Ga.default=QF});var Fa=y(function(wa){Object.defineProperty(wa,"__esModule",{value:!0});var _F=Hu(),KF=[_F.default];wa.default=KF});var Ha=y(function(ki){Object.defineProperty(ki,"__esModule",{value:!0});ki.contentVocabulary=ki.metadataVocabulary=void 0;ki.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];ki.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var ku=y(function(va){Object.defineProperty(va,"__esModule",{value:!0});var LF=Hg(),MF=Dg(),$F=Ca(),qF=bu(),eH=Vu(),tH=Fu(),iH=Fa(),vu=Ha(),nH=[qF.default,LF.default,MF.default,(0,$F.default)(!0),iH.default,vu.metadataVocabulary,vu.contentVocabulary,eH.default,tH.default];va.default=nH});var Yu=y(function(ps){Object.defineProperty(ps,"__esModule",{value:!0});ps.DiscrError=void 0;var Pu;(function(e){e.Tag="tag",e.Mapping="mapping"})(Pu||(ps.DiscrError=Pu={}))});var Ya=y(function(Pa){Object.defineProperty(Pa,"__esModule",{value:!0});var Pi=v(),ka=Yu(),Nu=Fn(),oH=Fi(),sH=N(),rH={message:({params:{discrError:e,tagName:t}})=>e===ka.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:i}})=>Pi._`{error: ${e}, tag: ${i}, tagValue: ${t}}`},gH={keyword:"discriminator",type:"object",schemaType:"object",error:rH,code(e){let{gen:t,data:i,schema:n,parentSchema:o,it:s}=e,{oneOf:r}=o;if(!s.opts.discriminator)throw Error("discriminator: requires discriminator option");let g=n.propertyName;if(typeof g!="string")throw Error("discriminator: requires propertyName");if(n.mapping)throw Error("discriminator: mapping is not supported");if(!r)throw Error("discriminator: requires oneOf keyword");let a=t.let("valid",!1),l=t.const("tag",Pi._`${i}${(0,Pi.getProperty)(g)}`);t.if(Pi._`typeof ${l} == "string"`,()=>I(),()=>e.error(!1,{discrError:ka.DiscrError.Tag,tag:l,tagName:g})),e.ok(a);function I(){let c=u();t.if(!1);for(let C in c)t.elseIf(Pi._`${l} === ${C}`),t.assign(a,d(c[C]));t.else(),e.error(!1,{discrError:ka.DiscrError.Mapping,tag:l,tagName:g}),t.endIf()}function d(c){let C=t.name("valid"),A=e.subschema({keyword:"oneOf",schemaProp:c},C);return e.mergeEvaluated(A,Pi.Name),C}function u(){var c;let C={},A=p(o),m=!0;for(let h=0;h<r.length;h++){let f=r[h];if((f===null||f===void 0?void 0:f.$ref)&&!(0,sH.schemaHasRulesButRef)(f,s.self.RULES)){let B=f.$ref;if(f=Nu.resolveRef.call(s.self,s.schemaEnv.root,s.baseId,B),f instanceof Nu.SchemaEnv)f=f.schema;if(f===void 0)throw new oH.default(s.opts.uriResolver,s.baseId,B)}let V=(c=f===null||f===void 0?void 0:f.properties)===null||c===void 0?void 0:c[g];if(typeof V!="object")throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${g}"`);m=m&&(A||p(f)),Z(V,h)}if(!m)throw Error(`discriminator: "${g}" must be required`);return C;function p({required:h}){return Array.isArray(h)&&h.includes(g)}function Z(h,f){if(h.const)W(h.const,f);else if(h.enum)for(let V of h.enum)W(V,f);else throw Error(`discriminator: "properties/${g}" must have "const" or "enum"`)}function W(h,f){if(typeof h!="string"||h in C)throw Error(`discriminator: "${g}" values must be unique strings`);C[h]=f}}}};Pa.default=gH});var Xu=y(function(TS,aH){aH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/schema",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0,"https://json-schema.org/draft/2020-12/vocab/applicator":!0,"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0,"https://json-schema.org/draft/2020-12/vocab/validation":!0,"https://json-schema.org/draft/2020-12/vocab/meta-data":!0,"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0,"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Core and Validation specifications meta-schema",allOf:[{$ref:"meta/core"},{$ref:"meta/applicator"},{$ref:"meta/unevaluated"},{$ref:"meta/validation"},{$ref:"meta/meta-data"},{$ref:"meta/format-annotation"},{$ref:"meta/content"}],type:["object","boolean"],$comment:"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.",properties:{definitions:{$comment:'"definitions" has been replaced by "$defs".',type:"object",additionalProperties:{$dynamicRef:"#meta"},deprecated:!0,default:{}},dependencies:{$comment:'"dependencies" has been split and replaced by "dependentSchemas" and "dependentRequired" in order to serve their differing semantics.',type:"object",additionalProperties:{anyOf:[{$dynamicRef:"#meta"},{$ref:"meta/validation#/$defs/stringArray"}]},deprecated:!0,default:{}},$recursiveAnchor:{$comment:'"$recursiveAnchor" has been replaced by "$dynamicAnchor".',$ref:"meta/core#/$defs/anchorString",deprecated:!0},$recursiveRef:{$comment:'"$recursiveRef" has been replaced by "$dynamicRef".',$ref:"meta/core#/$defs/uriReferenceString",deprecated:!0}}}});var Su=y(function(zS,lH){lH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/applicator",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/applicator":!0},$dynamicAnchor:"meta",title:"Applicator vocabulary meta-schema",type:["object","boolean"],properties:{prefixItems:{$ref:"#/$defs/schemaArray"},items:{$dynamicRef:"#meta"},contains:{$dynamicRef:"#meta"},additionalProperties:{$dynamicRef:"#meta"},properties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},patternProperties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},propertyNames:{format:"regex"},default:{}},dependentSchemas:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},propertyNames:{$dynamicRef:"#meta"},if:{$dynamicRef:"#meta"},then:{$dynamicRef:"#meta"},else:{$dynamicRef:"#meta"},allOf:{$ref:"#/$defs/schemaArray"},anyOf:{$ref:"#/$defs/schemaArray"},oneOf:{$ref:"#/$defs/schemaArray"},not:{$dynamicRef:"#meta"}},$defs:{schemaArray:{type:"array",minItems:1,items:{$dynamicRef:"#meta"}}}}});var xu=y(function(jS,IH){IH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/unevaluated",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0},$dynamicAnchor:"meta",title:"Unevaluated applicator vocabulary meta-schema",type:["object","boolean"],properties:{unevaluatedItems:{$dynamicRef:"#meta"},unevaluatedProperties:{$dynamicRef:"#meta"}}}});var Ju=y(function(DS,dH){dH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/content",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Content vocabulary meta-schema",type:["object","boolean"],properties:{contentEncoding:{type:"string"},contentMediaType:{type:"string"},contentSchema:{$dynamicRef:"#meta"}}}});var Eu=y(function(QS,cH){cH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/core",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0},$dynamicAnchor:"meta",title:"Core vocabulary meta-schema",type:["object","boolean"],properties:{$id:{$ref:"#/$defs/uriReferenceString",$comment:"Non-empty fragments not allowed.",pattern:"^[^#]*#?$"},$schema:{$ref:"#/$defs/uriString"},$ref:{$ref:"#/$defs/uriReferenceString"},$anchor:{$ref:"#/$defs/anchorString"},$dynamicRef:{$ref:"#/$defs/uriReferenceString"},$dynamicAnchor:{$ref:"#/$defs/anchorString"},$vocabulary:{type:"object",propertyNames:{$ref:"#/$defs/uriString"},additionalProperties:{type:"boolean"}},$comment:{type:"string"},$defs:{type:"object",additionalProperties:{$dynamicRef:"#meta"}}},$defs:{anchorString:{type:"string",pattern:"^[A-Za-z_][-A-Za-z0-9._]*$"},uriString:{type:"string",format:"uri"},uriReferenceString:{type:"string",format:"uri-reference"}}}});var Uu=y(function(_S,CH){CH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/format-annotation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0},$dynamicAnchor:"meta",title:"Format vocabulary meta-schema for annotation results",type:["object","boolean"],properties:{format:{type:"string"}}}});var Ou=y(function(KS,uH){uH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/meta-data",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/meta-data":!0},$dynamicAnchor:"meta",title:"Meta-data vocabulary meta-schema",type:["object","boolean"],properties:{title:{type:"string"},description:{type:"string"},default:!0,deprecated:{type:"boolean",default:!1},readOnly:{type:"boolean",default:!1},writeOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0}}}});var Tu=y(function(LS,mH){mH.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/validation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/validation":!0},$dynamicAnchor:"meta",title:"Validation vocabulary meta-schema",type:["object","boolean"],properties:{type:{anyOf:[{$ref:"#/$defs/simpleTypes"},{type:"array",items:{$ref:"#/$defs/simpleTypes"},minItems:1,uniqueItems:!0}]},const:!0,enum:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/$defs/nonNegativeInteger"},minLength:{$ref:"#/$defs/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},maxItems:{$ref:"#/$defs/nonNegativeInteger"},minItems:{$ref:"#/$defs/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},maxContains:{$ref:"#/$defs/nonNegativeInteger"},minContains:{$ref:"#/$defs/nonNegativeInteger",default:1},maxProperties:{$ref:"#/$defs/nonNegativeInteger"},minProperties:{$ref:"#/$defs/nonNegativeIntegerDefault0"},required:{$ref:"#/$defs/stringArray"},dependentRequired:{type:"object",additionalProperties:{$ref:"#/$defs/stringArray"}}},$defs:{nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{$ref:"#/$defs/nonNegativeInteger",default:0},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}}}});var zu=y(function(Na){Object.defineProperty(Na,"__esModule",{value:!0});var pH=Xu(),AH=Su(),ZH=xu(),bH=Ju(),WH=Eu(),hH=Uu(),fH=Ou(),yH=Tu(),VH=["/properties"];function BH(e){return[pH,AH,ZH,bH,WH,t(this,hH),fH,t(this,yH)].forEach((i)=>this.addMetaSchema(i,void 0,!1)),this;function t(i,n){return e?i.$dataMetaSchema(n,VH):n}}Na.default=BH});var xa=y(function(D,Sa){Object.defineProperty(D,"__esModule",{value:!0});D.MissingRefError=D.ValidationError=D.CodeGen=D.Name=D.nil=D.stringify=D.str=D._=D.KeywordCxt=D.Ajv2020=void 0;var RH=Gg(),GH=ku(),wH=Ya(),FH=zu(),Xa="https://json-schema.org/draft/2020-12/schema";class zn extends RH.default{constructor(e={}){super({...e,dynamicRef:!0,next:!0,unevaluated:!0})}_addVocabularies(){if(super._addVocabularies(),GH.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(wH.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema();let{$data:e,meta:t}=this.opts;if(!t)return;FH.default.call(this,e),this.refs["http://json-schema.org/schema"]=Xa}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(Xa)?Xa:void 0)}}D.Ajv2020=zn;Sa.exports=D=zn;Sa.exports.Ajv2020=zn;Object.defineProperty(D,"__esModule",{value:!0});D.default=zn;var HH=wi();Object.defineProperty(D,"KeywordCxt",{enumerable:!0,get:function(){return HH.KeywordCxt}});var Yi=v();Object.defineProperty(D,"_",{enumerable:!0,get:function(){return Yi._}});Object.defineProperty(D,"str",{enumerable:!0,get:function(){return Yi.str}});Object.defineProperty(D,"stringify",{enumerable:!0,get:function(){return Yi.stringify}});Object.defineProperty(D,"nil",{enumerable:!0,get:function(){return Yi.nil}});Object.defineProperty(D,"Name",{enumerable:!0,get:function(){return Yi.Name}});Object.defineProperty(D,"CodeGen",{enumerable:!0,get:function(){return Yi.CodeGen}});var vH=Gn();Object.defineProperty(D,"ValidationError",{enumerable:!0,get:function(){return vH.default}});var kH=Fi();Object.defineProperty(D,"MissingRefError",{enumerable:!0,get:function(){return kH.default}})});var Wm=y(function(ot){Object.defineProperty(ot,"__esModule",{value:!0});ot.formatNames=ot.fastFormats=ot.fullFormats=void 0;function nt(e,t){return{validate:e,compare:t}}ot.fullFormats={date:nt(pm,el),time:nt($a(!0),tl),"date-time":nt(Cm(!0),Zm),"iso-time":nt($a(),Am),"iso-date-time":nt(Cm(),bm),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:iv,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:lv,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:nv,int32:{type:"number",validate:rv},int64:{type:"number",validate:gv},float:{type:"number",validate:mm},double:{type:"number",validate:mm},password:!0,binary:!0};ot.fastFormats={...ot.fullFormats,date:nt(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,el),time:nt(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,tl),"date-time":nt(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,Zm),"iso-time":nt(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,Am),"iso-date-time":nt(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,bm),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};ot.formatNames=Object.keys(ot.fullFormats);function MH(e){return e%4===0&&(e%100!==0||e%400===0)}var $H=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,qH=[0,31,28,31,30,31,30,31,31,30,31,30,31];function pm(e){let t=$H.exec(e);if(!t)return!1;let i=+t[1],n=+t[2],o=+t[3];return n>=1&&n<=12&&o>=1&&o<=(n===2&&MH(i)?29:qH[n])}function el(e,t){if(!(e&&t))return;if(e>t)return 1;if(e<t)return-1;return 0}var Ma=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function $a(e){return function(i){let n=Ma.exec(i);if(!n)return!1;let o=+n[1],s=+n[2],r=+n[3],g=n[4],a=n[5]==="-"?-1:1,l=+(n[6]||0),I=+(n[7]||0);if(l>23||I>59||e&&!g)return!1;if(o<=23&&s<=59&&r<60)return!0;let d=s-I*a,u=o-l*a-(d<0?1:0);return(u===23||u===-1)&&(d===59||d===-1)&&r<61}}function tl(e,t){if(!(e&&t))return;let i=new Date("2020-01-01T"+e).valueOf(),n=new Date("2020-01-01T"+t).valueOf();if(!(i&&n))return;return i-n}function Am(e,t){if(!(e&&t))return;let i=Ma.exec(e),n=Ma.exec(t);if(!(i&&n))return;if(e=i[1]+i[2]+i[3],t=n[1]+n[2]+n[3],e>t)return 1;if(e<t)return-1;return 0}var qa=/t|\s/i;function Cm(e){let t=$a(e);return function(n){let o=n.split(qa);return o.length===2&&pm(o[0])&&t(o[1])}}function Zm(e,t){if(!(e&&t))return;let i=new Date(e).valueOf(),n=new Date(t).valueOf();if(!(i&&n))return;return i-n}function bm(e,t){if(!(e&&t))return;let[i,n]=e.split(qa),[o,s]=t.split(qa),r=el(i,o);if(r===void 0)return;return r||tl(n,s)}var ev=/\/|:/,tv=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function iv(e){return ev.test(e)&&tv.test(e)}var um=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function nv(e){return um.lastIndex=0,um.test(e)}var ov=-2147483648,sv=2147483647;function rv(e){return Number.isInteger(e)&&e<=sv&&e>=ov}function gv(e){return Number.isInteger(e)}function mm(){return!0}var av=/[^\\]\\Z/;function lv(e){if(av.test(e))return!1;try{return new RegExp(e),!0}catch(t){return!1}}});var fm=y(function(il){Object.defineProperty(il,"__esModule",{value:!0});var Iv=Hg(),dv=Dg(),cv=Ca(),Cv=Fa(),hm=Ha(),uv=[Iv.default,dv.default,(0,cv.default)(),Cv.default,hm.metadataVocabulary,hm.contentVocabulary];il.default=uv});var ym=y(function(W2,mv){mv.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var Bm=y(function(Q,nl){Object.defineProperty(Q,"__esModule",{value:!0});Q.MissingRefError=Q.ValidationError=Q.CodeGen=Q.Name=Q.nil=Q.stringify=Q.str=Q._=Q.KeywordCxt=Q.Ajv=void 0;var pv=Gg(),Av=fm(),Zv=Ya(),Vm=ym(),bv=["/properties"],bs="http://json-schema.org/draft-07/schema";class _n extends pv.default{_addVocabularies(){if(super._addVocabularies(),Av.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(Zv.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(Vm,bv):Vm;this.addMetaSchema(e,bs,!1),this.refs["http://json-schema.org/schema"]=bs}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(bs)?bs:void 0)}}Q.Ajv=_n;nl.exports=Q=_n;nl.exports.Ajv=_n;Object.defineProperty(Q,"__esModule",{value:!0});Q.default=_n;var Wv=wi();Object.defineProperty(Q,"KeywordCxt",{enumerable:!0,get:function(){return Wv.KeywordCxt}});var xi=v();Object.defineProperty(Q,"_",{enumerable:!0,get:function(){return xi._}});Object.defineProperty(Q,"str",{enumerable:!0,get:function(){return xi.str}});Object.defineProperty(Q,"stringify",{enumerable:!0,get:function(){return xi.stringify}});Object.defineProperty(Q,"nil",{enumerable:!0,get:function(){return xi.nil}});Object.defineProperty(Q,"Name",{enumerable:!0,get:function(){return xi.Name}});Object.defineProperty(Q,"CodeGen",{enumerable:!0,get:function(){return xi.CodeGen}});var hv=Gn();Object.defineProperty(Q,"ValidationError",{enumerable:!0,get:function(){return hv.default}});var fv=Fi();Object.defineProperty(Q,"MissingRefError",{enumerable:!0,get:function(){return fv.default}})});var Rm=y(function(Ji){Object.defineProperty(Ji,"__esModule",{value:!0});Ji.formatLimitDefinition=void 0;var yv=Bm(),Qe=v(),Nt=Qe.operators,Ws={formatMaximum:{okStr:"<=",ok:Nt.LTE,fail:Nt.GT},formatMinimum:{okStr:">=",ok:Nt.GTE,fail:Nt.LT},formatExclusiveMaximum:{okStr:"<",ok:Nt.LT,fail:Nt.GTE},formatExclusiveMinimum:{okStr:">",ok:Nt.GT,fail:Nt.LTE}},Vv={message:({keyword:e,schemaCode:t})=>Qe.str`should be ${Ws[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>Qe._`{comparison: ${Ws[e].okStr}, limit: ${t}}`};Ji.formatLimitDefinition={keyword:Object.keys(Ws),type:"string",schemaType:"string",$data:!0,error:Vv,code(e){let{gen:t,data:i,schemaCode:n,keyword:o,it:s}=e,{opts:r,self:g}=s;if(!r.validateFormats)return;let a=new yv.KeywordCxt(s,g.RULES.all.format.definition,"format");if(a.$data)l();else I();function l(){let u=t.scopeValue("formats",{ref:g.formats,code:r.code.formats}),c=t.const("fmt",Qe._`${u}[${a.schemaCode}]`);e.fail$data((0,Qe.or)(Qe._`typeof ${c} != "object"`,Qe._`${c} instanceof RegExp`,Qe._`typeof ${c}.compare != "function"`,d(c)))}function I(){let u=a.schema,c=g.formats[u];if(!c||c===!0)return;if(typeof c!="object"||c instanceof RegExp||typeof c.compare!="function")throw Error(`"${o}": format "${u}" does not define "compare" function`);let C=t.scopeValue("formats",{key:u,ref:c,code:r.code.formats?Qe._`${r.code.formats}${(0,Qe.getProperty)(u)}`:void 0});e.fail$data(d(C))}function d(u){return Qe._`${u}.compare(${i}, ${n}) ${Ws[o].fail} 0`}},dependencies:["format"]};var Bv=(e)=>(e.addKeyword(Ji.formatLimitDefinition),e);Ji.default=Bv});var Hm=y(function(Kn,Fm){Object.defineProperty(Kn,"__esModule",{value:!0});var Ei=Wm(),Rv=Rm(),ol=v(),Gm=new ol.Name("fullFormats"),Gv=new ol.Name("fastFormats"),sl=(e,t={keywords:!0})=>{if(Array.isArray(t))return wm(e,t,Ei.fullFormats,Gm),e;let[i,n]=t.mode==="fast"?[Ei.fastFormats,Gv]:[Ei.fullFormats,Gm],o=t.formats||Ei.formatNames;if(wm(e,o,i,n),t.keywords)(0,Rv.default)(e);return e};sl.get=(e,t="full")=>{let n=(t==="fast"?Ei.fastFormats:Ei.fullFormats)[e];if(!n)throw Error(`Unknown format "${e}"`);return n};function wm(e,t,i,n){var o,s;(o=(s=e.opts.code).formats)!==null&&o!==void 0||(s.formats=ol._`require("ajv-formats/dist/formats").${n}`);for(let r of t)e.addFormat(r,i[r])}Fm.exports=Kn=sl;Object.defineProperty(Kn,"__esModule",{value:!0});Kn.default=sl});var Hb=y(function(gz,Fb){Fb.exports=ON;function UN(e){let t={defaultWidth:0,output:process.stdout,tty:require("tty")};if(!e)return t;return Object.keys(t).forEach(function(i){if(!e[i])e[i]=t[i]}),e}function ON(e){let t=UN(e);if(t.output.getWindowSize)return t.output.getWindowSize()[0]||t.defaultWidth;if(t.tty.getWindowSize)return t.tty.getWindowSize()[1]||t.defaultWidth;if(t.output.columns)return t.output.columns;if(process.env.CLI_WIDTH){let i=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(i)&&i!==0)return i}return t.defaultWidth}});var Kb=y(function(hz,_b){var n1=require("stream");class Qb extends n1{#i=null;constructor(e={}){super(e);this.writable=this.readable=!0,this.muted=!1,this.on("pipe",this._onpipe),this.replace=e.replace,this._prompt=e.prompt||null,this._hadControl=!1}#t(e,t){if(this._dest)return this._dest[e];if(this._src)return this._src[e];return t}#e(e,...t){if(typeof this._dest?.[e]==="function")this._dest[e](...t);if(typeof this._src?.[e]==="function")this._src[e](...t)}get isTTY(){if(this.#i!==null)return this.#i;return this.#t("isTTY",!1)}set isTTY(e){this.#i=e}get rows(){return this.#t("rows")}get columns(){return this.#t("columns")}mute(){this.muted=!0}unmute(){this.muted=!1}_onpipe(e){this._src=e}pipe(e,t){return this._dest=e,super.pipe(e,t)}pause(){if(this._src)return this._src.pause()}resume(){if(this._src)return this._src.resume()}write(e){if(this.muted){if(!this.replace)return!0;if(e.match(/^\u001b/)){if(e.indexOf(this._prompt)===0)e=e.slice(this._prompt.length),e=e.replace(/./g,this.replace),e=this._prompt+e;return this._hadControl=!0,this.emit("data",e)}else{if(this._prompt&&this._hadControl&&e.indexOf(this._prompt)===0)this._hadControl=!1,this.emit("data",this._prompt),e=e.slice(this._prompt.length);e=e.toString().replace(/./g,this.replace)}}this.emit("data",e)}end(e){if(this.muted)if(e&&this.replace)e=e.toString().replace(/./g,this.replace);else e=null;if(e)this.emit("data",e);this.emit("end")}destroy(...e){return this.#e("destroy",...e)}destroySoon(...e){return this.#e("destroySoon",...e)}close(...e){return this.#e("close",...e)}}_b.exports=Qb});class ct extends Error{constructor(e,t,i){super(i);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}}class Ct extends ct{constructor(e){super(1,"commander.invalidArgument",e);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}class vo{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue(e,t){if(t===this.defaultValue||!Array.isArray(t))return[e];return t.push(e),t}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,i)=>{if(!this.argChoices.includes(t))throw new Ct(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(t,i);return t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function ko(e){let t=e.name()+(e.variadic===!0?"...":"");return e.required?"<"+t+">":"["+t+"]"}var qI=require("events"),Yo=be(require("child_process")),Le=be(require("path")),An=be(require("fs")),E=be(require("process")),ed=require("util");var KI=require("util");class Po{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(e){this.helpWidth=this.helpWidth??e.helpWidth??80}visibleCommands(e){let t=e.commands.filter((n)=>!n._hidden),i=e._getHelpCommand();if(i&&!i._hidden)t.push(i);if(this.sortSubcommands)t.sort((n,o)=>n.name().localeCompare(o.name()));return t}compareOptions(e,t){let i=(n)=>n.short?n.short.replace(/^-/,""):n.long.replace(/^--/,"");return i(e).localeCompare(i(t))}visibleOptions(e){let t=e.options.filter((n)=>!n.hidden),i=e._getHelpOption();if(i&&!i.hidden){let n=i.short&&e._findOption(i.short),o=i.long&&e._findOption(i.long);if(!n&&!o)t.push(i);else if(i.long&&!o)t.push(e.createOption(i.long,i.description));else if(i.short&&!n)t.push(e.createOption(i.short,i.description))}if(this.sortOptions)t.sort(this.compareOptions);return t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let i=e.parent;i;i=i.parent){let n=i.options.filter((o)=>!o.hidden);t.push(...n)}if(this.sortOptions)t.sort(this.compareOptions);return t}visibleArguments(e){if(e._argsDescription)e.registeredArguments.forEach((t)=>{t.description=t.description||e._argsDescription[t.name()]||""});if(e.registeredArguments.find((t)=>t.description))return e.registeredArguments;return[]}subcommandTerm(e){let t=e.registeredArguments.map((i)=>ko(i)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((i,n)=>Math.max(i,this.displayWidth(t.styleSubcommandTerm(t.subcommandTerm(n)))),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((i,n)=>Math.max(i,this.displayWidth(t.styleOptionTerm(t.optionTerm(n)))),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((i,n)=>Math.max(i,this.displayWidth(t.styleOptionTerm(t.optionTerm(n)))),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((i,n)=>Math.max(i,this.displayWidth(t.styleArgumentTerm(t.argumentTerm(n)))),0)}commandUsage(e){let t=e._name;if(e._aliases[0])t=t+"|"+e._aliases[0];let i="";for(let n=e.parent;n;n=n.parent)i=n.name()+" "+i;return i+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];if(e.argChoices)t.push(`choices: ${e.argChoices.map((i)=>JSON.stringify(i)).join(", ")}`);if(e.defaultValue!==void 0){if(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue==="boolean")t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`)}if(e.presetArg!==void 0&&e.optional)t.push(`preset: ${JSON.stringify(e.presetArg)}`);if(e.envVar!==void 0)t.push(`env: ${e.envVar}`);if(t.length>0){let i=`(${t.join(", ")})`;if(e.description)return`${e.description} ${i}`;return i}return e.description}argumentDescription(e){let t=[];if(e.argChoices)t.push(`choices: ${e.argChoices.map((i)=>JSON.stringify(i)).join(", ")}`);if(e.defaultValue!==void 0)t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`);if(t.length>0){let i=`(${t.join(", ")})`;if(e.description)return`${e.description} ${i}`;return i}return e.description}formatItemList(e,t,i){if(t.length===0)return[];return[i.styleTitle(e),...t,""]}groupItems(e,t,i){let n=new Map;return e.forEach((o)=>{let s=i(o);if(!n.has(s))n.set(s,[])}),t.forEach((o)=>{let s=i(o);if(!n.has(s))n.set(s,[]);n.get(s).push(o)}),n}formatHelp(e,t){let i=t.padWidth(e,t),n=t.helpWidth??80;function o(I,d){return t.formatItem(I,i,d,t)}let s=[`${t.styleTitle("Usage:")} ${t.styleUsage(t.commandUsage(e))}`,""],r=t.commandDescription(e);if(r.length>0)s=s.concat([t.boxWrap(t.styleCommandDescription(r),n),""]);let g=t.visibleArguments(e).map((I)=>o(t.styleArgumentTerm(t.argumentTerm(I)),t.styleArgumentDescription(t.argumentDescription(I))));if(s=s.concat(this.formatItemList("Arguments:",g,t)),this.groupItems(e.options,t.visibleOptions(e),(I)=>I.helpGroupHeading??"Options:").forEach((I,d)=>{let u=I.map((c)=>o(t.styleOptionTerm(t.optionTerm(c)),t.styleOptionDescription(t.optionDescription(c))));s=s.concat(this.formatItemList(d,u,t))}),t.showGlobalOptions){let I=t.visibleGlobalOptions(e).map((d)=>o(t.styleOptionTerm(t.optionTerm(d)),t.styleOptionDescription(t.optionDescription(d))));s=s.concat(this.formatItemList("Global Options:",I,t))}return this.groupItems(e.commands,t.visibleCommands(e),(I)=>I.helpGroup()||"Commands:").forEach((I,d)=>{let u=I.map((c)=>o(t.styleSubcommandTerm(t.subcommandTerm(c)),t.styleSubcommandDescription(t.subcommandDescription(c))));s=s.concat(this.formatItemList(d,u,t))}),s.join(`
11
+ `)}displayWidth(e){return KI.stripVTControlCharacters(e).length}styleTitle(e){return e}styleUsage(e){return e.split(" ").map((t)=>{if(t==="[options]")return this.styleOptionText(t);if(t==="[command]")return this.styleSubcommandText(t);if(t[0]==="["||t[0]==="<")return this.styleArgumentText(t);return this.styleCommandText(t)}).join(" ")}styleCommandDescription(e){return this.styleDescriptionText(e)}styleOptionDescription(e){return this.styleDescriptionText(e)}styleSubcommandDescription(e){return this.styleDescriptionText(e)}styleArgumentDescription(e){return this.styleDescriptionText(e)}styleDescriptionText(e){return e}styleOptionTerm(e){return this.styleOptionText(e)}styleSubcommandTerm(e){return e.split(" ").map((t)=>{if(t==="[options]")return this.styleOptionText(t);if(t[0]==="["||t[0]==="<")return this.styleArgumentText(t);return this.styleSubcommandText(t)}).join(" ")}styleArgumentTerm(e){return this.styleArgumentText(e)}styleOptionText(e){return e}styleArgumentText(e){return e}styleSubcommandText(e){return e}styleCommandText(e){return e}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}preformatted(e){return/\n[^\S\r\n]/.test(e)}formatItem(e,t,i,n){let s=" ".repeat(2);if(!i)return s+e;let r=e.padEnd(t+e.length-n.displayWidth(e)),g=2,l=(this.helpWidth??80)-t-g-2,I;if(l<this.minWidthToWrap||n.preformatted(i))I=i;else I=n.boxWrap(i,l).replace(/\n/g,`
12
12
  `+" ".repeat(t+g));return s+r+" ".repeat(g)+I.replace(/\n/g,`
13
13
  ${s}`)}boxWrap(e,t){if(t<this.minWidthToWrap)return e;let i=e.split(/\r\n|\n/),n=/[\s]*[^\s]+/g,o=[];return i.forEach((s)=>{let r=s.match(n);if(r===null){o.push("");return}let g=[r.shift()],a=this.displayWidth(g[0]);r.forEach((l)=>{let I=this.displayWidth(l);if(a+I<=t){g.push(l),a+=I;return}o.push(g.join(""));let d=l.trimStart();g=[d],a=this.displayWidth(d)}),o.push(g.join(""))}),o.join(`
14
- `)}}class mn{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let i=zW(e);if(this.short=i.shortFlag,this.long=i.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;if(typeof e==="string")t={[e]:!0};return this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_collectValue(e,t){if(t===this.defaultValue||!Array.isArray(t))return[e];return t.push(e),t}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,i)=>{if(!this.argChoices.includes(t))throw new Ct(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(t,i);return t},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return _I(this.name().replace(/^no-/,""));return _I(this.name())}helpGroup(e){return this.helpGroupHeading=e,this}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class fr{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach((t)=>{if(t.negate)this.negativeOptions.set(t.attributeName(),t);else this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,i)=>{if(this.positiveOptions.has(i))this.dualOptions.add(i)})}valueFromOption(e,t){let i=t.attributeName();if(!this.dualOptions.has(i))return!0;let n=this.negativeOptions.get(i).presetArg,o=n!==void 0?n:!1;return t.negate===(o===e)}}function _I(e){return e.split("-").reduce((t,i)=>t+i[0].toUpperCase()+i.slice(1))}function zW(e){let t,i,n=/^-[^-]$/,o=/^--[^-]/,s=e.split(/[ |,]+/).concat("guard");if(n.test(s[0]))t=s.shift();if(o.test(s[0]))i=s.shift();if(!t&&n.test(s[0]))t=s.shift();if(!t&&o.test(s[0]))t=i,i=s.shift();if(s[0].startsWith("-")){let r=s[0],g=`option creation failed due to '${r}' in option flags '${e}'`;if(/^-[^-][^-]/.test(r))throw Error(`${g}
14
+ `)}}class pn{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let i=jW(e);if(this.short=i.shortFlag,this.long=i.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;if(typeof e==="string")t={[e]:!0};return this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_collectValue(e,t){if(t===this.defaultValue||!Array.isArray(t))return[e];return t.push(e),t}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,i)=>{if(!this.argChoices.includes(t))throw new Ct(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue(t,i);return t},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return LI(this.name().replace(/^no-/,""));return LI(this.name())}helpGroup(e){return this.helpGroupHeading=e,this}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class Vr{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach((t)=>{if(t.negate)this.negativeOptions.set(t.attributeName(),t);else this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,i)=>{if(this.positiveOptions.has(i))this.dualOptions.add(i)})}valueFromOption(e,t){let i=t.attributeName();if(!this.dualOptions.has(i))return!0;let n=this.negativeOptions.get(i).presetArg,o=n!==void 0?n:!1;return t.negate===(o===e)}}function LI(e){return e.split("-").reduce((t,i)=>t+i[0].toUpperCase()+i.slice(1))}function jW(e){let t,i,n=/^-[^-]$/,o=/^--[^-]/,s=e.split(/[ |,]+/).concat("guard");if(n.test(s[0]))t=s.shift();if(o.test(s[0]))i=s.shift();if(!t&&n.test(s[0]))t=s.shift();if(!t&&o.test(s[0]))t=i,i=s.shift();if(s[0].startsWith("-")){let r=s[0],g=`option creation failed due to '${r}' in option flags '${e}'`;if(/^-[^-][^-]/.test(r))throw Error(`${g}
15
15
  - a short flag is a single dash and a single character
16
16
  - either use a single dash and a single character (for a short flag)
17
17
  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(n.test(r))throw Error(`${g}
18
18
  - too many short flags`);if(o.test(r))throw Error(`${g}
19
19
  - too many long flags`);throw Error(`${g}
20
- - unrecognised flag format`)}if(t===void 0&&i===void 0)throw Error(`option creation failed due to no flags found in '${e}'.`);return{shortFlag:t,longFlag:i}}function jW(e,t){if(Math.abs(e.length-t.length)>3)return Math.max(e.length,t.length);let i=[];for(let n=0;n<=e.length;n++)i[n]=[n];for(let n=0;n<=t.length;n++)i[0][n]=n;for(let n=1;n<=t.length;n++)for(let o=1;o<=e.length;o++){let s;if(e[o-1]===t[n-1])s=0;else s=1;if(i[o][n]=Math.min(i[o-1][n]+1,i[o][n-1]+1,i[o-1][n-1]+s),o>1&&n>1&&e[o-1]===t[n-2]&&e[o-2]===t[n-1])i[o][n]=Math.min(i[o][n],i[o-2][n-2]+1)}return i[e.length][t.length]}function yr(e,t){if(!t||t.length===0)return"";t=Array.from(new Set(t));let i=e.startsWith("--");if(i)e=e.slice(2),t=t.map((r)=>r.slice(2));let n=[],o=3,s=0.4;if(t.forEach((r)=>{if(r.length<=1)return;let g=jW(e,r),a=Math.max(e.length,r.length);if((a-g)/a>s){if(g<o)o=g,n=[r];else if(g===o)n.push(r)}}),n.sort((r,g)=>r.localeCompare(g)),i)n=n.map((r)=>`--${r}`);if(n.length>1)return`
20
+ - unrecognised flag format`)}if(t===void 0&&i===void 0)throw Error(`option creation failed due to no flags found in '${e}'.`);return{shortFlag:t,longFlag:i}}function DW(e,t){if(Math.abs(e.length-t.length)>3)return Math.max(e.length,t.length);let i=[];for(let n=0;n<=e.length;n++)i[n]=[n];for(let n=0;n<=t.length;n++)i[0][n]=n;for(let n=1;n<=t.length;n++)for(let o=1;o<=e.length;o++){let s;if(e[o-1]===t[n-1])s=0;else s=1;if(i[o][n]=Math.min(i[o-1][n]+1,i[o][n-1]+1,i[o-1][n-1]+s),o>1&&n>1&&e[o-1]===t[n-2]&&e[o-2]===t[n-1])i[o][n]=Math.min(i[o][n],i[o-2][n-2]+1)}return i[e.length][t.length]}function Br(e,t){if(!t||t.length===0)return"";t=Array.from(new Set(t));let i=e.startsWith("--");if(i)e=e.slice(2),t=t.map((r)=>r.slice(2));let n=[],o=3,s=0.4;if(t.forEach((r)=>{if(r.length<=1)return;let g=DW(e,r),a=Math.max(e.length,r.length);if((a-g)/a>s){if(g<o)o=g,n=[r];else if(g===o)n.push(r)}}),n.sort((r,g)=>r.localeCompare(g)),i)n=n.map((r)=>`--${r}`);if(n.length>1)return`
21
21
  (Did you mean one of ${n.join(", ")}?)`;if(n.length===1)return`
22
- (Did you mean ${n[0]}?)`;return""}class Ai extends MI.EventEmitter{constructor(e){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:(t)=>E.default.stdout.write(t),writeErr:(t)=>E.default.stderr.write(t),outputError:(t,i)=>i(t),getOutHelpWidth:()=>E.default.stdout.isTTY?E.default.stdout.columns:void 0,getErrHelpWidth:()=>E.default.stderr.isTTY?E.default.stderr.columns:void 0,getOutHasColors:()=>LI()??(E.default.stdout.isTTY&&E.default.stdout.hasColors?.()),getErrHasColors:()=>LI()??(E.default.stderr.isTTY&&E.default.stderr.hasColors?.()),stripColor:(t)=>$I.stripVTControlCharacters(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,i){let n=t,o=i;if(typeof n==="object"&&n!==null)o=n,n=null;o=o||{};let[,s,r]=e.match(/([^ ]+) *(.*)/),g=this.createCommand(s);if(n)g.description(n),g._executableHandler=!0;if(o.isDefault)this._defaultCommandName=g._name;if(g._hidden=!!(o.noHelp||o.hidden),g._executableFile=o.executableFile||null,r)g.arguments(r);if(this._registerCommand(g),g.parent=this,g.copyInheritedSettings(this),n)return this;return g}createCommand(e){return new Ai(e)}createHelp(){return Object.assign(new Ho,this.configureHelp())}configureHelp(e){if(e===void 0)return this._helpConfiguration;return this._helpConfiguration=e,this}configureOutput(e){if(e===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,...e},this}showHelpAfterError(e=!0){if(typeof e!=="string")e=!!e;return this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw Error(`Command passed to .addCommand() must have a name
23
- - specify the name in Command constructor or using .name()`);if(t=t||{},t.isDefault)this._defaultCommandName=e._name;if(t.noHelp||t.hidden)e._hidden=!0;return this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new wo(e,t)}argument(e,t,i,n){let o=this.createArgument(e,t);if(typeof i==="function")o.default(n).argParser(i);else o.default(i);return this.addArgument(o),this}arguments(e){return e.trim().split(/ +/).forEach((t)=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t?.variadic)throw Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e==="boolean"){if(this._addImplicitHelpCommand=e,e&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let i=e??"help [command]",[,n,o]=i.match(/([^ ]+) *(.*)/),s=t??"display help for command",r=this.createCommand(n);if(r.helpOption(!1),o)r.arguments(o);if(s)r.description(s);if(this._addImplicitHelpCommand=!0,this._helpCommand=r,e||t)this._initCommandGroup(r);return this}addHelpCommand(e,t){if(typeof e!=="object")return this.helpCommand(e,t),this;return this._addImplicitHelpCommand=!0,this._helpCommand=e,this._initCommandGroup(e),this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(e,t){let i=["preSubcommand","preAction","postAction"];if(!i.includes(e))throw Error(`Unexpected value for event passed to hook : '${e}'.
24
- Expecting one of '${i.join("', '")}'`);if(this._lifeCycleHooks[e])this._lifeCycleHooks[e].push(t);else this._lifeCycleHooks[e]=[t];return this}exitOverride(e){if(e)this._exitCallback=e;else this._exitCallback=(t)=>{if(t.code!=="commander.executeSubCommandAsync")throw t};return this}_exit(e,t,i){if(this._exitCallback)this._exitCallback(new ct(e,t,i));E.default.exit(e)}action(e){let t=(i)=>{let n=this.registeredArguments.length,o=i.slice(0,n);if(this._storeOptionsAsProperties)o[n]=this;else o[n]=this.opts();return o.push(this),e.apply(this,o)};return this._actionHandler=t,this}createOption(e,t){return new mn(e,t)}_callParseArg(e,t,i,n){try{return e.parseArg(t,i)}catch(o){if(o.code==="commander.invalidArgument"){let s=`${n} ${o.message}`;this.error(s,{exitCode:o.exitCode,code:o.code})}throw o}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let i=e.long&&this._findOption(e.long)?e.long:e.short;throw Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${i}'
25
- - already used by option '${t.flags}'`)}this._initOptionGroup(e),this.options.push(e)}_registerCommand(e){let t=(n)=>[n.name()].concat(n.aliases()),i=t(e).find((n)=>this._findCommand(n));if(i){let n=t(this._findCommand(i)).join("|"),o=t(e).join("|");throw Error(`cannot add command '${o}' as already have command '${n}'`)}this._initCommandGroup(e),this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),i=e.attributeName();if(e.defaultValue!==void 0)this.setOptionValueWithSource(i,e.defaultValue,"default");let n=(o,s,r)=>{if(o==null&&e.presetArg!==void 0)o=e.presetArg;let g=this.getOptionValue(i);if(o!==null&&e.parseArg)o=this._callParseArg(e,o,g,s);else if(o!==null&&e.variadic)o=e._collectValue(o,g);if(o==null)if(e.negate)o=!1;else if(e.isBoolean()||e.optional)o=!0;else o="";this.setOptionValueWithSource(i,o,r)};if(this.on("option:"+t,(o)=>{let s=`error: option '${e.flags}' argument '${o}' is invalid.`;n(o,s,"cli")}),e.envVar)this.on("optionEnv:"+t,(o)=>{let s=`error: option '${e.flags}' value '${o}' from env '${e.envVar}' is invalid.`;n(o,s,"env")});return this}_optionEx(e,t,i,n,o){if(typeof t==="object"&&t instanceof mn)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let s=this.createOption(t,i);if(s.makeOptionMandatory(!!e.mandatory),typeof n==="function")s.default(o).argParser(n);else if(n instanceof RegExp){let r=n;n=(g,a)=>{let l=r.exec(g);return l?l[0]:a},s.default(o).argParser(n)}else s.default(n);return this.addOption(s)}option(e,t,i,n){return this._optionEx({},e,t,i,n)}requiredOption(e,t,i,n){return this._optionEx({mandatory:!0},e,t,i,n)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){if(this._storeOptionsAsProperties)return this[e];return this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,i){if(this._storeOptionsAsProperties)this[e]=t;else this._optionValues[e]=t;return this._optionValueSources[e]=i,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach((i)=>{if(i.getOptionValueSource(e)!==void 0)t=i.getOptionValueSource(e)}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){if(E.default.versions?.electron)t.from="electron";let n=E.default.execArgv??[];if(n.includes("-e")||n.includes("--eval")||n.includes("-p")||n.includes("--print"))t.from="eval"}if(e===void 0)e=E.default.argv;this.rawArgs=e.slice();let i;switch(t.from){case void 0:case"node":this._scriptPath=e[1],i=e.slice(2);break;case"electron":if(E.default.defaultApp)this._scriptPath=e[1],i=e.slice(2);else i=e.slice(1);break;case"user":i=e.slice(0);break;case"eval":i=e.slice(1);break;default:throw Error(`unexpected parse option { from: '${t.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",i}parse(e,t){this._prepareForParse();let i=this._prepareUserArgs(e,t);return this._parseCommand([],i),this}async parseAsync(e,t){this._prepareForParse();let i=this._prepareUserArgs(e,t);return await this._parseCommand([],i),this}_prepareForParse(){if(this._savedState===null)this.options.filter((e)=>e.negate&&e.defaultValue===void 0&&this.getOptionValue(e.attributeName())===void 0).forEach((e)=>{let t=e.long.replace(/^--no-/,"--");if(!this._findOption(t))this.setOptionValueWithSource(e.attributeName(),!0,"default")}),this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
26
- - either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(e,t,i){if(pn.default.existsSync(e))return;let n=t?`searched for local subcommand relative to directory '${t}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",o=`'${e}' does not exist
22
+ (Did you mean ${n[0]}?)`;return""}class Zi extends qI.EventEmitter{constructor(e){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:(t)=>E.default.stdout.write(t),writeErr:(t)=>E.default.stderr.write(t),outputError:(t,i)=>i(t),getOutHelpWidth:()=>E.default.stdout.isTTY?E.default.stdout.columns:void 0,getErrHelpWidth:()=>E.default.stderr.isTTY?E.default.stderr.columns:void 0,getOutHasColors:()=>$I()??(E.default.stdout.isTTY&&E.default.stdout.hasColors?.()),getErrHasColors:()=>$I()??(E.default.stderr.isTTY&&E.default.stderr.hasColors?.()),stripColor:(t)=>ed.stripVTControlCharacters(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,i){let n=t,o=i;if(typeof n==="object"&&n!==null)o=n,n=null;o=o||{};let[,s,r]=e.match(/([^ ]+) *(.*)/),g=this.createCommand(s);if(n)g.description(n),g._executableHandler=!0;if(o.isDefault)this._defaultCommandName=g._name;if(g._hidden=!!(o.noHelp||o.hidden),g._executableFile=o.executableFile||null,r)g.arguments(r);if(this._registerCommand(g),g.parent=this,g.copyInheritedSettings(this),n)return this;return g}createCommand(e){return new Zi(e)}createHelp(){return Object.assign(new Po,this.configureHelp())}configureHelp(e){if(e===void 0)return this._helpConfiguration;return this._helpConfiguration=e,this}configureOutput(e){if(e===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,...e},this}showHelpAfterError(e=!0){if(typeof e!=="string")e=!!e;return this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw Error(`Command passed to .addCommand() must have a name
23
+ - specify the name in Command constructor or using .name()`);if(t=t||{},t.isDefault)this._defaultCommandName=e._name;if(t.noHelp||t.hidden)e._hidden=!0;return this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new vo(e,t)}argument(e,t,i,n){let o=this.createArgument(e,t);if(typeof i==="function")o.default(n).argParser(i);else o.default(i);return this.addArgument(o),this}arguments(e){return e.trim().split(/ +/).forEach((t)=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t?.variadic)throw Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e==="boolean"){if(this._addImplicitHelpCommand=e,e&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let i=e??"help [command]",[,n,o]=i.match(/([^ ]+) *(.*)/),s=t??"display help for command",r=this.createCommand(n);if(r.helpOption(!1),o)r.arguments(o);if(s)r.description(s);if(this._addImplicitHelpCommand=!0,this._helpCommand=r,e||t)this._initCommandGroup(r);return this}addHelpCommand(e,t){if(typeof e!=="object")return this.helpCommand(e,t),this;return this._addImplicitHelpCommand=!0,this._helpCommand=e,this._initCommandGroup(e),this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(e,t){let i=["preSubcommand","preAction","postAction"];if(!i.includes(e))throw Error(`Unexpected value for event passed to hook : '${e}'.
24
+ Expecting one of '${i.join("', '")}'`);if(this._lifeCycleHooks[e])this._lifeCycleHooks[e].push(t);else this._lifeCycleHooks[e]=[t];return this}exitOverride(e){if(e)this._exitCallback=e;else this._exitCallback=(t)=>{if(t.code!=="commander.executeSubCommandAsync")throw t};return this}_exit(e,t,i){if(this._exitCallback)this._exitCallback(new ct(e,t,i));E.default.exit(e)}action(e){let t=(i)=>{let n=this.registeredArguments.length,o=i.slice(0,n);if(this._storeOptionsAsProperties)o[n]=this;else o[n]=this.opts();return o.push(this),e.apply(this,o)};return this._actionHandler=t,this}createOption(e,t){return new pn(e,t)}_callParseArg(e,t,i,n){try{return e.parseArg(t,i)}catch(o){if(o.code==="commander.invalidArgument"){let s=`${n} ${o.message}`;this.error(s,{exitCode:o.exitCode,code:o.code})}throw o}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let i=e.long&&this._findOption(e.long)?e.long:e.short;throw Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${i}'
25
+ - already used by option '${t.flags}'`)}this._initOptionGroup(e),this.options.push(e)}_registerCommand(e){let t=(n)=>[n.name()].concat(n.aliases()),i=t(e).find((n)=>this._findCommand(n));if(i){let n=t(this._findCommand(i)).join("|"),o=t(e).join("|");throw Error(`cannot add command '${o}' as already have command '${n}'`)}this._initCommandGroup(e),this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),i=e.attributeName();if(e.defaultValue!==void 0)this.setOptionValueWithSource(i,e.defaultValue,"default");let n=(o,s,r)=>{if(o==null&&e.presetArg!==void 0)o=e.presetArg;let g=this.getOptionValue(i);if(o!==null&&e.parseArg)o=this._callParseArg(e,o,g,s);else if(o!==null&&e.variadic)o=e._collectValue(o,g);if(o==null)if(e.negate)o=!1;else if(e.isBoolean()||e.optional)o=!0;else o="";this.setOptionValueWithSource(i,o,r)};if(this.on("option:"+t,(o)=>{let s=`error: option '${e.flags}' argument '${o}' is invalid.`;n(o,s,"cli")}),e.envVar)this.on("optionEnv:"+t,(o)=>{let s=`error: option '${e.flags}' value '${o}' from env '${e.envVar}' is invalid.`;n(o,s,"env")});return this}_optionEx(e,t,i,n,o){if(typeof t==="object"&&t instanceof pn)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let s=this.createOption(t,i);if(s.makeOptionMandatory(!!e.mandatory),typeof n==="function")s.default(o).argParser(n);else if(n instanceof RegExp){let r=n;n=(g,a)=>{let l=r.exec(g);return l?l[0]:a},s.default(o).argParser(n)}else s.default(n);return this.addOption(s)}option(e,t,i,n){return this._optionEx({},e,t,i,n)}requiredOption(e,t,i,n){return this._optionEx({mandatory:!0},e,t,i,n)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){if(this._storeOptionsAsProperties)return this[e];return this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,i){if(this._storeOptionsAsProperties)this[e]=t;else this._optionValues[e]=t;return this._optionValueSources[e]=i,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach((i)=>{if(i.getOptionValueSource(e)!==void 0)t=i.getOptionValueSource(e)}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){if(E.default.versions?.electron)t.from="electron";let n=E.default.execArgv??[];if(n.includes("-e")||n.includes("--eval")||n.includes("-p")||n.includes("--print"))t.from="eval"}if(e===void 0)e=E.default.argv;this.rawArgs=e.slice();let i;switch(t.from){case void 0:case"node":this._scriptPath=e[1],i=e.slice(2);break;case"electron":if(E.default.defaultApp)this._scriptPath=e[1],i=e.slice(2);else i=e.slice(1);break;case"user":i=e.slice(0);break;case"eval":i=e.slice(1);break;default:throw Error(`unexpected parse option { from: '${t.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",i}parse(e,t){this._prepareForParse();let i=this._prepareUserArgs(e,t);return this._parseCommand([],i),this}async parseAsync(e,t){this._prepareForParse();let i=this._prepareUserArgs(e,t);return await this._parseCommand([],i),this}_prepareForParse(){if(this._savedState===null)this.options.filter((e)=>e.negate&&e.defaultValue===void 0&&this.getOptionValue(e.attributeName())===void 0).forEach((e)=>{let t=e.long.replace(/^--no-/,"--");if(!this._findOption(t))this.setOptionValueWithSource(e.attributeName(),!0,"default")}),this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
26
+ - either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(e,t,i){if(An.default.existsSync(e))return;let n=t?`searched for local subcommand relative to directory '${t}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",o=`'${e}' does not exist
27
27
  - if '${i}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
28
28
  - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
29
- - ${n}`;throw Error(o)}_executeSubCommand(e,t){t=t.slice();let i=[".js",".ts",".tsx",".mjs",".cjs"];function n(l,I){let d=Le.default.resolve(l,I);if(pn.default.existsSync(d))return d;if(i.includes(Le.default.extname(I)))return;let u=i.find((c)=>pn.default.existsSync(`${d}${c}`));if(u)return`${d}${u}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,s=this._executableDir||"";if(this._scriptPath){let l;try{l=pn.default.realpathSync(this._scriptPath)}catch{l=this._scriptPath}s=Le.default.resolve(Le.default.dirname(l),s)}if(s){let l=n(s,o);if(!l&&!e._executableFile&&this._scriptPath){let I=Le.default.basename(this._scriptPath,Le.default.extname(this._scriptPath));if(I!==this._name)l=n(s,`${I}-${e._name}`)}o=l||o}let r=i.includes(Le.default.extname(o)),g;if(E.default.platform!=="win32")if(r)t.unshift(o),t=KI(E.default.execArgv).concat(t),g=vo.default.spawn(E.default.argv[0],t,{stdio:"inherit"});else g=vo.default.spawn(o,t,{stdio:"inherit"});else this._checkForMissingExecutable(o,s,e._name),t.unshift(o),t=KI(E.default.execArgv).concat(t),g=vo.default.spawn(E.default.execPath,t,{stdio:"inherit"});if(!g.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((I)=>{E.default.on(I,()=>{if(g.killed===!1&&g.exitCode===null)g.kill(I)})});let a=this._exitCallback;g.on("close",(l)=>{if(l=l??1,!a)E.default.exit(l);else a(new ct(l,"commander.executeSubCommandAsync","(close)"))}),g.on("error",(l)=>{if(l.code==="ENOENT")this._checkForMissingExecutable(o,s,e._name);else if(l.code==="EACCES")throw Error(`'${o}' not executable`);if(!a)E.default.exit(1);else{let I=new ct(1,"commander.executeSubCommandAsync","(error)");I.nestedError=l,a(I)}}),this.runningCommand=g}_dispatchSubcommand(e,t,i){let n=this._findCommand(e);if(!n)this.help({error:!0});n._prepareForParse();let o;return o=this._chainOrCallSubCommandHook(o,n,"preSubcommand"),o=this._chainOrCall(o,()=>{if(n._executableHandler)this._executeSubCommand(n,t.concat(i));else return n._parseCommand(t,i)}),o}_dispatchHelpCommand(e){if(!e)this.help();let t=this._findCommand(e);if(t&&!t._executableHandler)t.help();return this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((e,t)=>{if(e.required&&this.args[t]==null)this.missingArgument(e.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let e=(i,n,o)=>{let s=n;if(n!==null&&i.parseArg){let r=`error: command-argument value '${n}' is invalid for argument '${i.name()}'.`;s=this._callParseArg(i,n,o,r)}return s};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((i,n)=>{let o=i.defaultValue;if(i.variadic){if(n<this.args.length){if(o=this.args.slice(n),i.parseArg)o=o.reduce((s,r)=>e(i,r,s),i.defaultValue)}else if(o===void 0)o=[]}else if(n<this.args.length){if(o=this.args[n],i.parseArg)o=e(i,o,i.defaultValue)}t[n]=o}),this.processedArgs=t}_chainOrCall(e,t){if(e?.then&&typeof e.then==="function")return e.then(()=>t());return t()}_chainOrCallHooks(e,t){let i=e,n=[];if(this._getCommandAndAncestors().reverse().filter((o)=>o._lifeCycleHooks[t]!==void 0).forEach((o)=>{o._lifeCycleHooks[t].forEach((s)=>{n.push({hookedCommand:o,callback:s})})}),t==="postAction")n.reverse();return n.forEach((o)=>{i=this._chainOrCall(i,()=>o.callback(o.hookedCommand,this))}),i}_chainOrCallSubCommandHook(e,t,i){let n=e;if(this._lifeCycleHooks[i]!==void 0)this._lifeCycleHooks[i].forEach((o)=>{n=this._chainOrCall(n,()=>o(this,t))});return n}_parseCommand(e,t){let i=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(i.operands),t=i.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(i.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let n=()=>{if(i.unknown.length>0)this.unknownOption(i.unknown[0])},o=`command:${this.name()}`;if(this._actionHandler){n(),this._processArguments();let s;if(s=this._chainOrCallHooks(s,"preAction"),s=this._chainOrCall(s,()=>this._actionHandler(this.processedArgs)),this.parent)s=this._chainOrCall(s,()=>{this.parent.emit(o,e,t)});return s=this._chainOrCallHooks(s,"postAction"),s}if(this.parent?.listenerCount(o))n(),this._processArguments(),this.parent.emit(o,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);if(this.listenerCount("command:*"))this.emit("command:*",e,t);else if(this.commands.length)this.unknownCommand();else n(),this._processArguments()}else if(this.commands.length)n(),this.help({error:!0});else n(),this._processArguments()}_findCommand(e){if(!e)return;return this.commands.find((t)=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find((t)=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((e)=>{e.options.forEach((t)=>{if(t.mandatory&&e.getOptionValue(t.attributeName())===void 0)e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter((i)=>{let n=i.attributeName();if(this.getOptionValue(n)===void 0)return!1;return this.getOptionValueSource(n)!=="default"});e.filter((i)=>i.conflictsWith.length>0).forEach((i)=>{let n=e.find((o)=>i.conflictsWith.includes(o.attributeName()));if(n)this._conflictingOption(i,n)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((e)=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],i=[],n=t;function o(l){return l.length>1&&l[0]==="-"}let s=(l)=>{if(!/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(l))return!1;return!this._getCommandAndAncestors().some((I)=>I.options.map((d)=>d.short).some((d)=>/^-\d$/.test(d)))},r=null,g=null,a=0;while(a<e.length||g){let l=g??e[a++];if(g=null,l==="--"){if(n===i)n.push(l);n.push(...e.slice(a));break}if(r&&(!o(l)||s(l))){this.emit(`option:${r.name()}`,l);continue}if(r=null,o(l)){let I=this._findOption(l);if(I){if(I.required){let d=e[a++];if(d===void 0)this.optionMissingArgument(I);this.emit(`option:${I.name()}`,d)}else if(I.optional){let d=null;if(a<e.length&&(!o(e[a])||s(e[a])))d=e[a++];this.emit(`option:${I.name()}`,d)}else this.emit(`option:${I.name()}`);r=I.variadic?I:null;continue}}if(l.length>2&&l[0]==="-"&&l[1]!=="-"){let I=this._findOption(`-${l[1]}`);if(I){if(I.required||I.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${I.name()}`,l.slice(2));else this.emit(`option:${I.name()}`),g=`-${l.slice(2)}`;continue}}if(/^--[^=]+=/.test(l)){let I=l.indexOf("="),d=this._findOption(l.slice(0,I));if(d&&(d.required||d.optional)){this.emit(`option:${d.name()}`,l.slice(I+1));continue}}if(n===t&&o(l)&&!(this.commands.length===0&&s(l)))n=i;if((this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&i.length===0){if(this._findCommand(l)){t.push(l),i.push(...e.slice(a));break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){t.push(l,...e.slice(a));break}else if(this._defaultCommandName){i.push(l,...e.slice(a));break}}if(this._passThroughOptions){n.push(l,...e.slice(a));break}n.push(l)}return{operands:t,unknown:i}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let i=0;i<t;i++){let n=this.options[i].attributeName();e[n]=n===this._versionOptionName?this._version:this[n]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){if(this._outputConfiguration.outputError(`${e}
29
+ - ${n}`;throw Error(o)}_executeSubCommand(e,t){t=t.slice();let i=[".js",".ts",".tsx",".mjs",".cjs"];function n(l,I){let d=Le.default.resolve(l,I);if(An.default.existsSync(d))return d;if(i.includes(Le.default.extname(I)))return;let u=i.find((c)=>An.default.existsSync(`${d}${c}`));if(u)return`${d}${u}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,s=this._executableDir||"";if(this._scriptPath){let l;try{l=An.default.realpathSync(this._scriptPath)}catch{l=this._scriptPath}s=Le.default.resolve(Le.default.dirname(l),s)}if(s){let l=n(s,o);if(!l&&!e._executableFile&&this._scriptPath){let I=Le.default.basename(this._scriptPath,Le.default.extname(this._scriptPath));if(I!==this._name)l=n(s,`${I}-${e._name}`)}o=l||o}let r=i.includes(Le.default.extname(o)),g;if(E.default.platform!=="win32")if(r)t.unshift(o),t=MI(E.default.execArgv).concat(t),g=Yo.default.spawn(E.default.argv[0],t,{stdio:"inherit"});else g=Yo.default.spawn(o,t,{stdio:"inherit"});else this._checkForMissingExecutable(o,s,e._name),t.unshift(o),t=MI(E.default.execArgv).concat(t),g=Yo.default.spawn(E.default.execPath,t,{stdio:"inherit"});if(!g.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((I)=>{E.default.on(I,()=>{if(g.killed===!1&&g.exitCode===null)g.kill(I)})});let a=this._exitCallback;g.on("close",(l)=>{if(l=l??1,!a)E.default.exit(l);else a(new ct(l,"commander.executeSubCommandAsync","(close)"))}),g.on("error",(l)=>{if(l.code==="ENOENT")this._checkForMissingExecutable(o,s,e._name);else if(l.code==="EACCES")throw Error(`'${o}' not executable`);if(!a)E.default.exit(1);else{let I=new ct(1,"commander.executeSubCommandAsync","(error)");I.nestedError=l,a(I)}}),this.runningCommand=g}_dispatchSubcommand(e,t,i){let n=this._findCommand(e);if(!n)this.help({error:!0});n._prepareForParse();let o;return o=this._chainOrCallSubCommandHook(o,n,"preSubcommand"),o=this._chainOrCall(o,()=>{if(n._executableHandler)this._executeSubCommand(n,t.concat(i));else return n._parseCommand(t,i)}),o}_dispatchHelpCommand(e){if(!e)this.help();let t=this._findCommand(e);if(t&&!t._executableHandler)t.help();return this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((e,t)=>{if(e.required&&this.args[t]==null)this.missingArgument(e.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let e=(i,n,o)=>{let s=n;if(n!==null&&i.parseArg){let r=`error: command-argument value '${n}' is invalid for argument '${i.name()}'.`;s=this._callParseArg(i,n,o,r)}return s};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((i,n)=>{let o=i.defaultValue;if(i.variadic){if(n<this.args.length){if(o=this.args.slice(n),i.parseArg)o=o.reduce((s,r)=>e(i,r,s),i.defaultValue)}else if(o===void 0)o=[]}else if(n<this.args.length){if(o=this.args[n],i.parseArg)o=e(i,o,i.defaultValue)}t[n]=o}),this.processedArgs=t}_chainOrCall(e,t){if(e?.then&&typeof e.then==="function")return e.then(()=>t());return t()}_chainOrCallHooks(e,t){let i=e,n=[];if(this._getCommandAndAncestors().reverse().filter((o)=>o._lifeCycleHooks[t]!==void 0).forEach((o)=>{o._lifeCycleHooks[t].forEach((s)=>{n.push({hookedCommand:o,callback:s})})}),t==="postAction")n.reverse();return n.forEach((o)=>{i=this._chainOrCall(i,()=>o.callback(o.hookedCommand,this))}),i}_chainOrCallSubCommandHook(e,t,i){let n=e;if(this._lifeCycleHooks[i]!==void 0)this._lifeCycleHooks[i].forEach((o)=>{n=this._chainOrCall(n,()=>o(this,t))});return n}_parseCommand(e,t){let i=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(i.operands),t=i.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(i.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let n=()=>{if(i.unknown.length>0)this.unknownOption(i.unknown[0])},o=`command:${this.name()}`;if(this._actionHandler){n(),this._processArguments();let s;if(s=this._chainOrCallHooks(s,"preAction"),s=this._chainOrCall(s,()=>this._actionHandler(this.processedArgs)),this.parent)s=this._chainOrCall(s,()=>{this.parent.emit(o,e,t)});return s=this._chainOrCallHooks(s,"postAction"),s}if(this.parent?.listenerCount(o))n(),this._processArguments(),this.parent.emit(o,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);if(this.listenerCount("command:*"))this.emit("command:*",e,t);else if(this.commands.length)this.unknownCommand();else n(),this._processArguments()}else if(this.commands.length)n(),this.help({error:!0});else n(),this._processArguments()}_findCommand(e){if(!e)return;return this.commands.find((t)=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find((t)=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((e)=>{e.options.forEach((t)=>{if(t.mandatory&&e.getOptionValue(t.attributeName())===void 0)e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter((i)=>{let n=i.attributeName();if(this.getOptionValue(n)===void 0)return!1;return this.getOptionValueSource(n)!=="default"});e.filter((i)=>i.conflictsWith.length>0).forEach((i)=>{let n=e.find((o)=>i.conflictsWith.includes(o.attributeName()));if(n)this._conflictingOption(i,n)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((e)=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],i=[],n=t;function o(l){return l.length>1&&l[0]==="-"}let s=(l)=>{if(!/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(l))return!1;return!this._getCommandAndAncestors().some((I)=>I.options.map((d)=>d.short).some((d)=>/^-\d$/.test(d)))},r=null,g=null,a=0;while(a<e.length||g){let l=g??e[a++];if(g=null,l==="--"){if(n===i)n.push(l);n.push(...e.slice(a));break}if(r&&(!o(l)||s(l))){this.emit(`option:${r.name()}`,l);continue}if(r=null,o(l)){let I=this._findOption(l);if(I){if(I.required){let d=e[a++];if(d===void 0)this.optionMissingArgument(I);this.emit(`option:${I.name()}`,d)}else if(I.optional){let d=null;if(a<e.length&&(!o(e[a])||s(e[a])))d=e[a++];this.emit(`option:${I.name()}`,d)}else this.emit(`option:${I.name()}`);r=I.variadic?I:null;continue}}if(l.length>2&&l[0]==="-"&&l[1]!=="-"){let I=this._findOption(`-${l[1]}`);if(I){if(I.required||I.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${I.name()}`,l.slice(2));else this.emit(`option:${I.name()}`),g=`-${l.slice(2)}`;continue}}if(/^--[^=]+=/.test(l)){let I=l.indexOf("="),d=this._findOption(l.slice(0,I));if(d&&(d.required||d.optional)){this.emit(`option:${d.name()}`,l.slice(I+1));continue}}if(n===t&&o(l)&&!(this.commands.length===0&&s(l)))n=i;if((this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&i.length===0){if(this._findCommand(l)){t.push(l),i.push(...e.slice(a));break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){t.push(l,...e.slice(a));break}else if(this._defaultCommandName){i.push(l,...e.slice(a));break}}if(this._passThroughOptions){n.push(l,...e.slice(a));break}n.push(l)}return{operands:t,unknown:i}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let i=0;i<t;i++){let n=this.options[i].attributeName();e[n]=n===this._versionOptionName?this._version:this[n]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){if(this._outputConfiguration.outputError(`${e}
30
30
  `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==="string")this._outputConfiguration.writeErr(`${this._showHelpAfterError}
31
31
  `);else if(this._showHelpAfterError)this._outputConfiguration.writeErr(`
32
- `),this.outputHelp({error:!0});let i=t||{},n=i.exitCode||1,o=i.code||"commander.error";this._exit(n,o,e)}_parseOptionsEnv(){this.options.forEach((e)=>{if(e.envVar&&e.envVar in E.default.env){let t=e.attributeName();if(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))if(e.required||e.optional)this.emit(`optionEnv:${e.name()}`,E.default.env[e.envVar]);else this.emit(`optionEnv:${e.name()}`)}})}_parseOptionsImplied(){let e=new fr(this.options),t=(i)=>this.getOptionValue(i)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(i));this.options.filter((i)=>i.implied!==void 0&&t(i.attributeName())&&e.valueFromOption(this.getOptionValue(i.attributeName()),i)).forEach((i)=>{Object.keys(i.implied).filter((n)=>!t(n)).forEach((n)=>{this.setOptionValueWithSource(n,i.implied[n],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let i=(s)=>{let r=s.attributeName(),g=this.getOptionValue(r),a=this.options.find((I)=>I.negate&&r===I.attributeName()),l=this.options.find((I)=>!I.negate&&r===I.attributeName());if(a&&(a.presetArg===void 0&&g===!1||a.presetArg!==void 0&&g===a.presetArg))return a;return l||s},n=(s)=>{let r=i(s),g=r.attributeName();if(this.getOptionValueSource(g)==="env")return`environment variable '${r.envVar}'`;return`option '${r.flags}'`},o=`error: ${n(e)} cannot be used with ${n(t)}`;this.error(o,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let n=[],o=this;do{let s=o.createHelp().visibleOptions(o).filter((r)=>r.long).map((r)=>r.long);n=n.concat(s),o=o.parent}while(o&&!o._enablePositionalOptions);t=yr(e,n)}let i=`error: unknown option '${e}'${t}`;this.error(i,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,i=t===1?"":"s",n=e.length,o=this.parent?` for '${this.name()}'`:"",s=e.join(", "),r=`error: too many arguments${o}. Expected ${t} argument${i} but got ${n}: ${s}.`;this.error(r,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let n=[];this.createHelp().visibleCommands(this).forEach((o)=>{if(n.push(o.name()),o.alias())n.push(o.alias())}),t=yr(e,n)}let i=`error: unknown command '${e}'${t}`;this.error(i,{code:"commander.unknownCommand"})}version(e,t,i){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",i=i||"output the version number";let n=this.createOption(t,i);return this._versionOptionName=n.attributeName(),this._registerOption(n),this.on("option:"+n.name(),()=>{this._outputConfiguration.writeOut(`${e}
33
- `),this._exit(0,"commander.version",e)}),this}description(e,t){if(e===void 0&&t===void 0)return this._description;if(this._description=e,t)this._argsDescription=t;return this}summary(e){if(e===void 0)return this._summary;return this._summary=e,this}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)t=this.commands[this.commands.length-1];if(e===t._name)throw Error("Command alias can't be the same as its name");let i=this.parent?._findCommand(e);if(i){let n=[i.name()].concat(i.aliases()).join("|");throw Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${n}'`)}return t._aliases.push(e),this}aliases(e){if(e===void 0)return this._aliases;return e.forEach((t)=>this.alias(t)),this}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map((i)=>Fo(i));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){if(e===void 0)return this._name;return this._name=e,this}helpGroup(e){if(e===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=e,this}commandsGroup(e){if(e===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=e,this}optionsGroup(e){if(e===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=e,this}_initOptionGroup(e){if(this._defaultOptionGroup&&!e.helpGroupHeading)e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){if(this._defaultCommandGroup&&!e.helpGroup())e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=Le.default.basename(e,Le.default.extname(e)),this}executableDir(e){if(e===void 0)return this._executableDir;return this._executableDir=e,this}helpInformation(e){let t=this.createHelp(),i=this._getOutputContext(e);t.prepareContext({error:i.error,helpWidth:i.helpWidth,outputHasColors:i.hasColors});let n=t.formatHelp(this,t);if(i.hasColors)return n;return this._outputConfiguration.stripColor(n)}_getOutputContext(e){e=e||{};let t=!!e.error,i,n,o;if(t)i=(r)=>this._outputConfiguration.writeErr(r),n=this._outputConfiguration.getErrHasColors(),o=this._outputConfiguration.getErrHelpWidth();else i=(r)=>this._outputConfiguration.writeOut(r),n=this._outputConfiguration.getOutHasColors(),o=this._outputConfiguration.getOutHelpWidth();return{error:t,write:(r)=>{if(!n)r=this._outputConfiguration.stripColor(r);return i(r)},hasColors:n,helpWidth:o}}outputHelp(e){let t;if(typeof e==="function")t=e,e=void 0;let i=this._getOutputContext(e),n={error:i.error,write:i.write,command:this};this._getCommandAndAncestors().reverse().forEach((s)=>s.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let o=this.helpInformation({error:i.error});if(t){if(o=t(o),typeof o!=="string"&&!Buffer.isBuffer(o))throw Error("outputHelp callback must return a string or a Buffer")}if(i.write(o),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",n),this._getCommandAndAncestors().forEach((s)=>s.emit("afterAllHelp",n))}helpOption(e,t){if(typeof e==="boolean"){if(e){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption(e??"-h, --help",t??"display help for command"),e||t)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let t=Number(E.default.exitCode??0);if(t===0&&e&&typeof e!=="function"&&e.error)t=1;this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let i=["beforeAll","before","after","afterAll"];if(!i.includes(e))throw Error(`Unexpected value for position to addHelpText.
32
+ `),this.outputHelp({error:!0});let i=t||{},n=i.exitCode||1,o=i.code||"commander.error";this._exit(n,o,e)}_parseOptionsEnv(){this.options.forEach((e)=>{if(e.envVar&&e.envVar in E.default.env){let t=e.attributeName();if(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))if(e.required||e.optional)this.emit(`optionEnv:${e.name()}`,E.default.env[e.envVar]);else this.emit(`optionEnv:${e.name()}`)}})}_parseOptionsImplied(){let e=new Vr(this.options),t=(i)=>this.getOptionValue(i)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(i));this.options.filter((i)=>i.implied!==void 0&&t(i.attributeName())&&e.valueFromOption(this.getOptionValue(i.attributeName()),i)).forEach((i)=>{Object.keys(i.implied).filter((n)=>!t(n)).forEach((n)=>{this.setOptionValueWithSource(n,i.implied[n],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let i=(s)=>{let r=s.attributeName(),g=this.getOptionValue(r),a=this.options.find((I)=>I.negate&&r===I.attributeName()),l=this.options.find((I)=>!I.negate&&r===I.attributeName());if(a&&(a.presetArg===void 0&&g===!1||a.presetArg!==void 0&&g===a.presetArg))return a;return l||s},n=(s)=>{let r=i(s),g=r.attributeName();if(this.getOptionValueSource(g)==="env")return`environment variable '${r.envVar}'`;return`option '${r.flags}'`},o=`error: ${n(e)} cannot be used with ${n(t)}`;this.error(o,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let n=[],o=this;do{let s=o.createHelp().visibleOptions(o).filter((r)=>r.long).map((r)=>r.long);n=n.concat(s),o=o.parent}while(o&&!o._enablePositionalOptions);t=Br(e,n)}let i=`error: unknown option '${e}'${t}`;this.error(i,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,i=t===1?"":"s",n=e.length,o=this.parent?` for '${this.name()}'`:"",s=e.join(", "),r=`error: too many arguments${o}. Expected ${t} argument${i} but got ${n}: ${s}.`;this.error(r,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let n=[];this.createHelp().visibleCommands(this).forEach((o)=>{if(n.push(o.name()),o.alias())n.push(o.alias())}),t=Br(e,n)}let i=`error: unknown command '${e}'${t}`;this.error(i,{code:"commander.unknownCommand"})}version(e,t,i){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",i=i||"output the version number";let n=this.createOption(t,i);return this._versionOptionName=n.attributeName(),this._registerOption(n),this.on("option:"+n.name(),()=>{this._outputConfiguration.writeOut(`${e}
33
+ `),this._exit(0,"commander.version",e)}),this}description(e,t){if(e===void 0&&t===void 0)return this._description;if(this._description=e,t)this._argsDescription=t;return this}summary(e){if(e===void 0)return this._summary;return this._summary=e,this}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)t=this.commands[this.commands.length-1];if(e===t._name)throw Error("Command alias can't be the same as its name");let i=this.parent?._findCommand(e);if(i){let n=[i.name()].concat(i.aliases()).join("|");throw Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${n}'`)}return t._aliases.push(e),this}aliases(e){if(e===void 0)return this._aliases;return e.forEach((t)=>this.alias(t)),this}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map((i)=>ko(i));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){if(e===void 0)return this._name;return this._name=e,this}helpGroup(e){if(e===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=e,this}commandsGroup(e){if(e===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=e,this}optionsGroup(e){if(e===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=e,this}_initOptionGroup(e){if(this._defaultOptionGroup&&!e.helpGroupHeading)e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){if(this._defaultCommandGroup&&!e.helpGroup())e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=Le.default.basename(e,Le.default.extname(e)),this}executableDir(e){if(e===void 0)return this._executableDir;return this._executableDir=e,this}helpInformation(e){let t=this.createHelp(),i=this._getOutputContext(e);t.prepareContext({error:i.error,helpWidth:i.helpWidth,outputHasColors:i.hasColors});let n=t.formatHelp(this,t);if(i.hasColors)return n;return this._outputConfiguration.stripColor(n)}_getOutputContext(e){e=e||{};let t=!!e.error,i,n,o;if(t)i=(r)=>this._outputConfiguration.writeErr(r),n=this._outputConfiguration.getErrHasColors(),o=this._outputConfiguration.getErrHelpWidth();else i=(r)=>this._outputConfiguration.writeOut(r),n=this._outputConfiguration.getOutHasColors(),o=this._outputConfiguration.getOutHelpWidth();return{error:t,write:(r)=>{if(!n)r=this._outputConfiguration.stripColor(r);return i(r)},hasColors:n,helpWidth:o}}outputHelp(e){let t;if(typeof e==="function")t=e,e=void 0;let i=this._getOutputContext(e),n={error:i.error,write:i.write,command:this};this._getCommandAndAncestors().reverse().forEach((s)=>s.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let o=this.helpInformation({error:i.error});if(t){if(o=t(o),typeof o!=="string"&&!Buffer.isBuffer(o))throw Error("outputHelp callback must return a string or a Buffer")}if(i.write(o),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",n),this._getCommandAndAncestors().forEach((s)=>s.emit("afterAllHelp",n))}helpOption(e,t){if(typeof e==="boolean"){if(e){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption(e??"-h, --help",t??"display help for command"),e||t)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let t=Number(E.default.exitCode??0);if(t===0&&e&&typeof e!=="function"&&e.error)t=1;this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let i=["beforeAll","before","after","afterAll"];if(!i.includes(e))throw Error(`Unexpected value for position to addHelpText.
34
34
  Expecting one of '${i.join("', '")}'`);let n=`${e}Help`;return this.on(n,(o)=>{let s;if(typeof t==="function")s=t({error:o.error,command:o.command});else s=t;if(s)o.write(`${s}
35
- `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();if(t&&e.find((n)=>t.is(n)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function KI(e){return e.map((t)=>{if(!t.startsWith("--inspect"))return t;let i,n="127.0.0.1",o="9229",s;if((s=t.match(/^(--inspect(-brk)?)$/))!==null)i=s[1];else if((s=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(i=s[1],/^\d+$/.test(s[3]))o=s[3];else n=s[3];else if((s=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)i=s[1],n=s[3],o=s[4];if(i&&o!=="0")return`${i}=${n}:${parseInt(o)+1}`;return t})}function LI(){if(E.default.env.NO_COLOR||E.default.env.FORCE_COLOR==="0"||E.default.env.FORCE_COLOR==="false")return!1;if(E.default.env.FORCE_COLOR||E.default.env.CLICOLOR_FORCE!==void 0)return!0;return}var $1=new Ai;function b(e,t){if(e)return;if(typeof t==="string")throw Error(t);throw t}var FW=require("fs/promises"),Go=require("path"),HW=require("readline/promises");class te extends Error{code;status;body;requestId;constructor(e,t,i,n,o){super(e);this.name="PotatoApiError",this.code=t,this.status=i,this.body=n,this.requestId=o}static fromResponse(e,t,i){let n=i===void 0?"":` (request id: ${i})`;return new te(`Potato API request failed with status ${e}${n}`,"http",e,t,i)}static waitTimeout(e){return new te(`Potato API job did not reach a terminal status within ${e} ms`,"wait_timeout",void 0,{timeoutMs:e})}}class Zi extends Error{code="invalid_pipeline_graph";issues;constructor(e,t){super(e);this.name="PipelineGraphValidationError",this.issues=t}static fromIssues(e){let t=e.map(({path:i,reason:n})=>`- ${i}: ${n}`).join(`
36
- `);return new Zi(`Pipeline graph validation failed
37
- ${t}`,e)}}var Br="x-potato-sdk-base-url",qI=(e,t,i)=>(b(e.length>0,"The SDK base URL cannot be empty"),b(t.length>0,"The SDK API key cannot be empty"),{headers:{Accept:"application/json",Authorization:`ApiKey ${t}`,[Br]:new URL(e).toString()},fetch:i});async function w(e,t){let{fetch:i=globalThis.fetch,...n}=t,o=new Headers(n.headers),s=o.get(Br);b(s,"The SDK base URL is missing"),o.delete(Br);let r=await i(new URL(e,s),{...n,headers:o}),g=await r.text();if(!r.ok){let a=g;if(g.length===0)a=void 0;else if(r.headers.get("content-type")?.includes("application/json"))a=JSON.parse(g);throw te.fromResponse(r.status,a,r.headers.get("x-request-id")??void 0)}return g.length===0?void 0:JSON.parse(g)}var rV=()=>"/api/v2-beta/base-models",ed=async(e)=>w(rV(),{...e,method:"GET"}),gV=(e)=>`/api/v2-beta/base-models/${e}`,td=async(e,t)=>w(gV(e),{...t,method:"GET"}),aV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/projects/${e}/models?${n}`:`/api/v2-beta/projects/${e}/models`},Rr=async(e,t,i)=>w(aV(e,t),{...i,method:"GET"}),lV=(e)=>`/api/v2-beta/projects/${e}/models`,id=async(e,t,i)=>w(lV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),IV=(e,t,i)=>{let n=new URLSearchParams;Object.entries(i||{}).forEach(([s,r])=>{if(r!==void 0)n.append(s,r===null?"null":r.toString())});let o=n.toString();return o.length>0?`/api/v2-beta/projects/${e}/models/${t}/versions?${o}`:`/api/v2-beta/projects/${e}/models/${t}/versions`},Gr=async(e,t,i,n)=>w(IV(e,t,i),{...n,method:"GET"}),dV=(e)=>`/api/v2-beta/model-versions/${e}`,nd=async(e,t)=>w(dV(e),{...t,method:"GET"}),cV=(e,t)=>`/api/v2-beta/projects/${e}/models/${t}/archive`,od=async(e,t,i)=>w(cV(e,t),{...i,method:"POST"}),CV=(e,t)=>`/api/v2-beta/projects/${e}/models/${t}`,sd=async(e,t,i)=>w(CV(e,t),{...i,method:"GET"}),uV=()=>"/api/v2-beta/me",rd=async(e)=>w(uV(),{...e,method:"GET"}),mV=(e)=>{let t=new URLSearchParams;Object.entries(e||{}).forEach(([n,o])=>{if(o!==void 0)t.append(n,o===null?"null":o.toString())});let i=t.toString();return i.length>0?`/api/v2-beta/projects?${i}`:"/api/v2-beta/projects"},wr=async(e,t)=>w(mV(e),{...t,method:"GET"}),pV=()=>"/api/v2-beta/projects",gd=async(e,t)=>w(pV(),{...t,method:"POST",headers:{"Content-Type":"application/json",...t?.headers},body:JSON.stringify(e)}),AV=(e)=>`/api/v2-beta/projects/${e}`,ad=async(e,t)=>w(AV(e),{...t,method:"GET"}),ZV=(e)=>`/api/v2-beta/projects/${e}`,ld=async(e,t,i)=>w(ZV(e),{...i,method:"PATCH",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),bV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/projects/${e}/pipelines?${n}`:`/api/v2-beta/projects/${e}/pipelines`},Fr=async(e,t,i)=>w(bV(e,t),{...i,method:"GET"}),WV=(e)=>`/api/v2-beta/pipelines/${e}`,Id=async(e,t)=>w(WV(e),{...t,method:"GET"}),hV=(e)=>`/api/v2-beta/pipelines/${e}`,dd=async(e,t,i)=>w(hV(e),{...i,method:"PATCH",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),fV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/projects/${e}/datasets?${n}`:`/api/v2-beta/projects/${e}/datasets`},Hr=async(e,t,i)=>w(fV(e,t),{...i,method:"GET"}),yV=(e)=>`/api/v2-beta/projects/${e}/datasets`,cd=async(e,t,i)=>w(yV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),VV=(e)=>`/api/v2-beta/datasets/${e}`,Cd=async(e,t)=>w(VV(e),{...t,method:"GET"}),BV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/datasets/${e}/fields?${n}`:`/api/v2-beta/datasets/${e}/fields`},vr=async(e,t,i)=>w(BV(e,t),{...i,method:"GET"}),RV=(e)=>`/api/v2-beta/datasets/${e}/fields`,kr=async(e,t,i)=>w(RV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),GV=(e)=>`/api/v2-beta/datasets/${e}/inferred-fields`,ud=async(e,t)=>w(GV(e),{...t,method:"GET"}),wV=(e)=>`/api/v2-beta/datasets/${e}/items`,md=async(e,t,i)=>w(wV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),FV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/datasets/${e}/items?${n}`:`/api/v2-beta/datasets/${e}/items`},Pr=async(e,t,i)=>w(FV(e,t),{...i,method:"GET"}),HV=(e)=>`/api/v2-beta/datasets/${e}/uploads`,pd=async(e,t,i)=>w(HV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),vV=(e)=>`/api/v2-beta/uploads/${e}/finalize`,Ad=async(e,t)=>w(vV(e),{...t,method:"POST"}),kV=(e)=>`/api/v2-beta/uploads/${e}/cancel`,Zd=async(e,t)=>w(kV(e),{...t,method:"POST"}),PV=(e)=>`/api/v2-beta/uploads/${e}`,Yr=async(e,t)=>w(PV(e),{...t,method:"GET"}),YV=(e)=>`/api/v2-beta/projects/${e}/pipelines/import`,bd=async(e,t,i)=>w(YV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),NV=(e)=>`/api/v2-beta/pipelines/${e}/dataset`,Wd=async(e,t,i)=>w(NV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),XV=(e)=>`/api/v2-beta/pipelines/${e}/export`,hd=async(e,t)=>w(XV(e),{...t,method:"GET"}),SV=(e)=>`/api/v2-beta/pipelines/${e}/copy`,fd=async(e,t,i)=>w(SV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),xV=(e)=>`/api/v2-beta/pipelines/${e}/cost-estimate`,yd=async(e,t,i)=>w(xV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),JV=(e)=>`/api/v2-beta/pipelines/${e}/runs`,Vd=async(e,t)=>w(JV(e),{...t,method:"POST"}),EV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/pipelines/${e}/runs?${n}`:`/api/v2-beta/pipelines/${e}/runs`},Nr=async(e,t,i)=>w(EV(e,t),{...i,method:"GET"}),UV=(e)=>`/api/v2-beta/runs/${e}`,Xr=async(e,t)=>w(UV(e),{...t,method:"GET"});var OV=(e)=>`/api/v2-beta/runs/${e}/cancel`,Bd=async(e,t)=>w(OV(e),{...t,method:"POST"});var TV=(e)=>`/api/v2-beta/datasets/${e}/exports`,Rd=async(e,t,i)=>w(TV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),zV=(e)=>`/api/v2-beta/exports/${e}`,Sr=async(e,t)=>w(zV(e),{...t,method:"GET"}),jV=(e)=>`/api/v2-beta/pipelines/${e}/graph`,Gd=async(e,t)=>w(jV(e),{...t,method:"GET"}),DV=(e)=>`/api/v2-beta/pipelines/${e}/graph`,wd=async(e,t,i)=>w(DV(e),{...i,method:"PUT",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),QV=(e)=>`/api/v2-beta/pipelines/${e}/graph/validate`,Fd=async(e,t,i)=>w(QV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),_V=(e,t)=>`/api/v2-beta/pipelines/${e}/graph/nodes/${t}`,Hd=async(e,t,i,n)=>w(_V(e,t),{...n,method:"PATCH",headers:{"Content-Type":"application/json",...n?.headers},body:JSON.stringify(i)}),KV=(e)=>`/api/v2-beta/projects/${e}/secrets`,vd=async(e,t)=>w(KV(e),{...t,method:"GET"}),LV=(e,t)=>`/api/v2-beta/projects/${e}/secrets/${t}`,kd=async(e,t,i,n)=>w(LV(e,t),{...n,method:"PUT",headers:{"Content-Type":"application/json",...n?.headers},body:JSON.stringify(i)}),MV=(e)=>`/api/v2-beta/projects/${e}/files`,Pd=async(e,t)=>w(MV(e),{...t,method:"GET"}),$V=(e)=>`/api/v2-beta/projects/${e}/files`,Yd=async(e,t,i)=>w($V(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),qV=(e,t)=>`/api/v2-beta/projects/${e}/files/${t}/finalize`,Nd=async(e,t,i)=>w(qV(e,t),{...i,method:"POST"}),eB=(e,t)=>`/api/v2-beta/projects/${e}/files/${t}`,Xd=async(e,t,i)=>w(eB(e,t),{...i,method:"DELETE"}),tB=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/runs/${e}/items?${n}`:`/api/v2-beta/runs/${e}/items`},xr=async(e,t,i)=>w(tB(e,t),{...i,method:"GET"}),iB=(e,t)=>`/api/v2-beta/runs/${e}/items/${t}`,Sd=async(e,t,i)=>w(iB(e,t),{...i,method:"GET"}),nB=(e)=>`/api/v2-beta/pipelines/${e}/checks`,xd=async(e,t)=>w(nB(e),{...t,method:"GET"}),oB=(e)=>`/api/v2-beta/pipelines/${e}/checks`,Jd=async(e,t,i)=>w(oB(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),sB=(e)=>`/api/v2-beta/checks/${e}`,Jr=async(e,t)=>w(sB(e),{...t,method:"GET"});async function*Me(e,t={}){let i=t.offset;while(!0){let n=await e({limit:t.limit,offset:i});if(yield*n.items,!n.pagination.hasMore)return;i=n.pagination.offset+n.pagination.limit}}var An=async(e,t,i={})=>{let n=i.timeoutMs??60000,o=i.intervalMs??1000;b(Number.isFinite(n)&&n>=0,"The wait timeout must be a nonnegative finite number"),b(Number.isFinite(o)&&o>0,"The polling interval must be a positive finite number");let s=Date.now()+n,r=new AbortController,g=setTimeout(()=>r.abort(),n);try{while(!0){if(r.signal.aborted)throw te.waitTimeout(n);let a=await e(r.signal);if(t(a))return a;let l=s-Date.now();if(l<=0)throw te.waitTimeout(n);let{promise:I,resolve:d}=Promise.withResolvers();setTimeout(d,Math.min(o,l)),await I}}catch(a){if(r.signal.aborted)throw te.waitTimeout(n);throw a}finally{clearTimeout(g)}};var gB=(e)=>{let t=qI(e.baseUrl,e.apiKey,e.fetch),i=()=>{let c=new Headers(t.headers);return c.set("Content-Type","application/json"),{...t,headers:c,body:"{}"}};async function n(c,C){switch(c.type){case"datasetUpload":return An((A)=>Yr(c.uploadId,{...t,signal:A}),(A)=>A.status==="succeeded"||A.status==="failed",C);case"datasetExport":return An((A)=>Sr(c.exportId,{...t,signal:A}),(A)=>A.status==="succeeded",C);case"pipelineCheck":return An((A)=>Jr(c.checkRunId,{...t,signal:A}),(A)=>A.status==="succeeded"||A.status==="failed",C);case"pipelineRun":return An((A)=>Xr(c.runId,{...t,signal:A}),(A)=>A.status==="succeeded"||A.status==="failed",C)}}return{me:()=>rd(t),projects:{create:(c)=>gd(c,t),get:({projectId:c})=>ad(c,t),update:({projectId:c,...C})=>ld(c,C,t),listPage:(c={})=>wr(c,t),listAll:(c={})=>Me(async(C)=>{let A=await wr({...c,...C},t);return{items:A.projects,pagination:A.pagination}},c)},pipelines:{import:({projectId:c,...C})=>bd(c,C,t),get:({pipelineId:c})=>Id(c,t),update:({pipelineId:c,...C})=>dd(c,C,t),listPage:({projectId:c,...C})=>Fr(c,C,t),listAll:({projectId:c,...C})=>Me(async(A)=>{let m=await Fr(c,{...C,...A},t);return{items:m.pipelines,pagination:m.pagination}},C),getGraph:({pipelineId:c})=>Gd(c,t),replaceGraph:({pipelineId:c,...C})=>wd(c,"version"in C?{graph:C.graph,expectedVersion:C.version}:C,t),validateGraph:({pipelineId:c,...C})=>Fd(c,C,t),estimateCost:({pipelineId:c,...C})=>yd(c,C,t),patchNode:({pipelineId:c,nodeId:C,...A})=>Hd(c,C,A,t),attachDataset:({pipelineId:c,...C})=>Wd(c,C,t),export:({pipelineId:c})=>hd(c,t),copy:({pipelineId:c,...C})=>fd(c,C,t)},datasets:{create:({projectId:c,...C})=>cd(c,C,t),get:({datasetId:c})=>Cd(c,t),listPage:({projectId:c,...C})=>Hr(c,C,t),listAll:({projectId:c,...C})=>Me(async(A)=>{let m=await Hr(c,{...C,...A},t);return{items:m.datasets,pagination:m.pagination}},C),createField:async({datasetId:c,...C})=>{let A=await kr(c,C,t);return b(!("fields"in A),"Creating one field must return that field"),A},createFields:async({datasetId:c,fields:C})=>{let A=await kr(c,{fields:C},t);return b("fields"in A,"Creating several fields must return those fields"),A.fields},listFieldsPage:({datasetId:c,...C})=>vr(c,C,t),getInferredFields:({datasetId:c})=>ud(c,t),listAllFields:({datasetId:c,...C})=>Me(async(A)=>{let m=await vr(c,{...C,...A},t);return{items:m.fields,pagination:m.pagination}},C),appendItems:({datasetId:c,...C})=>md(c,C,t),listItemsPage:({datasetId:c,...C})=>Pr(c,C,t),listAllItems:({datasetId:c,...C})=>Me(async(A)=>{let m=await Pr(c,{...C,...A},t);return{items:m.items,pagination:m.pagination}},C),startUpload:({datasetId:c,...C})=>pd(c,C,t),finalizeUpload:({uploadId:c})=>Ad(c,i()),cancelUpload:({uploadId:c})=>Zd(c,i()),getUpload:({uploadId:c})=>Yr(c,t),startExport:({datasetId:c,...C})=>Rd(c,C,t),getExport:({exportId:c})=>Sr(c,t)},baseModels:{list:async()=>(await ed(t)).baseModels,get:({id:c})=>td(c,t)},models:{listPage:({projectId:c,...C})=>Rr(c,C,t),listAll:({projectId:c,...C})=>Me(async(A)=>{let m=await Rr(c,{...C,...A},t);return{items:m.models,pagination:m.pagination}},C),get:({projectId:c,modelId:C})=>sd(c,C,t),listVersionsPage:({projectId:c,modelId:C,...A})=>Gr(c,C,A,t),listAllVersions:({projectId:c,modelId:C,...A})=>Me(async(m)=>{let p=await Gr(c,C,{...A,...m},t);return{items:p.versions,pagination:p.pagination}},A),create:({projectId:c,...C})=>id(c,C,t),getVersion:({modelVersionId:c})=>nd(c,t),archive:({projectId:c,modelId:C})=>{let A=new Headers(t.headers);return A.set("Content-Type","application/json"),od(c,C,{...t,headers:A})}},runs:{start:({pipelineId:c})=>Vd(c,i()),get:({runId:c})=>Xr(c,t),cancel:({runId:c})=>Bd(c,t),listPage:({pipelineId:c,...C})=>Nr(c,C,t),listAll:({pipelineId:c,...C})=>Me(async(A)=>{let m=await Nr(c,{...C,...A},t);return{items:m.runs,pagination:m.pagination}},C),listItemsPage:({runId:c,...C})=>xr(c,C,t),listAllItems:({runId:c,...C})=>Me(async(A)=>{let m=await xr(c,{...C,...A},t);return{items:m.items,pagination:m.pagination}},C),getItem:({runId:c,itemId:C})=>Sd(c,C,t)},secrets:{list:async({projectId:c})=>(await vd(c,t)).secrets,set:({projectId:c,name:C,...A})=>kd(c,C,A,t)},files:{list:async({projectId:c})=>(await Pd(c,t)).files,startUpload:({projectId:c,...C})=>Yd(c,C,t),finalizeUpload:({projectId:c,fileId:C})=>Nd(c,C,t),delete:({projectId:c,fileId:C})=>Xd(c,C,t)},checks:{list:async({pipelineId:c})=>(await xd(c,t)).checks,start:({pipelineId:c,...C})=>Jd(c,C,t),get:({checkRunId:c})=>Jr(c,t)},waitFor:n}};function ut(e){return gB(e)}var Yi=require("fs/promises"),Sa=require("path"),zu=be(Xa(),1);var us="toloka.json";class xa extends Error{constructor(e,t){super(e,t);this.name="TolokaStateError"}}var kH="^(?!/)(?!.*\\\\)(?!.*(?:^|/)\\.\\.?(?:/|$))(?!.*//).+$",PH={type:"object",properties:{projectId:{type:"string",minLength:1},pipelines:{type:"object",propertyNames:{type:"string",pattern:kH},additionalProperties:{type:"object",properties:{pipelineId:{type:"string",minLength:1}},required:["pipelineId"],additionalProperties:!1}},datasets:{type:"object",propertyNames:{type:"string",minLength:1},additionalProperties:{type:"object",properties:{datasetId:{type:"string",minLength:1}},required:["datasetId"],additionalProperties:!1}}},required:["projectId","pipelines","datasets"],additionalProperties:!1},YH=new zu.default({allErrors:!0,strict:!1}),Tu=YH.compile(PH);function NH(e){let t=e.keyword==="required"?e.params.missingProperty:e.keyword==="additionalProperties"?e.params.additionalProperty:void 0;return`${typeof t==="string"?`${e.instancePath}/${t.replaceAll("~","~0").replaceAll("/","~1")}`:e.instancePath||"/"}: ${e.message??`failed ${e.keyword} validation`}`}function ju(e){if(Tu(e))return e;let t=Tu.errors;throw b(t,"toloka.json validation failed without errors"),new xa(`Invalid toloka.json: ${t.map(NH).join("; ")}`)}async function Re(e){let t;try{t=await Yi.readFile(Sa.join(e,us),"utf8")}catch(i){if(i instanceof Error&&"code"in i&&i.code==="ENOENT")return;throw i}try{return ju(JSON.parse(t))}catch(i){if(i instanceof SyntaxError)throw new xa(`Invalid toloka.json: ${i.message}`,{cause:i});throw i}}async function Lt(e,t){let i=ju(t),n=Object.fromEntries(Object.entries(i.pipelines).sort(([s],[r])=>s<r?-1:s>r?1:0)),o=Object.fromEntries(Object.entries(i.datasets).sort(([s],[r])=>s<r?-1:s>r?1:0));await Yi.mkdir(e,{recursive:!0}),await Yi.writeFile(Sa.join(e,us),`${JSON.stringify({projectId:i.projectId,pipelines:n,datasets:o},null,2)}
38
- `,"utf8")}var Ws=require("fs"),jm=require("child_process"),Dm=require("module"),Qm=require("events"),St=require("fs/promises"),ll=require("os"),Xt=require("path"),gl=require("url");var _u=require("oxc-parser");var Du=require("oxc-parser"),Ja=(e,t,i)=>{let n=Du.parseSync(e,t,{lang:i,preserveParens:!1});return n.errors.some((o)=>o.severity==="Error")?null:n.program},Qu=(e)=>{let t=e?.value;if(!t)return null;if(t.type==="Literal")return typeof t.value==="string"?t.value:null;if(t.type==="JSXExpressionContainer"){let i=t.expression;if(i.type==="Literal"&&typeof i.value==="string")return i.value;if(i.type==="TemplateLiteral"&&i.expressions.length===0)return i.quasis[0]?.value.cooked??null}return null};var Ea=(e)=>{let t=SH(e.postprocess);if(!t||t.size===0)return[];let i=XH(e.code);if(!i||i.size===0)return[];return[...i].filter(([n])=>t.has(n)).sort(([n],[o])=>n.localeCompare(o)).map(([n,o])=>{let s=o===n?`path="${o}"`:`path="${o}" \u2014 a dotted path binds its top-level key "${n}"`;return{severity:"error",text:`Postprocess returns the key "${n}", but a Field component is bound to it (${s}). Every submission of this interface fails at runtime with: Postprocess cannot write key '${n}' because a component is bound to it. Fix: bind the Field to a raw key (e.g. path="raw_${n}") and derive "${n}" in postprocess, or remove "${n}" from the postprocess return.`}})},XH=(e)=>{let t=Ja("code.tsx",`(
35
+ `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();if(t&&e.find((n)=>t.is(n)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function MI(e){return e.map((t)=>{if(!t.startsWith("--inspect"))return t;let i,n="127.0.0.1",o="9229",s;if((s=t.match(/^(--inspect(-brk)?)$/))!==null)i=s[1];else if((s=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(i=s[1],/^\d+$/.test(s[3]))o=s[3];else n=s[3];else if((s=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)i=s[1],n=s[3],o=s[4];if(i&&o!=="0")return`${i}=${n}:${parseInt(o)+1}`;return t})}function $I(){if(E.default.env.NO_COLOR||E.default.env.FORCE_COLOR==="0"||E.default.env.FORCE_COLOR==="false")return!1;if(E.default.env.FORCE_COLOR||E.default.env.CLICOLOR_FORCE!==void 0)return!0;return}var eX=new Zi;function b(e,t){if(e)return;if(typeof t==="string")throw Error(t);throw t}var HW=require("fs/promises"),Ho=require("path"),vW=require("readline/promises");class te extends Error{code;status;body;requestId;constructor(e,t,i,n,o){super(e);this.name="PotatoApiError",this.code=t,this.status=i,this.body=n,this.requestId=o}static fromResponse(e,t,i){let n=i===void 0?"":` (request id: ${i})`;return new te(`Potato API request failed with status ${e}${n}`,"http",e,t,i)}static waitTimeout(e){return new te(`Potato API job did not reach a terminal status within ${e} ms`,"wait_timeout",void 0,{timeoutMs:e})}}class bi extends Error{code="invalid_pipeline_graph";issues;constructor(e,t){super(e);this.name="PipelineGraphValidationError",this.issues=t}static fromIssues(e){let t=e.map(({path:i,reason:n})=>`- ${i}: ${n}`).join(`
36
+ `);return new bi(`Pipeline graph validation failed
37
+ ${t}`,e)}}var Gr="x-potato-sdk-base-url",td=(e,t,i)=>(b(e.length>0,"The SDK base URL cannot be empty"),b(t.length>0,"The SDK API key cannot be empty"),{headers:{Accept:"application/json",Authorization:`ApiKey ${t}`,[Gr]:new URL(e).toString()},fetch:i});async function w(e,t){let{fetch:i=globalThis.fetch,...n}=t,o=new Headers(n.headers),s=o.get(Gr);b(s,"The SDK base URL is missing"),o.delete(Gr);let r=await i(new URL(e,s),{...n,headers:o}),g=await r.text();if(!r.ok){let a=g;if(g.length===0)a=void 0;else if(r.headers.get("content-type")?.includes("application/json"))a=JSON.parse(g);throw te.fromResponse(r.status,a,r.headers.get("x-request-id")??void 0)}return g.length===0?void 0:JSON.parse(g)}var gV=()=>"/api/v2-beta/base-models",id=async(e)=>w(gV(),{...e,method:"GET"}),aV=(e)=>`/api/v2-beta/base-models/${e}`,nd=async(e,t)=>w(aV(e),{...t,method:"GET"}),lV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/projects/${e}/models?${n}`:`/api/v2-beta/projects/${e}/models`},wr=async(e,t,i)=>w(lV(e,t),{...i,method:"GET"}),IV=(e)=>`/api/v2-beta/projects/${e}/models`,od=async(e,t,i)=>w(IV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),dV=(e,t,i)=>{let n=new URLSearchParams;Object.entries(i||{}).forEach(([s,r])=>{if(r!==void 0)n.append(s,r===null?"null":r.toString())});let o=n.toString();return o.length>0?`/api/v2-beta/projects/${e}/models/${t}/versions?${o}`:`/api/v2-beta/projects/${e}/models/${t}/versions`},Fr=async(e,t,i,n)=>w(dV(e,t,i),{...n,method:"GET"}),cV=(e)=>`/api/v2-beta/model-versions/${e}`,sd=async(e,t)=>w(cV(e),{...t,method:"GET"}),CV=(e,t)=>`/api/v2-beta/projects/${e}/models/${t}/archive`,rd=async(e,t,i)=>w(CV(e,t),{...i,method:"POST"}),uV=(e,t)=>`/api/v2-beta/projects/${e}/models/${t}`,gd=async(e,t,i)=>w(uV(e,t),{...i,method:"GET"}),mV=()=>"/api/v2-beta/me",ad=async(e)=>w(mV(),{...e,method:"GET"}),pV=(e)=>{let t=new URLSearchParams;Object.entries(e||{}).forEach(([n,o])=>{if(o!==void 0)t.append(n,o===null?"null":o.toString())});let i=t.toString();return i.length>0?`/api/v2-beta/projects?${i}`:"/api/v2-beta/projects"},Hr=async(e,t)=>w(pV(e),{...t,method:"GET"}),AV=()=>"/api/v2-beta/projects",ld=async(e,t)=>w(AV(),{...t,method:"POST",headers:{"Content-Type":"application/json",...t?.headers},body:JSON.stringify(e)}),ZV=(e)=>`/api/v2-beta/projects/${e}`,Id=async(e,t)=>w(ZV(e),{...t,method:"GET"}),bV=(e)=>`/api/v2-beta/projects/${e}`,dd=async(e,t,i)=>w(bV(e),{...i,method:"PATCH",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),WV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/projects/${e}/pipelines?${n}`:`/api/v2-beta/projects/${e}/pipelines`},vr=async(e,t,i)=>w(WV(e,t),{...i,method:"GET"}),hV=(e)=>`/api/v2-beta/pipelines/${e}`,cd=async(e,t)=>w(hV(e),{...t,method:"GET"}),fV=(e)=>`/api/v2-beta/pipelines/${e}`,Cd=async(e,t,i)=>w(fV(e),{...i,method:"PATCH",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),yV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/projects/${e}/datasets?${n}`:`/api/v2-beta/projects/${e}/datasets`},kr=async(e,t,i)=>w(yV(e,t),{...i,method:"GET"}),VV=(e)=>`/api/v2-beta/projects/${e}/datasets`,ud=async(e,t,i)=>w(VV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),BV=(e)=>`/api/v2-beta/datasets/${e}`,md=async(e,t)=>w(BV(e),{...t,method:"GET"}),RV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/datasets/${e}/fields?${n}`:`/api/v2-beta/datasets/${e}/fields`},Pr=async(e,t,i)=>w(RV(e,t),{...i,method:"GET"}),GV=(e)=>`/api/v2-beta/datasets/${e}/fields`,Yr=async(e,t,i)=>w(GV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),wV=(e)=>`/api/v2-beta/datasets/${e}/inferred-fields`,pd=async(e,t)=>w(wV(e),{...t,method:"GET"}),FV=(e)=>`/api/v2-beta/datasets/${e}/items`,Ad=async(e,t,i)=>w(FV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),HV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/datasets/${e}/items?${n}`:`/api/v2-beta/datasets/${e}/items`},Nr=async(e,t,i)=>w(HV(e,t),{...i,method:"GET"}),vV=(e)=>`/api/v2-beta/datasets/${e}/uploads`,Zd=async(e,t,i)=>w(vV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),kV=(e)=>`/api/v2-beta/uploads/${e}/finalize`,bd=async(e,t)=>w(kV(e),{...t,method:"POST"}),PV=(e)=>`/api/v2-beta/uploads/${e}/cancel`,Wd=async(e,t)=>w(PV(e),{...t,method:"POST"}),YV=(e)=>`/api/v2-beta/uploads/${e}`,Xr=async(e,t)=>w(YV(e),{...t,method:"GET"}),NV=(e)=>`/api/v2-beta/projects/${e}/pipelines/import`,hd=async(e,t,i)=>w(NV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),XV=(e)=>`/api/v2-beta/pipelines/${e}/dataset`,fd=async(e,t,i)=>w(XV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),SV=(e)=>`/api/v2-beta/pipelines/${e}/export`,yd=async(e,t)=>w(SV(e),{...t,method:"GET"}),xV=(e)=>`/api/v2-beta/pipelines/${e}/copy`,Vd=async(e,t,i)=>w(xV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),JV=(e)=>`/api/v2-beta/pipelines/${e}/cost-estimate`,Bd=async(e,t,i)=>w(JV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),EV=(e)=>`/api/v2-beta/pipelines/${e}/runs`,Rd=async(e,t)=>w(EV(e),{...t,method:"POST"}),UV=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/pipelines/${e}/runs?${n}`:`/api/v2-beta/pipelines/${e}/runs`},Sr=async(e,t,i)=>w(UV(e,t),{...i,method:"GET"}),OV=(e)=>`/api/v2-beta/runs/${e}`,xr=async(e,t)=>w(OV(e),{...t,method:"GET"});var TV=(e)=>`/api/v2-beta/runs/${e}/cancel`,Gd=async(e,t)=>w(TV(e),{...t,method:"POST"});var zV=(e)=>`/api/v2-beta/datasets/${e}/exports`,wd=async(e,t,i)=>w(zV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),jV=(e)=>`/api/v2-beta/exports/${e}`,Jr=async(e,t)=>w(jV(e),{...t,method:"GET"}),DV=(e)=>`/api/v2-beta/pipelines/${e}/graph`,Fd=async(e,t)=>w(DV(e),{...t,method:"GET"}),QV=(e)=>`/api/v2-beta/pipelines/${e}/graph`,Hd=async(e,t,i)=>w(QV(e),{...i,method:"PUT",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),_V=(e)=>`/api/v2-beta/pipelines/${e}/graph/validate`,vd=async(e,t,i)=>w(_V(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),KV=(e,t)=>`/api/v2-beta/pipelines/${e}/graph/nodes/${t}`,kd=async(e,t,i,n)=>w(KV(e,t),{...n,method:"PATCH",headers:{"Content-Type":"application/json",...n?.headers},body:JSON.stringify(i)}),LV=(e)=>`/api/v2-beta/projects/${e}/secrets`,Pd=async(e,t)=>w(LV(e),{...t,method:"GET"}),MV=(e,t)=>`/api/v2-beta/projects/${e}/secrets/${t}`,Yd=async(e,t,i,n)=>w(MV(e,t),{...n,method:"PUT",headers:{"Content-Type":"application/json",...n?.headers},body:JSON.stringify(i)}),$V=(e)=>`/api/v2-beta/projects/${e}/files`,Nd=async(e,t)=>w($V(e),{...t,method:"GET"}),qV=(e)=>`/api/v2-beta/projects/${e}/files`,Xd=async(e,t,i)=>w(qV(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),eB=(e,t)=>`/api/v2-beta/projects/${e}/files/${t}/finalize`,Sd=async(e,t,i)=>w(eB(e,t),{...i,method:"POST"}),tB=(e,t)=>`/api/v2-beta/projects/${e}/files/${t}`,xd=async(e,t,i)=>w(tB(e,t),{...i,method:"DELETE"}),iB=(e,t)=>{let i=new URLSearchParams;Object.entries(t||{}).forEach(([o,s])=>{if(s!==void 0)i.append(o,s===null?"null":s.toString())});let n=i.toString();return n.length>0?`/api/v2-beta/runs/${e}/items?${n}`:`/api/v2-beta/runs/${e}/items`},Er=async(e,t,i)=>w(iB(e,t),{...i,method:"GET"}),nB=(e,t)=>`/api/v2-beta/runs/${e}/items/${t}`,Jd=async(e,t,i)=>w(nB(e,t),{...i,method:"GET"}),oB=(e)=>`/api/v2-beta/pipelines/${e}/checks`,Ed=async(e,t)=>w(oB(e),{...t,method:"GET"}),sB=(e)=>`/api/v2-beta/pipelines/${e}/checks`,Ud=async(e,t,i)=>w(sB(e),{...i,method:"POST",headers:{"Content-Type":"application/json",...i?.headers},body:JSON.stringify(t)}),rB=(e)=>`/api/v2-beta/checks/${e}`,Ur=async(e,t)=>w(rB(e),{...t,method:"GET"});async function*Me(e,t={}){let i=t.offset;while(!0){let n=await e({limit:t.limit,offset:i});if(yield*n.items,!n.pagination.hasMore)return;i=n.pagination.offset+n.pagination.limit}}var Zn=async(e,t,i={})=>{let n=i.timeoutMs??60000,o=i.intervalMs??1000;b(Number.isFinite(n)&&n>=0,"The wait timeout must be a nonnegative finite number"),b(Number.isFinite(o)&&o>0,"The polling interval must be a positive finite number");let s=Date.now()+n,r=new AbortController,g=setTimeout(()=>r.abort(),n);try{while(!0){if(r.signal.aborted)throw te.waitTimeout(n);let a=await e(r.signal);if(t(a))return a;let l=s-Date.now();if(l<=0)throw te.waitTimeout(n);let{promise:I,resolve:d}=Promise.withResolvers();setTimeout(d,Math.min(o,l)),await I}}catch(a){if(r.signal.aborted)throw te.waitTimeout(n);throw a}finally{clearTimeout(g)}};var aB=(e)=>{let t=td(e.baseUrl,e.apiKey,e.fetch),i=()=>{let c=new Headers(t.headers);return c.set("Content-Type","application/json"),{...t,headers:c,body:"{}"}};async function n(c,C){switch(c.type){case"datasetUpload":return Zn((A)=>Xr(c.uploadId,{...t,signal:A}),(A)=>A.status==="succeeded"||A.status==="failed",C);case"datasetExport":return Zn((A)=>Jr(c.exportId,{...t,signal:A}),(A)=>A.status==="succeeded",C);case"pipelineCheck":return Zn((A)=>Ur(c.checkRunId,{...t,signal:A}),(A)=>A.status==="succeeded"||A.status==="failed",C);case"pipelineRun":return Zn((A)=>xr(c.runId,{...t,signal:A}),(A)=>A.status==="succeeded"||A.status==="failed",C)}}return{me:()=>ad(t),projects:{create:(c)=>ld(c,t),get:({projectId:c})=>Id(c,t),update:({projectId:c,...C})=>dd(c,C,t),listPage:(c={})=>Hr(c,t),listAll:(c={})=>Me(async(C)=>{let A=await Hr({...c,...C},t);return{items:A.projects,pagination:A.pagination}},c)},pipelines:{import:({projectId:c,...C})=>hd(c,C,t),get:({pipelineId:c})=>cd(c,t),update:({pipelineId:c,...C})=>Cd(c,C,t),listPage:({projectId:c,...C})=>vr(c,C,t),listAll:({projectId:c,...C})=>Me(async(A)=>{let m=await vr(c,{...C,...A},t);return{items:m.pipelines,pagination:m.pagination}},C),getGraph:({pipelineId:c})=>Fd(c,t),replaceGraph:({pipelineId:c,...C})=>Hd(c,"version"in C?{graph:C.graph,expectedVersion:C.version}:C,t),validateGraph:({pipelineId:c,...C})=>vd(c,C,t),estimateCost:({pipelineId:c,...C})=>Bd(c,C,t),patchNode:({pipelineId:c,nodeId:C,...A})=>kd(c,C,A,t),attachDataset:({pipelineId:c,...C})=>fd(c,C,t),export:({pipelineId:c})=>yd(c,t),copy:({pipelineId:c,...C})=>Vd(c,C,t)},datasets:{create:({projectId:c,...C})=>ud(c,C,t),get:({datasetId:c})=>md(c,t),listPage:({projectId:c,...C})=>kr(c,C,t),listAll:({projectId:c,...C})=>Me(async(A)=>{let m=await kr(c,{...C,...A},t);return{items:m.datasets,pagination:m.pagination}},C),createField:async({datasetId:c,...C})=>{let A=await Yr(c,C,t);return b(!("fields"in A),"Creating one field must return that field"),A},createFields:async({datasetId:c,fields:C})=>{let A=await Yr(c,{fields:C},t);return b("fields"in A,"Creating several fields must return those fields"),A.fields},listFieldsPage:({datasetId:c,...C})=>Pr(c,C,t),getInferredFields:({datasetId:c})=>pd(c,t),listAllFields:({datasetId:c,...C})=>Me(async(A)=>{let m=await Pr(c,{...C,...A},t);return{items:m.fields,pagination:m.pagination}},C),appendItems:({datasetId:c,...C})=>Ad(c,C,t),listItemsPage:({datasetId:c,...C})=>Nr(c,C,t),listAllItems:({datasetId:c,...C})=>Me(async(A)=>{let m=await Nr(c,{...C,...A},t);return{items:m.items,pagination:m.pagination}},C),startUpload:({datasetId:c,...C})=>Zd(c,C,t),finalizeUpload:({uploadId:c})=>bd(c,i()),cancelUpload:({uploadId:c})=>Wd(c,i()),getUpload:({uploadId:c})=>Xr(c,t),startExport:({datasetId:c,...C})=>wd(c,C,t),getExport:({exportId:c})=>Jr(c,t)},baseModels:{list:async()=>(await id(t)).baseModels,get:({id:c})=>nd(c,t)},models:{listPage:({projectId:c,...C})=>wr(c,C,t),listAll:({projectId:c,...C})=>Me(async(A)=>{let m=await wr(c,{...C,...A},t);return{items:m.models,pagination:m.pagination}},C),get:({projectId:c,modelId:C})=>gd(c,C,t),listVersionsPage:({projectId:c,modelId:C,...A})=>Fr(c,C,A,t),listAllVersions:({projectId:c,modelId:C,...A})=>Me(async(m)=>{let p=await Fr(c,C,{...A,...m},t);return{items:p.versions,pagination:p.pagination}},A),create:({projectId:c,...C})=>od(c,C,t),getVersion:({modelVersionId:c})=>sd(c,t),archive:({projectId:c,modelId:C})=>{let A=new Headers(t.headers);return A.set("Content-Type","application/json"),rd(c,C,{...t,headers:A})}},runs:{start:({pipelineId:c})=>Rd(c,i()),get:({runId:c})=>xr(c,t),cancel:({runId:c})=>Gd(c,t),listPage:({pipelineId:c,...C})=>Sr(c,C,t),listAll:({pipelineId:c,...C})=>Me(async(A)=>{let m=await Sr(c,{...C,...A},t);return{items:m.runs,pagination:m.pagination}},C),listItemsPage:({runId:c,...C})=>Er(c,C,t),listAllItems:({runId:c,...C})=>Me(async(A)=>{let m=await Er(c,{...C,...A},t);return{items:m.items,pagination:m.pagination}},C),getItem:({runId:c,itemId:C})=>Jd(c,C,t)},secrets:{list:async({projectId:c})=>(await Pd(c,t)).secrets,set:({projectId:c,name:C,...A})=>Yd(c,C,A,t)},files:{list:async({projectId:c})=>(await Nd(c,t)).files,startUpload:({projectId:c,...C})=>Xd(c,C,t),finalizeUpload:({projectId:c,fileId:C})=>Sd(c,C,t),delete:({projectId:c,fileId:C})=>xd(c,C,t)},checks:{list:async({pipelineId:c})=>(await Ed(c,t)).checks,start:({pipelineId:c,...C})=>Ud(c,C,t),get:({checkRunId:c})=>Ur(c,t)},waitFor:n}};function ut(e){return aB(e)}var Ni=require("fs/promises"),Ja=require("path"),Du=be(xa(),1);var As="toloka.json";class Ea extends Error{constructor(e,t){super(e,t);this.name="TolokaStateError"}}var PH="^(?!/)(?!.*\\\\)(?!.*(?:^|/)\\.\\.?(?:/|$))(?!.*//).+$",YH={type:"object",properties:{projectId:{type:"string",minLength:1},pipelines:{type:"object",propertyNames:{type:"string",pattern:PH},additionalProperties:{type:"object",properties:{pipelineId:{type:"string",minLength:1}},required:["pipelineId"],additionalProperties:!1}},datasets:{type:"object",propertyNames:{type:"string",minLength:1},additionalProperties:{type:"object",properties:{datasetId:{type:"string",minLength:1}},required:["datasetId"],additionalProperties:!1}}},required:["projectId","pipelines","datasets"],additionalProperties:!1},NH=new Du.default({allErrors:!0,strict:!1}),ju=NH.compile(YH);function XH(e){let t=e.keyword==="required"?e.params.missingProperty:e.keyword==="additionalProperties"?e.params.additionalProperty:void 0;return`${typeof t==="string"?`${e.instancePath}/${t.replaceAll("~","~0").replaceAll("/","~1")}`:e.instancePath||"/"}: ${e.message??`failed ${e.keyword} validation`}`}function Qu(e){if(ju(e))return e;let t=ju.errors;throw b(t,"toloka.json validation failed without errors"),new Ea(`Invalid toloka.json: ${t.map(XH).join("; ")}`)}async function Re(e){let t;try{t=await Ni.readFile(Ja.join(e,As),"utf8")}catch(i){if(i instanceof Error&&"code"in i&&i.code==="ENOENT")return;throw i}try{return Qu(JSON.parse(t))}catch(i){if(i instanceof SyntaxError)throw new Ea(`Invalid toloka.json: ${i.message}`,{cause:i});throw i}}async function Lt(e,t){let i=Qu(t),n=Object.fromEntries(Object.entries(i.pipelines).sort(([s],[r])=>s<r?-1:s>r?1:0)),o=Object.fromEntries(Object.entries(i.datasets).sort(([s],[r])=>s<r?-1:s>r?1:0));await Ni.mkdir(e,{recursive:!0}),await Ni.writeFile(Ja.join(e,As),`${JSON.stringify({projectId:i.projectId,pipelines:n,datasets:o},null,2)}
38
+ `,"utf8")}var Lm=require("fs"),Mm=require("child_process"),$m=require("module"),qm=require("events"),St=require("fs/promises"),Il=require("os"),Xt=require("path");var Lu=require("oxc-parser");var _u=require("oxc-parser"),Ua=(e,t,i)=>{let n=_u.parseSync(e,t,{lang:i,preserveParens:!1});return n.errors.some((o)=>o.severity==="Error")?null:n.program},Ku=(e)=>{let t=e?.value;if(!t)return null;if(t.type==="Literal")return typeof t.value==="string"?t.value:null;if(t.type==="JSXExpressionContainer"){let i=t.expression;if(i.type==="Literal"&&typeof i.value==="string")return i.value;if(i.type==="TemplateLiteral"&&i.expressions.length===0)return i.quasis[0]?.value.cooked??null}return null};var Oa=(e)=>{let t=xH(e.postprocess);if(!t||t.size===0)return[];let i=SH(e.code);if(!i||i.size===0)return[];return[...i].filter(([n])=>t.has(n)).sort(([n],[o])=>n.localeCompare(o)).map(([n,o])=>{let s=o===n?`path="${o}"`:`path="${o}" \u2014 a dotted path binds its top-level key "${n}"`;return{severity:"error",text:`Postprocess returns the key "${n}", but a Field component is bound to it (${s}). Every submission of this interface fails at runtime with: Postprocess cannot write key '${n}' because a component is bound to it. Fix: bind the Field to a raw key (e.g. path="raw_${n}") and derive "${n}" in postprocess, or remove "${n}" from the postprocess return.`}})},SH=(e)=>{let t=Ua("code.tsx",`(
39
39
  ${e}
40
- )`,"tsx");if(!t)return null;let i=new Map;return new _u.Visitor({JSXOpeningElement(o){let s=o.name;while(s.type==="JSXMemberExpression")s=s.object;if(s.type!=="JSXIdentifier"||s.name!=="Field")return;let r=o.attributes.find((l)=>l.type==="JSXAttribute"&&l.name.type==="JSXIdentifier"&&l.name.name==="path"),g=Qu(r);if(!g)return;let a=g.split(/[.[]/u)[0];if(a&&!i.has(a))i.set(a,g)}}).visit(t),i},SH=(e)=>{let t=Ja("postprocess.ts",`(() => {
40
+ )`,"tsx");if(!t)return null;let i=new Map;return new Lu.Visitor({JSXOpeningElement(o){let s=o.name;while(s.type==="JSXMemberExpression")s=s.object;if(s.type!=="JSXIdentifier"||s.name!=="Field")return;let r=o.attributes.find((l)=>l.type==="JSXAttribute"&&l.name.type==="JSXIdentifier"&&l.name.name==="path"),g=Ku(r);if(!g)return;let a=g.split(/[.[]/u)[0];if(a&&!i.has(a))i.set(a,g)}}).visit(t),i},xH=(e)=>{let t=Ua("postprocess.ts",`(() => {
41
41
  ${e}
42
- })`,"ts");if(!t)return null;let i=t.body.length===1?t.body[0]:void 0;if(i?.type!=="ExpressionStatement"||i.expression.type!=="ArrowFunctionExpression"||i.expression.body.type!=="BlockStatement")return null;let n=new Set;for(let o of JH(i.expression.body))Mt(o,n);return n},xH=new Set(["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"]),JH=(e)=>{let t=[],i=(n)=>{if(!n||typeof n!=="object")return;if(Array.isArray(n)){for(let s of n)i(s);return}let o=n;if(typeof o.type==="string"){if(xH.has(o.type))return;if(o.type==="ReturnStatement"&&o.argument)t.push(o.argument)}for(let s of Object.values(o))i(s)};return i(e.body),t},Mt=(e,t)=>{if(e.type==="ObjectExpression")Ku(e,t);else if(e.type==="ConditionalExpression")Mt(e.consequent,t),Mt(e.alternate,t);else if(e.type==="LogicalExpression")Mt(e.left,t),Mt(e.right,t);else if(e.type==="SequenceExpression"){let i=e.expressions.at(-1);if(i)Mt(i,t)}else if(e.type==="TSAsExpression"||e.type==="TSSatisfiesExpression"||e.type==="TSNonNullExpression"||e.type==="TSTypeAssertion")Mt(e.expression,t)},Ku=(e,t)=>{for(let i of e.properties){if(i.type==="SpreadElement"){if(i.argument.type==="ObjectExpression")Ku(i.argument,t);continue}if(!i.computed&&i.key.type==="Identifier")t.add(i.key.name);else if(i.key.type==="Literal"&&(typeof i.key.value==="string"||typeof i.key.value==="number"))t.add(String(i.key.value))}};var em=require("module"),tm=be(require("path"));var ms=require("oxc-parser"),De=be(require("typescript-api"));var zn={version:1,react:{url:"https://tlkfrontprod.azureedge.net/template-builder-production/static/types/react@18.2.17/index.d.ts",sha256:"40a1b33c67109be18a961127873e8ba198429eacf11a468b4a052cddc9a73f8d",source:Buffer.from("Ly8gVHlwZSBkZWZpbml0aW9ucyBmb3IgUmVhY3QgMTguMgovLyBQcm9qZWN0OiBodHRwczovL3JlYWN0LmRldi8KLy8gRGVmaW5pdGlvbnMgYnk6IEFzYW5hIDxodHRwczovL2FzYW5hLmNvbT4KLy8gICAgICAgICAgICAgICAgIEFzc3VyZVNpZ24gPGh0dHA6Ly93d3cuYXNzdXJlc2lnbi5jb20+Ci8vICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgPGh0dHBzOi8vbWljcm9zb2Z0LmNvbT4KLy8gICAgICAgICAgICAgICAgIEpvaG4gUmVpbGx5IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVpbGx5PgovLyAgICAgICAgICAgICAgICAgQmVub2l0IEJlbmV6ZWNoIDxodHRwczovL2dpdGh1Yi5jb20vYmJlbmV6ZWNoPgovLyAgICAgICAgICAgICAgICAgUGF0cmljaW8gWmF2b2xpbnNreSA8aHR0cHM6Ly9naXRodWIuY29tL3B6YXZvbGluc2t5PgovLyAgICAgICAgICAgICAgICAgRXJpYyBBbmRlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL2VyaWNhbmRlcnNvbj4KLy8gICAgICAgICAgICAgICAgIERvdnlkYXMgTmF2aWNrYXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9Eb3Z5ZGFzTmF2aWNrYXM+Ci8vICAgICAgICAgICAgICAgICBKb3NoIFJ1dGhlcmZvcmQgPGh0dHBzOi8vZ2l0aHViLmNvbS90aGVydXRoZXI0ZD4KLy8gICAgICAgICAgICAgICAgIEd1aWxoZXJtZSBIw7xibmVyIDxodHRwczovL2dpdGh1Yi5jb20vZ3VpbGhlcm1laHVibmVyPgovLyAgICAgICAgICAgICAgICAgRmVyZHkgQnVkaGlkaGFybWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJkYWJlcj4KLy8gICAgICAgICAgICAgICAgIEpvaGFubiBSYWtvdG9oYXJpc29hIDxodHRwczovL2dpdGh1Yi5jb20vanJha290b2hhcmlzb2E+Ci8vICAgICAgICAgICAgICAgICBPbGl2aWVyIFBhc2NhbCA8aHR0cHM6Ly9naXRodWIuY29tL3Bhc2NhbG9saXY+Ci8vICAgICAgICAgICAgICAgICBNYXJ0aW4gSG9jaGVsIDxodHRwczovL2dpdGh1Yi5jb20vaG90ZWxsPgovLyAgICAgICAgICAgICAgICAgRnJhbmsgTGkgPGh0dHBzOi8vZ2l0aHViLmNvbS9mcmFua2xpeHVlZmVpPgovLyAgICAgICAgICAgICAgICAgSmVzc2ljYSBGcmFuY28gPGh0dHBzOi8vZ2l0aHViLmNvbS9KZXNzaWRoaWE+Ci8vICAgICAgICAgICAgICAgICBTYXJhbnNoIEthdGFyaWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9zYXJhbnNoa2F0YXJpYT4KLy8gICAgICAgICAgICAgICAgIEthbml0a29ybiBTdWphdXRyYSA8aHR0cHM6Ly9naXRodWIuY29tL2x1a3l0aD4KLy8gICAgICAgICAgICAgICAgIFNlYmFzdGlhbiBTaWxiZXJtYW5uIDxodHRwczovL2dpdGh1Yi5jb20vZXBzMWxvbj4KLy8gICAgICAgICAgICAgICAgIEt5bGUgU2N1bGx5IDxodHRwczovL2dpdGh1Yi5jb20vemlla2E+Ci8vICAgICAgICAgICAgICAgICBDb25nIFpoYW5nIDxodHRwczovL2dpdGh1Yi5jb20vZGFuY2VycGhpbD4KLy8gICAgICAgICAgICAgICAgIERpbWl0cmkgTWl0cm9wb3Vsb3MgPGh0dHBzOi8vZ2l0aHViLmNvbS9kaW1pdHJvcG91bG9zPgovLyAgICAgICAgICAgICAgICAgSm9uZ0NoYW4gQ2hvaSA8aHR0cHM6Ly9naXRodWIuY29tL2Rpc2p1a3I+Ci8vICAgICAgICAgICAgICAgICBWaWN0b3IgTWFnYWxow6NlcyA8aHR0cHM6Ly9naXRodWIuY29tL3ZoZm1hZz4KLy8gICAgICAgICAgICAgICAgIERhbGUgVGFuIDxodHRwczovL2dpdGh1Yi5jb20vaGVsbGF0YW4+Ci8vICAgICAgICAgICAgICAgICBQcml5YW5zaHUgUmF2IDxodHRwczovL2dpdGh1Yi5jb20vcHJpeWFuc2h1cmF2PgovLyAgICAgICAgICAgICAgICAgRG1pdHJ5IFNlbWlncmFkc2t5IDxodHRwczovL2dpdGh1Yi5jb20vU2VtaWdyYWRza3k+Ci8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZAovLyBUeXBlU2NyaXB0IFZlcnNpb246IDIuOAoKLy8gTk9URTogVXNlcnMgb2YgdGhlIGBleHBlcmltZW50YWxgIGJ1aWxkcyBvZiBSZWFjdCBzaG91bGQgYWRkIGEgcmVmZXJlbmNlCi8vIHRvICdyZWFjdC9leHBlcmltZW50YWwnIGluIHRoZWlyIHByb2plY3QuIFNlZSBleHBlcmltZW50YWwuZC50cydzIHRvcCBjb21tZW50Ci8vIGZvciByZWZlcmVuY2UgYW5kIGRvY3VtZW50YXRpb24gb24gaG93IGV4YWN0bHkgdG8gZG8gaXQuCgovLy8gPHJlZmVyZW5jZSBwYXRoPSJnbG9iYWwuZC50cyIgLz4KCmltcG9ydCAqIGFzIENTUyBmcm9tICdjc3N0eXBlJzsKaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnOwppbXBvcnQgeyBJbnRlcmFjdGlvbiBhcyBTY2hlZHVsZXJJbnRlcmFjdGlvbiB9IGZyb20gJ3NjaGVkdWxlci90cmFjaW5nJzsKCnR5cGUgTmF0aXZlQW5pbWF0aW9uRXZlbnQgPSBBbmltYXRpb25FdmVudDsKdHlwZSBOYXRpdmVDbGlwYm9hcmRFdmVudCA9IENsaXBib2FyZEV2ZW50Owp0eXBlIE5hdGl2ZUNvbXBvc2l0aW9uRXZlbnQgPSBDb21wb3NpdGlvbkV2ZW50Owp0eXBlIE5hdGl2ZURyYWdFdmVudCA9IERyYWdFdmVudDsKdHlwZSBOYXRpdmVGb2N1c0V2ZW50ID0gRm9jdXNFdmVudDsKdHlwZSBOYXRpdmVLZXlib2FyZEV2ZW50ID0gS2V5Ym9hcmRFdmVudDsKdHlwZSBOYXRpdmVNb3VzZUV2ZW50ID0gTW91c2VFdmVudDsKdHlwZSBOYXRpdmVUb3VjaEV2ZW50ID0gVG91Y2hFdmVudDsKdHlwZSBOYXRpdmVQb2ludGVyRXZlbnQgPSBQb2ludGVyRXZlbnQ7CnR5cGUgTmF0aXZlVHJhbnNpdGlvbkV2ZW50ID0gVHJhbnNpdGlvbkV2ZW50Owp0eXBlIE5hdGl2ZVVJRXZlbnQgPSBVSUV2ZW50Owp0eXBlIE5hdGl2ZVdoZWVsRXZlbnQgPSBXaGVlbEV2ZW50Owp0eXBlIEJvb2xlYW5pc2ggPSBib29sZWFuIHwgJ3RydWUnIHwgJ2ZhbHNlJzsKCmRlY2xhcmUgY29uc3QgVU5ERUZJTkVEX1ZPSURfT05MWTogdW5pcXVlIHN5bWJvbDsKLy8gRGVzdHJ1Y3RvcnMgYXJlIG9ubHkgYWxsb3dlZCB0byByZXR1cm4gdm9pZC4KdHlwZSBEZXN0cnVjdG9yID0gKCkgPT4gdm9pZCB8IHsgW1VOREVGSU5FRF9WT0lEX09OTFldOiBuZXZlciB9Owp0eXBlIFZvaWRPclVuZGVmaW5lZE9ubHkgPSB2b2lkIHwgeyBbVU5ERUZJTkVEX1ZPSURfT05MWV06IG5ldmVyIH07CgovLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LWp1c3QtbmFtZXNwYWNlCmV4cG9ydCA9IFJlYWN0OwpleHBvcnQgYXMgbmFtZXNwYWNlIFJlYWN0OwoKZGVjbGFyZSBuYW1lc3BhY2UgUmVhY3QgewogICAgLy8KICAgIC8vIFJlYWN0IEVsZW1lbnRzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgdHlwZSBFbGVtZW50VHlwZTxQID0gYW55PiA9CiAgICAgICAgewogICAgICAgICAgICBbSyBpbiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHNdOiBQIGV4dGVuZHMgSlNYLkludHJpbnNpY0VsZW1lbnRzW0tdID8gSyA6IG5ldmVyCiAgICAgICAgfVtrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHNdIHwKICAgICAgICBDb21wb25lbnRUeXBlPFA+OwogICAgdHlwZSBDb21wb25lbnRUeXBlPFAgPSB7fT4gPSBDb21wb25lbnRDbGFzczxQPiB8IEZ1bmN0aW9uQ29tcG9uZW50PFA+OwoKICAgIHR5cGUgSlNYRWxlbWVudENvbnN0cnVjdG9yPFA+ID0KICAgICAgICB8ICgoCiAgICAgICAgICAgICAgcHJvcHM6IFAsCiAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvZG9jcy9sZWdhY3ktY29udGV4dC5odG1sI3JlZmVyZW5jaW5nLWNvbnRleHQtaW4tc3RhdGVsZXNzLWZ1bmN0aW9uLWNvbXBvbmVudHMKICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICBkZXByZWNhdGVkTGVnYWN5Q29udGV4dD86IGFueSwKICAgICAgICAgICkgPT4gUmVhY3ROb2RlKQogICAgICAgIHwgKG5ldyAoCiAgICAgICAgICAgICAgcHJvcHM6IFAsCiAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvZG9jcy9sZWdhY3ktY29udGV4dC5odG1sI3JlZmVyZW5jaW5nLWNvbnRleHQtaW4tbGlmZWN5Y2xlLW1ldGhvZHMKICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICBkZXByZWNhdGVkTGVnYWN5Q29udGV4dD86IGFueSwKICAgICAgICAgICkgPT4gQ29tcG9uZW50PGFueSwgYW55Pik7CgogICAgaW50ZXJmYWNlIFJlZk9iamVjdDxUPiB7CiAgICAgICAgcmVhZG9ubHkgY3VycmVudDogVCB8IG51bGw7CiAgICB9CiAgICAvLyBCaXZhcmlhbmNlIGhhY2sgZm9yIGNvbnNpc3RlbnQgdW5zb3VuZG5lc3Mgd2l0aCBSZWZPYmplY3QKICAgIHR5cGUgUmVmQ2FsbGJhY2s8VD4gPSB7IGJpdmFyaWFuY2VIYWNrKGluc3RhbmNlOiBUIHwgbnVsbCk6IHZvaWQgfVsiYml2YXJpYW5jZUhhY2siXTsKICAgIHR5cGUgUmVmPFQ+ID0gUmVmQ2FsbGJhY2s8VD4gfCBSZWZPYmplY3Q8VD4gfCBudWxsOwogICAgdHlwZSBMZWdhY3lSZWY8VD4gPSBzdHJpbmcgfCBSZWY8VD47CiAgICAvKioKICAgICAqIEdldHMgdGhlIGluc3RhbmNlIHR5cGUgZm9yIGEgUmVhY3QgZWxlbWVudC4gVGhlIGluc3RhbmNlIHdpbGwgYmUgZGlmZmVyZW50IGZvciB2YXJpb3VzIGNvbXBvbmVudCB0eXBlczoKICAgICAqCiAgICAgKiAtIFJlYWN0IGNsYXNzIGNvbXBvbmVudHMgd2lsbCBiZSB0aGUgY2xhc3MgaW5zdGFuY2UuIFNvIGlmIHlvdSBoYWQgYGNsYXNzIEZvbyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fT4ge31gCiAgICAgKiAgIGFuZCB1c2VkIGBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBGb28+YCB0aGVuIHRoZSB0eXBlIHdvdWxkIGJlIHRoZSBpbnN0YW5jZSBvZiBgRm9vYC4KICAgICAqIC0gUmVhY3Qgc3RhdGVsZXNzIGZ1bmN0aW9uYWwgY29tcG9uZW50cyBkbyBub3QgaGF2ZSBhIGJhY2tpbmcgaW5zdGFuY2UgYW5kIHNvIGBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBCYXI+YAogICAgICogICAod2hlbiBgQmFyYCBpcyBgZnVuY3Rpb24gQmFyKCkge31gKSB3aWxsIGdpdmUgeW91IHRoZSBgdW5kZWZpbmVkYCB0eXBlLgogICAgICogLSBKU1ggaW50cmluc2ljcyBsaWtlIGBkaXZgIHdpbGwgZ2l2ZSB5b3UgdGhlaXIgRE9NIGluc3RhbmNlLiBGb3IgYFJlYWN0LkVsZW1lbnRSZWY8J2Rpdic+YCB0aGF0IHdvdWxkIGJlCiAgICAgKiAgIGBIVE1MRGl2RWxlbWVudGAuIEZvciBgUmVhY3QuRWxlbWVudFJlZjwnaW5wdXQnPmAgdGhhdCB3b3VsZCBiZSBgSFRNTElucHV0RWxlbWVudGAuCiAgICAgKiAtIFJlYWN0IHN0YXRlbGVzcyBmdW5jdGlvbmFsIGNvbXBvbmVudHMgdGhhdCBmb3J3YXJkIGEgYHJlZmAgd2lsbCBnaXZlIHlvdSB0aGUgYEVsZW1lbnRSZWZgIG9mIHRoZSBmb3J3YXJkZWQKICAgICAqICAgdG8gY29tcG9uZW50LgogICAgICoKICAgICAqIGBDYCBtdXN0IGJlIHRoZSB0eXBlIF9vZl8gYSBSZWFjdCBjb21wb25lbnQgc28geW91IG5lZWQgdG8gdXNlIHR5cGVvZiBhcyBpbiBgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgTXlDb21wb25lbnQ+YC4KICAgICAqCiAgICAgKiBAdG9kbyBJbiBGbG93LCB0aGlzIHdvcmtzIGEgbGl0dGxlIGRpZmZlcmVudCB3aXRoIGZvcndhcmRlZCByZWZzIGFuZCB0aGUgYEFic3RyYWN0Q29tcG9uZW50YCB0aGF0CiAgICAgKiAgICAgICBgUmVhY3QuZm9yd2FyZFJlZigpYCByZXR1cm5zLgogICAgICovCiAgICB0eXBlIEVsZW1lbnRSZWY8CiAgICAgICAgQyBleHRlbmRzCiAgICAgICAgICAgIHwgRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxhbnk+CiAgICAgICAgICAgIHwgeyBuZXcgKHByb3BzOiBhbnkpOiBDb21wb25lbnQ8YW55PiB9CiAgICAgICAgICAgIHwgKChwcm9wczogYW55LCBjb250ZXh0PzogYW55KSA9PiBSZWFjdE5vZGUpCiAgICAgICAgICAgIHwga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzCiAgICA+ID0KICAgICAgICAvLyBuZWVkIHRvIGNoZWNrIGZpcnN0IGlmIGByZWZgIGlzIGEgdmFsaWQgcHJvcCBmb3IgdHNAMy4wCiAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgaW5mZXIgYHt9YCBpbnN0ZWFkIG9mIGBuZXZlcmAKICAgICAgICAicmVmIiBleHRlbmRzIGtleW9mIENvbXBvbmVudFByb3BzV2l0aFJlZjxDPgogICAgICAgICAgICA/IE5vbk51bGxhYmxlPENvbXBvbmVudFByb3BzV2l0aFJlZjxDPlsicmVmIl0+IGV4dGVuZHMgUmVmPAogICAgICAgICAgICAgICAgaW5mZXIgSW5zdGFuY2UKICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPyBJbnN0YW5jZQogICAgICAgICAgICAgICAgOiBuZXZlcgogICAgICAgICAgICA6IG5ldmVyOwoKICAgIHR5cGUgQ29tcG9uZW50U3RhdGUgPSBhbnk7CgogICAgdHlwZSBLZXkgPSBzdHJpbmcgfCBudW1iZXI7CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZG4ndCBuZWVkIHRvIHVzZSB0aGlzIHR5cGUgc2luY2UgeW91IG5ldmVyIHNlZSB0aGVzZSBhdHRyaWJ1dGVzCiAgICAgKiBpbnNpZGUgeW91ciBjb21wb25lbnQgb3IgaGF2ZSB0byB2YWxpZGF0ZSB0aGVtLgogICAgICovCiAgICBpbnRlcmZhY2UgQXR0cmlidXRlcyB7CiAgICAgICAga2V5PzogS2V5IHwgbnVsbCB8IHVuZGVmaW5lZDsKICAgIH0KICAgIGludGVyZmFjZSBSZWZBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgQXR0cmlidXRlcyB7CiAgICAgICAgLyoqCiAgICAgICAgICogQWxsb3dzIGdldHRpbmcgYSByZWYgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZS4KICAgICAgICAgKiBPbmNlIHRoZSBjb21wb25lbnQgdW5tb3VudHMsIFJlYWN0IHdpbGwgc2V0IGByZWYuY3VycmVudGAgdG8gYG51bGxgIChvciBjYWxsIHRoZSByZWYgd2l0aCBgbnVsbGAgaWYgeW91IHBhc3NlZCBhIGNhbGxiYWNrIHJlZikuCiAgICAgICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9sZWFybi9yZWZlcmVuY2luZy12YWx1ZXMtd2l0aC1yZWZzI3JlZnMtYW5kLXRoZS1kb20KICAgICAgICAgKi8KICAgICAgICByZWY/OiBSZWY8VD4gfCB1bmRlZmluZWQ7CiAgICB9CiAgICBpbnRlcmZhY2UgQ2xhc3NBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgQXR0cmlidXRlcyB7CiAgICAgICAgLyoqCiAgICAgICAgICogQWxsb3dzIGdldHRpbmcgYSByZWYgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZS4KICAgICAgICAgKiBPbmNlIHRoZSBjb21wb25lbnQgdW5tb3VudHMsIFJlYWN0IHdpbGwgc2V0IGByZWYuY3VycmVudGAgdG8gYG51bGxgIChvciBjYWxsIHRoZSByZWYgd2l0aCBgbnVsbGAgaWYgeW91IHBhc3NlZCBhIGNhbGxiYWNrIHJlZikuCiAgICAgICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9sZWFybi9yZWZlcmVuY2luZy12YWx1ZXMtd2l0aC1yZWZzI3JlZnMtYW5kLXRoZS1kb20KICAgICAgICAgKi8KICAgICAgICByZWY/OiBMZWdhY3lSZWY8VD4gfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFJlYWN0RWxlbWVudDxQID0gYW55LCBUIGV4dGVuZHMgc3RyaW5nIHwgSlNYRWxlbWVudENvbnN0cnVjdG9yPGFueT4gPSBzdHJpbmcgfCBKU1hFbGVtZW50Q29uc3RydWN0b3I8YW55Pj4gewogICAgICAgIHR5cGU6IFQ7CiAgICAgICAgcHJvcHM6IFA7CiAgICAgICAga2V5OiBLZXkgfCBudWxsOwogICAgfQoKICAgIGludGVyZmFjZSBSZWFjdENvbXBvbmVudEVsZW1lbnQ8CiAgICAgICAgVCBleHRlbmRzIGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cyB8IEpTWEVsZW1lbnRDb25zdHJ1Y3Rvcjxhbnk+LAogICAgICAgIFAgPSBQaWNrPENvbXBvbmVudFByb3BzPFQ+LCBFeGNsdWRlPGtleW9mIENvbXBvbmVudFByb3BzPFQ+LCAna2V5JyB8ICdyZWYnPj4KICAgID4gZXh0ZW5kcyBSZWFjdEVsZW1lbnQ8UCwgRXhjbHVkZTxULCBudW1iZXI+PiB7IH0KCiAgICBpbnRlcmZhY2UgRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+IGV4dGVuZHMgUmVhY3RFbGVtZW50PFAsIEZ1bmN0aW9uQ29tcG9uZW50PFA+PiB7CiAgICAgICAgcmVmPzogKCdyZWYnIGV4dGVuZHMga2V5b2YgUCA/IFAgZXh0ZW5kcyB7IHJlZj86IGluZmVyIFIgfCB1bmRlZmluZWQgfSA/IFIgOiBuZXZlciA6IG5ldmVyKSB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIENFbGVtZW50PFAsIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PiA9IENvbXBvbmVudEVsZW1lbnQ8UCwgVD47CiAgICBpbnRlcmZhY2UgQ29tcG9uZW50RWxlbWVudDxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPj4gZXh0ZW5kcyBSZWFjdEVsZW1lbnQ8UCwgQ29tcG9uZW50Q2xhc3M8UD4+IHsKICAgICAgICByZWY/OiBMZWdhY3lSZWY8VD4gfCB1bmRlZmluZWQ7CiAgICB9CgogICAgdHlwZSBDbGFzc2ljRWxlbWVudDxQPiA9IENFbGVtZW50PFAsIENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PjsKCiAgICAvLyBzdHJpbmcgZmFsbGJhY2sgZm9yIGN1c3RvbSB3ZWItY29tcG9uZW50cwogICAgaW50ZXJmYWNlIERPTUVsZW1lbnQ8UCBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHwgU1ZHQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIEVsZW1lbnQ+IGV4dGVuZHMgUmVhY3RFbGVtZW50PFAsIHN0cmluZz4gewogICAgICAgIHJlZjogTGVnYWN5UmVmPFQ+OwogICAgfQoKICAgIC8vIFJlYWN0SFRNTCBmb3IgUmVhY3RIVE1MRWxlbWVudAogICAgaW50ZXJmYWNlIFJlYWN0SFRNTEVsZW1lbnQ8VCBleHRlbmRzIEhUTUxFbGVtZW50PiBleHRlbmRzIERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxBbGxIVE1MQXR0cmlidXRlczxUPiwgVD4geyB9CgogICAgaW50ZXJmYWNlIERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4gZXh0ZW5kcyBET01FbGVtZW50PFAsIFQ+IHsKICAgICAgICB0eXBlOiBrZXlvZiBSZWFjdEhUTUw7CiAgICB9CgogICAgLy8gUmVhY3RTVkcgZm9yIFJlYWN0U1ZHRWxlbWVudAogICAgaW50ZXJmYWNlIFJlYWN0U1ZHRWxlbWVudCBleHRlbmRzIERPTUVsZW1lbnQ8U1ZHQXR0cmlidXRlczxTVkdFbGVtZW50PiwgU1ZHRWxlbWVudD4gewogICAgICAgIHR5cGU6IGtleW9mIFJlYWN0U1ZHOwogICAgfQoKICAgIGludGVyZmFjZSBSZWFjdFBvcnRhbCBleHRlbmRzIFJlYWN0RWxlbWVudCB7CiAgICAgICAga2V5OiBLZXkgfCBudWxsOwogICAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7CiAgICB9CgogICAgLy8KICAgIC8vIEZhY3RvcmllcwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHR5cGUgRmFjdG9yeTxQPiA9IChwcm9wcz86IEF0dHJpYnV0ZXMgJiBQLCAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pID0+IFJlYWN0RWxlbWVudDxQPjsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYEZ1bmN0aW9uQ29tcG9uZW50RmFjdG9yeWAKICAgICAqLwogICAgdHlwZSBTRkNGYWN0b3J5PFA+ID0gRnVuY3Rpb25Db21wb25lbnRGYWN0b3J5PFA+OwoKICAgIHR5cGUgRnVuY3Rpb25Db21wb25lbnRGYWN0b3J5PFA+ID0gKHByb3BzPzogQXR0cmlidXRlcyAmIFAsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSkgPT4gRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+OwoKICAgIHR5cGUgQ29tcG9uZW50RmFjdG9yeTxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPj4gPQogICAgICAgIChwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSkgPT4gQ0VsZW1lbnQ8UCwgVD47CgogICAgdHlwZSBDRmFjdG9yeTxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPj4gPSBDb21wb25lbnRGYWN0b3J5PFAsIFQ+OwogICAgdHlwZSBDbGFzc2ljRmFjdG9yeTxQPiA9IENGYWN0b3J5PFAsIENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PjsKCiAgICB0eXBlIERPTUZhY3Rvcnk8UCBleHRlbmRzIERPTUF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBFbGVtZW50PiA9CiAgICAgICAgKHByb3BzPzogQ2xhc3NBdHRyaWJ1dGVzPFQ+ICYgUCB8IG51bGwsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSkgPT4gRE9NRWxlbWVudDxQLCBUPjsKCiAgICBpbnRlcmZhY2UgSFRNTEZhY3Rvcnk8VCBleHRlbmRzIEhUTUxFbGVtZW50PiBleHRlbmRzIERldGFpbGVkSFRNTEZhY3Rvcnk8QWxsSFRNTEF0dHJpYnV0ZXM8VD4sIFQ+IHt9CgogICAgaW50ZXJmYWNlIERldGFpbGVkSFRNTEZhY3Rvcnk8UCBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+LCBUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+IGV4dGVuZHMgRE9NRmFjdG9yeTxQLCBUPiB7CiAgICAgICAgKHByb3BzPzogQ2xhc3NBdHRyaWJ1dGVzPFQ+ICYgUCB8IG51bGwsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQLCBUPjsKICAgIH0KCiAgICBpbnRlcmZhY2UgU1ZHRmFjdG9yeSBleHRlbmRzIERPTUZhY3Rvcnk8U1ZHQXR0cmlidXRlczxTVkdFbGVtZW50PiwgU1ZHRWxlbWVudD4gewogICAgICAgIChwcm9wcz86IENsYXNzQXR0cmlidXRlczxTVkdFbGVtZW50PiAmIFNWR0F0dHJpYnV0ZXM8U1ZHRWxlbWVudD4gfCBudWxsLCAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pOiBSZWFjdFNWR0VsZW1lbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgdHlwZSBpcyBub3QgcmVsZXZhbnQgd2hlbiB1c2luZyBSZWFjdC4gSW5saW5lIHRoZSB0eXBlIGluc3RlYWQgdG8gbWFrZSB0aGUgaW50ZW50IGNsZWFyLgogICAgICovCiAgICB0eXBlIFJlYWN0VGV4dCA9IHN0cmluZyB8IG51bWJlcjsKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIHR5cGUgaXMgbm90IHJlbGV2YW50IHdoZW4gdXNpbmcgUmVhY3QuIElubGluZSB0aGUgdHlwZSBpbnN0ZWFkIHRvIG1ha2UgdGhlIGludGVudCBjbGVhci4KICAgICAqLwogICAgdHlwZSBSZWFjdENoaWxkID0gUmVhY3RFbGVtZW50IHwgc3RyaW5nIHwgbnVtYmVyOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIGVpdGhlciBgUmVhY3ROb2RlW11gIGlmIHlvdSBuZWVkIGFuIGFycmF5IG9yIGBJdGVyYWJsZTxSZWFjdE5vZGU+YCBpZiBpdHMgcGFzc2VkIHRvIGEgaG9zdCBjb21wb25lbnQuCiAgICAgKi8KICAgIGludGVyZmFjZSBSZWFjdE5vZGVBcnJheSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8UmVhY3ROb2RlPiB7fQogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgdHlwZSBpcyBub3QgcmVsZXZhbnQgd2hlbiB1c2luZyBSZWFjdC4gSW5saW5lIHRoZSB0eXBlIGluc3RlYWQgdG8gbWFrZSB0aGUgaW50ZW50IGNsZWFyLgogICAgICovCiAgICB0eXBlIFJlYWN0RnJhZ21lbnQgPSBJdGVyYWJsZTxSZWFjdE5vZGU+OwoKICAgIC8qKgogICAgICogRm9yIGludGVybmFsIHVzYWdlIG9ubHkuCiAgICAgKiBEaWZmZXJlbnQgcmVsZWFzZSBjaGFubmVscyBkZWNsYXJlIGFkZGl0aW9uYWwgdHlwZXMgb2YgUmVhY3ROb2RlIHRoaXMgcGFydGljdWxhciByZWxlYXNlIGNoYW5uZWwgYWNjZXB0cy4KICAgICAqIEFwcCBvciBsaWJyYXJ5IHR5cGVzIHNob3VsZCBuZXZlciBhdWdtZW50IHRoaXMgaW50ZXJmYWNlLgogICAgICovCiAgICBpbnRlcmZhY2UgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfUkVBQ1RfTk9ERVMge30KICAgIHR5cGUgUmVhY3ROb2RlID0KICAgICAgICB8IFJlYWN0RWxlbWVudAogICAgICAgIHwgc3RyaW5nCiAgICAgICAgfCBudW1iZXIKICAgICAgICB8IEl0ZXJhYmxlPFJlYWN0Tm9kZT4KICAgICAgICB8IFJlYWN0UG9ydGFsCiAgICAgICAgfCBib29sZWFuCiAgICAgICAgfCBudWxsCiAgICAgICAgfCB1bmRlZmluZWQKICAgICAgICB8IERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX1JFQUNUX05PREVTW2tleW9mIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX1JFQUNUX05PREVTXTsKCiAgICAvLwogICAgLy8gVG9wIExldmVsIEFQSQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIC8vIERPTSBFbGVtZW50cwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeTxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KAogICAgICAgIHR5cGU6IGtleW9mIFJlYWN0SFRNTCk6IEhUTUxGYWN0b3J5PFQ+OwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSgKICAgICAgICB0eXBlOiBrZXlvZiBSZWFjdFNWRyk6IFNWR0ZhY3Rvcnk7CiAgICBmdW5jdGlvbiBjcmVhdGVGYWN0b3J5PFAgZXh0ZW5kcyBET01BdHRyaWJ1dGVzPFQ+LCBUIGV4dGVuZHMgRWxlbWVudD4oCiAgICAgICAgdHlwZTogc3RyaW5nKTogRE9NRmFjdG9yeTxQLCBUPjsKCiAgICAvLyBDdXN0b20gY29tcG9uZW50cwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeTxQPih0eXBlOiBGdW5jdGlvbkNvbXBvbmVudDxQPik6IEZ1bmN0aW9uQ29tcG9uZW50RmFjdG9yeTxQPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUZhY3Rvcnk8UD4oCiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPFAsIENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+LCBDbGFzc2ljQ29tcG9uZW50Q2xhc3M8UD4+KTogQ0ZhY3Rvcnk8UCwgQ2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4+OwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeTxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPiwgQyBleHRlbmRzIENvbXBvbmVudENsYXNzPFA+PigKICAgICAgICB0eXBlOiBDbGFzc1R5cGU8UCwgVCwgQz4pOiBDRmFjdG9yeTxQLCBUPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUZhY3Rvcnk8UD4odHlwZTogQ29tcG9uZW50Q2xhc3M8UD4pOiBGYWN0b3J5PFA+OwoKICAgIC8vIERPTSBFbGVtZW50cwogICAgLy8gVE9ETzogZ2VuZXJhbGl6ZSB0aGlzIHRvIGV2ZXJ5dGhpbmcgaW4gYGtleW9mIFJlYWN0SFRNTGAsIG5vdCBqdXN0ICJpbnB1dCIKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoCiAgICAgICAgdHlwZTogImlucHV0IiwKICAgICAgICBwcm9wcz86IElucHV0SFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4gJiBDbGFzc0F0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4gfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxJbnB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+LCBIVE1MSW5wdXRFbGVtZW50PjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+LCBUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KAogICAgICAgIHR5cGU6IGtleW9mIFJlYWN0SFRNTCwKICAgICAgICBwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQLCBUPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIFNWR0F0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBTVkdFbGVtZW50PigKICAgICAgICB0eXBlOiBrZXlvZiBSZWFjdFNWRywKICAgICAgICBwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IFJlYWN0U1ZHRWxlbWVudDsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIERPTUF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBFbGVtZW50PigKICAgICAgICB0eXBlOiBzdHJpbmcsCiAgICAgICAgcHJvcHM/OiBDbGFzc0F0dHJpYnV0ZXM8VD4gJiBQIHwgbnVsbCwKICAgICAgICAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pOiBET01FbGVtZW50PFAsIFQ+OwoKICAgIC8vIEN1c3RvbSBjb21wb25lbnRzCgogICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxQIGV4dGVuZHMge30+KAogICAgICAgIHR5cGU6IEZ1bmN0aW9uQ29tcG9uZW50PFA+LAogICAgICAgIHByb3BzPzogQXR0cmlidXRlcyAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IEZ1bmN0aW9uQ29tcG9uZW50RWxlbWVudDxQPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIHt9PigKICAgICAgICB0eXBlOiBDbGFzc1R5cGU8UCwgQ2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4sIENsYXNzaWNDb21wb25lbnRDbGFzczxQPj4sCiAgICAgICAgcHJvcHM/OiBDbGFzc0F0dHJpYnV0ZXM8Q2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4+ICYgUCB8IG51bGwsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogQ0VsZW1lbnQ8UCwgQ2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4+OwogICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxQIGV4dGVuZHMge30sIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+LCBDIGV4dGVuZHMgQ29tcG9uZW50Q2xhc3M8UD4+KAogICAgICAgIHR5cGU6IENsYXNzVHlwZTxQLCBULCBDPiwKICAgICAgICBwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IENFbGVtZW50PFAsIFQ+OwogICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxQIGV4dGVuZHMge30+KAogICAgICAgIHR5cGU6IEZ1bmN0aW9uQ29tcG9uZW50PFA+IHwgQ29tcG9uZW50Q2xhc3M8UD4gfCBzdHJpbmcsCiAgICAgICAgcHJvcHM/OiBBdHRyaWJ1dGVzICYgUCB8IG51bGwsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RFbGVtZW50PFA+OwoKICAgIC8vIERPTSBFbGVtZW50cwogICAgLy8gUmVhY3RIVE1MRWxlbWVudAogICAgZnVuY3Rpb24gY2xvbmVFbGVtZW50PFAgZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIEhUTUxFbGVtZW50PigKICAgICAgICBlbGVtZW50OiBEZXRhaWxlZFJlYWN0SFRNTEVsZW1lbnQ8UCwgVD4sCiAgICAgICAgcHJvcHM/OiBQLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQLCBUPjsKICAgIC8vIFJlYWN0SFRNTEVsZW1lbnQsIGxlc3Mgc3BlY2lmaWMKICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudDxQIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4oCiAgICAgICAgZWxlbWVudDogUmVhY3RIVE1MRWxlbWVudDxUPiwKICAgICAgICBwcm9wcz86IFAsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RIVE1MRWxlbWVudDxUPjsKICAgIC8vIFNWR0VsZW1lbnQKICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudDxQIGV4dGVuZHMgU1ZHQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIFNWR0VsZW1lbnQ+KAogICAgICAgIGVsZW1lbnQ6IFJlYWN0U1ZHRWxlbWVudCwKICAgICAgICBwcm9wcz86IFAsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RTVkdFbGVtZW50OwogICAgLy8gRE9NIEVsZW1lbnQgKGhhcyB0byBiZSB0aGUgbGFzdCwgYmVjYXVzZSB0eXBlIGNoZWNraW5nIHN0b3BzIGF0IGZpcnN0IG92ZXJsb2FkIHRoYXQgZml0cykKICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudDxQIGV4dGVuZHMgRE9NQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIEVsZW1lbnQ+KAogICAgICAgIGVsZW1lbnQ6IERPTUVsZW1lbnQ8UCwgVD4sCiAgICAgICAgcHJvcHM/OiBET01BdHRyaWJ1dGVzPFQ+ICYgUCwKICAgICAgICAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pOiBET01FbGVtZW50PFAsIFQ+OwoKICAgIC8vIEN1c3RvbSBjb21wb25lbnRzCiAgICBmdW5jdGlvbiBjbG9uZUVsZW1lbnQ8UD4oCiAgICAgICAgZWxlbWVudDogRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+LAogICAgICAgIHByb3BzPzogUGFydGlhbDxQPiAmIEF0dHJpYnV0ZXMsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+OwogICAgZnVuY3Rpb24gY2xvbmVFbGVtZW50PFAsIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PigKICAgICAgICBlbGVtZW50OiBDRWxlbWVudDxQLCBUPiwKICAgICAgICBwcm9wcz86IFBhcnRpYWw8UD4gJiBDbGFzc0F0dHJpYnV0ZXM8VD4sCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogQ0VsZW1lbnQ8UCwgVD47CiAgICBmdW5jdGlvbiBjbG9uZUVsZW1lbnQ8UD4oCiAgICAgICAgZWxlbWVudDogUmVhY3RFbGVtZW50PFA+LAogICAgICAgIHByb3BzPzogUGFydGlhbDxQPiAmIEF0dHJpYnV0ZXMsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RFbGVtZW50PFA+OwoKICAgIC8vIENvbnRleHQgdmlhIFJlbmRlclByb3BzCiAgICBpbnRlcmZhY2UgUHJvdmlkZXJQcm9wczxUPiB7CiAgICAgICAgdmFsdWU6IFQ7CiAgICAgICAgY2hpbGRyZW4/OiBSZWFjdE5vZGUgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbnN1bWVyUHJvcHM8VD4gewogICAgICAgIGNoaWxkcmVuOiAodmFsdWU6IFQpID0+IFJlYWN0Tm9kZTsKICAgIH0KCiAgICAvLyBUT0RPOiBzaW1pbGFyIHRvIGhvdyBGcmFnbWVudCBpcyBhY3R1YWxseSBhIHN5bWJvbCwgdGhlIHZhbHVlcyByZXR1cm5lZCBmcm9tIGNyZWF0ZUNvbnRleHQsCiAgICAvLyBmb3J3YXJkUmVmIGFuZCBtZW1vIGFyZSBhY3R1YWxseSBvYmplY3RzIHRoYXQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5IGJ5IHRoZSByZW5kZXJlcjsgc2VlOgogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvdjE2LjYuMC9wYWNrYWdlcy9yZWFjdC9zcmMvUmVhY3RDb250ZXh0LmpzI0wzNS1MNDgKICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL3YxNi42LjAvcGFja2FnZXMvcmVhY3Qvc3JjL2ZvcndhcmRSZWYuanMjTDQyLUw0NQogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvdjE2LjYuMC9wYWNrYWdlcy9yZWFjdC9zcmMvbWVtby5qcyNMMjctTDMxCiAgICAvLyBIb3dldmVyLCB3ZSBoYXZlIG5vIHdheSBvZiB0ZWxsaW5nIHRoZSBKU1ggcGFyc2VyIHRoYXQgaXQncyBhIEpTWCBlbGVtZW50IHR5cGUgb3IgaXRzIHByb3BzIG90aGVyIHRoYW4KICAgIC8vIGJ5IHByZXRlbmRpbmcgdG8gYmUgYSBub3JtYWwgY29tcG9uZW50LgogICAgLy8KICAgIC8vIFdlIGRvbid0IGp1c3QgdXNlIENvbXBvbmVudFR5cGUgb3IgRnVuY3Rpb25Db21wb25lbnQgdHlwZXMgYmVjYXVzZSB5b3UgYXJlIG5vdCBzdXBwb3NlZCB0byBhdHRhY2ggc3RhdGljcyB0byB0aGlzCiAgICAvLyBvYmplY3QsIGJ1dCByYXRoZXIgdG8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLgogICAgaW50ZXJmYWNlIEV4b3RpY0NvbXBvbmVudDxQID0ge30+IHsKICAgICAgICAvKioKICAgICAgICAgKiAqKk5PVEUqKjogRXhvdGljIGNvbXBvbmVudHMgYXJlIG5vdCBjYWxsYWJsZS4KICAgICAgICAgKi8KICAgICAgICAocHJvcHM6IFApOiBSZWFjdE5vZGU7CiAgICAgICAgcmVhZG9ubHkgJCR0eXBlb2Y6IHN5bWJvbDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTmFtZWRFeG90aWNDb21wb25lbnQ8UCA9IHt9PiBleHRlbmRzIEV4b3RpY0NvbXBvbmVudDxQPiB7CiAgICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFByb3ZpZGVyRXhvdGljQ29tcG9uZW50PFA+IGV4dGVuZHMgRXhvdGljQ29tcG9uZW50PFA+IHsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIENvbnRleHRUeXBlPEMgZXh0ZW5kcyBDb250ZXh0PGFueT4+ID0gQyBleHRlbmRzIENvbnRleHQ8aW5mZXIgVD4gPyBUIDogbmV2ZXI7CgogICAgLy8gTk9URTogb25seSB0aGUgQ29udGV4dCBvYmplY3QgaXRzZWxmIGNhbiBnZXQgYSBkaXNwbGF5TmFtZQogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LWRldnRvb2xzL2Jsb2IvZTBiODU0ZTRjL2JhY2tlbmQvYXR0YWNoUmVuZGVyZXJGaWJlci5qcyNMMzEwLUwzMjUKICAgIHR5cGUgUHJvdmlkZXI8VD4gPSBQcm92aWRlckV4b3RpY0NvbXBvbmVudDxQcm92aWRlclByb3BzPFQ+PjsKICAgIHR5cGUgQ29uc3VtZXI8VD4gPSBFeG90aWNDb21wb25lbnQ8Q29uc3VtZXJQcm9wczxUPj47CiAgICBpbnRlcmZhY2UgQ29udGV4dDxUPiB7CiAgICAgICAgUHJvdmlkZXI6IFByb3ZpZGVyPFQ+OwogICAgICAgIENvbnN1bWVyOiBDb25zdW1lcjxUPjsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQ8VD4oCiAgICAgICAgLy8gSWYgeW91IHRob3VnaHQgdGhpcyBzaG91bGQgYmUgb3B0aW9uYWwsIHNlZQogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkL3B1bGwvMjQ1MDkjaXNzdWVjb21tZW50LTM4MjIxMzEwNgogICAgICAgIGRlZmF1bHRWYWx1ZTogVCwKICAgICk6IENvbnRleHQ8VD47CgogICAgZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQ8UD4ob2JqZWN0OiB7fSB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmplY3QgaXMgUmVhY3RFbGVtZW50PFA+OwoKICAgIC8vIFN5bmMgd2l0aCBgUmVhY3RDaGlsZHJlbmAgdW50aWwgYFJlYWN0Q2hpbGRyZW5gIGlzIHJlbW92ZWQuCiAgICBjb25zdCBDaGlsZHJlbjogewogICAgICAgIG1hcDxULCBDPihjaGlsZHJlbjogQyB8IFJlYWRvbmx5QXJyYXk8Qz4sIGZuOiAoY2hpbGQ6IEMsIGluZGV4OiBudW1iZXIpID0+IFQpOgogICAgICAgICAgICBDIGV4dGVuZHMgbnVsbCB8IHVuZGVmaW5lZCA/IEMgOiBBcnJheTxFeGNsdWRlPFQsIGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkPj47CiAgICAgICAgZm9yRWFjaDxDPihjaGlsZHJlbjogQyB8IFJlYWRvbmx5QXJyYXk8Qz4sIGZuOiAoY2hpbGQ6IEMsIGluZGV4OiBudW1iZXIpID0+IHZvaWQpOiB2b2lkOwogICAgICAgIGNvdW50KGNoaWxkcmVuOiBhbnkpOiBudW1iZXI7CiAgICAgICAgb25seTxDPihjaGlsZHJlbjogQyk6IEMgZXh0ZW5kcyBhbnlbXSA/IG5ldmVyIDogQzsKICAgICAgICB0b0FycmF5KGNoaWxkcmVuOiBSZWFjdE5vZGUgfCBSZWFjdE5vZGVbXSk6IEFycmF5PEV4Y2x1ZGU8UmVhY3ROb2RlLCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZD4+OwogICAgfTsKICAgIGNvbnN0IEZyYWdtZW50OiBFeG90aWNDb21wb25lbnQ8eyBjaGlsZHJlbj86IFJlYWN0Tm9kZSB8IHVuZGVmaW5lZCB9PjsKICAgIGNvbnN0IFN0cmljdE1vZGU6IEV4b3RpY0NvbXBvbmVudDx7IGNoaWxkcmVuPzogUmVhY3ROb2RlIHwgdW5kZWZpbmVkIH0+OwoKICAgIGludGVyZmFjZSBTdXNwZW5zZVByb3BzIHsKICAgICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZSB8IHVuZGVmaW5lZDsKCiAgICAgICAgLyoqIEEgZmFsbGJhY2sgcmVhY3QgdHJlZSB0byBzaG93IHdoZW4gYSBTdXNwZW5zZSBjaGlsZCAobGlrZSBSZWFjdC5sYXp5KSBzdXNwZW5kcyAqLwogICAgICAgIGZhbGxiYWNrPzogUmVhY3ROb2RlOwogICAgfQoKICAgIGNvbnN0IFN1c3BlbnNlOiBFeG90aWNDb21wb25lbnQ8U3VzcGVuc2VQcm9wcz47CiAgICBjb25zdCB2ZXJzaW9uOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L1Byb2ZpbGVyI29ucmVuZGVyLWNhbGxiYWNrIFByb2ZpbGVyIEFQSX0KICAgICAqLwogICAgdHlwZSBQcm9maWxlck9uUmVuZGVyQ2FsbGJhY2sgPSAoCiAgICAgICAgaWQ6IHN0cmluZywKICAgICAgICBwaGFzZTogIm1vdW50IiB8ICJ1cGRhdGUiLAogICAgICAgIGFjdHVhbER1cmF0aW9uOiBudW1iZXIsCiAgICAgICAgYmFzZUR1cmF0aW9uOiBudW1iZXIsCiAgICAgICAgc3RhcnRUaW1lOiBudW1iZXIsCiAgICAgICAgY29tbWl0VGltZTogbnVtYmVyLAogICAgICAgIGludGVyYWN0aW9uczogU2V0PFNjaGVkdWxlckludGVyYWN0aW9uPiwKICAgICkgPT4gdm9pZDsKICAgIGludGVyZmFjZSBQcm9maWxlclByb3BzIHsKICAgICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZSB8IHVuZGVmaW5lZDsKICAgICAgICBpZDogc3RyaW5nOwogICAgICAgIG9uUmVuZGVyOiBQcm9maWxlck9uUmVuZGVyQ2FsbGJhY2s7CiAgICB9CgogICAgY29uc3QgUHJvZmlsZXI6IEV4b3RpY0NvbXBvbmVudDxQcm9maWxlclByb3BzPjsKCiAgICAvLwogICAgLy8gQ29tcG9uZW50IEFQSQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHR5cGUgUmVhY3RJbnN0YW5jZSA9IENvbXBvbmVudDxhbnk+IHwgRWxlbWVudDsKCiAgICAvLyBCYXNlIGNvbXBvbmVudCBmb3IgcGxhaW4gSlMgY2xhc3NlcwogICAgaW50ZXJmYWNlIENvbXBvbmVudDxQID0ge30sIFMgPSB7fSwgU1MgPSBhbnk+IGV4dGVuZHMgQ29tcG9uZW50TGlmZWN5Y2xlPFAsIFMsIFNTPiB7IH0KICAgIGNsYXNzIENvbXBvbmVudDxQLCBTPiB7CiAgICAgICAgLy8gdHNsaW50IHdvbid0IGxldCBtZSBmb3JtYXQgdGhlIHNhbXBsZSBjb2RlIGluIGEgd2F5IHRoYXQgdnNjb2RlIGxpa2VzIGl0IDooCiAgICAgICAgLyoqCiAgICAgICAgICogSWYgc2V0LCBgdGhpcy5jb250ZXh0YCB3aWxsIGJlIHNldCBhdCBydW50aW1lIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBnaXZlbiBDb250ZXh0LgogICAgICAgICAqCiAgICAgICAgICogVXNhZ2U6CiAgICAgICAgICoKICAgICAgICAgKiBgYGB0cwogICAgICAgICAqIHR5cGUgTXlDb250ZXh0ID0gbnVtYmVyCiAgICAgICAgICogY29uc3QgQ3R4ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxNeUNvbnRleHQ+KDApCiAgICAgICAgICoKICAgICAgICAgKiBjbGFzcyBGb28gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgewogICAgICAgICAqICAgc3RhdGljIGNvbnRleHRUeXBlID0gQ3R4CiAgICAgICAgICogICBjb250ZXh0ITogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIEN0eD4KICAgICAgICAgKiAgIHJlbmRlciAoKSB7CiAgICAgICAgICogICAgIHJldHVybiA8Pk15IGNvbnRleHQncyB2YWx1ZToge3RoaXMuY29udGV4dH08Lz47CiAgICAgICAgICogICB9CiAgICAgICAgICogfQogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvQ29tcG9uZW50I3N0YXRpYy1jb250ZXh0dHlwZQogICAgICAgICAqLwogICAgICAgIHN0YXRpYyBjb250ZXh0VHlwZT86IENvbnRleHQ8YW55PiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLyoqCiAgICAgICAgICogSWYgdXNpbmcgdGhlIG5ldyBzdHlsZSBjb250ZXh0LCByZS1kZWNsYXJlIHRoaXMgaW4geW91ciBjbGFzcyB0byBiZSB0aGUKICAgICAgICAgKiBgUmVhY3QuQ29udGV4dFR5cGVgIG9mIHlvdXIgYHN0YXRpYyBjb250ZXh0VHlwZWAuCiAgICAgICAgICogU2hvdWxkIGJlIHVzZWQgd2l0aCB0eXBlIGFubm90YXRpb24gb3Igc3RhdGljIGNvbnRleHRUeXBlLgogICAgICAgICAqCiAgICAgICAgICogYGBgdHMKICAgICAgICAgKiBzdGF0aWMgY29udGV4dFR5cGUgPSBNeUNvbnRleHQKICAgICAgICAgKiAvLyBGb3IgVFMgcHJlLTMuNzoKICAgICAgICAgKiBjb250ZXh0ITogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIE15Q29udGV4dD4KICAgICAgICAgKiAvLyBGb3IgVFMgMy43IGFuZCBhYm92ZToKICAgICAgICAgKiBkZWNsYXJlIGNvbnRleHQ6IFJlYWN0LkNvbnRleHRUeXBlPHR5cGVvZiBNeUNvbnRleHQ+CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC9Db21wb25lbnQjY29udGV4dAogICAgICAgICAqLwogICAgICAgIGNvbnRleHQ6IHVua25vd247CgogICAgICAgIGNvbnN0cnVjdG9yKHByb3BzOiBSZWFkb25seTxQPiB8IFApOwogICAgICAgIC8qKgogICAgICAgICAqIEBkZXByZWNhdGVkCiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9kb2NzL2xlZ2FjeS1jb250ZXh0Lmh0bWwKICAgICAgICAgKi8KICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wczogUCwgY29udGV4dDogYW55KTsKCiAgICAgICAgLy8gV2UgTVVTVCBrZWVwIHNldFN0YXRlKCkgYXMgYSB1bmlmaWVkIHNpZ25hdHVyZSBiZWNhdXNlIGl0IGFsbG93cyBwcm9wZXIgY2hlY2tpbmcgb2YgdGhlIG1ldGhvZCByZXR1cm4gdHlwZS4KICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkL2lzc3Vlcy8xODM2NSNpc3N1ZWNvbW1lbnQtMzUxMDEzMjU3CiAgICAgICAgLy8gQWxzbywgdGhlIGAgfCBTYCBhbGxvd3MgaW50ZWxsaXNlbnNlIHRvIG5vdCBiZSBkdW1iaXNlbnNlCiAgICAgICAgc2V0U3RhdGU8SyBleHRlbmRzIGtleW9mIFM+KAogICAgICAgICAgICBzdGF0ZTogKChwcmV2U3RhdGU6IFJlYWRvbmx5PFM+LCBwcm9wczogUmVhZG9ubHk8UD4pID0+IChQaWNrPFMsIEs+IHwgUyB8IG51bGwpKSB8IChQaWNrPFMsIEs+IHwgUyB8IG51bGwpLAogICAgICAgICAgICBjYWxsYmFjaz86ICgpID0+IHZvaWQKICAgICAgICApOiB2b2lkOwoKICAgICAgICBmb3JjZVVwZGF0ZShjYWxsYmFjaz86ICgpID0+IHZvaWQpOiB2b2lkOwogICAgICAgIHJlbmRlcigpOiBSZWFjdE5vZGU7CgogICAgICAgIHJlYWRvbmx5IHByb3BzOiBSZWFkb25seTxQPjsKICAgICAgICBzdGF0ZTogUmVhZG9ubHk8Uz47CiAgICAgICAgLyoqCiAgICAgICAgICogQGRlcHJlY2F0ZWQKICAgICAgICAgKiBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9kb2NzL3JlZnMtYW5kLXRoZS1kb20uaHRtbCNsZWdhY3ktYXBpLXN0cmluZy1yZWZzCiAgICAgICAgICovCiAgICAgICAgcmVmczogewogICAgICAgICAgICBba2V5OiBzdHJpbmddOiBSZWFjdEluc3RhbmNlCiAgICAgICAgfTsKICAgIH0KCiAgICBjbGFzcyBQdXJlQ29tcG9uZW50PFAgPSB7fSwgUyA9IHt9LCBTUyA9IGFueT4gZXh0ZW5kcyBDb21wb25lbnQ8UCwgUywgU1M+IHsgfQoKICAgIGludGVyZmFjZSBDbGFzc2ljQ29tcG9uZW50PFAgPSB7fSwgUyA9IHt9PiBleHRlbmRzIENvbXBvbmVudDxQLCBTPiB7CiAgICAgICAgcmVwbGFjZVN0YXRlKG5leHRTdGF0ZTogUywgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKTogdm9pZDsKICAgICAgICBpc01vdW50ZWQoKTogYm9vbGVhbjsKICAgICAgICBnZXRJbml0aWFsU3RhdGU/KCk6IFM7CiAgICB9CgogICAgaW50ZXJmYWNlIENoaWxkQ29udGV4dFByb3ZpZGVyPENDPiB7CiAgICAgICAgZ2V0Q2hpbGRDb250ZXh0KCk6IENDOwogICAgfQoKICAgIC8vCiAgICAvLyBDbGFzcyBJbnRlcmZhY2VzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgdHlwZSBGQzxQID0ge30+ID0gRnVuY3Rpb25Db21wb25lbnQ8UD47CgogICAgaW50ZXJmYWNlIEZ1bmN0aW9uQ29tcG9uZW50PFAgPSB7fT4gewogICAgICAgIChwcm9wczogUCwgY29udGV4dD86IGFueSk6IFJlYWN0Tm9kZTsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdFByb3BzPzogUGFydGlhbDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIC0gRXF1aXZhbGVudCB3aXRoIGBSZWFjdC5GQ2AuCiAgICAgKi8KICAgIHR5cGUgVkZDPFAgPSB7fT4gPSBWb2lkRnVuY3Rpb25Db21wb25lbnQ8UD47CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCAtIEVxdWl2YWxlbnQgd2l0aCBgUmVhY3QuRnVuY3Rpb25Db21wb25lbnRgLgogICAgICovCiAgICBpbnRlcmZhY2UgVm9pZEZ1bmN0aW9uQ29tcG9uZW50PFAgPSB7fT4gewogICAgICAgIChwcm9wczogUCwgY29udGV4dD86IGFueSk6IFJlYWN0Tm9kZTsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdFByb3BzPzogUGFydGlhbDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEZvcndhcmRlZFJlZjxUPiA9ICgoaW5zdGFuY2U6IFQgfCBudWxsKSA9PiB2b2lkKSB8IE11dGFibGVSZWZPYmplY3Q8VCB8IG51bGw+IHwgbnVsbDsKCiAgICBpbnRlcmZhY2UgRm9yd2FyZFJlZlJlbmRlckZ1bmN0aW9uPFQsIFAgPSB7fT4gewogICAgICAgIChwcm9wczogUCwgcmVmOiBGb3J3YXJkZWRSZWY8VD4pOiBSZWFjdE5vZGU7CiAgICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLy8gZXhwbGljaXQgcmVqZWN0ZWQgd2l0aCBgbmV2ZXJgIHJlcXVpcmVkIGR1ZSB0bwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzY4MjYKICAgICAgICAvKioKICAgICAgICAgKiBkZWZhdWx0UHJvcHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gcmVuZGVyIGZ1bmN0aW9ucwogICAgICAgICAqLwogICAgICAgIGRlZmF1bHRQcm9wcz86IG5ldmVyIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIHByb3BUeXBlcyBhcmUgbm90IHN1cHBvcnRlZCBvbiByZW5kZXIgZnVuY3Rpb25zCiAgICAgICAgICovCiAgICAgICAgcHJvcFR5cGVzPzogbmV2ZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbXBvbmVudENsYXNzPFAgPSB7fSwgUyA9IENvbXBvbmVudFN0YXRlPiBleHRlbmRzIFN0YXRpY0xpZmVjeWNsZTxQLCBTPiB7CiAgICAgICAgbmV3IChwcm9wczogUCwgY29udGV4dD86IGFueSk6IENvbXBvbmVudDxQLCBTPjsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZT86IENvbnRleHQ8YW55PiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgY2hpbGRDb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdFByb3BzPzogUGFydGlhbDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgQ2xhc3NpY0NvbXBvbmVudENsYXNzPFAgPSB7fT4gZXh0ZW5kcyBDb21wb25lbnRDbGFzczxQPiB7CiAgICAgICAgbmV3IChwcm9wczogUCwgY29udGV4dD86IGFueSk6IENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+OwogICAgICAgIGdldERlZmF1bHRQcm9wcz8oKTogUDsKICAgIH0KCiAgICAvKioKICAgICAqIFdlIHVzZSBhbiBpbnRlcnNlY3Rpb24gdHlwZSB0byBpbmZlciBtdWx0aXBsZSB0eXBlIHBhcmFtZXRlcnMgZnJvbQogICAgICogYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgbWFueSB0b3AtbGV2ZWwgQVBJIGRlZnMuCiAgICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy83MjM0IGZvciBtb3JlIGluZm8uCiAgICAgKi8KICAgIHR5cGUgQ2xhc3NUeXBlPFAsIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+LCBDIGV4dGVuZHMgQ29tcG9uZW50Q2xhc3M8UD4+ID0KICAgICAgICBDICYKICAgICAgICAobmV3IChwcm9wczogUCwgY29udGV4dD86IGFueSkgPT4gVCk7CgogICAgLy8KICAgIC8vIENvbXBvbmVudCBTcGVjcyBhbmQgTGlmZWN5Y2xlCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgLy8gVGhpcyBzaG91bGQgYWN0dWFsbHkgYmUgc29tZXRoaW5nIGxpa2UgYExpZmVjeWNsZTxQLCBTPiB8IERlcHJlY2F0ZWRMaWZlY3ljbGU8UCwgUz5gLAogICAgLy8gYXMgUmVhY3Qgd2lsbCBfbm90XyBjYWxsIHRoZSBkZXByZWNhdGVkIGxpZmVjeWNsZSBtZXRob2RzIGlmIGFueSBvZiB0aGUgbmV3IGxpZmVjeWNsZQogICAgLy8gbWV0aG9kcyBhcmUgcHJlc2VudC4KICAgIGludGVyZmFjZSBDb21wb25lbnRMaWZlY3ljbGU8UCwgUywgU1MgPSBhbnk+IGV4dGVuZHMgTmV3TGlmZWN5Y2xlPFAsIFMsIFNTPiwgRGVwcmVjYXRlZExpZmVjeWNsZTxQLCBTPiB7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgY29tcG9uZW50IGlzIG1vdW50ZWQuIFNldHRpbmcgc3RhdGUgaGVyZSB3aWxsIHRyaWdnZXIgcmUtcmVuZGVyaW5nLgogICAgICAgICAqLwogICAgICAgIGNvbXBvbmVudERpZE1vdW50PygpOiB2b2lkOwogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2hhbmdlIGluIHByb3BzIGFuZCBzdGF0ZSBzaG91bGQgdHJpZ2dlciBhIHJlLXJlbmRlci4KICAgICAgICAgKgogICAgICAgICAqIGBDb21wb25lbnRgIGFsd2F5cyByZXR1cm5zIHRydWUuCiAgICAgICAgICogYFB1cmVDb21wb25lbnRgIGltcGxlbWVudHMgYSBzaGFsbG93IGNvbXBhcmlzb24gb24gcHJvcHMgYW5kIHN0YXRlIGFuZCByZXR1cm5zIHRydWUgaWYgYW55CiAgICAgICAgICogcHJvcHMgb3Igc3RhdGVzIGhhdmUgY2hhbmdlZC4KICAgICAgICAgKgogICAgICAgICAqIElmIGZhbHNlIGlzIHJldHVybmVkLCBgQ29tcG9uZW50I3JlbmRlcmAsIGBjb21wb25lbnRXaWxsVXBkYXRlYAogICAgICAgICAqIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYCB3aWxsIG5vdCBiZSBjYWxsZWQuCiAgICAgICAgICovCiAgICAgICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0U3RhdGU6IFJlYWRvbmx5PFM+LCBuZXh0Q29udGV4dDogYW55KTogYm9vbGVhbjsKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZC4gUGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGNsZWFudXAgaW4gdGhpcyBtZXRob2QsIHN1Y2ggYXMKICAgICAgICAgKiBjYW5jZWxsZWQgbmV0d29yayByZXF1ZXN0cywgb3IgY2xlYW5pbmcgdXAgYW55IERPTSBlbGVtZW50cyBjcmVhdGVkIGluIGBjb21wb25lbnREaWRNb3VudGAuCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQ/KCk6IHZvaWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2F0Y2hlcyBleGNlcHRpb25zIGdlbmVyYXRlZCBpbiBkZXNjZW5kYW50IGNvbXBvbmVudHMuIFVuaGFuZGxlZCBleGNlcHRpb25zIHdpbGwgY2F1c2UKICAgICAgICAgKiB0aGUgZW50aXJlIGNvbXBvbmVudCB0cmVlIHRvIHVubW91bnQuCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50RGlkQ2F0Y2g/KGVycm9yOiBFcnJvciwgZXJyb3JJbmZvOiBFcnJvckluZm8pOiB2b2lkOwogICAgfQoKICAgIC8vIFVuZm9ydHVuYXRlbHksIHdlIGhhdmUgbm8gd2F5IG9mIGRlY2xhcmluZyB0aGF0IHRoZSBjb21wb25lbnQgY29uc3RydWN0b3IgbXVzdCBpbXBsZW1lbnQgdGhpcwogICAgaW50ZXJmYWNlIFN0YXRpY0xpZmVjeWNsZTxQLCBTPiB7CiAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPzogR2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPFAsIFM+IHwgdW5kZWZpbmVkOwogICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj86IEdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjxQLCBTPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczxQLCBTPiA9CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyBhbiB1cGRhdGUgdG8gYSBjb21wb25lbnQncyBzdGF0ZSBiYXNlZCBvbiBpdHMgbmV3IHByb3BzIGFuZCBvbGQgc3RhdGUuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiBpdHMgcHJlc2VuY2UgcHJldmVudHMgYW55IG9mIHRoZSBkZXByZWNhdGVkIGxpZmVjeWNsZSBtZXRob2RzIGZyb20gYmVpbmcgaW52b2tlZAogICAgICAgICAqLwogICAgICAgIChuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBwcmV2U3RhdGU6IFMpID0+IFBhcnRpYWw8Uz4gfCBudWxsOwoKICAgIHR5cGUgR2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPFAsIFM+ID0KICAgICAgICAvKioKICAgICAgICAgKiBUaGlzIGxpZmVjeWNsZSBpcyBpbnZva2VkIGFmdGVyIGFuIGVycm9yIGhhcyBiZWVuIHRocm93biBieSBhIGRlc2NlbmRhbnQgY29tcG9uZW50LgogICAgICAgICAqIEl0IHJlY2VpdmVzIHRoZSBlcnJvciB0aGF0IHdhcyB0aHJvd24gYXMgYSBwYXJhbWV0ZXIgYW5kIHNob3VsZCByZXR1cm4gYSB2YWx1ZSB0byB1cGRhdGUgc3RhdGUuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiBpdHMgcHJlc2VuY2UgcHJldmVudHMgYW55IG9mIHRoZSBkZXByZWNhdGVkIGxpZmVjeWNsZSBtZXRob2RzIGZyb20gYmVpbmcgaW52b2tlZAogICAgICAgICAqLwogICAgICAgIChlcnJvcjogYW55KSA9PiBQYXJ0aWFsPFM+IHwgbnVsbDsKCiAgICAvLyBUaGlzIHNob3VsZCBiZSAiaW5mZXIgU1MiIGJ1dCBjYW4ndCB1c2UgaXQgeWV0CiAgICBpbnRlcmZhY2UgTmV3TGlmZWN5Y2xlPFAsIFMsIFNTPiB7CiAgICAgICAgLyoqCiAgICAgICAgICogUnVucyBiZWZvcmUgUmVhY3QgYXBwbGllcyB0aGUgcmVzdWx0IG9mIGByZW5kZXJgIHRvIHRoZSBkb2N1bWVudCwgYW5kCiAgICAgICAgICogcmV0dXJucyBhbiBvYmplY3QgdG8gYmUgZ2l2ZW4gdG8gY29tcG9uZW50RGlkVXBkYXRlLiBVc2VmdWwgZm9yIHNhdmluZwogICAgICAgICAqIHRoaW5ncyBzdWNoIGFzIHNjcm9sbCBwb3NpdGlvbiBiZWZvcmUgYHJlbmRlcmAgY2F1c2VzIGNoYW5nZXMgdG8gaXQuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgcHJldmVudHMgYW55IG9mIHRoZSBkZXByZWNhdGVkCiAgICAgICAgICogbGlmZWN5Y2xlIGV2ZW50cyBmcm9tIHJ1bm5pbmcuCiAgICAgICAgICovCiAgICAgICAgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU/KHByZXZQcm9wczogUmVhZG9ubHk8UD4sIHByZXZTdGF0ZTogUmVhZG9ubHk8Uz4pOiBTUyB8IG51bGw7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHVwZGF0aW5nIG9jY3Vycy4gTm90IGNhbGxlZCBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLgogICAgICAgICAqCiAgICAgICAgICogVGhlIHNuYXBzaG90IGlzIG9ubHkgcHJlc2VudCBpZiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBpcyBwcmVzZW50IGFuZCByZXR1cm5zIG5vbi1udWxsLgogICAgICAgICAqLwogICAgICAgIGNvbXBvbmVudERpZFVwZGF0ZT8ocHJldlByb3BzOiBSZWFkb25seTxQPiwgcHJldlN0YXRlOiBSZWFkb25seTxTPiwgc25hcHNob3Q/OiBTUyk6IHZvaWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIERlcHJlY2F0ZWRMaWZlY3ljbGU8UCwgUz4gewogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgbW91bnRpbmcgb2NjdXJzLCBhbmQgYmVmb3JlIGBDb21wb25lbnQjcmVuZGVyYC4KICAgICAgICAgKiBBdm9pZCBpbnRyb2R1Y2luZyBhbnkgc2lkZS1lZmZlY3RzIG9yIHN1YnNjcmlwdGlvbnMgaW4gdGhpcyBtZXRob2QuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgY29tcG9uZW50RGlkTW91bnQgb3IgdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQ7IHdpbGwgc3RvcCB3b3JraW5nIGluIFJlYWN0IDE3CiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9ibG9nLzIwMTgvMDMvMjcvdXBkYXRlLW9uLWFzeW5jLXJlbmRlcmluZy5odG1sI2luaXRpYWxpemluZy1zdGF0ZQogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCNncmFkdWFsLW1pZ3JhdGlvbi1wYXRoCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50V2lsbE1vdW50PygpOiB2b2lkOwogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgbW91bnRpbmcgb2NjdXJzLCBhbmQgYmVmb3JlIGBDb21wb25lbnQjcmVuZGVyYC4KICAgICAgICAgKiBBdm9pZCBpbnRyb2R1Y2luZyBhbnkgc2lkZS1lZmZlY3RzIG9yIHN1YnNjcmlwdGlvbnMgaW4gdGhpcyBtZXRob2QuCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIG5vdCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgMTcuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgY29tcG9uZW50RGlkTW91bnQgb3IgdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjaW5pdGlhbGl6aW5nLXN0YXRlCiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9ibG9nLzIwMTgvMDMvMjcvdXBkYXRlLW9uLWFzeW5jLXJlbmRlcmluZy5odG1sI2dyYWR1YWwtbWlncmF0aW9uLXBhdGgKICAgICAgICAgKi8KICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50PygpOiB2b2lkOwogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgbWF5IGJlIHJlY2VpdmluZyBuZXcgcHJvcHMuCiAgICAgICAgICogUmVhY3QgbWF5IGNhbGwgdGhpcyBldmVuIGlmIHByb3BzIGhhdmUgbm90IGNoYW5nZWQsIHNvIGJlIHN1cmUgdG8gY29tcGFyZSBuZXcgYW5kIGV4aXN0aW5nCiAgICAgICAgICogcHJvcHMgaWYgeW91IG9ubHkgd2FudCB0byBoYW5kbGUgY2hhbmdlcy4KICAgICAgICAgKgogICAgICAgICAqIENhbGxpbmcgYENvbXBvbmVudCNzZXRTdGF0ZWAgZ2VuZXJhbGx5IGRvZXMgbm90IHRyaWdnZXIgdGhpcyBtZXRob2QuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2Ugc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyBpbnN0ZWFkOyB3aWxsIHN0b3Agd29ya2luZyBpbiBSZWFjdCAxNwogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCN1cGRhdGluZy1zdGF0ZS1iYXNlZC1vbi1wcm9wcwogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCNncmFkdWFsLW1pZ3JhdGlvbi1wYXRoCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz8obmV4dFByb3BzOiBSZWFkb25seTxQPiwgbmV4dENvbnRleHQ6IGFueSk6IHZvaWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBtYXkgYmUgcmVjZWl2aW5nIG5ldyBwcm9wcy4KICAgICAgICAgKiBSZWFjdCBtYXkgY2FsbCB0aGlzIGV2ZW4gaWYgcHJvcHMgaGF2ZSBub3QgY2hhbmdlZCwgc28gYmUgc3VyZSB0byBjb21wYXJlIG5ldyBhbmQgZXhpc3RpbmcKICAgICAgICAgKiBwcm9wcyBpZiB5b3Ugb25seSB3YW50IHRvIGhhbmRsZSBjaGFuZ2VzLgogICAgICAgICAqCiAgICAgICAgICogQ2FsbGluZyBgQ29tcG9uZW50I3NldFN0YXRlYCBnZW5lcmFsbHkgZG9lcyBub3QgdHJpZ2dlciB0aGlzIG1ldGhvZC4KICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgbm90IHN0b3Agd29ya2luZyBpbiBSZWFjdCAxNy4KICAgICAgICAgKgogICAgICAgICAqIE5vdGU6IHRoZSBwcmVzZW5jZSBvZiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMKICAgICAgICAgKiBwcmV2ZW50cyB0aGlzIGZyb20gYmVpbmcgaW52b2tlZC4KICAgICAgICAgKgogICAgICAgICAqIEBkZXByZWNhdGVkIDE2LjMsIHVzZSBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIGluc3RlYWQKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjdXBkYXRpbmctc3RhdGUtYmFzZWQtb24tcHJvcHMKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjZ3JhZHVhbC1taWdyYXRpb24tcGF0aAogICAgICAgICAqLwogICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0Q29udGV4dDogYW55KTogdm9pZDsKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlbmRlcmluZyB3aGVuIG5ldyBwcm9wcyBvciBzdGF0ZSBpcyByZWNlaXZlZC4gTm90IGNhbGxlZCBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLgogICAgICAgICAqCiAgICAgICAgICogTm90ZTogWW91IGNhbm5vdCBjYWxsIGBDb21wb25lbnQjc2V0U3RhdGVgIGhlcmUuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaW5zdGVhZDsgd2lsbCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgMTcKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjcmVhZGluZy1kb20tcHJvcGVydGllcy1iZWZvcmUtYW4tdXBkYXRlCiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9ibG9nLzIwMTgvMDMvMjcvdXBkYXRlLW9uLWFzeW5jLXJlbmRlcmluZy5odG1sI2dyYWR1YWwtbWlncmF0aW9uLXBhdGgKICAgICAgICAgKi8KICAgICAgICBjb21wb25lbnRXaWxsVXBkYXRlPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0U3RhdGU6IFJlYWRvbmx5PFM+LCBuZXh0Q29udGV4dDogYW55KTogdm9pZDsKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlbmRlcmluZyB3aGVuIG5ldyBwcm9wcyBvciBzdGF0ZSBpcyByZWNlaXZlZC4gTm90IGNhbGxlZCBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLgogICAgICAgICAqCiAgICAgICAgICogTm90ZTogWW91IGNhbm5vdCBjYWxsIGBDb21wb25lbnQjc2V0U3RhdGVgIGhlcmUuCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIG5vdCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgMTcuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaW5zdGVhZAogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCNyZWFkaW5nLWRvbS1wcm9wZXJ0aWVzLWJlZm9yZS1hbi11cGRhdGUKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjZ3JhZHVhbC1taWdyYXRpb24tcGF0aAogICAgICAgICAqLwogICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0U3RhdGU6IFJlYWRvbmx5PFM+LCBuZXh0Q29udGV4dDogYW55KTogdm9pZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTWl4aW48UCwgUz4gZXh0ZW5kcyBDb21wb25lbnRMaWZlY3ljbGU8UCwgUz4gewogICAgICAgIG1peGlucz86IEFycmF5PE1peGluPFAsIFM+PiB8IHVuZGVmaW5lZDsKICAgICAgICBzdGF0aWNzPzogewogICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKCiAgICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcHJvcFR5cGVzPzogVmFsaWRhdGlvbk1hcDxhbnk+IHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHRUeXBlcz86IFZhbGlkYXRpb25NYXA8YW55PiB8IHVuZGVmaW5lZDsKICAgICAgICBjaGlsZENvbnRleHRUeXBlcz86IFZhbGlkYXRpb25NYXA8YW55PiB8IHVuZGVmaW5lZDsKCiAgICAgICAgZ2V0RGVmYXVsdFByb3BzPygpOiBQOwogICAgICAgIGdldEluaXRpYWxTdGF0ZT8oKTogUzsKICAgIH0KCiAgICBpbnRlcmZhY2UgQ29tcG9uZW50U3BlYzxQLCBTPiBleHRlbmRzIE1peGluPFAsIFM+IHsKICAgICAgICByZW5kZXIoKTogUmVhY3ROb2RlOwoKICAgICAgICBbcHJvcGVydHlOYW1lOiBzdHJpbmddOiBhbnk7CiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlUmVmPFQ+KCk6IFJlZk9iamVjdDxUPjsKCiAgICAvLyB3aWxsIHNob3cgYEZvcndhcmRSZWYoJHtDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWV9KWAgaW4gZGV2dG9vbHMgYnkgZGVmYXVsdCwKICAgIC8vIGJ1dCBjYW4gYmUgZ2l2ZW4gaXRzIG93biBzcGVjaWZpYyBuYW1lCiAgICBpbnRlcmZhY2UgRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxQPiBleHRlbmRzIE5hbWVkRXhvdGljQ29tcG9uZW50PFA+IHsKICAgICAgICBkZWZhdWx0UHJvcHM/OiBQYXJ0aWFsPFA+IHwgdW5kZWZpbmVkOwogICAgICAgIHByb3BUeXBlcz86IFdlYWtWYWxpZGF0aW9uTWFwPFA+IHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIGZvcndhcmRSZWY8VCwgUCA9IHt9PihyZW5kZXI6IEZvcndhcmRSZWZSZW5kZXJGdW5jdGlvbjxULCBQPik6IEZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8UHJvcHNXaXRob3V0UmVmPFA+ICYgUmVmQXR0cmlidXRlczxUPj47CgogICAgLyoqIEVuc3VyZXMgdGhhdCB0aGUgcHJvcHMgZG8gbm90IGluY2x1ZGUgcmVmIGF0IGFsbCAqLwogICAgdHlwZSBQcm9wc1dpdGhvdXRSZWY8UD4gPQogICAgICAgIC8vIE9taXQgd291bGQgbm90IGJlIHN1ZmZpY2llbnQgZm9yIHRoaXMuIFdlJ2QgbGlrZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBtYXBwaW5nIGFuZCBuZWVkIGEgZGlzdHJpYnV0aXZlIGNvbmRpdGlvbmFsIHRvIHN1cHBvcnQgdW5pb25zLgogICAgICAgIC8vIHNlZTogaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9jb25kaXRpb25hbC10eXBlcy5odG1sI2Rpc3RyaWJ1dGl2ZS1jb25kaXRpb25hbC10eXBlcwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjgzMzkKICAgICAgICBQIGV4dGVuZHMgYW55ID8gKCdyZWYnIGV4dGVuZHMga2V5b2YgUCA/IE9taXQ8UCwgJ3JlZic+IDogUCkgOiBQOwogICAgLyoqIEVuc3VyZXMgdGhhdCB0aGUgcHJvcHMgZG8gbm90IGluY2x1ZGUgc3RyaW5nIHJlZiwgd2hpY2ggY2Fubm90IGJlIGZvcndhcmRlZCAqLwogICAgdHlwZSBQcm9wc1dpdGhSZWY8UD4gPQogICAgICAgIC8vIEp1c3QgIlAgZXh0ZW5kcyB7IHJlZj86IGluZmVyIFIgfSIgbG9va3Mgc3VmZmljaWVudCwgYnV0IFIgd2lsbCBpbmZlciBhcyB7fSBpZiBQIGlzIHt9LgogICAgICAgICdyZWYnIGV4dGVuZHMga2V5b2YgUAogICAgICAgICAgICA/IFAgZXh0ZW5kcyB7IHJlZj86IGluZmVyIFIgfCB1bmRlZmluZWQgfQogICAgICAgICAgICAgICAgPyBzdHJpbmcgZXh0ZW5kcyBSCiAgICAgICAgICAgICAgICAgICAgPyBQcm9wc1dpdGhvdXRSZWY8UD4gJiB7IHJlZj86IEV4Y2x1ZGU8Uiwgc3RyaW5nPiB8IHVuZGVmaW5lZCB9CiAgICAgICAgICAgICAgICAgICAgOiBQCiAgICAgICAgICAgICAgICA6IFAKICAgICAgICAgICAgOiBQOwoKICAgIHR5cGUgUHJvcHNXaXRoQ2hpbGRyZW48UCA9IHVua25vd24+ID0gUCAmIHsgY2hpbGRyZW4/OiBSZWFjdE5vZGUgfCB1bmRlZmluZWQgfTsKCiAgICAvKioKICAgICAqIE5PVEU6IHByZWZlciBDb21wb25lbnRQcm9wc1dpdGhSZWYsIGlmIHRoZSByZWYgaXMgZm9yd2FyZGVkLAogICAgICogb3IgQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmIHdoZW4gcmVmcyBhcmUgbm90IHN1cHBvcnRlZC4KICAgICAqLwogICAgdHlwZSBDb21wb25lbnRQcm9wczxUIGV4dGVuZHMga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzIHwgSlNYRWxlbWVudENvbnN0cnVjdG9yPGFueT4+ID0KICAgICAgICBUIGV4dGVuZHMgSlNYRWxlbWVudENvbnN0cnVjdG9yPGluZmVyIFA+CiAgICAgICAgICAgID8gUAogICAgICAgICAgICA6IFQgZXh0ZW5kcyBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHMKICAgICAgICAgICAgICAgID8gSlNYLkludHJpbnNpY0VsZW1lbnRzW1RdCiAgICAgICAgICAgICAgICA6IHt9OwogICAgdHlwZSBDb21wb25lbnRQcm9wc1dpdGhSZWY8VCBleHRlbmRzIEVsZW1lbnRUeXBlPiA9CiAgICAgICAgVCBleHRlbmRzIChuZXcgKHByb3BzOiBpbmZlciBQKSA9PiBDb21wb25lbnQ8YW55LCBhbnk+KQogICAgICAgICAgICA/IFByb3BzV2l0aG91dFJlZjxQPiAmIFJlZkF0dHJpYnV0ZXM8SW5zdGFuY2VUeXBlPFQ+PgogICAgICAgICAgICA6IFByb3BzV2l0aFJlZjxDb21wb25lbnRQcm9wczxUPj47CiAgICB0eXBlIENvbXBvbmVudFByb3BzV2l0aG91dFJlZjxUIGV4dGVuZHMgRWxlbWVudFR5cGU+ID0KICAgICAgICBQcm9wc1dpdGhvdXRSZWY8Q29tcG9uZW50UHJvcHM8VD4+OwoKICAgIHR5cGUgQ29tcG9uZW50UmVmPFQgZXh0ZW5kcyBFbGVtZW50VHlwZT4gPSBUIGV4dGVuZHMgTmFtZWRFeG90aWNDb21wb25lbnQ8CiAgICAgICAgQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPFQ+ICYgUmVmQXR0cmlidXRlczxpbmZlciBNZXRob2Q+CiAgICA+CiAgICAgICAgPyBNZXRob2QKICAgICAgICA6IENvbXBvbmVudFByb3BzV2l0aFJlZjxUPiBleHRlbmRzIFJlZkF0dHJpYnV0ZXM8aW5mZXIgTWV0aG9kPgogICAgICAgICAgICA/IE1ldGhvZAogICAgICAgICAgICA6IG5ldmVyOwoKICAgIC8vIHdpbGwgc2hvdyBgTWVtbygke0NvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZX0pYCBpbiBkZXZ0b29scyBieSBkZWZhdWx0LAogICAgLy8gYnV0IGNhbiBiZSBnaXZlbiBpdHMgb3duIHNwZWNpZmljIG5hbWUKICAgIHR5cGUgTWVtb0V4b3RpY0NvbXBvbmVudDxUIGV4dGVuZHMgQ29tcG9uZW50VHlwZTxhbnk+PiA9IE5hbWVkRXhvdGljQ29tcG9uZW50PENvbXBvbmVudFByb3BzV2l0aFJlZjxUPj4gJiB7CiAgICAgICAgcmVhZG9ubHkgdHlwZTogVDsKICAgIH07CgogICAgZnVuY3Rpb24gbWVtbzxQIGV4dGVuZHMgb2JqZWN0PigKICAgICAgICBDb21wb25lbnQ6IEZ1bmN0aW9uQ29tcG9uZW50PFA+LAogICAgICAgIHByb3BzQXJlRXF1YWw/OiAocHJldlByb3BzOiBSZWFkb25seTxQPiwgbmV4dFByb3BzOiBSZWFkb25seTxQPikgPT4gYm9vbGVhbgogICAgKTogTmFtZWRFeG90aWNDb21wb25lbnQ8UD47CiAgICBmdW5jdGlvbiBtZW1vPFQgZXh0ZW5kcyBDb21wb25lbnRUeXBlPGFueT4+KAogICAgICAgIENvbXBvbmVudDogVCwKICAgICAgICBwcm9wc0FyZUVxdWFsPzogKHByZXZQcm9wczogUmVhZG9ubHk8Q29tcG9uZW50UHJvcHM8VD4+LCBuZXh0UHJvcHM6IFJlYWRvbmx5PENvbXBvbmVudFByb3BzPFQ+PikgPT4gYm9vbGVhbgogICAgKTogTWVtb0V4b3RpY0NvbXBvbmVudDxUPjsKCiAgICB0eXBlIExhenlFeG90aWNDb21wb25lbnQ8VCBleHRlbmRzIENvbXBvbmVudFR5cGU8YW55Pj4gPSBFeG90aWNDb21wb25lbnQ8Q29tcG9uZW50UHJvcHNXaXRoUmVmPFQ+PiAmIHsKICAgICAgICByZWFkb25seSBfcmVzdWx0OiBUOwogICAgfTsKCiAgICBmdW5jdGlvbiBsYXp5PFQgZXh0ZW5kcyBDb21wb25lbnRUeXBlPGFueT4+KAogICAgICAgIGZhY3Rvcnk6ICgpID0+IFByb21pc2U8eyBkZWZhdWx0OiBUIH0+CiAgICApOiBMYXp5RXhvdGljQ29tcG9uZW50PFQ+OwoKICAgIC8vCiAgICAvLyBSZWFjdCBIb29rcwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIC8vIGJhc2VkIG9uIHRoZSBjb2RlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEzOTY4CgogICAgLy8gVW5saWtlIHRoZSBjbGFzcyBjb21wb25lbnQgc2V0U3RhdGUsIHRoZSB1cGRhdGVzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBwYXJ0aWFsCiAgICB0eXBlIFNldFN0YXRlQWN0aW9uPFM+ID0gUyB8ICgocHJldlN0YXRlOiBTKSA9PiBTKTsKICAgIC8vIHRoaXMgdGVjaG5pY2FsbHkgZG9lcyBhY2NlcHQgYSBzZWNvbmQgYXJndW1lbnQsIGJ1dCBpdCdzIGFscmVhZHkgdW5kZXIgYSBkZXByZWNhdGlvbiB3YXJuaW5nCiAgICAvLyBhbmQgaXQncyBub3QgZXZlbiByZWxlYXNlZCBzbyBwcm9iYWJseSBiZXR0ZXIgdG8gbm90IGRlZmluZSBpdC4KICAgIHR5cGUgRGlzcGF0Y2g8QT4gPSAodmFsdWU6IEEpID0+IHZvaWQ7CiAgICAvLyBTaW5jZSBhY3Rpb24gX2Nhbl8gYmUgdW5kZWZpbmVkLCBkaXNwYXRjaCBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMuCiAgICB0eXBlIERpc3BhdGNoV2l0aG91dEFjdGlvbiA9ICgpID0+IHZvaWQ7CiAgICAvLyBVbmxpa2UgcmVkdXgsIHRoZSBhY3Rpb25zIF9jYW5fIGJlIGFueXRoaW5nCiAgICB0eXBlIFJlZHVjZXI8UywgQT4gPSAocHJldlN0YXRlOiBTLCBhY3Rpb246IEEpID0+IFM7CiAgICAvLyBJZiB1c2VSZWR1Y2VyIGFjY2VwdHMgYSByZWR1Y2VyIHdpdGhvdXQgYWN0aW9uLCBkaXNwYXRjaCBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMuCiAgICB0eXBlIFJlZHVjZXJXaXRob3V0QWN0aW9uPFM+ID0gKHByZXZTdGF0ZTogUykgPT4gUzsKICAgIC8vIHR5cGVzIHVzZWQgdG8gdHJ5IGFuZCBwcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIHJlZHVjaW5nIFMKICAgIC8vIHRvIGEgc3VwZXJ0eXBlIGNvbW1vbiB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdXNlUmVkdWNlcigpCiAgICB0eXBlIFJlZHVjZXJTdGF0ZTxSIGV4dGVuZHMgUmVkdWNlcjxhbnksIGFueT4+ID0gUiBleHRlbmRzIFJlZHVjZXI8aW5mZXIgUywgYW55PiA/IFMgOiBuZXZlcjsKICAgIHR5cGUgUmVkdWNlckFjdGlvbjxSIGV4dGVuZHMgUmVkdWNlcjxhbnksIGFueT4+ID0gUiBleHRlbmRzIFJlZHVjZXI8YW55LCBpbmZlciBBPiA/IEEgOiBuZXZlcjsKICAgIC8vIFRoZSBpZGVudGl0eSBjaGVjayBpcyBkb25lIHdpdGggdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKE9iamVjdC5pcyksIHdoaWNoIGlzIHN0cmljdGVyIHRoYW4gPT09CiAgICB0eXBlIFJlZHVjZXJTdGF0ZVdpdGhvdXRBY3Rpb248UiBleHRlbmRzIFJlZHVjZXJXaXRob3V0QWN0aW9uPGFueT4+ID0KICAgICAgICBSIGV4dGVuZHMgUmVkdWNlcldpdGhvdXRBY3Rpb248aW5mZXIgUz4gPyBTIDogbmV2ZXI7CiAgICB0eXBlIERlcGVuZGVuY3lMaXN0ID0gUmVhZG9ubHlBcnJheTx1bmtub3duPjsKCiAgICAvLyBOT1RFOiBjYWxsYmFja3MgYXJlIF9vbmx5XyBhbGxvd2VkIHRvIHJldHVybiBlaXRoZXIgdm9pZCwgb3IgYSBkZXN0cnVjdG9yLgogICAgdHlwZSBFZmZlY3RDYWxsYmFjayA9ICgpID0+ICh2b2lkIHwgRGVzdHJ1Y3Rvcik7CgogICAgaW50ZXJmYWNlIE11dGFibGVSZWZPYmplY3Q8VD4gewogICAgICAgIGN1cnJlbnQ6IFQ7CiAgICB9CgogICAgLy8gVGhpcyB3aWxsIHRlY2huaWNhbGx5IHdvcmsgaWYgeW91IGdpdmUgYSBDb25zdW1lcjxUPiBvciBQcm92aWRlcjxUPiBidXQgaXQncyBkZXByZWNhdGVkIGFuZCB3YXJucwogICAgLyoqCiAgICAgKiBBY2NlcHRzIGEgY29udGV4dCBvYmplY3QgKHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGBSZWFjdC5jcmVhdGVDb250ZXh0YCkgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQKICAgICAqIGNvbnRleHQgdmFsdWUsIGFzIGdpdmVuIGJ5IHRoZSBuZWFyZXN0IGNvbnRleHQgcHJvdmlkZXIgZm9yIHRoZSBnaXZlbiBjb250ZXh0LgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlQ29udGV4dAogICAgICovCiAgICBmdW5jdGlvbiB1c2VDb250ZXh0PFQ+KGNvbnRleHQ6IENvbnRleHQ8VD4vKiwgKG5vdCBwdWJsaWMgQVBJKSBvYnNlcnZlZEJpdHM/OiBudW1iZXJ8Ym9vbGVhbiAqLyk6IFQ7CiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdGF0ZWZ1bCB2YWx1ZSwgYW5kIGEgZnVuY3Rpb24gdG8gdXBkYXRlIGl0LgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlU3RhdGUKICAgICAqLwogICAgZnVuY3Rpb24gdXNlU3RhdGU8Uz4oaW5pdGlhbFN0YXRlOiBTIHwgKCgpID0+IFMpKTogW1MsIERpc3BhdGNoPFNldFN0YXRlQWN0aW9uPFM+Pl07CiAgICAvLyBjb252ZW5pZW5jZSBvdmVybG9hZCB3aGVuIGZpcnN0IGFyZ3VtZW50IGlzIG9taXR0ZWQKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0YXRlZnVsIHZhbHVlLCBhbmQgYSBmdW5jdGlvbiB0byB1cGRhdGUgaXQuCiAgICAgKgogICAgICogQHZlcnNpb24gMTYuOC4wCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VTdGF0ZQogICAgICovCiAgICBmdW5jdGlvbiB1c2VTdGF0ZTxTID0gdW5kZWZpbmVkPigpOiBbUyB8IHVuZGVmaW5lZCwgRGlzcGF0Y2g8U2V0U3RhdGVBY3Rpb248UyB8IHVuZGVmaW5lZD4+XTsKICAgIC8qKgogICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gYHVzZVN0YXRlYC4KICAgICAqCiAgICAgKiBgdXNlUmVkdWNlcmAgaXMgdXN1YWxseSBwcmVmZXJhYmxlIHRvIGB1c2VTdGF0ZWAgd2hlbiB5b3UgaGF2ZSBjb21wbGV4IHN0YXRlIGxvZ2ljIHRoYXQgaW52b2x2ZXMKICAgICAqIG11bHRpcGxlIHN1Yi12YWx1ZXMuIEl0IGFsc28gbGV0cyB5b3Ugb3B0aW1pemUgcGVyZm9ybWFuY2UgZm9yIGNvbXBvbmVudHMgdGhhdCB0cmlnZ2VyIGRlZXAKICAgICAqIHVwZGF0ZXMgYmVjYXVzZSB5b3UgY2FuIHBhc3MgYGRpc3BhdGNoYCBkb3duIGluc3RlYWQgb2YgY2FsbGJhY2tzLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlUmVkdWNlcgogICAgICovCiAgICAvLyBvdmVybG9hZCB3aGVyZSBkaXNwYXRjaCBjb3VsZCBhY2NlcHQgMCBhcmd1bWVudHMuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyV2l0aG91dEFjdGlvbjxhbnk+LCBJPigKICAgICAgICByZWR1Y2VyOiBSLAogICAgICAgIGluaXRpYWxpemVyQXJnOiBJLAogICAgICAgIGluaXRpYWxpemVyOiAoYXJnOiBJKSA9PiBSZWR1Y2VyU3RhdGVXaXRob3V0QWN0aW9uPFI+CiAgICApOiBbUmVkdWNlclN0YXRlV2l0aG91dEFjdGlvbjxSPiwgRGlzcGF0Y2hXaXRob3V0QWN0aW9uXTsKICAgIC8qKgogICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gYHVzZVN0YXRlYC4KICAgICAqCiAgICAgKiBgdXNlUmVkdWNlcmAgaXMgdXN1YWxseSBwcmVmZXJhYmxlIHRvIGB1c2VTdGF0ZWAgd2hlbiB5b3UgaGF2ZSBjb21wbGV4IHN0YXRlIGxvZ2ljIHRoYXQgaW52b2x2ZXMKICAgICAqIG11bHRpcGxlIHN1Yi12YWx1ZXMuIEl0IGFsc28gbGV0cyB5b3Ugb3B0aW1pemUgcGVyZm9ybWFuY2UgZm9yIGNvbXBvbmVudHMgdGhhdCB0cmlnZ2VyIGRlZXAKICAgICAqIHVwZGF0ZXMgYmVjYXVzZSB5b3UgY2FuIHBhc3MgYGRpc3BhdGNoYCBkb3duIGluc3RlYWQgb2YgY2FsbGJhY2tzLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlUmVkdWNlcgogICAgICovCiAgICAvLyBvdmVybG9hZCB3aGVyZSBkaXNwYXRjaCBjb3VsZCBhY2NlcHQgMCBhcmd1bWVudHMuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyV2l0aG91dEFjdGlvbjxhbnk+PigKICAgICAgICByZWR1Y2VyOiBSLAogICAgICAgIGluaXRpYWxpemVyQXJnOiBSZWR1Y2VyU3RhdGVXaXRob3V0QWN0aW9uPFI+LAogICAgICAgIGluaXRpYWxpemVyPzogdW5kZWZpbmVkCiAgICApOiBbUmVkdWNlclN0YXRlV2l0aG91dEFjdGlvbjxSPiwgRGlzcGF0Y2hXaXRob3V0QWN0aW9uXTsKICAgIC8qKgogICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gYHVzZVN0YXRlYC4KICAgICAqCiAgICAgKiBgdXNlUmVkdWNlcmAgaXMgdXN1YWxseSBwcmVmZXJhYmxlIHRvIGB1c2VTdGF0ZWAgd2hlbiB5b3UgaGF2ZSBjb21wbGV4IHN0YXRlIGxvZ2ljIHRoYXQgaW52b2x2ZXMKICAgICAqIG11bHRpcGxlIHN1Yi12YWx1ZXMuIEl0IGFsc28gbGV0cyB5b3Ugb3B0aW1pemUgcGVyZm9ybWFuY2UgZm9yIGNvbXBvbmVudHMgdGhhdCB0cmlnZ2VyIGRlZXAKICAgICAqIHVwZGF0ZXMgYmVjYXVzZSB5b3UgY2FuIHBhc3MgYGRpc3BhdGNoYCBkb3duIGluc3RlYWQgb2YgY2FsbGJhY2tzLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlUmVkdWNlcgogICAgICovCiAgICAvLyBvdmVybG9hZCB3aGVyZSAiSSIgbWF5IGJlIGEgc3Vic2V0IG9mIFJlZHVjZXJTdGF0ZTxSPjsgdXNlZCB0byBwcm92aWRlIGF1dG9jb21wbGV0aW9uLgogICAgLy8gSWYgIkkiIG1hdGNoZXMgUmVkdWNlclN0YXRlPFI+IGV4YWN0bHkgdGhlbiB0aGUgbGFzdCBvdmVybG9hZCB3aWxsIGFsbG93IGluaXRpYWxpemVyIHRvIGJlIG9taXR0ZWQuCiAgICAvLyB0aGUgbGFzdCBvdmVybG9hZCBlZmZlY3RpdmVseSBiZWhhdmVzIGFzIGlmIHRoZSBpZGVudGl0eSBmdW5jdGlvbiAoeCA9PiB4KSBpcyB0aGUgaW5pdGlhbGl6ZXIuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyPGFueSwgYW55PiwgST4oCiAgICAgICAgcmVkdWNlcjogUiwKICAgICAgICBpbml0aWFsaXplckFyZzogSSAmIFJlZHVjZXJTdGF0ZTxSPiwKICAgICAgICBpbml0aWFsaXplcjogKGFyZzogSSAmIFJlZHVjZXJTdGF0ZTxSPikgPT4gUmVkdWNlclN0YXRlPFI+CiAgICApOiBbUmVkdWNlclN0YXRlPFI+LCBEaXNwYXRjaDxSZWR1Y2VyQWN0aW9uPFI+Pl07CiAgICAvKioKICAgICAqIEFuIGFsdGVybmF0aXZlIHRvIGB1c2VTdGF0ZWAuCiAgICAgKgogICAgICogYHVzZVJlZHVjZXJgIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0byBgdXNlU3RhdGVgIHdoZW4geW91IGhhdmUgY29tcGxleCBzdGF0ZSBsb2dpYyB0aGF0IGludm9sdmVzCiAgICAgKiBtdWx0aXBsZSBzdWItdmFsdWVzLiBJdCBhbHNvIGxldHMgeW91IG9wdGltaXplIHBlcmZvcm1hbmNlIGZvciBjb21wb25lbnRzIHRoYXQgdHJpZ2dlciBkZWVwCiAgICAgKiB1cGRhdGVzIGJlY2F1c2UgeW91IGNhbiBwYXNzIGBkaXNwYXRjaGAgZG93biBpbnN0ZWFkIG9mIGNhbGxiYWNrcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZHVjZXIKICAgICAqLwogICAgLy8gb3ZlcmxvYWQgZm9yIGZyZWUgIkkiOyBhbGwgZ29lcyBhcyBsb25nIGFzIGluaXRpYWxpemVyIGNvbnZlcnRzIGl0IGludG8gIlJlZHVjZXJTdGF0ZTxSPiIuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyPGFueSwgYW55PiwgST4oCiAgICAgICAgcmVkdWNlcjogUiwKICAgICAgICBpbml0aWFsaXplckFyZzogSSwKICAgICAgICBpbml0aWFsaXplcjogKGFyZzogSSkgPT4gUmVkdWNlclN0YXRlPFI+CiAgICApOiBbUmVkdWNlclN0YXRlPFI+LCBEaXNwYXRjaDxSZWR1Y2VyQWN0aW9uPFI+Pl07CiAgICAvKioKICAgICAqIEFuIGFsdGVybmF0aXZlIHRvIGB1c2VTdGF0ZWAuCiAgICAgKgogICAgICogYHVzZVJlZHVjZXJgIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0byBgdXNlU3RhdGVgIHdoZW4geW91IGhhdmUgY29tcGxleCBzdGF0ZSBsb2dpYyB0aGF0IGludm9sdmVzCiAgICAgKiBtdWx0aXBsZSBzdWItdmFsdWVzLiBJdCBhbHNvIGxldHMgeW91IG9wdGltaXplIHBlcmZvcm1hbmNlIGZvciBjb21wb25lbnRzIHRoYXQgdHJpZ2dlciBkZWVwCiAgICAgKiB1cGRhdGVzIGJlY2F1c2UgeW91IGNhbiBwYXNzIGBkaXNwYXRjaGAgZG93biBpbnN0ZWFkIG9mIGNhbGxiYWNrcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZHVjZXIKICAgICAqLwoKICAgIC8vIEknbSBub3Qgc3VyZSBpZiBJIGtlZXAgdGhpcyAyLWFyeSBvciBpZiBJIG1ha2UgaXQgKDIsMyktYXJ5OyBpdCdzIGN1cnJlbnRseSAoMiwzKS1hcnkuCiAgICAvLyBUaGUgRmxvdyB0eXBlcyBkbyBoYXZlIGFuIG92ZXJsb2FkIGZvciAzLWFyeSBpbnZvY2F0aW9uIHdpdGggdW5kZWZpbmVkIGluaXRpYWxpemVyLgoKICAgIC8vIE5PVEU6IHdpdGhvdXQgdGhlIFJlZHVjZXJTdGF0ZSBpbmRpcmVjdGlvbiwgVHlwZVNjcmlwdCB3b3VsZCByZWR1Y2UgUyB0byBiZSB0aGUgbW9zdCBjb21tb24KICAgIC8vIHN1cGVydHlwZSBiZXR3ZWVuIHRoZSByZWR1Y2VyJ3MgcmV0dXJuIHR5cGUgYW5kIHRoZSBpbml0aWFsU3RhdGUgKG9yIHRoZSBpbml0aWFsaXplcidzIHJldHVybiB0eXBlKSwKICAgIC8vIHdoaWNoIHdvdWxkIHByZXZlbnQgYXV0b2NvbXBsZXRpb24gZnJvbSBldmVyIHdvcmtpbmcuCgogICAgLy8gVE9ETzogZG91YmxlLWNoZWNrIGlmIHRoaXMgd2VpcmQgb3ZlcmxvYWQgbG9naWMgaXMgbmVjZXNzYXJ5LiBJdCBpcyBwb3NzaWJsZSBpdCdzIGVpdGhlciBhIGJ1ZwogICAgLy8gaW4gb2xkZXIgdmVyc2lvbnMsIG9yIGEgcmVncmVzc2lvbiBpbiBuZXdlciB2ZXJzaW9ucyBvZiB0aGUgdHlwZXNjcmlwdCBjb21wbGV0aW9uIHNlcnZpY2UuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyPGFueSwgYW55Pj4oCiAgICAgICAgcmVkdWNlcjogUiwKICAgICAgICBpbml0aWFsU3RhdGU6IFJlZHVjZXJTdGF0ZTxSPiwKICAgICAgICBpbml0aWFsaXplcj86IHVuZGVmaW5lZAogICAgKTogW1JlZHVjZXJTdGF0ZTxSPiwgRGlzcGF0Y2g8UmVkdWNlckFjdGlvbjxSPj5dOwogICAgLyoqCiAgICAgKiBgdXNlUmVmYCByZXR1cm5zIGEgbXV0YWJsZSByZWYgb2JqZWN0IHdob3NlIGAuY3VycmVudGAgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIHBhc3NlZCBhcmd1bWVudAogICAgICogKGBpbml0aWFsVmFsdWVgKS4gVGhlIHJldHVybmVkIG9iamVjdCB3aWxsIHBlcnNpc3QgZm9yIHRoZSBmdWxsIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuCiAgICAgKgogICAgICogTm90ZSB0aGF0IGB1c2VSZWYoKWAgaXMgdXNlZnVsIGZvciBtb3JlIHRoYW4gdGhlIGByZWZgIGF0dHJpYnV0ZS4gSXTigJlzIGhhbmR5IGZvciBrZWVwaW5nIGFueSBtdXRhYmxlCiAgICAgKiB2YWx1ZSBhcm91bmQgc2ltaWxhciB0byBob3cgeW914oCZZCB1c2UgaW5zdGFuY2UgZmllbGRzIGluIGNsYXNzZXMuCiAgICAgKgogICAgICogQHZlcnNpb24gMTYuOC4wCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VSZWYKICAgICAqLwogICAgZnVuY3Rpb24gdXNlUmVmPFQ+KGluaXRpYWxWYWx1ZTogVCk6IE11dGFibGVSZWZPYmplY3Q8VD47CiAgICAvLyBjb252ZW5pZW5jZSBvdmVybG9hZCBmb3IgcmVmcyBnaXZlbiBhcyBhIHJlZiBwcm9wIGFzIHRoZXkgdHlwaWNhbGx5IHN0YXJ0IHdpdGggYSBudWxsIHZhbHVlCiAgICAvKioKICAgICAqIGB1c2VSZWZgIHJldHVybnMgYSBtdXRhYmxlIHJlZiBvYmplY3Qgd2hvc2UgYC5jdXJyZW50YCBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCB0byB0aGUgcGFzc2VkIGFyZ3VtZW50CiAgICAgKiAoYGluaXRpYWxWYWx1ZWApLiBUaGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgcGVyc2lzdCBmb3IgdGhlIGZ1bGwgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBOb3RlIHRoYXQgYHVzZVJlZigpYCBpcyB1c2VmdWwgZm9yIG1vcmUgdGhhbiB0aGUgYHJlZmAgYXR0cmlidXRlLiBJdOKAmXMgaGFuZHkgZm9yIGtlZXBpbmcgYW55IG11dGFibGUKICAgICAqIHZhbHVlIGFyb3VuZCBzaW1pbGFyIHRvIGhvdyB5b3XigJlkIHVzZSBpbnN0YW5jZSBmaWVsZHMgaW4gY2xhc3Nlcy4KICAgICAqCiAgICAgKiBVc2FnZSBub3RlOiBpZiB5b3UgbmVlZCB0aGUgcmVzdWx0IG9mIHVzZVJlZiB0byBiZSBkaXJlY3RseSBtdXRhYmxlLCBpbmNsdWRlIGB8IG51bGxgIGluIHRoZSB0eXBlCiAgICAgKiBvZiB0aGUgZ2VuZXJpYyBhcmd1bWVudC4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZgogICAgICovCiAgICBmdW5jdGlvbiB1c2VSZWY8VD4oaW5pdGlhbFZhbHVlOiBUfG51bGwpOiBSZWZPYmplY3Q8VD47CiAgICAvLyBjb252ZW5pZW5jZSBvdmVybG9hZCBmb3IgcG90ZW50aWFsbHkgdW5kZWZpbmVkIGluaXRpYWxWYWx1ZSAvIGNhbGwgd2l0aCAwIGFyZ3VtZW50cwogICAgLy8gaGFzIGEgZGVmYXVsdCB0byBzdG9wIGl0IGZyb20gZGVmYXVsdGluZyB0byB7fSBpbnN0ZWFkCiAgICAvKioKICAgICAqIGB1c2VSZWZgIHJldHVybnMgYSBtdXRhYmxlIHJlZiBvYmplY3Qgd2hvc2UgYC5jdXJyZW50YCBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCB0byB0aGUgcGFzc2VkIGFyZ3VtZW50CiAgICAgKiAoYGluaXRpYWxWYWx1ZWApLiBUaGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgcGVyc2lzdCBmb3IgdGhlIGZ1bGwgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBOb3RlIHRoYXQgYHVzZVJlZigpYCBpcyB1c2VmdWwgZm9yIG1vcmUgdGhhbiB0aGUgYHJlZmAgYXR0cmlidXRlLiBJdOKAmXMgaGFuZHkgZm9yIGtlZXBpbmcgYW55IG11dGFibGUKICAgICAqIHZhbHVlIGFyb3VuZCBzaW1pbGFyIHRvIGhvdyB5b3XigJlkIHVzZSBpbnN0YW5jZSBmaWVsZHMgaW4gY2xhc3Nlcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZgogICAgICovCiAgICBmdW5jdGlvbiB1c2VSZWY8VCA9IHVuZGVmaW5lZD4oKTogTXV0YWJsZVJlZk9iamVjdDxUIHwgdW5kZWZpbmVkPjsKICAgIC8qKgogICAgICogVGhlIHNpZ25hdHVyZSBpcyBpZGVudGljYWwgdG8gYHVzZUVmZmVjdGAsIGJ1dCBpdCBmaXJlcyBzeW5jaHJvbm91c2x5IGFmdGVyIGFsbCBET00gbXV0YXRpb25zLgogICAgICogVXNlIHRoaXMgdG8gcmVhZCBsYXlvdXQgZnJvbSB0aGUgRE9NIGFuZCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlci4gVXBkYXRlcyBzY2hlZHVsZWQgaW5zaWRlCiAgICAgKiBgdXNlTGF5b3V0RWZmZWN0YCB3aWxsIGJlIGZsdXNoZWQgc3luY2hyb25vdXNseSwgYmVmb3JlIHRoZSBicm93c2VyIGhhcyBhIGNoYW5jZSB0byBwYWludC4KICAgICAqCiAgICAgKiBQcmVmZXIgdGhlIHN0YW5kYXJkIGB1c2VFZmZlY3RgIHdoZW4gcG9zc2libGUgdG8gYXZvaWQgYmxvY2tpbmcgdmlzdWFsIHVwZGF0ZXMuCiAgICAgKgogICAgICogSWYgeW914oCZcmUgbWlncmF0aW5nIGNvZGUgZnJvbSBhIGNsYXNzIGNvbXBvbmVudCwgYHVzZUxheW91dEVmZmVjdGAgZmlyZXMgaW4gdGhlIHNhbWUgcGhhc2UgYXMKICAgICAqIGBjb21wb25lbnREaWRNb3VudGAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlTGF5b3V0RWZmZWN0CiAgICAgKi8KICAgIGZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChlZmZlY3Q6IEVmZmVjdENhbGxiYWNrLCBkZXBzPzogRGVwZW5kZW5jeUxpc3QpOiB2b2lkOwogICAgLyoqCiAgICAgKiBBY2NlcHRzIGEgZnVuY3Rpb24gdGhhdCBjb250YWlucyBpbXBlcmF0aXZlLCBwb3NzaWJseSBlZmZlY3RmdWwgY29kZS4KICAgICAqCiAgICAgKiBAcGFyYW0gZWZmZWN0IEltcGVyYXRpdmUgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuIGEgY2xlYW51cCBmdW5jdGlvbgogICAgICogQHBhcmFtIGRlcHMgSWYgcHJlc2VudCwgZWZmZWN0IHdpbGwgb25seSBhY3RpdmF0ZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBsaXN0IGNoYW5nZS4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZUVmZmVjdAogICAgICovCiAgICBmdW5jdGlvbiB1c2VFZmZlY3QoZWZmZWN0OiBFZmZlY3RDYWxsYmFjaywgZGVwcz86IERlcGVuZGVuY3lMaXN0KTogdm9pZDsKICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgYWNjZXB0IHN0cmluZ3MsIGJ1dCB0aGlzIHdpbGwgaGF2ZSB0byBiZSBmaXhlZCBieSByZW1vdmluZyBzdHJpbmdzIGZyb20gdHlwZSBSZWY8VD4KICAgIC8qKgogICAgICogYHVzZUltcGVyYXRpdmVIYW5kbGVgIGN1c3RvbWl6ZXMgdGhlIGluc3RhbmNlIHZhbHVlIHRoYXQgaXMgZXhwb3NlZCB0byBwYXJlbnQgY29tcG9uZW50cyB3aGVuIHVzaW5nCiAgICAgKiBgcmVmYC4gQXMgYWx3YXlzLCBpbXBlcmF0aXZlIGNvZGUgdXNpbmcgcmVmcyBzaG91bGQgYmUgYXZvaWRlZCBpbiBtb3N0IGNhc2VzLgogICAgICoKICAgICAqIGB1c2VJbXBlcmF0aXZlSGFuZGxlYCBzaG91bGQgYmUgdXNlZCB3aXRoIGBSZWFjdC5mb3J3YXJkUmVmYC4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZUltcGVyYXRpdmVIYW5kbGUKICAgICAqLwogICAgZnVuY3Rpb24gdXNlSW1wZXJhdGl2ZUhhbmRsZTxULCBSIGV4dGVuZHMgVD4ocmVmOiBSZWY8VD58dW5kZWZpbmVkLCBpbml0OiAoKSA9PiBSLCBkZXBzPzogRGVwZW5kZW5jeUxpc3QpOiB2b2lkOwogICAgLy8gSSBtYWRlICdpbnB1dHMnIHJlcXVpcmVkIGhlcmUgYW5kIGluIHVzZU1lbW8gYXMgdGhlcmUncyBubyBwb2ludCB0byBtZW1vaXppbmcgd2l0aG91dCB0aGUgbWVtb2l6YXRpb24ga2V5CiAgICAvLyB1c2VDYWxsYmFjayhYKSBpcyBpZGVudGljYWwgdG8ganVzdCB1c2luZyBYLCB1c2VNZW1vKCgpID0+IFkpIGlzIGlkZW50aWNhbCB0byBqdXN0IHVzaW5nIFkuCiAgICAvKioKICAgICAqIGB1c2VDYWxsYmFja2Agd2lsbCByZXR1cm4gYSBtZW1vaXplZCB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFjayB0aGF0IG9ubHkgY2hhbmdlcyBpZiBvbmUgb2YgdGhlIGBpbnB1dHNgCiAgICAgKiBoYXMgY2hhbmdlZC4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZUNhbGxiYWNrCiAgICAgKi8KICAgIC8vIEEgc3BlY2lmaWMgZnVuY3Rpb24gdHlwZSB3b3VsZCBub3QgdHJpZ2dlciBpbXBsaWNpdCBhbnkuCiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzUyODczI2lzc3VlY29tbWVudC04NDU4MDY0MzUgZm9yIGEgY29tcGFyaXNvbiBiZXR3ZWVuIGBGdW5jdGlvbmAgYW5kIG1vcmUgc3BlY2lmaWMgdHlwZXMuCiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgYmFuLXR5cGVzCiAgICBmdW5jdGlvbiB1c2VDYWxsYmFjazxUIGV4dGVuZHMgRnVuY3Rpb24+KGNhbGxiYWNrOiBULCBkZXBzOiBEZXBlbmRlbmN5TGlzdCk6IFQ7CiAgICAvKioKICAgICAqIGB1c2VNZW1vYCB3aWxsIG9ubHkgcmVjb21wdXRlIHRoZSBtZW1vaXplZCB2YWx1ZSB3aGVuIG9uZSBvZiB0aGUgYGRlcHNgIGhhcyBjaGFuZ2VkLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlTWVtbwogICAgICovCiAgICAvLyBhbGxvdyB1bmRlZmluZWQsIGJ1dCBkb24ndCBtYWtlIGl0IG9wdGlvbmFsIGFzIHRoYXQgaXMgdmVyeSBsaWtlbHkgYSBtaXN0YWtlCiAgICBmdW5jdGlvbiB1c2VNZW1vPFQ+KGZhY3Rvcnk6ICgpID0+IFQsIGRlcHM6IERlcGVuZGVuY3lMaXN0IHwgdW5kZWZpbmVkKTogVDsKICAgIC8qKgogICAgICogYHVzZURlYnVnVmFsdWVgIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgYSBsYWJlbCBmb3IgY3VzdG9tIGhvb2tzIGluIFJlYWN0IERldlRvb2xzLgogICAgICoKICAgICAqIE5PVEU6IFdlIGRvbuKAmXQgcmVjb21tZW5kIGFkZGluZyBkZWJ1ZyB2YWx1ZXMgdG8gZXZlcnkgY3VzdG9tIGhvb2suCiAgICAgKiBJdOKAmXMgbW9zdCB2YWx1YWJsZSBmb3IgY3VzdG9tIGhvb2tzIHRoYXQgYXJlIHBhcnQgb2Ygc2hhcmVkIGxpYnJhcmllcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZURlYnVnVmFsdWUKICAgICAqLwogICAgLy8gdGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBob29rIGlzIGl0c2VsZiBkZXJpdmVkIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgYXQgcnVudGltZToKICAgIC8vIGl0J3MganVzdCB0aGUgZnVuY3Rpb24gbmFtZSB3aXRob3V0IHRoZSAidXNlIiBwcmVmaXguCiAgICBmdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlPFQ+KHZhbHVlOiBULCBmb3JtYXQ/OiAodmFsdWU6IFQpID0+IGFueSk6IHZvaWQ7CgogICAgLy8gbXVzdCBiZSBzeW5jaHJvbm91cwogICAgZXhwb3J0IHR5cGUgVHJhbnNpdGlvbkZ1bmN0aW9uID0gKCkgPT4gVm9pZE9yVW5kZWZpbmVkT25seTsKICAgIC8vIHN0cmFuZ2UgZGVmaW5pdGlvbiB0byBhbGxvdyB2c2NvZGUgdG8gc2hvdyBkb2N1bWVudGF0aW9uIG9uIHRoZSBpbnZvY2F0aW9uCiAgICBleHBvcnQgaW50ZXJmYWNlIFRyYW5zaXRpb25TdGFydEZ1bmN0aW9uIHsKICAgICAgICAvKioKICAgICAgICAgKiBTdGF0ZSB1cGRhdGVzIGNhdXNlZCBpbnNpZGUgdGhlIGNhbGxiYWNrIGFyZSBhbGxvd2VkIHRvIGJlIGRlZmVycmVkLgogICAgICAgICAqCiAgICAgICAgICogKipJZiBzb21lIHN0YXRlIHVwZGF0ZSBjYXVzZXMgYSBjb21wb25lbnQgdG8gc3VzcGVuZCwgdGhhdCBzdGF0ZSB1cGRhdGUgc2hvdWxkIGJlIHdyYXBwZWQgaW4gYSB0cmFuc2l0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBfc3luY2hyb25vdXNfIGZ1bmN0aW9uIHdoaWNoIGNhdXNlcyBzdGF0ZSB1cGRhdGVzIHRoYXQgY2FuIGJlIGRlZmVycmVkLgogICAgICAgICAqLwogICAgICAgIChjYWxsYmFjazogVHJhbnNpdGlvbkZ1bmN0aW9uKTogdm9pZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBkZWZlcnJlZCB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSB0aGF0IG1heSDigJxsYWcgYmVoaW5k4oCdIGl0LgogICAgICoKICAgICAqIFRoaXMgaXMgY29tbW9ubHkgdXNlZCB0byBrZWVwIHRoZSBpbnRlcmZhY2UgcmVzcG9uc2l2ZSB3aGVuIHlvdSBoYXZlIHNvbWV0aGluZyB0aGF0IHJlbmRlcnMgaW1tZWRpYXRlbHkKICAgICAqIGJhc2VkIG9uIHVzZXIgaW5wdXQgYW5kIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIHdhaXQgZm9yIGEgZGF0YSBmZXRjaC4KICAgICAqCiAgICAgKiBBIGdvb2QgZXhhbXBsZSBvZiB0aGlzIGlzIGEgdGV4dCBpbnB1dC4KICAgICAqCiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRoYXQgaXMgZ29pbmcgdG8gYmUgZGVmZXJyZWQKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VEZWZlcnJlZFZhbHVlCiAgICAgKi8KICAgIGV4cG9ydCBmdW5jdGlvbiB1c2VEZWZlcnJlZFZhbHVlPFQ+KHZhbHVlOiBUKTogVDsKCiAgICAvKioKICAgICAqIEFsbG93cyBjb21wb25lbnRzIHRvIGF2b2lkIHVuZGVzaXJhYmxlIGxvYWRpbmcgc3RhdGVzIGJ5IHdhaXRpbmcgZm9yIGNvbnRlbnQgdG8gbG9hZAogICAgICogYmVmb3JlIHRyYW5zaXRpb25pbmcgdG8gdGhlIG5leHQgc2NyZWVuLiBJdCBhbHNvIGFsbG93cyBjb21wb25lbnRzIHRvIGRlZmVyIHNsb3dlciwKICAgICAqIGRhdGEgZmV0Y2hpbmcgdXBkYXRlcyB1bnRpbCBzdWJzZXF1ZW50IHJlbmRlcnMgc28gdGhhdCBtb3JlIGNydWNpYWwgdXBkYXRlcyBjYW4gYmUKICAgICAqIHJlbmRlcmVkIGltbWVkaWF0ZWx5LgogICAgICoKICAgICAqIFRoZSBgdXNlVHJhbnNpdGlvbmAgaG9vayByZXR1cm5zIHR3byB2YWx1ZXMgaW4gYW4gYXJyYXkuCiAgICAgKgogICAgICogVGhlIGZpcnN0IGlzIGEgYm9vbGVhbiwgUmVhY3TigJlzIHdheSBvZiBpbmZvcm1pbmcgdXMgd2hldGhlciB3ZeKAmXJlIHdhaXRpbmcgZm9yIHRoZSB0cmFuc2l0aW9uIHRvIGZpbmlzaC4KICAgICAqIFRoZSBzZWNvbmQgaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY2FsbGJhY2suIFdlIGNhbiB1c2UgaXQgdG8gdGVsbCBSZWFjdCB3aGljaCBzdGF0ZSB3ZSB3YW50IHRvIGRlZmVyLgogICAgICoKICAgICAqICoqSWYgc29tZSBzdGF0ZSB1cGRhdGUgY2F1c2VzIGEgY29tcG9uZW50IHRvIHN1c3BlbmQsIHRoYXQgc3RhdGUgdXBkYXRlIHNob3VsZCBiZSB3cmFwcGVkIGluIGEgdHJhbnNpdGlvbi4qKmAKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VUcmFuc2l0aW9uCiAgICAgKi8KICAgIGV4cG9ydCBmdW5jdGlvbiB1c2VUcmFuc2l0aW9uKCk6IFtib29sZWFuLCBUcmFuc2l0aW9uU3RhcnRGdW5jdGlvbl07CgogICAgLyoqCiAgICAgKiBTaW1pbGFyIHRvIGB1c2VUcmFuc2l0aW9uYCBidXQgYWxsb3dzIHVzZXMgd2hlcmUgaG9va3MgYXJlIG5vdCBhdmFpbGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxiYWNrIEEgX3N5bmNocm9ub3VzXyBmdW5jdGlvbiB3aGljaCBjYXVzZXMgc3RhdGUgdXBkYXRlcyB0aGF0IGNhbiBiZSBkZWZlcnJlZC4KICAgICAqLwogICAgZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihzY29wZTogVHJhbnNpdGlvbkZ1bmN0aW9uKTogdm9pZDsKCiAgICBleHBvcnQgZnVuY3Rpb24gdXNlSWQoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQHBhcmFtIGVmZmVjdCBJbXBlcmF0aXZlIGZ1bmN0aW9uIHRoYXQgY2FuIHJldHVybiBhIGNsZWFudXAgZnVuY3Rpb24KICAgICAqIEBwYXJhbSBkZXBzIElmIHByZXNlbnQsIGVmZmVjdCB3aWxsIG9ubHkgYWN0aXZhdGUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgbGlzdCBjaGFuZ2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMTkxMwogICAgICovCiAgICAgZXhwb3J0IGZ1bmN0aW9uIHVzZUluc2VydGlvbkVmZmVjdChlZmZlY3Q6IEVmZmVjdENhbGxiYWNrLCBkZXBzPzogRGVwZW5kZW5jeUxpc3QpOiB2b2lkOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN1YnNjcmliZQogICAgICogQHBhcmFtIGdldFNuYXBzaG90CiAgICAgKgogICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3R3Zy9yZWFjdC0xOC9kaXNjdXNzaW9ucy84NgogICAgICovCiAgICAvLyBrZWVwIGluIHN5bmMgd2l0aCBgdXNlU3luY0V4dGVybmFsU3RvcmVgIGZyb20gYHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlYAogICAgZXhwb3J0IGZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlPFNuYXBzaG90PigKICAgICAgICBzdWJzY3JpYmU6IChvblN0b3JlQ2hhbmdlOiAoKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkLAogICAgICAgIGdldFNuYXBzaG90OiAoKSA9PiBTbmFwc2hvdCwKICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdD86ICgpID0+IFNuYXBzaG90LAogICAgKTogU25hcHNob3Q7CgogICAgLy8KICAgIC8vIEV2ZW50IFN5c3RlbQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gVE9ETzogY2hhbmdlIGFueSB0byB1bmtub3duIHdoZW4gbW92aW5nIHRvIFRTIHYzCiAgICBpbnRlcmZhY2UgQmFzZVN5bnRoZXRpY0V2ZW50PEUgPSBvYmplY3QsIEMgPSBhbnksIFQgPSBhbnk+IHsKICAgICAgICBuYXRpdmVFdmVudDogRTsKICAgICAgICBjdXJyZW50VGFyZ2V0OiBDOwogICAgICAgIHRhcmdldDogVDsKICAgICAgICBidWJibGVzOiBib29sZWFuOwogICAgICAgIGNhbmNlbGFibGU6IGJvb2xlYW47CiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjsKICAgICAgICBldmVudFBoYXNlOiBudW1iZXI7CiAgICAgICAgaXNUcnVzdGVkOiBib29sZWFuOwogICAgICAgIHByZXZlbnREZWZhdWx0KCk6IHZvaWQ7CiAgICAgICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47CiAgICAgICAgc3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQ7CiAgICAgICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTogYm9vbGVhbjsKICAgICAgICBwZXJzaXN0KCk6IHZvaWQ7CiAgICAgICAgdGltZVN0YW1wOiBudW1iZXI7CiAgICAgICAgdHlwZTogc3RyaW5nOwogICAgfQoKICAgIC8qKgogICAgICogY3VycmVudFRhcmdldCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IG9uIHdoaWNoIHRoZSBldmVudCBsaXN0ZW5lciBpcyByZWdpc3RlcmVkLgogICAgICoKICAgICAqIHRhcmdldCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGZyb20gd2hpY2ggdGhlIGV2ZW50IHdhcyBvcmlnaW5hbGx5IGRpc3BhdGNoZWQuCiAgICAgKiBUaGlzIG1pZ2h0IGJlIGEgY2hpbGQgZWxlbWVudCB0byB0aGUgZWxlbWVudCBvbiB3aGljaCB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgcmVnaXN0ZXJlZC4KICAgICAqIElmIHlvdSB0aG91Z2h0IHRoaXMgc2hvdWxkIGJlIGBFdmVudFRhcmdldCAmIFRgLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzExNTA4I2lzc3VlY29tbWVudC0yNTYwNDU2ODIKICAgICAqLwogICAgaW50ZXJmYWNlIFN5bnRoZXRpY0V2ZW50PFQgPSBFbGVtZW50LCBFID0gRXZlbnQ+IGV4dGVuZHMgQmFzZVN5bnRoZXRpY0V2ZW50PEUsIEV2ZW50VGFyZ2V0ICYgVCwgRXZlbnRUYXJnZXQ+IHt9CgogICAgaW50ZXJmYWNlIENsaXBib2FyZEV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFQsIE5hdGl2ZUNsaXBib2FyZEV2ZW50PiB7CiAgICAgICAgY2xpcGJvYXJkRGF0YTogRGF0YVRyYW5zZmVyOwogICAgfQoKICAgIGludGVyZmFjZSBDb21wb3NpdGlvbkV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFQsIE5hdGl2ZUNvbXBvc2l0aW9uRXZlbnQ+IHsKICAgICAgICBkYXRhOiBzdHJpbmc7CiAgICB9CgogICAgaW50ZXJmYWNlIERyYWdFdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBNb3VzZUV2ZW50PFQsIE5hdGl2ZURyYWdFdmVudD4gewogICAgICAgIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyOwogICAgfQoKICAgIGludGVyZmFjZSBQb2ludGVyRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgTW91c2VFdmVudDxULCBOYXRpdmVQb2ludGVyRXZlbnQ+IHsKICAgICAgICBwb2ludGVySWQ6IG51bWJlcjsKICAgICAgICBwcmVzc3VyZTogbnVtYmVyOwogICAgICAgIHRhbmdlbnRpYWxQcmVzc3VyZTogbnVtYmVyOwogICAgICAgIHRpbHRYOiBudW1iZXI7CiAgICAgICAgdGlsdFk6IG51bWJlcjsKICAgICAgICB0d2lzdDogbnVtYmVyOwogICAgICAgIHdpZHRoOiBudW1iZXI7CiAgICAgICAgaGVpZ2h0OiBudW1iZXI7CiAgICAgICAgcG9pbnRlclR5cGU6ICdtb3VzZScgfCAncGVuJyB8ICd0b3VjaCc7CiAgICAgICAgaXNQcmltYXJ5OiBib29sZWFuOwogICAgfQoKICAgIGludGVyZmFjZSBGb2N1c0V2ZW50PFRhcmdldCA9IEVsZW1lbnQsIFJlbGF0ZWRUYXJnZXQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFRhcmdldCwgTmF0aXZlRm9jdXNFdmVudD4gewogICAgICAgIHJlbGF0ZWRUYXJnZXQ6IChFdmVudFRhcmdldCAmIFJlbGF0ZWRUYXJnZXQpIHwgbnVsbDsKICAgICAgICB0YXJnZXQ6IEV2ZW50VGFyZ2V0ICYgVGFyZ2V0OwogICAgfQoKICAgIGludGVyZmFjZSBGb3JtRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgU3ludGhldGljRXZlbnQ8VD4gewogICAgfQoKICAgIGludGVyZmFjZSBJbnZhbGlkRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgU3ludGhldGljRXZlbnQ8VD4gewogICAgICAgIHRhcmdldDogRXZlbnRUYXJnZXQgJiBUOwogICAgfQoKICAgIGludGVyZmFjZSBDaGFuZ2VFdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBTeW50aGV0aWNFdmVudDxUPiB7CiAgICAgICAgdGFyZ2V0OiBFdmVudFRhcmdldCAmIFQ7CiAgICB9CgogICAgZXhwb3J0IHR5cGUgTW9kaWZpZXJLZXkgPSAiQWx0IiB8ICJBbHRHcmFwaCIgfCAiQ2Fwc0xvY2siIHwgIkNvbnRyb2wiIHwgIkZuIiB8ICJGbkxvY2siIHwgIkh5cGVyIiB8ICJNZXRhIiB8ICJOdW1Mb2NrIiB8ICJTY3JvbGxMb2NrIiB8ICJTaGlmdCIgfCAiU3VwZXIiIHwgIlN5bWJvbCIgfCAiU3ltYm9sTG9jayI7CgogICAgaW50ZXJmYWNlIEtleWJvYXJkRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgVUlFdmVudDxULCBOYXRpdmVLZXlib2FyZEV2ZW50PiB7CiAgICAgICAgYWx0S2V5OiBib29sZWFuOwogICAgICAgIC8qKiBAZGVwcmVjYXRlZCAqLwogICAgICAgIGNoYXJDb2RlOiBudW1iZXI7CiAgICAgICAgY3RybEtleTogYm9vbGVhbjsKICAgICAgICBjb2RlOiBzdHJpbmc7CiAgICAgICAgLyoqCiAgICAgICAgICogU2VlIFtET00gTGV2ZWwgMyBFdmVudHMgc3BlY10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3VpZXZlbnRzLWtleS8ja2V5cy1tb2RpZmllcikuIGZvciBhIGxpc3Qgb2YgdmFsaWQgKGNhc2Utc2Vuc2l0aXZlKSBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QuCiAgICAgICAgICovCiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZShrZXk6IE1vZGlmaWVyS2V5KTogYm9vbGVhbjsKICAgICAgICAvKioKICAgICAgICAgKiBTZWUgdGhlIFtET00gTGV2ZWwgMyBFdmVudHMgc3BlY10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3VpZXZlbnRzLWtleS8jbmFtZWQta2V5LWF0dHJpYnV0ZS12YWx1ZXMpLiBmb3IgcG9zc2libGUgdmFsdWVzCiAgICAgICAgICovCiAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAga2V5Q29kZTogbnVtYmVyOwogICAgICAgIGxvY2FsZTogc3RyaW5nOwogICAgICAgIGxvY2F0aW9uOiBudW1iZXI7CiAgICAgICAgbWV0YUtleTogYm9vbGVhbjsKICAgICAgICByZXBlYXQ6IGJvb2xlYW47CiAgICAgICAgc2hpZnRLZXk6IGJvb2xlYW47CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgd2hpY2g6IG51bWJlcjsKICAgIH0KCiAgICBpbnRlcmZhY2UgTW91c2VFdmVudDxUID0gRWxlbWVudCwgRSA9IE5hdGl2ZU1vdXNlRXZlbnQ+IGV4dGVuZHMgVUlFdmVudDxULCBFPiB7CiAgICAgICAgYWx0S2V5OiBib29sZWFuOwogICAgICAgIGJ1dHRvbjogbnVtYmVyOwogICAgICAgIGJ1dHRvbnM6IG51bWJlcjsKICAgICAgICBjbGllbnRYOiBudW1iZXI7CiAgICAgICAgY2xpZW50WTogbnVtYmVyOwogICAgICAgIGN0cmxLZXk6IGJvb2xlYW47CiAgICAgICAgLyoqCiAgICAgICAgICogU2VlIFtET00gTGV2ZWwgMyBFdmVudHMgc3BlY10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3VpZXZlbnRzLWtleS8ja2V5cy1tb2RpZmllcikuIGZvciBhIGxpc3Qgb2YgdmFsaWQgKGNhc2Utc2Vuc2l0aXZlKSBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QuCiAgICAgICAgICovCiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZShrZXk6IE1vZGlmaWVyS2V5KTogYm9vbGVhbjsKICAgICAgICBtZXRhS2V5OiBib29sZWFuOwogICAgICAgIG1vdmVtZW50WDogbnVtYmVyOwogICAgICAgIG1vdmVtZW50WTogbnVtYmVyOwogICAgICAgIHBhZ2VYOiBudW1iZXI7CiAgICAgICAgcGFnZVk6IG51bWJlcjsKICAgICAgICByZWxhdGVkVGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGw7CiAgICAgICAgc2NyZWVuWDogbnVtYmVyOwogICAgICAgIHNjcmVlblk6IG51bWJlcjsKICAgICAgICBzaGlmdEtleTogYm9vbGVhbjsKICAgIH0KCiAgICBpbnRlcmZhY2UgVG91Y2hFdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBVSUV2ZW50PFQsIE5hdGl2ZVRvdWNoRXZlbnQ+IHsKICAgICAgICBhbHRLZXk6IGJvb2xlYW47CiAgICAgICAgY2hhbmdlZFRvdWNoZXM6IFRvdWNoTGlzdDsKICAgICAgICBjdHJsS2V5OiBib29sZWFuOwogICAgICAgIC8qKgogICAgICAgICAqIFNlZSBbRE9NIExldmVsIDMgRXZlbnRzIHNwZWNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi91aWV2ZW50cy1rZXkvI2tleXMtbW9kaWZpZXIpLiBmb3IgYSBsaXN0IG9mIHZhbGlkIChjYXNlLXNlbnNpdGl2ZSkgYXJndW1lbnRzIHRvIHRoaXMgbWV0aG9kLgogICAgICAgICAqLwogICAgICAgIGdldE1vZGlmaWVyU3RhdGUoa2V5OiBNb2RpZmllcktleSk6IGJvb2xlYW47CiAgICAgICAgbWV0YUtleTogYm9vbGVhbjsKICAgICAgICBzaGlmdEtleTogYm9vbGVhbjsKICAgICAgICB0YXJnZXRUb3VjaGVzOiBUb3VjaExpc3Q7CiAgICAgICAgdG91Y2hlczogVG91Y2hMaXN0OwogICAgfQoKICAgIGludGVyZmFjZSBVSUV2ZW50PFQgPSBFbGVtZW50LCBFID0gTmF0aXZlVUlFdmVudD4gZXh0ZW5kcyBTeW50aGV0aWNFdmVudDxULCBFPiB7CiAgICAgICAgZGV0YWlsOiBudW1iZXI7CiAgICAgICAgdmlldzogQWJzdHJhY3RWaWV3OwogICAgfQoKICAgIGludGVyZmFjZSBXaGVlbEV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIE1vdXNlRXZlbnQ8VCwgTmF0aXZlV2hlZWxFdmVudD4gewogICAgICAgIGRlbHRhTW9kZTogbnVtYmVyOwogICAgICAgIGRlbHRhWDogbnVtYmVyOwogICAgICAgIGRlbHRhWTogbnVtYmVyOwogICAgICAgIGRlbHRhWjogbnVtYmVyOwogICAgfQoKICAgIGludGVyZmFjZSBBbmltYXRpb25FdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBTeW50aGV0aWNFdmVudDxULCBOYXRpdmVBbmltYXRpb25FdmVudD4gewogICAgICAgIGFuaW1hdGlvbk5hbWU6IHN0cmluZzsKICAgICAgICBlbGFwc2VkVGltZTogbnVtYmVyOwogICAgICAgIHBzZXVkb0VsZW1lbnQ6IHN0cmluZzsKICAgIH0KCiAgICBpbnRlcmZhY2UgVHJhbnNpdGlvbkV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFQsIE5hdGl2ZVRyYW5zaXRpb25FdmVudD4gewogICAgICAgIGVsYXBzZWRUaW1lOiBudW1iZXI7CiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7CiAgICAgICAgcHNldWRvRWxlbWVudDogc3RyaW5nOwogICAgfQoKICAgIC8vCiAgICAvLyBFdmVudCBIYW5kbGVyIFR5cGVzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgdHlwZSBFdmVudEhhbmRsZXI8RSBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PGFueT4+ID0geyBiaXZhcmlhbmNlSGFjayhldmVudDogRSk6IHZvaWQgfVsiYml2YXJpYW5jZUhhY2siXTsKCiAgICB0eXBlIFJlYWN0RXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxTeW50aGV0aWNFdmVudDxUPj47CgogICAgdHlwZSBDbGlwYm9hcmRFdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPENsaXBib2FyZEV2ZW50PFQ+PjsKICAgIHR5cGUgQ29tcG9zaXRpb25FdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPENvbXBvc2l0aW9uRXZlbnQ8VD4+OwogICAgdHlwZSBEcmFnRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxEcmFnRXZlbnQ8VD4+OwogICAgdHlwZSBGb2N1c0V2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8Rm9jdXNFdmVudDxUPj47CiAgICB0eXBlIEZvcm1FdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPEZvcm1FdmVudDxUPj47CiAgICB0eXBlIENoYW5nZUV2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ8VD4+OwogICAgdHlwZSBLZXlib2FyZEV2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8S2V5Ym9hcmRFdmVudDxUPj47CiAgICB0eXBlIE1vdXNlRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxNb3VzZUV2ZW50PFQ+PjsKICAgIHR5cGUgVG91Y2hFdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPFRvdWNoRXZlbnQ8VD4+OwogICAgdHlwZSBQb2ludGVyRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxQb2ludGVyRXZlbnQ8VD4+OwogICAgdHlwZSBVSUV2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8VUlFdmVudDxUPj47CiAgICB0eXBlIFdoZWVsRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxXaGVlbEV2ZW50PFQ+PjsKICAgIHR5cGUgQW5pbWF0aW9uRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxBbmltYXRpb25FdmVudDxUPj47CiAgICB0eXBlIFRyYW5zaXRpb25FdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPFRyYW5zaXRpb25FdmVudDxUPj47CgogICAgLy8KICAgIC8vIFByb3BzIC8gRE9NIEF0dHJpYnV0ZXMKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBpbnRlcmZhY2UgSFRNTFByb3BzPFQ+IGV4dGVuZHMgQWxsSFRNTEF0dHJpYnV0ZXM8VD4sIENsYXNzQXR0cmlidXRlczxUPiB7CiAgICB9CgogICAgdHlwZSBEZXRhaWxlZEhUTUxQcm9wczxFIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4sIFQ+ID0gQ2xhc3NBdHRyaWJ1dGVzPFQ+ICYgRTsKCiAgICBpbnRlcmZhY2UgU1ZHUHJvcHM8VD4gZXh0ZW5kcyBTVkdBdHRyaWJ1dGVzPFQ+LCBDbGFzc0F0dHJpYnV0ZXM8VD4gewogICAgfQoKICAgIGludGVyZmFjZSBTVkdMaW5lRWxlbWVudEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBTVkdQcm9wczxUPiB7fQogICAgaW50ZXJmYWNlIFNWR1RleHRFbGVtZW50QXR0cmlidXRlczxUPiBleHRlbmRzIFNWR1Byb3BzPFQ+IHt9CgogICAgaW50ZXJmYWNlIERPTUF0dHJpYnV0ZXM8VD4gewogICAgICAgIGNoaWxkcmVuPzogUmVhY3ROb2RlIHwgdW5kZWZpbmVkOwogICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPzogewogICAgICAgICAgICAvLyBTaG91bGQgYmUgSW5uZXJIVE1MWydpbm5lckhUTUwnXS4KICAgICAgICAgICAgLy8gQnV0IHVuZm9ydHVuYXRlbHkgd2UncmUgbWl4aW5nIHJlbmRlcmVyLXNwZWNpZmljIHR5cGUgZGVjbGFyYXRpb25zLgogICAgICAgICAgICBfX2h0bWw6IHN0cmluZyB8IFRydXN0ZWRIVE1MOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIENsaXBib2FyZCBFdmVudHMKICAgICAgICBvbkNvcHk/OiBDbGlwYm9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db3B5Q2FwdHVyZT86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkN1dD86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkN1dENhcHR1cmU/OiBDbGlwYm9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25QYXN0ZT86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBhc3RlQ2FwdHVyZT86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gQ29tcG9zaXRpb24gRXZlbnRzCiAgICAgICAgb25Db21wb3NpdGlvbkVuZD86IENvbXBvc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ29tcG9zaXRpb25FbmRDYXB0dXJlPzogQ29tcG9zaXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db21wb3NpdGlvblN0YXJ0PzogQ29tcG9zaXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db21wb3NpdGlvblN0YXJ0Q2FwdHVyZT86IENvbXBvc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ29tcG9zaXRpb25VcGRhdGU/OiBDb21wb3NpdGlvbkV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNvbXBvc2l0aW9uVXBkYXRlQ2FwdHVyZT86IENvbXBvc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBGb2N1cyBFdmVudHMKICAgICAgICBvbkZvY3VzPzogRm9jdXNFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Gb2N1c0NhcHR1cmU/OiBGb2N1c0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkJsdXI/OiBGb2N1c0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkJsdXJDYXB0dXJlPzogRm9jdXNFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIEZvcm0gRXZlbnRzCiAgICAgICAgb25DaGFuZ2U/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlQ2FwdHVyZT86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25CZWZvcmVJbnB1dD86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25CZWZvcmVJbnB1dENhcHR1cmU/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uSW5wdXQ/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uSW5wdXRDYXB0dXJlPzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblJlc2V0PzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblJlc2V0Q2FwdHVyZT86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TdWJtaXQ/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU3VibWl0Q2FwdHVyZT86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25JbnZhbGlkPzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkludmFsaWRDYXB0dXJlPzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gSW1hZ2UgRXZlbnRzCiAgICAgICAgb25Mb2FkPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Mb2FkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRXJyb3I/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsgLy8gYWxzbyBhIE1lZGlhIEV2ZW50CiAgICAgICAgb25FcnJvckNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsgLy8gYWxzbyBhIE1lZGlhIEV2ZW50CgogICAgICAgIC8vIEtleWJvYXJkIEV2ZW50cwogICAgICAgIG9uS2V5RG93bj86IEtleWJvYXJkRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uS2V5RG93bkNhcHR1cmU/OiBLZXlib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogQGRlcHJlY2F0ZWQgKi8KICAgICAgICBvbktleVByZXNzPzogS2V5Ym9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgb25LZXlQcmVzc0NhcHR1cmU/OiBLZXlib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbktleVVwPzogS2V5Ym9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25LZXlVcENhcHR1cmU/OiBLZXlib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gTWVkaWEgRXZlbnRzCiAgICAgICAgb25BYm9ydD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQWJvcnRDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DYW5QbGF5PzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DYW5QbGF5Q2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2FuUGxheVRocm91Z2g/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNhblBsYXlUaHJvdWdoQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHVyYXRpb25DaGFuZ2U/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkR1cmF0aW9uQ2hhbmdlQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW1wdGllZD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW1wdGllZENhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkVuY3J5cHRlZD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW5jcnlwdGVkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW5kZWQ/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkVuZGVkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9hZGVkRGF0YT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9hZGVkRGF0YUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkxvYWRlZE1ldGFkYXRhPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Mb2FkZWRNZXRhZGF0YUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkxvYWRTdGFydD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9hZFN0YXJ0Q2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUGF1c2U/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBhdXNlQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUGxheT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUGxheUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBsYXlpbmc/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBsYXlpbmdDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qcm9ncmVzcz86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUHJvZ3Jlc3NDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25SYXRlQ2hhbmdlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25SYXRlQ2hhbmdlQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUmVzaXplPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25SZXNpemVDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TZWVrZWQ/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblNlZWtlZENhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblNlZWtpbmc/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblNlZWtpbmdDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TdGFsbGVkPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TdGFsbGVkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU3VzcGVuZD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU3VzcGVuZENhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRpbWVVcGRhdGU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRpbWVVcGRhdGVDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Wb2x1bWVDaGFuZ2U/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblZvbHVtZUNoYW5nZUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbldhaXRpbmc/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbldhaXRpbmdDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIE1vdXNlRXZlbnRzCiAgICAgICAgb25BdXhDbGljaz86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQXV4Q2xpY2tDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DbGljaz86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2xpY2tDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db250ZXh0TWVudT86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ29udGV4dE1lbnVDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Eb3VibGVDbGljaz86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRG91YmxlQ2xpY2tDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25EcmFnPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdFbmQ/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0VuZENhcHR1cmU/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0VudGVyPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdFbnRlckNhcHR1cmU/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0V4aXQ/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0V4aXRDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdMZWF2ZT86IERyYWdFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25EcmFnTGVhdmVDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdPdmVyPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdPdmVyQ2FwdHVyZT86IERyYWdFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25EcmFnU3RhcnQ/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ1N0YXJ0Q2FwdHVyZT86IERyYWdFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ecm9wPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyb3BDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlRG93bj86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VEb3duQ2FwdHVyZT86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VFbnRlcj86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VMZWF2ZT86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VNb3ZlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Nb3VzZU1vdmVDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Nb3VzZU91dD86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VPdXRDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Nb3VzZU92ZXI/OiBNb3VzZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlT3ZlckNhcHR1cmU/OiBNb3VzZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlVXA/OiBNb3VzZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlVXBDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFNlbGVjdGlvbiBFdmVudHMKICAgICAgICBvblNlbGVjdD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU2VsZWN0Q2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBUb3VjaCBFdmVudHMKICAgICAgICBvblRvdWNoQ2FuY2VsPzogVG91Y2hFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ub3VjaENhbmNlbENhcHR1cmU/OiBUb3VjaEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRvdWNoRW5kPzogVG91Y2hFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ub3VjaEVuZENhcHR1cmU/OiBUb3VjaEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRvdWNoTW92ZT86IFRvdWNoRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZT86IFRvdWNoRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVG91Y2hTdGFydD86IFRvdWNoRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVG91Y2hTdGFydENhcHR1cmU/OiBUb3VjaEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gUG9pbnRlciBFdmVudHMKICAgICAgICBvblBvaW50ZXJEb3duPzogUG9pbnRlckV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBvaW50ZXJEb3duQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyTW92ZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyTW92ZUNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlclVwPzogUG9pbnRlckV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBvaW50ZXJVcENhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlckNhbmNlbD86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyQ2FuY2VsQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyRW50ZXI/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlckVudGVyQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyTGVhdmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlckxlYXZlQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyT3Zlcj86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyT3ZlckNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlck91dD86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyT3V0Q2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Hb3RQb2ludGVyQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Hb3RQb2ludGVyQ2FwdHVyZUNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlPzogUG9pbnRlckV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkxvc3RQb2ludGVyQ2FwdHVyZUNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBVSSBFdmVudHMKICAgICAgICBvblNjcm9sbD86IFVJRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU2Nyb2xsQ2FwdHVyZT86IFVJRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBXaGVlbCBFdmVudHMKICAgICAgICBvbldoZWVsPzogV2hlZWxFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25XaGVlbENhcHR1cmU/OiBXaGVlbEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gQW5pbWF0aW9uIEV2ZW50cwogICAgICAgIG9uQW5pbWF0aW9uU3RhcnQ/OiBBbmltYXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25BbmltYXRpb25TdGFydENhcHR1cmU/OiBBbmltYXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25BbmltYXRpb25FbmQ/OiBBbmltYXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25BbmltYXRpb25FbmRDYXB0dXJlPzogQW5pbWF0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQW5pbWF0aW9uSXRlcmF0aW9uPzogQW5pbWF0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQW5pbWF0aW9uSXRlcmF0aW9uQ2FwdHVyZT86IEFuaW1hdGlvbkV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gVHJhbnNpdGlvbiBFdmVudHMKICAgICAgICBvblRyYW5zaXRpb25FbmQ/OiBUcmFuc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVHJhbnNpdGlvbkVuZENhcHR1cmU/OiBUcmFuc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGV4cG9ydCBpbnRlcmZhY2UgQ1NTUHJvcGVydGllcyBleHRlbmRzIENTUy5Qcm9wZXJ0aWVzPHN0cmluZyB8IG51bWJlcj4gewogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBpbmRleCBzaWduYXR1cmUgd2FzIHJlbW92ZWQgdG8gZW5hYmxlIGNsb3NlZCB0eXBpbmcgZm9yIHN0eWxlCiAgICAgICAgICogdXNpbmcgQ1NTVHlwZS4gWW91J3JlIGFibGUgdG8gdXNlIHR5cGUgYXNzZXJ0aW9uIG9yIG1vZHVsZSBhdWdtZW50YXRpb24KICAgICAgICAgKiB0byBhZGQgcHJvcGVydGllcyBvciBhbiBpbmRleCBzaWduYXR1cmUgb2YgeW91ciBvd24uCiAgICAgICAgICoKICAgICAgICAgKiBGb3IgZXhhbXBsZXMgYW5kIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0OgogICAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mcmVuaWMvY3NzdHlwZSN3aGF0LXNob3VsZC1pLWRvLXdoZW4taS1nZXQtdHlwZS1lcnJvcnMKICAgICAgICAgKi8KICAgIH0KCiAgICAvLyBBbGwgdGhlIFdBSS1BUklBIDEuMSBhdHRyaWJ1dGVzIGZyb20gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8KICAgIGludGVyZmFjZSBBcmlhQXR0cmlidXRlcyB7CiAgICAgICAgLyoqIElkZW50aWZpZXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCB3aGVuIERPTSBmb2N1cyBpcyBvbiBhIGNvbXBvc2l0ZSB3aWRnZXQsIHRleHRib3gsIGdyb3VwLCBvciBhcHBsaWNhdGlvbi4gKi8KICAgICAgICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgYXNzaXN0aXZlIHRlY2hub2xvZ2llcyB3aWxsIHByZXNlbnQgYWxsLCBvciBvbmx5IHBhcnRzIG9mLCB0aGUgY2hhbmdlZCByZWdpb24gYmFzZWQgb24gdGhlIGNoYW5nZSBub3RpZmljYXRpb25zIGRlZmluZWQgYnkgdGhlIGFyaWEtcmVsZXZhbnQgYXR0cmlidXRlLiAqLwogICAgICAgICdhcmlhLWF0b21pYyc/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIGlucHV0dGluZyB0ZXh0IGNvdWxkIHRyaWdnZXIgZGlzcGxheSBvZiBvbmUgb3IgbW9yZSBwcmVkaWN0aW9ucyBvZiB0aGUgdXNlcidzIGludGVuZGVkIHZhbHVlIGZvciBhbiBpbnB1dCBhbmQgc3BlY2lmaWVzIGhvdyBwcmVkaWN0aW9ucyB3b3VsZCBiZQogICAgICAgICAqIHByZXNlbnRlZCBpZiB0aGV5IGFyZSBtYWRlLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc/OiAnbm9uZScgfCAnaW5saW5lJyB8ICdsaXN0JyB8ICdib3RoJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIGFuIGVsZW1lbnQgaXMgYmVpbmcgbW9kaWZpZWQgYW5kIHRoYXQgYXNzaXN0aXZlIHRlY2hub2xvZ2llcyBNQVkgd2FudCB0byB3YWl0IHVudGlsIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjb21wbGV0ZSBiZWZvcmUgZXhwb3NpbmcgdGhlbSB0byB0aGUgdXNlci4gKi8KICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgc3RyaW5nIHZhbHVlIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQsIHdoaWNoIGlzIGludGVuZGVkIHRvIGJlIGNvbnZlcnRlZCBpbnRvIEJyYWlsbGUuCiAgICAgICAgICogQHNlZSBhcmlhLWxhYmVsLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWJyYWlsbGVsYWJlbCc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIGh1bWFuLXJlYWRhYmxlLCBhdXRob3ItbG9jYWxpemVkIGFiYnJldmlhdGVkIGRlc2NyaXB0aW9uIGZvciB0aGUgcm9sZSBvZiBhbiBlbGVtZW50LCB3aGljaCBpcyBpbnRlbmRlZCB0byBiZSBjb252ZXJ0ZWQgaW50byBCcmFpbGxlLgogICAgICAgICAqIEBzZWUgYXJpYS1yb2xlZGVzY3JpcHRpb24uCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtYnJhaWxsZXJvbGVkZXNjcmlwdGlvbic/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgJ2FyaWEtYnVzeSc/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIEluZGljYXRlcyB0aGUgY3VycmVudCAiY2hlY2tlZCIgc3RhdGUgb2YgY2hlY2tib3hlcywgcmFkaW8gYnV0dG9ucywgYW5kIG90aGVyIHdpZGdldHMuCiAgICAgICAgICogQHNlZSBhcmlhLXByZXNzZWQgQHNlZSBhcmlhLXNlbGVjdGVkLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWNoZWNrZWQnPzogYm9vbGVhbiB8ICdmYWxzZScgfCAnbWl4ZWQnIHwgJ3RydWUnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIERlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1jb2xpbmRleC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb2xjb3VudCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhbiBlbGVtZW50J3MgY29sdW1uIGluZGV4IG9yIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1jb2xjb3VudCBAc2VlIGFyaWEtY29sc3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb2xpbmRleCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIGh1bWFuIHJlYWRhYmxlIHRleHQgYWx0ZXJuYXRpdmUgb2YgYXJpYS1jb2xpbmRleC4KICAgICAgICAgKiBAc2VlIGFyaWEtcm93aW5kZXh0ZXh0LgogICAgICAgICAqLwogICAgICAgICdhcmlhLWNvbGluZGV4dGV4dCc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgc3Bhbm5lZCBieSBhIGNlbGwgb3IgZ3JpZGNlbGwgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1jb2xpbmRleCBAc2VlIGFyaWEtcm93c3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb2xzcGFuJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJZGVudGlmaWVzIHRoZSBlbGVtZW50IChvciBlbGVtZW50cykgd2hvc2UgY29udGVudHMgb3IgcHJlc2VuY2UgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgICAgICAgKiBAc2VlIGFyaWEtb3ducy4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb250cm9scyc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB0aGUgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgaXRlbSB3aXRoaW4gYSBjb250YWluZXIgb3Igc2V0IG9mIHJlbGF0ZWQgZWxlbWVudHMuICovCiAgICAgICAgJ2FyaWEtY3VycmVudCc/OiBib29sZWFuIHwgJ2ZhbHNlJyB8ICd0cnVlJyB8ICdwYWdlJyB8ICdzdGVwJyB8ICdsb2NhdGlvbicgfCAnZGF0ZScgfCAndGltZScgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSWRlbnRpZmllcyB0aGUgZWxlbWVudCAob3IgZWxlbWVudHMpIHRoYXQgZGVzY3JpYmVzIHRoZSBvYmplY3QuCiAgICAgICAgICogQHNlZSBhcmlhLWxhYmVsbGVkYnkKICAgICAgICAgKi8KICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIHN0cmluZyB2YWx1ZSB0aGF0IGRlc2NyaWJlcyBvciBhbm5vdGF0ZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgICAgICAgKiBAc2VlIHJlbGF0ZWQgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1kZXNjcmlwdGlvbic/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSWRlbnRpZmllcyB0aGUgZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgZGV0YWlsZWQsIGV4dGVuZGVkIGRlc2NyaXB0aW9uIGZvciB0aGUgb2JqZWN0LgogICAgICAgICAqIEBzZWUgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1kZXRhaWxzJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBwZXJjZWl2YWJsZSBidXQgZGlzYWJsZWQsIHNvIGl0IGlzIG5vdCBlZGl0YWJsZSBvciBvdGhlcndpc2Ugb3BlcmFibGUuCiAgICAgICAgICogQHNlZSBhcmlhLWhpZGRlbiBAc2VlIGFyaWEtcmVhZG9ubHkuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtZGlzYWJsZWQnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgd2hhdCBmdW5jdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCB3aGVuIGEgZHJhZ2dlZCBvYmplY3QgaXMgcmVsZWFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0LgogICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFSSUEgMS4xCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtZHJvcGVmZmVjdCc/OiAnbm9uZScgfCAnY29weScgfCAnZXhlY3V0ZScgfCAnbGluaycgfCAnbW92ZScgfCAncG9wdXAnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIElkZW50aWZpZXMgdGhlIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhbiBlcnJvciBtZXNzYWdlIGZvciB0aGUgb2JqZWN0LgogICAgICAgICAqIEBzZWUgYXJpYS1pbnZhbGlkIEBzZWUgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1lcnJvcm1lc3NhZ2UnPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZWxlbWVudCwgb3IgYW5vdGhlciBncm91cGluZyBlbGVtZW50IGl0IGNvbnRyb2xzLCBpcyBjdXJyZW50bHkgZXhwYW5kZWQgb3IgY29sbGFwc2VkLiAqLwogICAgICAgICdhcmlhLWV4cGFuZGVkJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSWRlbnRpZmllcyB0aGUgbmV4dCBlbGVtZW50IChvciBlbGVtZW50cykgaW4gYW4gYWx0ZXJuYXRlIHJlYWRpbmcgb3JkZXIgb2YgY29udGVudCB3aGljaCwgYXQgdGhlIHVzZXIncyBkaXNjcmV0aW9uLAogICAgICAgICAqIGFsbG93cyBhc3Npc3RpdmUgdGVjaG5vbG9neSB0byBvdmVycmlkZSB0aGUgZ2VuZXJhbCBkZWZhdWx0IG9mIHJlYWRpbmcgaW4gZG9jdW1lbnQgc291cmNlIG9yZGVyLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWZsb3d0byc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSW5kaWNhdGVzIGFuIGVsZW1lbnQncyAiZ3JhYmJlZCIgc3RhdGUgaW4gYSBkcmFnLWFuZC1kcm9wIG9wZXJhdGlvbi4KICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUklBIDEuMQogICAgICAgICAqLwogICAgICAgICdhcmlhLWdyYWJiZWQnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHRoZSBhdmFpbGFiaWxpdHkgYW5kIHR5cGUgb2YgaW50ZXJhY3RpdmUgcG9wdXAgZWxlbWVudCwgc3VjaCBhcyBtZW51IG9yIGRpYWxvZywgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFuIGVsZW1lbnQuICovCiAgICAgICAgJ2FyaWEtaGFzcG9wdXAnPzogYm9vbGVhbiB8ICdmYWxzZScgfCAndHJ1ZScgfCAnbWVudScgfCAnbGlzdGJveCcgfCAndHJlZScgfCAnZ3JpZCcgfCAnZGlhbG9nJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZWxlbWVudCBpcyBleHBvc2VkIHRvIGFuIGFjY2Vzc2liaWxpdHkgQVBJLgogICAgICAgICAqIEBzZWUgYXJpYS1kaXNhYmxlZC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1oaWRkZW4nPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhlIGVudGVyZWQgdmFsdWUgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KICAgICAgICAgKiBAc2VlIGFyaWEtZXJyb3JtZXNzYWdlLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWludmFsaWQnPzogYm9vbGVhbiB8ICdmYWxzZScgfCAndHJ1ZScgfCAnZ3JhbW1hcicgfCAnc3BlbGxpbmcnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBJbmRpY2F0ZXMga2V5Ym9hcmQgc2hvcnRjdXRzIHRoYXQgYW4gYXV0aG9yIGhhcyBpbXBsZW1lbnRlZCB0byBhY3RpdmF0ZSBvciBnaXZlIGZvY3VzIHRvIGFuIGVsZW1lbnQuICovCiAgICAgICAgJ2FyaWEta2V5c2hvcnRjdXRzJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgc3RyaW5nIHZhbHVlIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQuCiAgICAgICAgICogQHNlZSBhcmlhLWxhYmVsbGVkYnkuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtbGFiZWwnPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIElkZW50aWZpZXMgdGhlIGVsZW1lbnQgKG9yIGVsZW1lbnRzKSB0aGF0IGxhYmVscyB0aGUgY3VycmVudCBlbGVtZW50LgogICAgICAgICAqIEBzZWUgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5Jz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogRGVmaW5lcyB0aGUgaGllcmFyY2hpY2FsIGxldmVsIG9mIGFuIGVsZW1lbnQgd2l0aGluIGEgc3RydWN0dXJlLiAqLwogICAgICAgICdhcmlhLWxldmVsJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHRoYXQgYW4gZWxlbWVudCB3aWxsIGJlIHVwZGF0ZWQsIGFuZCBkZXNjcmliZXMgdGhlIHR5cGVzIG9mIHVwZGF0ZXMgdGhlIHVzZXIgYWdlbnRzLCBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBhbmQgdXNlciBjYW4gZXhwZWN0IGZyb20gdGhlIGxpdmUgcmVnaW9uLiAqLwogICAgICAgICdhcmlhLWxpdmUnPzogJ29mZicgfCAnYXNzZXJ0aXZlJyB8ICdwb2xpdGUnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBJbmRpY2F0ZXMgd2hldGhlciBhbiBlbGVtZW50IGlzIG1vZGFsIHdoZW4gZGlzcGxheWVkLiAqLwogICAgICAgICdhcmlhLW1vZGFsJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB3aGV0aGVyIGEgdGV4dCBib3ggYWNjZXB0cyBtdWx0aXBsZSBsaW5lcyBvZiBpbnB1dCBvciBvbmx5IGEgc2luZ2xlIGxpbmUuICovCiAgICAgICAgJ2FyaWEtbXVsdGlsaW5lJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB0aGF0IHRoZSB1c2VyIG1heSBzZWxlY3QgbW9yZSB0aGFuIG9uZSBpdGVtIGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0YWJsZSBkZXNjZW5kYW50cy4gKi8KICAgICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVsZW1lbnQncyBvcmllbnRhdGlvbiBpcyBob3Jpem9udGFsLCB2ZXJ0aWNhbCwgb3IgdW5rbm93bi9hbWJpZ3VvdXMuICovCiAgICAgICAgJ2FyaWEtb3JpZW50YXRpb24nPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJZGVudGlmaWVzIGFuIGVsZW1lbnQgKG9yIGVsZW1lbnRzKSBpbiBvcmRlciB0byBkZWZpbmUgYSB2aXN1YWwsIGZ1bmN0aW9uYWwsIG9yIGNvbnRleHR1YWwgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcAogICAgICAgICAqIGJldHdlZW4gRE9NIGVsZW1lbnRzIHdoZXJlIHRoZSBET00gaGllcmFyY2h5IGNhbm5vdCBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgcmVsYXRpb25zaGlwLgogICAgICAgICAqIEBzZWUgYXJpYS1jb250cm9scy4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1vd25zJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgc2hvcnQgaGludCAoYSB3b3JkIG9yIHNob3J0IHBocmFzZSkgaW50ZW5kZWQgdG8gYWlkIHRoZSB1c2VyIHdpdGggZGF0YSBlbnRyeSB3aGVuIHRoZSBjb250cm9sIGhhcyBubyB2YWx1ZS4KICAgICAgICAgKiBBIGhpbnQgY291bGQgYmUgYSBzYW1wbGUgdmFsdWUgb3IgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAqLwogICAgICAgICdhcmlhLXBsYWNlaG9sZGVyJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGFuIGVsZW1lbnQncyBudW1iZXIgb3IgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIGxpc3RpdGVtcyBvciB0cmVlaXRlbXMuIE5vdCByZXF1aXJlZCBpZiBhbGwgZWxlbWVudHMgaW4gdGhlIHNldCBhcmUgcHJlc2VudCBpbiB0aGUgRE9NLgogICAgICAgICAqIEBzZWUgYXJpYS1zZXRzaXplLgogICAgICAgICAqLwogICAgICAgICdhcmlhLXBvc2luc2V0Jz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgInByZXNzZWQiIHN0YXRlIG9mIHRvZ2dsZSBidXR0b25zLgogICAgICAgICAqIEBzZWUgYXJpYS1jaGVja2VkIEBzZWUgYXJpYS1zZWxlY3RlZC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1wcmVzc2VkJz86IGJvb2xlYW4gfCAnZmFsc2UnIHwgJ21peGVkJyB8ICd0cnVlJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBub3QgZWRpdGFibGUsIGJ1dCBpcyBvdGhlcndpc2Ugb3BlcmFibGUuCiAgICAgICAgICogQHNlZSBhcmlhLWRpc2FibGVkLgogICAgICAgICAqLwogICAgICAgICdhcmlhLXJlYWRvbmx5Jz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSW5kaWNhdGVzIHdoYXQgbm90aWZpY2F0aW9ucyB0aGUgdXNlciBhZ2VudCB3aWxsIHRyaWdnZXIgd2hlbiB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIHdpdGhpbiBhIGxpdmUgcmVnaW9uIGlzIG1vZGlmaWVkLgogICAgICAgICAqIEBzZWUgYXJpYS1hdG9taWMuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtcmVsZXZhbnQnPzogJ2FkZGl0aW9ucycgfCAnYWRkaXRpb25zIHJlbW92YWxzJyB8ICdhZGRpdGlvbnMgdGV4dCcgfCAnYWxsJyB8ICdyZW1vdmFscycgfCAncmVtb3ZhbHMgYWRkaXRpb25zJyB8ICdyZW1vdmFscyB0ZXh0JyB8ICd0ZXh0JyB8ICd0ZXh0IGFkZGl0aW9ucycgfCAndGV4dCByZW1vdmFscycgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB0aGF0IHVzZXIgaW5wdXQgaXMgcmVxdWlyZWQgb24gdGhlIGVsZW1lbnQgYmVmb3JlIGEgZm9ybSBtYXkgYmUgc3VibWl0dGVkLiAqLwogICAgICAgICdhcmlhLXJlcXVpcmVkJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIERlZmluZXMgYSBodW1hbi1yZWFkYWJsZSwgYXV0aG9yLWxvY2FsaXplZCBkZXNjcmlwdGlvbiBmb3IgdGhlIHJvbGUgb2YgYW4gZWxlbWVudC4gKi8KICAgICAgICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIERlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1yb3dpbmRleC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1yb3djb3VudCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhbiBlbGVtZW50J3Mgcm93IGluZGV4IG9yIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3Mgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1yb3djb3VudCBAc2VlIGFyaWEtcm93c3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1yb3dpbmRleCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIGh1bWFuIHJlYWRhYmxlIHRleHQgYWx0ZXJuYXRpdmUgb2YgYXJpYS1yb3dpbmRleC4KICAgICAgICAgKiBAc2VlIGFyaWEtY29saW5kZXh0ZXh0LgogICAgICAgICAqLwogICAgICAgICdhcmlhLXJvd2luZGV4dGV4dCc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3Mgc3Bhbm5lZCBieSBhIGNlbGwgb3IgZ3JpZGNlbGwgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1yb3dpbmRleCBAc2VlIGFyaWEtY29sc3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1yb3dzcGFuJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgInNlbGVjdGVkIiBzdGF0ZSBvZiB2YXJpb3VzIHdpZGdldHMuCiAgICAgICAgICogQHNlZSBhcmlhLWNoZWNrZWQgQHNlZSBhcmlhLXByZXNzZWQuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtc2VsZWN0ZWQnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGN1cnJlbnQgc2V0IG9mIGxpc3RpdGVtcyBvciB0cmVlaXRlbXMuIE5vdCByZXF1aXJlZCBpZiBhbGwgZWxlbWVudHMgaW4gdGhlIHNldCBhcmUgcHJlc2VudCBpbiB0aGUgRE9NLgogICAgICAgICAqIEBzZWUgYXJpYS1wb3NpbnNldC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1zZXRzaXplJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIGlmIGl0ZW1zIGluIGEgdGFibGUgb3IgZ3JpZCBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyLiAqLwogICAgICAgICdhcmlhLXNvcnQnPzogJ25vbmUnIHwgJ2FzY2VuZGluZycgfCAnZGVzY2VuZGluZycgfCAnb3RoZXInIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBEZWZpbmVzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgZm9yIGEgcmFuZ2Ugd2lkZ2V0LiAqLwogICAgICAgICdhcmlhLXZhbHVlbWF4Jz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogRGVmaW5lcyB0aGUgbWluaW11bSBhbGxvd2VkIHZhbHVlIGZvciBhIHJhbmdlIHdpZGdldC4gKi8KICAgICAgICAnYXJpYS12YWx1ZW1pbic/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyB0aGUgY3VycmVudCB2YWx1ZSBmb3IgYSByYW5nZSB3aWRnZXQuCiAgICAgICAgICogQHNlZSBhcmlhLXZhbHVldGV4dC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS12YWx1ZW5vdyc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIERlZmluZXMgdGhlIGh1bWFuIHJlYWRhYmxlIHRleHQgYWx0ZXJuYXRpdmUgb2YgYXJpYS12YWx1ZW5vdyBmb3IgYSByYW5nZSB3aWRnZXQuICovCiAgICAgICAgJ2FyaWEtdmFsdWV0ZXh0Jz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvLyBBbGwgdGhlIFdBSS1BUklBIDEuMSByb2xlIGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNyb2xlX2RlZmluaXRpb25zCiAgICB0eXBlIEFyaWFSb2xlID0KICAgICAgICB8ICdhbGVydCcKICAgICAgICB8ICdhbGVydGRpYWxvZycKICAgICAgICB8ICdhcHBsaWNhdGlvbicKICAgICAgICB8ICdhcnRpY2xlJwogICAgICAgIHwgJ2Jhbm5lcicKICAgICAgICB8ICdidXR0b24nCiAgICAgICAgfCAnY2VsbCcKICAgICAgICB8ICdjaGVja2JveCcKICAgICAgICB8ICdjb2x1bW5oZWFkZXInCiAgICAgICAgfCAnY29tYm9ib3gnCiAgICAgICAgfCAnY29tcGxlbWVudGFyeScKICAgICAgICB8ICdjb250ZW50aW5mbycKICAgICAgICB8ICdkZWZpbml0aW9uJwogICAgICAgIHwgJ2RpYWxvZycKICAgICAgICB8ICdkaXJlY3RvcnknCiAgICAgICAgfCAnZG9jdW1lbnQnCiAgICAgICAgfCAnZmVlZCcKICAgICAgICB8ICdmaWd1cmUnCiAgICAgICAgfCAnZm9ybScKICAgICAgICB8ICdncmlkJwogICAgICAgIHwgJ2dyaWRjZWxsJwogICAgICAgIHwgJ2dyb3VwJwogICAgICAgIHwgJ2hlYWRpbmcnCiAgICAgICAgfCAnaW1nJwogICAgICAgIHwgJ2xpbmsnCiAgICAgICAgfCAnbGlzdCcKICAgICAgICB8ICdsaXN0Ym94JwogICAgICAgIHwgJ2xpc3RpdGVtJwogICAgICAgIHwgJ2xvZycKICAgICAgICB8ICdtYWluJwogICAgICAgIHwgJ21hcnF1ZWUnCiAgICAgICAgfCAnbWF0aCcKICAgICAgICB8ICdtZW51JwogICAgICAgIHwgJ21lbnViYXInCiAgICAgICAgfCAnbWVudWl0ZW0nCiAgICAgICAgfCAnbWVudWl0ZW1jaGVja2JveCcKICAgICAgICB8ICdtZW51aXRlbXJhZGlvJwogICAgICAgIHwgJ25hdmlnYXRpb24nCiAgICAgICAgfCAnbm9uZScKICAgICAgICB8ICdub3RlJwogICAgICAgIHwgJ29wdGlvbicKICAgICAgICB8ICdwcmVzZW50YXRpb24nCiAgICAgICAgfCAncHJvZ3Jlc3NiYXInCiAgICAgICAgfCAncmFkaW8nCiAgICAgICAgfCAncmFkaW9ncm91cCcKICAgICAgICB8ICdyZWdpb24nCiAgICAgICAgfCAncm93JwogICAgICAgIHwgJ3Jvd2dyb3VwJwogICAgICAgIHwgJ3Jvd2hlYWRlcicKICAgICAgICB8ICdzY3JvbGxiYXInCiAgICAgICAgfCAnc2VhcmNoJwogICAgICAgIHwgJ3NlYXJjaGJveCcKICAgICAgICB8ICdzZXBhcmF0b3InCiAgICAgICAgfCAnc2xpZGVyJwogICAgICAgIHwgJ3NwaW5idXR0b24nCiAgICAgICAgfCAnc3RhdHVzJwogICAgICAgIHwgJ3N3aXRjaCcKICAgICAgICB8ICd0YWInCiAgICAgICAgfCAndGFibGUnCiAgICAgICAgfCAndGFibGlzdCcKICAgICAgICB8ICd0YWJwYW5lbCcKICAgICAgICB8ICd0ZXJtJwogICAgICAgIHwgJ3RleHRib3gnCiAgICAgICAgfCAndGltZXInCiAgICAgICAgfCAndG9vbGJhcicKICAgICAgICB8ICd0b29sdGlwJwogICAgICAgIHwgJ3RyZWUnCiAgICAgICAgfCAndHJlZWdyaWQnCiAgICAgICAgfCAndHJlZWl0ZW0nCiAgICAgICAgfCAoc3RyaW5nICYge30pOwoKICAgIGludGVyZmFjZSBIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEFyaWFBdHRyaWJ1dGVzLCBET01BdHRyaWJ1dGVzPFQ+IHsKICAgICAgICAvLyBSZWFjdC1zcGVjaWZpYyBBdHRyaWJ1dGVzCiAgICAgICAgZGVmYXVsdENoZWNrZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlciB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZDsKICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFN0YW5kYXJkIEhUTUwgQXR0cmlidXRlcwogICAgICAgIGFjY2Vzc0tleT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvRm9jdXM/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50RWRpdGFibGU/OiBCb29sZWFuaXNoIHwgImluaGVyaXQiIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHRNZW51Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRpcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkcmFnZ2FibGU/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIGhpZGRlbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgaWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGFuZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBub25jZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzbG90Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwZWxsQ2hlY2s/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0YWJJbmRleD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0cmFuc2xhdGU/OiAneWVzJyB8ICdubycgfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFVua25vd24KICAgICAgICByYWRpb0dyb3VwPzogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLyA8Y29tbWFuZD4sIDxtZW51aXRlbT4KCiAgICAgICAgLy8gV0FJLUFSSUEKICAgICAgICByb2xlPzogQXJpYVJvbGUgfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFJERmEgQXR0cmlidXRlcwogICAgICAgIGFib3V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRlbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGF0YXR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW5saXN0PzogYW55OwogICAgICAgIHByZWZpeD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcm9wZXJ0eT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVzb3VyY2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmV2Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGVvZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2b2NhYj86IHN0cmluZyB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gTm9uLXN0YW5kYXJkIEF0dHJpYnV0ZXMKICAgICAgICBhdXRvQ2FwaXRhbGl6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvQ29ycmVjdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvU2F2ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpdGVtUHJvcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpdGVtU2NvcGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGl0ZW1UeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGl0ZW1JRD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpdGVtUmVmPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlc3VsdHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc2VjdXJpdHk/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5zZWxlY3RhYmxlPzogJ29uJyB8ICdvZmYnIHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBMaXZpbmcgU3RhbmRhcmQKICAgICAgICAvKioKICAgICAgICAgKiBIaW50cyBhdCB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgbWlnaHQgYmUgZW50ZXJlZCBieSB0aGUgdXNlciB3aGlsZSBlZGl0aW5nIHRoZSBlbGVtZW50IG9yIGl0cyBjb250ZW50cwogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNpbnB1dC1tb2RhbGl0aWVzOi10aGUtaW5wdXRtb2RlLWF0dHJpYnV0ZQogICAgICAgICAqLwogICAgICAgIGlucHV0TW9kZT86ICdub25lJyB8ICd0ZXh0JyB8ICd0ZWwnIHwgJ3VybCcgfCAnZW1haWwnIHwgJ251bWVyaWMnIHwgJ2RlY2ltYWwnIHwgJ3NlYXJjaCcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogU3BlY2lmeSB0aGF0IGEgc3RhbmRhcmQgSFRNTCBlbGVtZW50IHNob3VsZCBiZWhhdmUgbGlrZSBhIGRlZmluZWQgY3VzdG9tIGJ1aWx0LWluIGVsZW1lbnQKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2F0dHItaXMKICAgICAgICAgKi8KICAgICAgICBpcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvKioKICAgICAqIEZvciBpbnRlcm5hbCB1c2FnZSBvbmx5LgogICAgICogRGlmZmVyZW50IHJlbGVhc2UgY2hhbm5lbHMgZGVjbGFyZSBhZGRpdGlvbmFsIHR5cGVzIG9mIFJlYWN0Tm9kZSB0aGlzIHBhcnRpY3VsYXIgcmVsZWFzZSBjaGFubmVsIGFjY2VwdHMuCiAgICAgKiBBcHAgb3IgbGlicmFyeSB0eXBlcyBzaG91bGQgbmV2ZXIgYXVnbWVudCB0aGlzIGludGVyZmFjZS4KICAgICAqLwogICAgaW50ZXJmYWNlIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OUyB7fQoKICAgIGludGVyZmFjZSBBbGxIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICAvLyBTdGFuZGFyZCBIVE1MIEF0dHJpYnV0ZXMKICAgICAgICBhY2NlcHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYWNjZXB0Q2hhcnNldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhY3Rpb24/OgogICAgICAgICAgICB8IHN0cmluZwogICAgICAgICAgICB8IHVuZGVmaW5lZAogICAgICAgICAgICB8IERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OU1trZXlvZiBET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEX0VYUEVSSU1FTlRBTF9GT1JNX0FDVElPTlNdOwogICAgICAgIGFsbG93RnVsbFNjcmVlbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWxsb3dUcmFuc3BhcmVuY3k/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGFsdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhc3luYz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYXV0b0NvbXBsZXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGF1dG9QbGF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBjYXB0dXJlPzogYm9vbGVhbiB8ICd1c2VyJyB8ICdlbnZpcm9ubWVudCcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFBhZGRpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2hhclNldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjaGFsbGVuZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2hlY2tlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY2l0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjbGFzc0lEPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sU3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBjb250cm9scz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY29vcmRzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNyb3NzT3JpZ2luPzogImFub255bW91cyIgfCAidXNlLWNyZWRlbnRpYWxzIiB8ICIiIHwgdW5kZWZpbmVkOwogICAgICAgIGRhdGE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGF0ZVRpbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkb3dubG9hZD86IGFueTsKICAgICAgICBlbmNUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybUFjdGlvbj86CiAgICAgICAgICAgIHwgc3RyaW5nCiAgICAgICAgICAgIHwgdW5kZWZpbmVkCiAgICAgICAgICAgIHwgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TW2tleW9mIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OU107CiAgICAgICAgZm9ybUVuY1R5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybU1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtTm9WYWxpZGF0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybVRhcmdldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmcmFtZUJvcmRlcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWFkZXJzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoaWdoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHJlZkxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHRtbEZvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBodHRwRXF1aXY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW50ZWdyaXR5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtleVBhcmFtcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrZXlUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtpbmQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlzdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsb29wPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsb3c/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFuaWZlc3Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFyZ2luSGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1hcmdpbldpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1heD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXhMZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWFHcm91cD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtZXRob2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkxlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtdWx0aXBsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbXV0ZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbm9WYWxpZGF0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgb3Blbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgb3B0aW11bT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYXlzSW5saW5lPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwb3N0ZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcHJlbG9hZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWFkT25seT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJldmVyc2VkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByb3dzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHJvd1NwYW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc2FuZGJveD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNjcm9sbGluZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzZWFtbGVzcz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc2VsZWN0ZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNoYXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNpemU/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc2l6ZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjRG9jPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyY0xhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjU2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0YXJ0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHN0ZXA/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3VtbWFyeT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB1c2VNYXA/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd21vZGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd3JhcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEhUTUxBdHRyaWJ1dGVSZWZlcnJlclBvbGljeSA9CiAgICAgICAgfCAnJwogICAgICAgIHwgJ25vLXJlZmVycmVyJwogICAgICAgIHwgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJwogICAgICAgIHwgJ29yaWdpbicKICAgICAgICB8ICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nCiAgICAgICAgfCAnc2FtZS1vcmlnaW4nCiAgICAgICAgfCAnc3RyaWN0LW9yaWdpbicKICAgICAgICB8ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJwogICAgICAgIHwgJ3Vuc2FmZS11cmwnOwoKICAgIHR5cGUgSFRNTEF0dHJpYnV0ZUFuY2hvclRhcmdldCA9CiAgICAgICAgfCAnX3NlbGYnCiAgICAgICAgfCAnX2JsYW5rJwogICAgICAgIHwgJ19wYXJlbnQnCiAgICAgICAgfCAnX3RvcCcKICAgICAgICB8IChzdHJpbmcgJiB7fSk7CgogICAgaW50ZXJmYWNlIEFuY2hvckhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGRvd25sb2FkPzogYW55OwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHJlZkxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGluZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBIVE1MQXR0cmlidXRlQW5jaG9yVGFyZ2V0IHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmZXJyZXJQb2xpY3k/OiBIVE1MQXR0cmlidXRlUmVmZXJyZXJQb2xpY3kgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEF1ZGlvSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBNZWRpYUhUTUxBdHRyaWJ1dGVzPFQ+IHt9CgogICAgaW50ZXJmYWNlIEFyZWFIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29vcmRzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRvd25sb2FkPzogYW55OwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHJlZkxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmZXJyZXJQb2xpY3k/OiBIVE1MQXR0cmlidXRlUmVmZXJyZXJQb2xpY3kgfCB1bmRlZmluZWQ7CiAgICAgICAgc2hhcGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBCYXNlSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgaHJlZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEJsb2NrcXVvdGVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjaXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBCdXR0b25IVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtQWN0aW9uPzoKICAgICAgICAgICAgfCBzdHJpbmcKICAgICAgICAgICAgfCBET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEX0VYUEVSSU1FTlRBTF9GT1JNX0FDVElPTlNba2V5b2YgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TXQogICAgICAgICAgICB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtRW5jVHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtTWV0aG9kPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm1Ob1ZhbGlkYXRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtVGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86ICdzdWJtaXQnIHwgJ3Jlc2V0JyB8ICdidXR0b24nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhbHVlPzogc3RyaW5nIHwgUmVhZG9ubHlBcnJheTxzdHJpbmc+IHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBDYW52YXNIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIHNwYW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbGdyb3VwSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgc3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRGF0YUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIHZhbHVlPzogc3RyaW5nIHwgUmVhZG9ubHlBcnJheTxzdHJpbmc+IHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBEZXRhaWxzSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgb3Blbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ub2dnbGU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRGVsSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgY2l0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkYXRlVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRGlhbG9nSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgb25DYW5jZWw/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8ICB1bmRlZmluZWQ7CiAgICAgICAgb25DbG9zZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgIHVuZGVmaW5lZDsKICAgICAgICBvcGVuPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRW1iZWRIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEZpZWxkc2V0SFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRm9ybUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGFjY2VwdENoYXJzZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYWN0aW9uPzoKICAgICAgICAgICAgfCBzdHJpbmcKICAgICAgICAgICAgfCB1bmRlZmluZWQKICAgICAgICAgICAgfCBET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEX0VYUEVSSU1FTlRBTF9GT1JNX0FDVElPTlNba2V5b2YgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TXTsKICAgICAgICBhdXRvQ29tcGxldGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW5jVHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtZXRob2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBub1ZhbGlkYXRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEh0bWxIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBtYW5pZmVzdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgSWZyYW1lSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgYWxsb3c/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYWxsb3dGdWxsU2NyZWVuPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhbGxvd1RyYW5zcGFyZW5jeT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgZnJhbWVCb3JkZXI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxvYWRpbmc/OiAiZWFnZXIiIHwgImxhenkiIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBAZGVwcmVjYXRlZCAqLwogICAgICAgIG1hcmdpbkhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogQGRlcHJlY2F0ZWQgKi8KICAgICAgICBtYXJnaW5XaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlZmVycmVyUG9saWN5PzogSFRNTEF0dHJpYnV0ZVJlZmVycmVyUG9saWN5IHwgdW5kZWZpbmVkOwogICAgICAgIHNhbmRib3g/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgc2Nyb2xsaW5nPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNlYW1sZXNzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjRG9jPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBJbWdIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY3Jvc3NPcmlnaW4/OiAiYW5vbnltb3VzIiB8ICJ1c2UtY3JlZGVudGlhbHMiIHwgIiIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVjb2Rpbmc/OiAiYXN5bmMiIHwgImF1dG8iIHwgInN5bmMiIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsb2FkaW5nPzogImVhZ2VyIiB8ICJsYXp5IiB8IHVuZGVmaW5lZDsKICAgICAgICByZWZlcnJlclBvbGljeT86IEhUTUxBdHRyaWJ1dGVSZWZlcnJlclBvbGljeSB8IHVuZGVmaW5lZDsKICAgICAgICBzaXplcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjU2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZU1hcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgSW5zSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgY2l0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkYXRlVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEhUTUxJbnB1dFR5cGVBdHRyaWJ1dGUgPQogICAgICAgIHwgJ2J1dHRvbicKICAgICAgICB8ICdjaGVja2JveCcKICAgICAgICB8ICdjb2xvcicKICAgICAgICB8ICdkYXRlJwogICAgICAgIHwgJ2RhdGV0aW1lLWxvY2FsJwogICAgICAgIHwgJ2VtYWlsJwogICAgICAgIHwgJ2ZpbGUnCiAgICAgICAgfCAnaGlkZGVuJwogICAgICAgIHwgJ2ltYWdlJwogICAgICAgIHwgJ21vbnRoJwogICAgICAgIHwgJ251bWJlcicKICAgICAgICB8ICdwYXNzd29yZCcKICAgICAgICB8ICdyYWRpbycKICAgICAgICB8ICdyYW5nZScKICAgICAgICB8ICdyZXNldCcKICAgICAgICB8ICdzZWFyY2gnCiAgICAgICAgfCAnc3VibWl0JwogICAgICAgIHwgJ3RlbCcKICAgICAgICB8ICd0ZXh0JwogICAgICAgIHwgJ3RpbWUnCiAgICAgICAgfCAndXJsJwogICAgICAgIHwgJ3dlZWsnCiAgICAgICAgfCAoc3RyaW5nICYge30pOwoKICAgIGludGVyZmFjZSBJbnB1dEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGFjY2VwdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYXV0b0NvbXBsZXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNhcHR1cmU/OiBib29sZWFuIHwgJ3VzZXInIHwgJ2Vudmlyb25tZW50JyB8IHVuZGVmaW5lZDsgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWwtbWVkaWEtY2FwdHVyZS8jdGhlLWNhcHR1cmUtYXR0cmlidXRlCiAgICAgICAgY2hlY2tlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY3Jvc3NPcmlnaW4/OiAiYW5vbnltb3VzIiB8ICJ1c2UtY3JlZGVudGlhbHMiIHwgIiIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGVyS2V5SGludD86ICdlbnRlcicgfCAnZG9uZScgfCAnZ28nIHwgJ25leHQnIHwgJ3ByZXZpb3VzJyB8ICdzZWFyY2gnIHwgJ3NlbmQnIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybUFjdGlvbj86CiAgICAgICAgICAgIHwgc3RyaW5nCiAgICAgICAgICAgIHwgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TW2tleW9mIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OU10KICAgICAgICAgICAgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybUVuY1R5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybU1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtTm9WYWxpZGF0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybVRhcmdldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlzdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4TGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtaW5MZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbXVsdGlwbGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWFkT25seT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNpemU/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0ZXA/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86IEhUTUxJbnB1dFR5cGVBdHRyaWJ1dGUgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CgogICAgICAgIG9uQ2hhbmdlPzogQ2hhbmdlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBLZXlnZW5IVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjaGFsbGVuZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAga2V5VHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrZXlQYXJhbXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTGFiZWxIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBmb3JtPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGh0bWxGb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIExpSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIExpbmtIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjcm9zc09yaWdpbj86ICJhbm9ueW1vdXMiIHwgInVzZS1jcmVkZW50aWFscyIgfCAiIiB8IHVuZGVmaW5lZDsKICAgICAgICBmZXRjaHByaW9yaXR5PzogImhpZ2giIHwgImxvdyIgfCAiYXV0byI7CiAgICAgICAgaHJlZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBocmVmTGFuZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpbnRlZ3JpdHk/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VTcmNTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VTaXplcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWZlcnJlclBvbGljeT86IEhUTUxBdHRyaWJ1dGVSZWZlcnJlclBvbGljeSB8IHVuZGVmaW5lZDsKICAgICAgICBzaXplcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0eXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNoYXJTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE1hcEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE1lbnVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICB0eXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBNZWRpYUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGF1dG9QbGF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250cm9scz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY29udHJvbHNMaXN0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNyb3NzT3JpZ2luPzogImFub255bW91cyIgfCAidXNlLWNyZWRlbnRpYWxzIiB8ICIiIHwgdW5kZWZpbmVkOwogICAgICAgIGxvb3A/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG1lZGlhR3JvdXA/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbXV0ZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYXlzSW5saW5lPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVsb2FkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyYz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTWV0YUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGNoYXJTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHR0cEVxdWl2Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29udGVudD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTWV0ZXJIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBmb3JtPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhpZ2g/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbG93PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1heD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtaW4/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3B0aW11bT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB2YWx1ZT86IHN0cmluZyB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgUXVvdGVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjaXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBPYmplY3RIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjbGFzc0lEPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRhdGE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0eXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZU1hcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3bW9kZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgT2xIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICByZXZlcnNlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3RhcnQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86ICcxJyB8ICdhJyB8ICdBJyB8ICdpJyB8ICdJJyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgT3B0Z3JvdXBIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE9wdGlvbkhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzZWxlY3RlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE91dHB1dEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHRtbEZvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBQYXJhbUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFByb2dyZXNzSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgbWF4PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhbHVlPzogc3RyaW5nIHwgUmVhZG9ubHlBcnJheTxzdHJpbmc+IHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBTbG90SFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgU2NyaXB0SFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgYXN5bmM/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBAZGVwcmVjYXRlZCAqLwogICAgICAgIGNoYXJTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY3Jvc3NPcmlnaW4/OiAiYW5vbnltb3VzIiB8ICJ1c2UtY3JlZGVudGlhbHMiIHwgIiIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGludGVncml0eT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBub01vZHVsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmZXJyZXJQb2xpY3k/OiBIVE1MQXR0cmlidXRlUmVmZXJyZXJQb2xpY3kgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFNlbGVjdEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGF1dG9Db21wbGV0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtdWx0aXBsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc2l6ZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB2YWx1ZT86IHN0cmluZyB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86IENoYW5nZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgU291cmNlSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lZGlhPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNpemVzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyYz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmNTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgU3R5bGVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBtZWRpYT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFRhYmxlSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgYWxpZ24/OiAibGVmdCIgfCAiY2VudGVyIiB8ICJyaWdodCIgfCB1bmRlZmluZWQ7CiAgICAgICAgYmdjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBib3JkZXI/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFBhZGRpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZnJhbWU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJ1bGVzPzogIm5vbmUiIHwgImdyb3VwcyIgfCAicm93cyIgfCAiY29sdW1ucyIgfCAiYWxsIiB8IHVuZGVmaW5lZDsKICAgICAgICBzdW1tYXJ5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBUZXh0YXJlYUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGF1dG9Db21wbGV0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGRpck5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4TGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkxlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlYWRPbmx5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcm93cz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB2YWx1ZT86IHN0cmluZyB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB3cmFwPzogc3RyaW5nIHwgdW5kZWZpbmVkOwoKICAgICAgICBvbkNoYW5nZT86IENoYW5nZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgVGRIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbGlnbj86ICJsZWZ0IiB8ICJjZW50ZXIiIHwgInJpZ2h0IiB8ICJqdXN0aWZ5IiB8ICJjaGFyIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xTcGFuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGhlYWRlcnM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcm93U3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhYmJyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YWxpZ24/OiAidG9wIiB8ICJtaWRkbGUiIHwgImJvdHRvbSIgfCAiYmFzZWxpbmUiIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBUaEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGFsaWduPzogImxlZnQiIHwgImNlbnRlciIgfCAicmlnaHQiIHwgImp1c3RpZnkiIHwgImNoYXIiIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbFNwYW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgaGVhZGVycz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByb3dTcGFuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHNjb3BlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGFiYnI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFRpbWVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkYXRlVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgVHJhY2tIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkZWZhdWx0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBraW5kPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyYz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmNMYW5nPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBWaWRlb0hUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgTWVkaWFIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYXlzSW5saW5lPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwb3N0ZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVSZW1vdGVQbGF5YmFjaz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9CgogICAgLy8gdGhpcyBsaXN0IGlzICJjb21wbGV0ZSIgaW4gdGhhdCBpdCBjb250YWlucyBldmVyeSBTVkcgYXR0cmlidXRlCiAgICAvLyB0aGF0IFJlYWN0IHN1cHBvcnRzLCBidXQgdGhlIHR5cGVzIGNhbiBiZSBpbXByb3ZlZC4KICAgIC8vIEZ1bGwgbGlzdCBoZXJlOiBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2RvbS1lbGVtZW50cy5odG1sCiAgICAvLwogICAgLy8gVGhlIHRocmVlIGJyb2FkIHR5cGUgY2F0ZWdvcmllcyBhcmUgKGluIG9yZGVyIG9mIHJlc3RyaWN0aXZlbmVzcyk6CiAgICAvLyAgIC0gIm51bWJlciB8IHN0cmluZyIKICAgIC8vICAgLSAic3RyaW5nIgogICAgLy8gICAtIHVuaW9uIG9mIHN0cmluZyBsaXRlcmFscwogICAgaW50ZXJmYWNlIFNWR0F0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBBcmlhQXR0cmlidXRlcywgRE9NQXR0cmlidXRlczxUPiB7CiAgICAgICAgLy8gUmVhY3Qtc3BlY2lmaWMgQXR0cmlidXRlcwogICAgICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIEF0dHJpYnV0ZXMgd2hpY2ggYWxzbyBkZWZpbmVkIGluIEhUTUxBdHRyaWJ1dGVzCiAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gU1ZHRE9NUHJvcGVydHlDb25maWcuanMKICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lZGlhPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtaW4/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IENTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIE90aGVyIEhUTUwgcHJvcGVydGllcyBzdXBwb3J0ZWQgYnkgU1ZHIGVsZW1lbnRzIGluIGJyb3dzZXJzCiAgICAgICAgcm9sZT86IEFyaWFSb2xlIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYkluZGV4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGNyb3NzT3JpZ2luPzogImFub255bW91cyIgfCAidXNlLWNyZWRlbnRpYWxzIiB8ICIiIHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBTVkcgU3BlY2lmaWMgYXR0cmlidXRlcwogICAgICAgIGFjY2VudEhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhY2N1bXVsYXRlPzogIm5vbmUiIHwgInN1bSIgfCB1bmRlZmluZWQ7CiAgICAgICAgYWRkaXRpdmU/OiAicmVwbGFjZSIgfCAic3VtIiB8IHVuZGVmaW5lZDsKICAgICAgICBhbGlnbm1lbnRCYXNlbGluZT86ICJhdXRvIiB8ICJiYXNlbGluZSIgfCAiYmVmb3JlLWVkZ2UiIHwgInRleHQtYmVmb3JlLWVkZ2UiIHwgIm1pZGRsZSIgfCAiY2VudHJhbCIgfCAiYWZ0ZXItZWRnZSIgfAogICAgICAgICJ0ZXh0LWFmdGVyLWVkZ2UiIHwgImlkZW9ncmFwaGljIiB8ICJhbHBoYWJldGljIiB8ICJoYW5naW5nIiB8ICJtYXRoZW1hdGljYWwiIHwgImluaGVyaXQiIHwgdW5kZWZpbmVkOwogICAgICAgIGFsbG93UmVvcmRlcj86ICJubyIgfCAieWVzIiB8IHVuZGVmaW5lZDsKICAgICAgICBhbHBoYWJldGljPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGFtcGxpdHVkZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhcmFiaWNGb3JtPzogImluaXRpYWwiIHwgIm1lZGlhbCIgfCAidGVybWluYWwiIHwgImlzb2xhdGVkIiB8IHVuZGVmaW5lZDsKICAgICAgICBhc2NlbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYXR0cmlidXRlTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdHRyaWJ1dGVUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGF1dG9SZXZlcnNlPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICBhemltdXRoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGJhc2VGcmVxdWVuY3k/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYmFzZWxpbmVTaGlmdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBiYXNlUHJvZmlsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBiYm94PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGJlZ2luPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGJpYXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYnk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2FsY01vZGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2FwSGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNsaXA/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2xpcFBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2xpcFBhdGhVbml0cz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjbGlwUnVsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xvckludGVycG9sYXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycz86ICJhdXRvIiB8ICJzUkdCIiB8ICJsaW5lYXJSR0IiIHwgImluaGVyaXQiIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbG9yUHJvZmlsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xvclJlbmRlcmluZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50U2NyaXB0VHlwZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50U3R5bGVUeXBlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGN1cnNvcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRlY2VsZXJhdGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVzY2VudD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaWZmdXNlQ29uc3RhbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlyZWN0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc3BsYXk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGl2aXNvcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkb21pbmFudEJhc2VsaW5lPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGR1cj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlZGdlTW9kZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbGV2YXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW5hYmxlQmFja2dyb3VuZD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbmQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZXhwb25lbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZD86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgZmlsbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmaWxsT3BhY2l0eT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmaWxsUnVsZT86ICJub256ZXJvIiB8ICJldmVub2RkIiB8ICJpbmhlcml0IiB8IHVuZGVmaW5lZDsKICAgICAgICBmaWx0ZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZmlsdGVyUmVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZpbHRlclVuaXRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZsb29kQ29sb3I/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZmxvb2RPcGFjaXR5PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvY3VzYWJsZT86IEJvb2xlYW5pc2ggfCAiYXV0byIgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9udEZhbWlseT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U2l6ZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U2l6ZUFkanVzdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U3RyZXRjaD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U3R5bGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9udFZhcmlhbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9udFdlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtYXQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZnI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZnJvbT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnMT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnMj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnbHlwaE5hbWU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGdseXBoUmVmPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGdyYWRpZW50VW5pdHM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaGFuZ2luZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBob3JpekFkdlg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaG9yaXpPcmlnaW5YPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaWRlb2dyYXBoaWM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VSZW5kZXJpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW4yPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGluPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGludGVyY2VwdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrMT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrMj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrMz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrND86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtlcm5lbE1hdHJpeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrZXJuZWxVbml0TGVuZ3RoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtlcm5pbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAga2V5UG9pbnRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtleVNwbGluZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAga2V5VGltZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGVuZ3RoQWRqdXN0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxldHRlclNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlnaHRpbmdDb2xvcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsb2NhbD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJFbmQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFya2VySGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1hcmtlck1pZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJTdGFydD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJVbml0cz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJXaWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXNrPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1hc2tDb250ZW50VW5pdHM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFza1VuaXRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1hdGhlbWF0aWNhbD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG51bU9jdGF2ZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb2Zmc2V0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9wYWNpdHk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3BlcmF0b3I/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3JkZXI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3JpZW50PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9yaWVudGF0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9yaWdpbj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBvdmVyZmxvdz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBvdmVybGluZVBvc2l0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG92ZXJsaW5lVGhpY2tuZXNzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBhaW50T3JkZXI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGFub3NlMT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBhdGhMZW5ndGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0dGVybkNvbnRlbnRVbml0cz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBhdHRlcm5Vbml0cz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb2ludGVyRXZlbnRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBvaW50cz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb2ludHNBdFg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcG9pbnRzQXRZPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBvaW50c0F0Wj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVzZXJ2ZUFscGhhPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHByaW1pdGl2ZVVuaXRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmFkaXVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlZlg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmWT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZW5kZXJpbmdJbnRlbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVwZWF0Q291bnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVwZWF0RHVyPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlcXVpcmVkRXh0ZW5zaW9ucz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZEZlYXR1cmVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlc3RhcnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVzdWx0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJvdGF0ZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY2FsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzZWVkPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNoYXBlUmVuZGVyaW5nPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNsb3BlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3BlY3VsYXJDb25zdGFudD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcGVjdWxhckV4cG9uZW50PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwZWVkPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwcmVhZE1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdGFydE9mZnNldD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdGREZXZpYXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RlbWg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RlbXY/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RpdGNoVGlsZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RvcENvbG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0b3BPcGFjaXR5PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cmlrZXRocm91Z2hQb3NpdGlvbj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cmluZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJva2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Ryb2tlRGFzaGFycmF5Pzogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cm9rZURhc2hvZmZzZXQ/OiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Ryb2tlTGluZWNhcD86ICJidXR0IiB8ICJyb3VuZCIgfCAic3F1YXJlIiB8ICJpbmhlcml0IiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJva2VMaW5lam9pbj86ICJtaXRlciIgfCAicm91bmQiIHwgImJldmVsIiB8ICJpbmhlcml0IiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJva2VNaXRlcmxpbWl0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cm9rZU9wYWNpdHk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Ryb2tlV2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3VyZmFjZVNjYWxlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN5c3RlbUxhbmd1YWdlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYmxlVmFsdWVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRhcmdldFg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdGFyZ2V0WT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0ZXh0QW5jaG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRleHREZWNvcmF0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRleHRMZW5ndGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdGV4dFJlbmRlcmluZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0bz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0cmFuc2Zvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdTE/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdTI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5kZXJsaW5lUG9zaXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVuaWNvZGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5pY29kZUJpZGk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5pY29kZVJhbmdlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVuaXRzUGVyRW0/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdkFscGhhYmV0aWM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWVzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlY3RvckVmZmVjdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2ZXJzaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRBZHZZPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRPcmlnaW5YPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRPcmlnaW5ZPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZIYW5naW5nPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZJZGVvZ3JhcGhpYz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2aWV3Qm94Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZpZXdUYXJnZXQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmlzaWJpbGl0eT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2TWF0aGVtYXRpY2FsPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdpZHRocz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3b3JkU3BhY2luZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3cml0aW5nTW9kZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4MT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4Mj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhDaGFubmVsU2VsZWN0b3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeEhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bGlua0FjdHVhdGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeGxpbmtBcmNyb2xlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhsaW5rSHJlZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bGlua1JvbGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeGxpbmtTaG93Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhsaW5rVGl0bGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeGxpbmtUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhtbEJhc2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeG1sTGFuZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bWxucz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bWxuc1hsaW5rPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhtbFNwYWNlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHkxPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHkyPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeUNoYW5uZWxTZWxlY3Rvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB6PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHpvb21BbmRQYW4/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFdlYlZpZXdIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbGxvd0Z1bGxTY3JlZW4/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGFsbG93cG9wdXBzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvc2l6ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYmxpbmtmZWF0dXJlcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlYmxpbmtmZWF0dXJlcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZ3Vlc3RyZXNpemU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGV3ZWJzZWN1cml0eT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZ3Vlc3RpbnN0YW5jZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBodHRwcmVmZXJyZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbm9kZWludGVncmF0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwYXJ0aXRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGx1Z2lucz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcHJlbG9hZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdXNlcmFnZW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdlYnByZWZlcmVuY2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIC8vCiAgICAvLyBSZWFjdC5ET00KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBpbnRlcmZhY2UgUmVhY3RIVE1MIHsKICAgICAgICBhOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEFuY2hvckhUTUxBdHRyaWJ1dGVzPEhUTUxBbmNob3JFbGVtZW50PiwgSFRNTEFuY2hvckVsZW1lbnQ+OwogICAgICAgIGFiYnI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYWRkcmVzczogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBhcmVhOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEFyZWFIVE1MQXR0cmlidXRlczxIVE1MQXJlYUVsZW1lbnQ+LCBIVE1MQXJlYUVsZW1lbnQ+OwogICAgICAgIGFydGljbGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYXNpZGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYXVkaW86IERldGFpbGVkSFRNTEZhY3Rvcnk8QXVkaW9IVE1MQXR0cmlidXRlczxIVE1MQXVkaW9FbGVtZW50PiwgSFRNTEF1ZGlvRWxlbWVudD47CiAgICAgICAgYjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBiYXNlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEJhc2VIVE1MQXR0cmlidXRlczxIVE1MQmFzZUVsZW1lbnQ+LCBIVE1MQmFzZUVsZW1lbnQ+OwogICAgICAgIGJkaTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBiZG86IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYmlnOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGJsb2NrcXVvdGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8QmxvY2txdW90ZUhUTUxBdHRyaWJ1dGVzPEhUTUxRdW90ZUVsZW1lbnQ+LCBIVE1MUXVvdGVFbGVtZW50PjsKICAgICAgICBib2R5OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxCb2R5RWxlbWVudD4sIEhUTUxCb2R5RWxlbWVudD47CiAgICAgICAgYnI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEJSRWxlbWVudD4sIEhUTUxCUkVsZW1lbnQ+OwogICAgICAgIGJ1dHRvbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxCdXR0b25IVE1MQXR0cmlidXRlczxIVE1MQnV0dG9uRWxlbWVudD4sIEhUTUxCdXR0b25FbGVtZW50PjsKICAgICAgICBjYW52YXM6IERldGFpbGVkSFRNTEZhY3Rvcnk8Q2FudmFzSFRNTEF0dHJpYnV0ZXM8SFRNTENhbnZhc0VsZW1lbnQ+LCBIVE1MQ2FudmFzRWxlbWVudD47CiAgICAgICAgY2FwdGlvbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBjZW50ZXI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgY2l0ZTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBjb2RlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGNvbDogRGV0YWlsZWRIVE1MRmFjdG9yeTxDb2xIVE1MQXR0cmlidXRlczxIVE1MVGFibGVDb2xFbGVtZW50PiwgSFRNTFRhYmxlQ29sRWxlbWVudD47CiAgICAgICAgY29sZ3JvdXA6IERldGFpbGVkSFRNTEZhY3Rvcnk8Q29sZ3JvdXBIVE1MQXR0cmlidXRlczxIVE1MVGFibGVDb2xFbGVtZW50PiwgSFRNTFRhYmxlQ29sRWxlbWVudD47CiAgICAgICAgZGF0YTogRGV0YWlsZWRIVE1MRmFjdG9yeTxEYXRhSFRNTEF0dHJpYnV0ZXM8SFRNTERhdGFFbGVtZW50PiwgSFRNTERhdGFFbGVtZW50PjsKICAgICAgICBkYXRhbGlzdDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRGF0YUxpc3RFbGVtZW50PiwgSFRNTERhdGFMaXN0RWxlbWVudD47CiAgICAgICAgZGQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgZGVsOiBEZXRhaWxlZEhUTUxGYWN0b3J5PERlbEhUTUxBdHRyaWJ1dGVzPEhUTUxNb2RFbGVtZW50PiwgSFRNTE1vZEVsZW1lbnQ+OwogICAgICAgIGRldGFpbHM6IERldGFpbGVkSFRNTEZhY3Rvcnk8RGV0YWlsc0hUTUxBdHRyaWJ1dGVzPEhUTUxEZXRhaWxzRWxlbWVudD4sIEhUTUxEZXRhaWxzRWxlbWVudD47CiAgICAgICAgZGZuOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGRpYWxvZzogRGV0YWlsZWRIVE1MRmFjdG9yeTxEaWFsb2dIVE1MQXR0cmlidXRlczxIVE1MRGlhbG9nRWxlbWVudD4sIEhUTUxEaWFsb2dFbGVtZW50PjsKICAgICAgICBkaXY6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+LCBIVE1MRGl2RWxlbWVudD47CiAgICAgICAgZGw6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTERMaXN0RWxlbWVudD4sIEhUTUxETGlzdEVsZW1lbnQ+OwogICAgICAgIGR0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGVtOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGVtYmVkOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEVtYmVkSFRNTEF0dHJpYnV0ZXM8SFRNTEVtYmVkRWxlbWVudD4sIEhUTUxFbWJlZEVsZW1lbnQ+OwogICAgICAgIGZpZWxkc2V0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEZpZWxkc2V0SFRNTEF0dHJpYnV0ZXM8SFRNTEZpZWxkU2V0RWxlbWVudD4sIEhUTUxGaWVsZFNldEVsZW1lbnQ+OwogICAgICAgIGZpZ2NhcHRpb246IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgZmlndXJlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGZvb3RlcjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBmb3JtOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEZvcm1IVE1MQXR0cmlidXRlczxIVE1MRm9ybUVsZW1lbnQ+LCBIVE1MRm9ybUVsZW1lbnQ+OwogICAgICAgIGgxOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgaDI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICBoMzogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgIGg0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgaDU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICBoNjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgIGhlYWQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MSGVhZEVsZW1lbnQ+OwogICAgICAgIGhlYWRlcjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBoZ3JvdXA6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgaHI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEhSRWxlbWVudD4sIEhUTUxIUkVsZW1lbnQ+OwogICAgICAgIGh0bWw6IERldGFpbGVkSFRNTEZhY3Rvcnk8SHRtbEhUTUxBdHRyaWJ1dGVzPEhUTUxIdG1sRWxlbWVudD4sIEhUTUxIdG1sRWxlbWVudD47CiAgICAgICAgaTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBpZnJhbWU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SWZyYW1lSFRNTEF0dHJpYnV0ZXM8SFRNTElGcmFtZUVsZW1lbnQ+LCBIVE1MSUZyYW1lRWxlbWVudD47CiAgICAgICAgaW1nOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEltZ0hUTUxBdHRyaWJ1dGVzPEhUTUxJbWFnZUVsZW1lbnQ+LCBIVE1MSW1hZ2VFbGVtZW50PjsKICAgICAgICBpbnB1dDogRGV0YWlsZWRIVE1MRmFjdG9yeTxJbnB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+LCBIVE1MSW5wdXRFbGVtZW50PjsKICAgICAgICBpbnM6IERldGFpbGVkSFRNTEZhY3Rvcnk8SW5zSFRNTEF0dHJpYnV0ZXM8SFRNTE1vZEVsZW1lbnQ+LCBIVE1MTW9kRWxlbWVudD47CiAgICAgICAga2JkOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGtleWdlbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxLZXlnZW5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBsYWJlbDogRGV0YWlsZWRIVE1MRmFjdG9yeTxMYWJlbEhUTUxBdHRyaWJ1dGVzPEhUTUxMYWJlbEVsZW1lbnQ+LCBIVE1MTGFiZWxFbGVtZW50PjsKICAgICAgICBsZWdlbmQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTExlZ2VuZEVsZW1lbnQ+LCBIVE1MTGVnZW5kRWxlbWVudD47CiAgICAgICAgbGk6IERldGFpbGVkSFRNTEZhY3Rvcnk8TGlIVE1MQXR0cmlidXRlczxIVE1MTElFbGVtZW50PiwgSFRNTExJRWxlbWVudD47CiAgICAgICAgbGluazogRGV0YWlsZWRIVE1MRmFjdG9yeTxMaW5rSFRNTEF0dHJpYnV0ZXM8SFRNTExpbmtFbGVtZW50PiwgSFRNTExpbmtFbGVtZW50PjsKICAgICAgICBtYWluOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1hcDogRGV0YWlsZWRIVE1MRmFjdG9yeTxNYXBIVE1MQXR0cmlidXRlczxIVE1MTWFwRWxlbWVudD4sIEhUTUxNYXBFbGVtZW50PjsKICAgICAgICBtYXJrOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1lbnU6IERldGFpbGVkSFRNTEZhY3Rvcnk8TWVudUhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1lbnVpdGVtOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1ldGE6IERldGFpbGVkSFRNTEZhY3Rvcnk8TWV0YUhUTUxBdHRyaWJ1dGVzPEhUTUxNZXRhRWxlbWVudD4sIEhUTUxNZXRhRWxlbWVudD47CiAgICAgICAgbWV0ZXI6IERldGFpbGVkSFRNTEZhY3Rvcnk8TWV0ZXJIVE1MQXR0cmlidXRlczxIVE1MTWV0ZXJFbGVtZW50PiwgSFRNTE1ldGVyRWxlbWVudD47CiAgICAgICAgbmF2OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG5vc2NyaXB0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG9iamVjdDogRGV0YWlsZWRIVE1MRmFjdG9yeTxPYmplY3RIVE1MQXR0cmlidXRlczxIVE1MT2JqZWN0RWxlbWVudD4sIEhUTUxPYmplY3RFbGVtZW50PjsKICAgICAgICBvbDogRGV0YWlsZWRIVE1MRmFjdG9yeTxPbEhUTUxBdHRyaWJ1dGVzPEhUTUxPTGlzdEVsZW1lbnQ+LCBIVE1MT0xpc3RFbGVtZW50PjsKICAgICAgICBvcHRncm91cDogRGV0YWlsZWRIVE1MRmFjdG9yeTxPcHRncm91cEhUTUxBdHRyaWJ1dGVzPEhUTUxPcHRHcm91cEVsZW1lbnQ+LCBIVE1MT3B0R3JvdXBFbGVtZW50PjsKICAgICAgICBvcHRpb246IERldGFpbGVkSFRNTEZhY3Rvcnk8T3B0aW9uSFRNTEF0dHJpYnV0ZXM8SFRNTE9wdGlvbkVsZW1lbnQ+LCBIVE1MT3B0aW9uRWxlbWVudD47CiAgICAgICAgb3V0cHV0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PE91dHB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxPdXRwdXRFbGVtZW50PiwgSFRNTE91dHB1dEVsZW1lbnQ+OwogICAgICAgIHA6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFBhcmFncmFwaEVsZW1lbnQ+LCBIVE1MUGFyYWdyYXBoRWxlbWVudD47CiAgICAgICAgcGFyYW06IERldGFpbGVkSFRNTEZhY3Rvcnk8UGFyYW1IVE1MQXR0cmlidXRlczxIVE1MUGFyYW1FbGVtZW50PiwgSFRNTFBhcmFtRWxlbWVudD47CiAgICAgICAgcGljdHVyZTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBwcmU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFByZUVsZW1lbnQ+LCBIVE1MUHJlRWxlbWVudD47CiAgICAgICAgcHJvZ3Jlc3M6IERldGFpbGVkSFRNTEZhY3Rvcnk8UHJvZ3Jlc3NIVE1MQXR0cmlidXRlczxIVE1MUHJvZ3Jlc3NFbGVtZW50PiwgSFRNTFByb2dyZXNzRWxlbWVudD47CiAgICAgICAgcTogRGV0YWlsZWRIVE1MRmFjdG9yeTxRdW90ZUhUTUxBdHRyaWJ1dGVzPEhUTUxRdW90ZUVsZW1lbnQ+LCBIVE1MUXVvdGVFbGVtZW50PjsKICAgICAgICBycDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBydDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBydWJ5OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHM6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc2FtcDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBzZWFyY2g6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc2xvdDogRGV0YWlsZWRIVE1MRmFjdG9yeTxTbG90SFRNTEF0dHJpYnV0ZXM8SFRNTFNsb3RFbGVtZW50PiwgSFRNTFNsb3RFbGVtZW50PjsKICAgICAgICBzY3JpcHQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8U2NyaXB0SFRNTEF0dHJpYnV0ZXM8SFRNTFNjcmlwdEVsZW1lbnQ+LCBIVE1MU2NyaXB0RWxlbWVudD47CiAgICAgICAgc2VjdGlvbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBzZWxlY3Q6IERldGFpbGVkSFRNTEZhY3Rvcnk8U2VsZWN0SFRNTEF0dHJpYnV0ZXM8SFRNTFNlbGVjdEVsZW1lbnQ+LCBIVE1MU2VsZWN0RWxlbWVudD47CiAgICAgICAgc21hbGw6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc291cmNlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PFNvdXJjZUhUTUxBdHRyaWJ1dGVzPEhUTUxTb3VyY2VFbGVtZW50PiwgSFRNTFNvdXJjZUVsZW1lbnQ+OwogICAgICAgIHNwYW46IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFNwYW5FbGVtZW50PiwgSFRNTFNwYW5FbGVtZW50PjsKICAgICAgICBzdHJvbmc6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc3R5bGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8U3R5bGVIVE1MQXR0cmlidXRlczxIVE1MU3R5bGVFbGVtZW50PiwgSFRNTFN0eWxlRWxlbWVudD47CiAgICAgICAgc3ViOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHN1bW1hcnk6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc3VwOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHRhYmxlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PFRhYmxlSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlRWxlbWVudD4sIEhUTUxUYWJsZUVsZW1lbnQ+OwogICAgICAgIHRlbXBsYXRlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxUZW1wbGF0ZUVsZW1lbnQ+LCBIVE1MVGVtcGxhdGVFbGVtZW50PjsKICAgICAgICB0Ym9keTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4sIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PjsKICAgICAgICB0ZDogRGV0YWlsZWRIVE1MRmFjdG9yeTxUZEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD4sIEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD47CiAgICAgICAgdGV4dGFyZWE6IERldGFpbGVkSFRNTEZhY3Rvcnk8VGV4dGFyZWFIVE1MQXR0cmlidXRlczxIVE1MVGV4dEFyZWFFbGVtZW50PiwgSFRNTFRleHRBcmVhRWxlbWVudD47CiAgICAgICAgdGZvb3Q6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+LCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudD47CiAgICAgICAgdGg6IERldGFpbGVkSFRNTEZhY3Rvcnk8VGhIVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4sIEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PjsKICAgICAgICB0aGVhZDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4sIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PjsKICAgICAgICB0aW1lOiBEZXRhaWxlZEhUTUxGYWN0b3J5PFRpbWVIVE1MQXR0cmlidXRlczxIVE1MVGltZUVsZW1lbnQ+LCBIVE1MVGltZUVsZW1lbnQ+OwogICAgICAgIHRpdGxlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxUaXRsZUVsZW1lbnQ+LCBIVE1MVGl0bGVFbGVtZW50PjsKICAgICAgICB0cjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVGFibGVSb3dFbGVtZW50PiwgSFRNTFRhYmxlUm93RWxlbWVudD47CiAgICAgICAgdHJhY2s6IERldGFpbGVkSFRNTEZhY3Rvcnk8VHJhY2tIVE1MQXR0cmlidXRlczxIVE1MVHJhY2tFbGVtZW50PiwgSFRNTFRyYWNrRWxlbWVudD47CiAgICAgICAgdTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICB1bDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVUxpc3RFbGVtZW50PiwgSFRNTFVMaXN0RWxlbWVudD47CiAgICAgICAgInZhciI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgdmlkZW86IERldGFpbGVkSFRNTEZhY3Rvcnk8VmlkZW9IVE1MQXR0cmlidXRlczxIVE1MVmlkZW9FbGVtZW50PiwgSFRNTFZpZGVvRWxlbWVudD47CiAgICAgICAgd2JyOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHdlYnZpZXc6IERldGFpbGVkSFRNTEZhY3Rvcnk8V2ViVmlld0hUTUxBdHRyaWJ1dGVzPEhUTUxXZWJWaWV3RWxlbWVudD4sIEhUTUxXZWJWaWV3RWxlbWVudD47CiAgICB9CgogICAgaW50ZXJmYWNlIFJlYWN0U1ZHIHsKICAgICAgICBhbmltYXRlOiBTVkdGYWN0b3J5OwogICAgICAgIGNpcmNsZTogU1ZHRmFjdG9yeTsKICAgICAgICBjbGlwUGF0aDogU1ZHRmFjdG9yeTsKICAgICAgICBkZWZzOiBTVkdGYWN0b3J5OwogICAgICAgIGRlc2M6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZWxsaXBzZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZUJsZW5kOiBTVkdGYWN0b3J5OwogICAgICAgIGZlQ29sb3JNYXRyaXg6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVDb21wb25lbnRUcmFuc2ZlcjogU1ZHRmFjdG9yeTsKICAgICAgICBmZUNvbXBvc2l0ZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZUNvbnZvbHZlTWF0cml4OiBTVkdGYWN0b3J5OwogICAgICAgIGZlRGlmZnVzZUxpZ2h0aW5nOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRGlzcGxhY2VtZW50TWFwOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRGlzdGFudExpZ2h0OiBTVkdGYWN0b3J5OwogICAgICAgIGZlRHJvcFNoYWRvdzogU1ZHRmFjdG9yeTsKICAgICAgICBmZUZsb29kOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRnVuY0E6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVGdW5jQjogU1ZHRmFjdG9yeTsKICAgICAgICBmZUZ1bmNHOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRnVuY1I6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVHYXVzc2lhbkJsdXI6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVJbWFnZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZU1lcmdlOiBTVkdGYWN0b3J5OwogICAgICAgIGZlTWVyZ2VOb2RlOiBTVkdGYWN0b3J5OwogICAgICAgIGZlTW9ycGhvbG9neTogU1ZHRmFjdG9yeTsKICAgICAgICBmZU9mZnNldDogU1ZHRmFjdG9yeTsKICAgICAgICBmZVBvaW50TGlnaHQ6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVTcGVjdWxhckxpZ2h0aW5nOiBTVkdGYWN0b3J5OwogICAgICAgIGZlU3BvdExpZ2h0OiBTVkdGYWN0b3J5OwogICAgICAgIGZlVGlsZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZVR1cmJ1bGVuY2U6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmlsdGVyOiBTVkdGYWN0b3J5OwogICAgICAgIGZvcmVpZ25PYmplY3Q6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZzogU1ZHRmFjdG9yeTsKICAgICAgICBpbWFnZTogU1ZHRmFjdG9yeTsKICAgICAgICBsaW5lOiBTVkdGYWN0b3J5OwogICAgICAgIGxpbmVhckdyYWRpZW50OiBTVkdGYWN0b3J5OwogICAgICAgIG1hcmtlcjogU1ZHRmFjdG9yeTsKICAgICAgICBtYXNrOiBTVkdGYWN0b3J5OwogICAgICAgIG1ldGFkYXRhOiBTVkdGYWN0b3J5OwogICAgICAgIHBhdGg6IFNWR0ZhY3Rvcnk7CiAgICAgICAgcGF0dGVybjogU1ZHRmFjdG9yeTsKICAgICAgICBwb2x5Z29uOiBTVkdGYWN0b3J5OwogICAgICAgIHBvbHlsaW5lOiBTVkdGYWN0b3J5OwogICAgICAgIHJhZGlhbEdyYWRpZW50OiBTVkdGYWN0b3J5OwogICAgICAgIHJlY3Q6IFNWR0ZhY3Rvcnk7CiAgICAgICAgc3RvcDogU1ZHRmFjdG9yeTsKICAgICAgICBzdmc6IFNWR0ZhY3Rvcnk7CiAgICAgICAgc3dpdGNoOiBTVkdGYWN0b3J5OwogICAgICAgIHN5bWJvbDogU1ZHRmFjdG9yeTsKICAgICAgICB0ZXh0OiBTVkdGYWN0b3J5OwogICAgICAgIHRleHRQYXRoOiBTVkdGYWN0b3J5OwogICAgICAgIHRzcGFuOiBTVkdGYWN0b3J5OwogICAgICAgIHVzZTogU1ZHRmFjdG9yeTsKICAgICAgICB2aWV3OiBTVkdGYWN0b3J5OwogICAgfQoKICAgIGludGVyZmFjZSBSZWFjdERPTSBleHRlbmRzIFJlYWN0SFRNTCwgUmVhY3RTVkcgeyB9CgogICAgLy8KICAgIC8vIFJlYWN0LlByb3BUeXBlcwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHR5cGUgVmFsaWRhdG9yPFQ+ID0gUHJvcFR5cGVzLlZhbGlkYXRvcjxUPjsKCiAgICB0eXBlIFJlcXVpcmVhYmxlPFQ+ID0gUHJvcFR5cGVzLlJlcXVpcmVhYmxlPFQ+OwoKICAgIHR5cGUgVmFsaWRhdGlvbk1hcDxUPiA9IFByb3BUeXBlcy5WYWxpZGF0aW9uTWFwPFQ+OwoKICAgIHR5cGUgV2Vha1ZhbGlkYXRpb25NYXA8VD4gPSB7CiAgICAgICAgW0sgaW4ga2V5b2YgVF0/OiBudWxsIGV4dGVuZHMgVFtLXQogICAgICAgICAgICA/IFZhbGlkYXRvcjxUW0tdIHwgbnVsbCB8IHVuZGVmaW5lZD4KICAgICAgICAgICAgOiB1bmRlZmluZWQgZXh0ZW5kcyBUW0tdCiAgICAgICAgICAgID8gVmFsaWRhdG9yPFRbS10gfCBudWxsIHwgdW5kZWZpbmVkPgogICAgICAgICAgICA6IFZhbGlkYXRvcjxUW0tdPgogICAgfTsKCiAgICBpbnRlcmZhY2UgUmVhY3RQcm9wVHlwZXMgewogICAgICAgIGFueTogdHlwZW9mIFByb3BUeXBlcy5hbnk7CiAgICAgICAgYXJyYXk6IHR5cGVvZiBQcm9wVHlwZXMuYXJyYXk7CiAgICAgICAgYm9vbDogdHlwZW9mIFByb3BUeXBlcy5ib29sOwogICAgICAgIGZ1bmM6IHR5cGVvZiBQcm9wVHlwZXMuZnVuYzsKICAgICAgICBudW1iZXI6IHR5cGVvZiBQcm9wVHlwZXMubnVtYmVyOwogICAgICAgIG9iamVjdDogdHlwZW9mIFByb3BUeXBlcy5vYmplY3Q7CiAgICAgICAgc3RyaW5nOiB0eXBlb2YgUHJvcFR5cGVzLnN0cmluZzsKICAgICAgICBub2RlOiB0eXBlb2YgUHJvcFR5cGVzLm5vZGU7CiAgICAgICAgZWxlbWVudDogdHlwZW9mIFByb3BUeXBlcy5lbGVtZW50OwogICAgICAgIGluc3RhbmNlT2Y6IHR5cGVvZiBQcm9wVHlwZXMuaW5zdGFuY2VPZjsKICAgICAgICBvbmVPZjogdHlwZW9mIFByb3BUeXBlcy5vbmVPZjsKICAgICAgICBvbmVPZlR5cGU6IHR5cGVvZiBQcm9wVHlwZXMub25lT2ZUeXBlOwogICAgICAgIGFycmF5T2Y6IHR5cGVvZiBQcm9wVHlwZXMuYXJyYXlPZjsKICAgICAgICBvYmplY3RPZjogdHlwZW9mIFByb3BUeXBlcy5vYmplY3RPZjsKICAgICAgICBzaGFwZTogdHlwZW9mIFByb3BUeXBlcy5zaGFwZTsKICAgICAgICBleGFjdDogdHlwZW9mIFByb3BUeXBlcy5leGFjdDsKICAgIH0KCiAgICAvLwogICAgLy8gUmVhY3QuQ2hpbGRyZW4KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIC0gVXNlIGB0eXBlb2YgUmVhY3QuQ2hpbGRyZW5gIGluc3RlYWQuCiAgICAgKi8KICAgIC8vIFN5bmMgd2l0aCB0eXBlIG9mIGBjb25zdCBDaGlsZHJlbmAuCiAgICBpbnRlcmZhY2UgUmVhY3RDaGlsZHJlbiB7CiAgICAgICAgbWFwPFQsIEM+KGNoaWxkcmVuOiBDIHwgUmVhZG9ubHlBcnJheTxDPiwgZm46IChjaGlsZDogQywgaW5kZXg6IG51bWJlcikgPT4gVCk6CiAgICAgICAgICAgIEMgZXh0ZW5kcyBudWxsIHwgdW5kZWZpbmVkID8gQyA6IEFycmF5PEV4Y2x1ZGU8VCwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ+PjsKICAgICAgICBmb3JFYWNoPEM+KGNoaWxkcmVuOiBDIHwgUmVhZG9ubHlBcnJheTxDPiwgZm46IChjaGlsZDogQywgaW5kZXg6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQ7CiAgICAgICAgY291bnQoY2hpbGRyZW46IGFueSk6IG51bWJlcjsKICAgICAgICBvbmx5PEM+KGNoaWxkcmVuOiBDKTogQyBleHRlbmRzIGFueVtdID8gbmV2ZXIgOiBDOwogICAgICAgIHRvQXJyYXkoY2hpbGRyZW46IFJlYWN0Tm9kZSB8IFJlYWN0Tm9kZVtdKTogQXJyYXk8RXhjbHVkZTxSZWFjdE5vZGUsIGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkPj47CiAgICB9CgogICAgLy8KICAgIC8vIEJyb3dzZXIgSW50ZXJmYWNlcwogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25pa2VlZS8yMDQ4LXR5cGVzY3JpcHQvYmxvYi9tYXN0ZXIvMjA0OC9qcy90b3VjaC5kLnRzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgaW50ZXJmYWNlIEFic3RyYWN0VmlldyB7CiAgICAgICAgc3R5bGVNZWRpYTogU3R5bGVNZWRpYTsKICAgICAgICBkb2N1bWVudDogRG9jdW1lbnQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFRvdWNoIHsKICAgICAgICBpZGVudGlmaWVyOiBudW1iZXI7CiAgICAgICAgdGFyZ2V0OiBFdmVudFRhcmdldDsKICAgICAgICBzY3JlZW5YOiBudW1iZXI7CiAgICAgICAgc2NyZWVuWTogbnVtYmVyOwogICAgICAgIGNsaWVudFg6IG51bWJlcjsKICAgICAgICBjbGllbnRZOiBudW1iZXI7CiAgICAgICAgcGFnZVg6IG51bWJlcjsKICAgICAgICBwYWdlWTogbnVtYmVyOwogICAgfQoKICAgIGludGVyZmFjZSBUb3VjaExpc3QgewogICAgICAgIFtpbmRleDogbnVtYmVyXTogVG91Y2g7CiAgICAgICAgbGVuZ3RoOiBudW1iZXI7CiAgICAgICAgaXRlbShpbmRleDogbnVtYmVyKTogVG91Y2g7CiAgICAgICAgaWRlbnRpZmllZFRvdWNoKGlkZW50aWZpZXI6IG51bWJlcik6IFRvdWNoOwogICAgfQoKICAgIC8vCiAgICAvLyBFcnJvciBJbnRlcmZhY2VzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBpbnRlcmZhY2UgRXJyb3JJbmZvIHsKICAgICAgICAvKioKICAgICAgICAgKiBDYXB0dXJlcyB3aGljaCBjb21wb25lbnQgY29udGFpbmVkIHRoZSBleGNlcHRpb24sIGFuZCBpdHMgYW5jZXN0b3JzLgogICAgICAgICAqLwogICAgICAgIGNvbXBvbmVudFN0YWNrOiBzdHJpbmc7CiAgICB9CgogICAgLy8gS2VlcCBpbiBzeW5jIHdpdGggSlNYIG5hbWVzcGFjZSBpbiAuL2pzeC1ydW50aW1lLmQudHMgYW5kIC4vanN4LWRldi1ydW50aW1lLmQudHMKICAgIG5hbWVzcGFjZSBKU1ggewogICAgICAgIHR5cGUgRWxlbWVudFR5cGUgPSBHbG9iYWxKU1hFbGVtZW50VHlwZTsKICAgICAgICBpbnRlcmZhY2UgRWxlbWVudCBleHRlbmRzIEdsb2JhbEpTWEVsZW1lbnQge30KICAgICAgICBpbnRlcmZhY2UgRWxlbWVudENsYXNzIGV4dGVuZHMgR2xvYmFsSlNYRWxlbWVudENsYXNzIHt9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRBdHRyaWJ1dGVzUHJvcGVydHkgZXh0ZW5kcyBHbG9iYWxKU1hFbGVtZW50QXR0cmlidXRlc1Byb3BlcnR5IHt9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRDaGlsZHJlbkF0dHJpYnV0ZSBleHRlbmRzIEdsb2JhbEpTWEVsZW1lbnRDaGlsZHJlbkF0dHJpYnV0ZSB7fQoKICAgICAgICB0eXBlIExpYnJhcnlNYW5hZ2VkQXR0cmlidXRlczxDLCBQPiA9IEdsb2JhbEpTWExpYnJhcnlNYW5hZ2VkQXR0cmlidXRlczxDLCBQPjsKCiAgICAgICAgaW50ZXJmYWNlIEludHJpbnNpY0F0dHJpYnV0ZXMgZXh0ZW5kcyBHbG9iYWxKU1hJbnRyaW5zaWNBdHRyaWJ1dGVzIHt9CiAgICAgICAgaW50ZXJmYWNlIEludHJpbnNpY0NsYXNzQXR0cmlidXRlczxUPiBleHRlbmRzIEdsb2JhbEpTWEludHJpbnNpY0NsYXNzQXR0cmlidXRlczxUPiB7fQogICAgICAgIGludGVyZmFjZSBJbnRyaW5zaWNFbGVtZW50cyBleHRlbmRzIEdsb2JhbEpTWEludHJpbnNpY0VsZW1lbnRzIHt9CiAgICB9Cn0KCi8vIG5ha2VkICdhbnknIHR5cGUgaW4gYSBjb25kaXRpb25hbCB0eXBlIHdpbGwgc2hvcnQgY2lyY3VpdCBhbmQgdW5pb24gYm90aCB0aGUgdGhlbi9lbHNlIGJyYW5jaGVzCi8vIHNvIGJvb2xlYW4gaXMgb25seSByZXNvbHZlZCBmb3IgVCA9IGFueQp0eXBlIElzRXhhY3RseUFueTxUPiA9IGJvb2xlYW4gZXh0ZW5kcyAoVCBleHRlbmRzIG5ldmVyID8gdHJ1ZSA6IGZhbHNlKSA/IHRydWUgOiBmYWxzZTsKCnR5cGUgRXhhY3RseUFueVByb3BlcnR5S2V5czxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IElzRXhhY3RseUFueTxUW0tdPiBleHRlbmRzIHRydWUgPyBLIDogbmV2ZXIgfVtrZXlvZiBUXTsKdHlwZSBOb3RFeGFjdGx5QW55UHJvcGVydHlLZXlzPFQ+ID0gRXhjbHVkZTxrZXlvZiBULCBFeGFjdGx5QW55UHJvcGVydHlLZXlzPFQ+PjsKCi8vIFRyeSB0byByZXNvbHZlIGlsbC1kZWZpbmVkIHByb3BzIGxpa2UgZm9yIEpTIHVzZXJzOiBwcm9wcyBjYW4gYmUgYW55LCBvciBzb21ldGltZXMgb2JqZWN0cyB3aXRoIHByb3BlcnRpZXMgb2YgdHlwZSBhbnkKdHlwZSBNZXJnZVByb3BUeXBlczxQLCBUPiA9CiAgICAvLyBEaXN0cmlidXRlIG92ZXIgUCBpbiBjYXNlIGl0IGlzIGEgdW5pb24gdHlwZQogICAgUCBleHRlbmRzIGFueQogICAgICAgIC8vIElmIHByb3BzIGlzIHR5cGUgYW55LCB1c2UgcHJvcFR5cGVzIGRlZmluaXRpb25zCiAgICAgICAgPyBJc0V4YWN0bHlBbnk8UD4gZXh0ZW5kcyB0cnVlID8gVCA6CiAgICAgICAgICAgIC8vIElmIGRlY2xhcmVkIHByb3BzIGhhdmUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBpZ25vcmUgaW5mZXJyZWQgcHJvcHMgZW50aXJlbHkgYXMga2V5b2YgZ2V0cyB3aWRlbmVkCiAgICAgICAgICAgIHN0cmluZyBleHRlbmRzIGtleW9mIFAgPyBQIDoKICAgICAgICAgICAgICAgIC8vIFByZWZlciBkZWNsYXJlZCB0eXBlcyB3aGljaCBhcmUgbm90IGV4YWN0bHkgYW55CiAgICAgICAgICAgICAgICAmIFBpY2s8UCwgTm90RXhhY3RseUFueVByb3BlcnR5S2V5czxQPj4KICAgICAgICAgICAgICAgIC8vIEZvciBwcm9wcyB3aGljaCBhcmUgZXhhY3RseSBhbnksIHVzZSB0aGUgdHlwZSBpbmZlcnJlZCBmcm9tIHByb3BUeXBlcyBpZiBwcmVzZW50CiAgICAgICAgICAgICAgICAmIFBpY2s8VCwgRXhjbHVkZTxrZXlvZiBULCBOb3RFeGFjdGx5QW55UHJvcGVydHlLZXlzPFA+Pj4KICAgICAgICAgICAgICAgIC8vIEtlZXAgbGVmdG92ZXIgcHJvcHMgbm90IHNwZWNpZmllZCBpbiBwcm9wVHlwZXMKICAgICAgICAgICAgICAgICYgUGljazxQLCBFeGNsdWRlPGtleW9mIFAsIGtleW9mIFQ+PgogICAgICAgIDogbmV2ZXI7Cgp0eXBlIEluZXhhY3RQYXJ0aWFsPFQ+ID0geyBbSyBpbiBrZXlvZiBUXT86IFRbS10gfCB1bmRlZmluZWQgfTsKCi8vIEFueSBwcm9wIHRoYXQgaGFzIGEgZGVmYXVsdCBwcm9wIGJlY29tZXMgb3B0aW9uYWwsIGJ1dCBpdHMgdHlwZSBpcyB1bmNoYW5nZWQKLy8gVW5kZWNsYXJlZCBkZWZhdWx0IHByb3BzIGFyZSBhdWdtZW50ZWQgaW50byB0aGUgcmVzdWx0aW5nIGFsbG93YWJsZSBhdHRyaWJ1dGVzCi8vIElmIGRlY2xhcmVkIHByb3BzIGhhdmUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBpZ25vcmUgZGVmYXVsdCBwcm9wcyBlbnRpcmVseSBhcyBrZXlvZiBnZXRzIHdpZGVuZWQKLy8gV3JhcCBpbiBhbiBvdXRlci1sZXZlbCBjb25kaXRpb25hbCB0eXBlIHRvIGFsbG93IGRpc3RyaWJ1dGlvbiBvdmVyIHByb3BzIHRoYXQgYXJlIHVuaW9ucwp0eXBlIERlZmF1bHRpemU8UCwgRD4gPSBQIGV4dGVuZHMgYW55CiAgICA/IHN0cmluZyBleHRlbmRzIGtleW9mIFAgPyBQIDoKICAgICAgICAmIFBpY2s8UCwgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBEPj4KICAgICAgICAmIEluZXhhY3RQYXJ0aWFsPFBpY2s8UCwgRXh0cmFjdDxrZXlvZiBQLCBrZXlvZiBEPj4+CiAgICAgICAgJiBJbmV4YWN0UGFydGlhbDxQaWNrPEQsIEV4Y2x1ZGU8a2V5b2YgRCwga2V5b2YgUD4+PgogICAgOiBuZXZlcjsKCnR5cGUgUmVhY3RNYW5hZ2VkQXR0cmlidXRlczxDLCBQPiA9IEMgZXh0ZW5kcyB7IHByb3BUeXBlczogaW5mZXIgVDsgZGVmYXVsdFByb3BzOiBpbmZlciBEOyB9CiAgICA/IERlZmF1bHRpemU8TWVyZ2VQcm9wVHlwZXM8UCwgUHJvcFR5cGVzLkluZmVyUHJvcHM8VD4+LCBEPgogICAgOiBDIGV4dGVuZHMgeyBwcm9wVHlwZXM6IGluZmVyIFQ7IH0KICAgICAgICA/IE1lcmdlUHJvcFR5cGVzPFAsIFByb3BUeXBlcy5JbmZlclByb3BzPFQ+PgogICAgICAgIDogQyBleHRlbmRzIHsgZGVmYXVsdFByb3BzOiBpbmZlciBEOyB9CiAgICAgICAgICAgID8gRGVmYXVsdGl6ZTxQLCBEPgogICAgICAgICAgICA6IFA7CgpkZWNsYXJlIGdsb2JhbCB7CiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSBgUmVhY3QuSlNYYCBpbnN0ZWFkIG9mIHRoZSBnbG9iYWwgYEpTWGAgbmFtZXNwYWNlLgogICAgICovCiAgICBuYW1lc3BhY2UgSlNYIHsKICAgICAgICAvLyBXZSBkb24ndCBqdXN0IGFsaWFzIFJlYWN0LkVsZW1lbnRUeXBlIGJlY2F1c2UgUmVhY3QuRWxlbWVudFR5cGUKICAgICAgICAvLyBoaXN0b3JpY2FsbHkgZG9lcyBtb3JlIHRoYW4gd2UgbmVlZCBpdCB0by4KICAgICAgICAvLyBFLmcuIGl0IGFsc28gY29udGFpbnMgLnByb3BUeXBlcyBhbmQgc28gVFMgYWxzbyB2ZXJpZmllcyB0aGUgZGVjbGFyZWQKICAgICAgICAvLyBwcm9wcyB0eXBlIGRvZXMgbWF0Y2ggdGhlIGRlY2xhcmVkIC5wcm9wVHlwZXMuCiAgICAgICAgLy8gQnV0IGlmIGxpYnJhcmllcyBkZWNsYXJlZCB0aGVpciAucHJvcFR5cGVzIGJ1dCBub3QgcHJvcHMgdHlwZSwKICAgICAgICAvLyBvciB0aGV5IG1pc21hdGNoLCB5b3Ugd29uJ3QgYmUgYWJsZSB0byB1c2UgdGhlIGNsYXNzIGNvbXBvbmVudAogICAgICAgIC8vIGFzIGEgSlNYLkVsZW1lbnRUeXBlLgogICAgICAgIC8vIFdlIGNvdWxkIGZpeCB0aGlzIGV2ZXJ5d2hlcmUgYnV0IHdlJ3JlIHVsdGltYXRlbHkgbm90IGludGVyZXN0ZWQgaW4KICAgICAgICAvLyAucHJvcFR5cGVzIGFzc2lnbmFiaWxpdHkgc28gd2UgbWlnaHQgYXMgd2VsbCBkcm9wIGl0IGVudGlyZWx5IGhlcmUgdG8KICAgICAgICAvLyAgcmVkdWNlIHRoZSB3b3JrIG9mIHRoZSB0eXBlLWNoZWNrZXIuCiAgICAgICAgLy8gVE9ETzogQ2hlY2sgaW1wYWN0IG9mIG1ha2luZyBSZWFjdC5FbGVtZW50VHlwZTxQID0gYW55PiA9IFJlYWN0LkpTWEVsZW1lbnRDb25zdHJ1Y3RvcjxQPgogICAgICAgIHR5cGUgRWxlbWVudFR5cGUgPSBzdHJpbmcgfCBSZWFjdC5KU1hFbGVtZW50Q29uc3RydWN0b3I8YW55PjsKICAgICAgICBpbnRlcmZhY2UgRWxlbWVudCBleHRlbmRzIFJlYWN0LlJlYWN0RWxlbWVudDxhbnksIGFueT4geyB9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRDbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnk+IHsKICAgICAgICAgICAgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICB9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRBdHRyaWJ1dGVzUHJvcGVydHkgeyBwcm9wczoge307IH0KICAgICAgICBpbnRlcmZhY2UgRWxlbWVudENoaWxkcmVuQXR0cmlidXRlIHsgY2hpbGRyZW46IHt9OyB9CgogICAgICAgIC8vIFdlIGNhbid0IHJlY3Vyc2UgZm9yZXZlciBiZWNhdXNlIGB0eXBlYCBjYW4ndCBiZSBzZWxmLXJlZmVyZW50aWFsOwogICAgICAgIC8vIGxldCdzIGFzc3VtZSBpdCdzIHJlYXNvbmFibGUgdG8gZG8gYSBzaW5nbGUgUmVhY3QubGF6eSgpIGFyb3VuZCBhIHNpbmdsZSBSZWFjdC5tZW1vKCkgLyB2aWNlLXZlcnNhCiAgICAgICAgdHlwZSBMaWJyYXJ5TWFuYWdlZEF0dHJpYnV0ZXM8QywgUD4gPSBDIGV4dGVuZHMgUmVhY3QuTWVtb0V4b3RpY0NvbXBvbmVudDxpbmZlciBUPiB8IFJlYWN0LkxhenlFeG90aWNDb21wb25lbnQ8aW5mZXIgVD4KICAgICAgICAgICAgPyBUIGV4dGVuZHMgUmVhY3QuTWVtb0V4b3RpY0NvbXBvbmVudDxpbmZlciBVPiB8IFJlYWN0LkxhenlFeG90aWNDb21wb25lbnQ8aW5mZXIgVT4KICAgICAgICAgICAgICAgID8gUmVhY3RNYW5hZ2VkQXR0cmlidXRlczxVLCBQPgogICAgICAgICAgICAgICAgOiBSZWFjdE1hbmFnZWRBdHRyaWJ1dGVzPFQsIFA+CiAgICAgICAgICAgIDogUmVhY3RNYW5hZ2VkQXR0cmlidXRlczxDLCBQPjsKCiAgICAgICAgaW50ZXJmYWNlIEludHJpbnNpY0F0dHJpYnV0ZXMgZXh0ZW5kcyBSZWFjdC5BdHRyaWJ1dGVzIHsgfQogICAgICAgIGludGVyZmFjZSBJbnRyaW5zaWNDbGFzc0F0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBSZWFjdC5DbGFzc0F0dHJpYnV0ZXM8VD4geyB9CgogICAgICAgIGludGVyZmFjZSBJbnRyaW5zaWNFbGVtZW50cyB7CiAgICAgICAgICAgIC8vIEhUTUwKICAgICAgICAgICAgYTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuQW5jaG9ySFRNTEF0dHJpYnV0ZXM8SFRNTEFuY2hvckVsZW1lbnQ+LCBIVE1MQW5jaG9yRWxlbWVudD47CiAgICAgICAgICAgIGFiYnI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBhZGRyZXNzOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgYXJlYTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuQXJlYUhUTUxBdHRyaWJ1dGVzPEhUTUxBcmVhRWxlbWVudD4sIEhUTUxBcmVhRWxlbWVudD47CiAgICAgICAgICAgIGFydGljbGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBhc2lkZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGF1ZGlvOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5BdWRpb0hUTUxBdHRyaWJ1dGVzPEhUTUxBdWRpb0VsZW1lbnQ+LCBIVE1MQXVkaW9FbGVtZW50PjsKICAgICAgICAgICAgYjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGJhc2U6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkJhc2VIVE1MQXR0cmlidXRlczxIVE1MQmFzZUVsZW1lbnQ+LCBIVE1MQmFzZUVsZW1lbnQ+OwogICAgICAgICAgICBiZGk6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBiZG86IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBiaWc6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBibG9ja3F1b3RlOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5CbG9ja3F1b3RlSFRNTEF0dHJpYnV0ZXM8SFRNTFF1b3RlRWxlbWVudD4sIEhUTUxRdW90ZUVsZW1lbnQ+OwogICAgICAgICAgICBib2R5OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MQm9keUVsZW1lbnQ+LCBIVE1MQm9keUVsZW1lbnQ+OwogICAgICAgICAgICBicjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEJSRWxlbWVudD4sIEhUTUxCUkVsZW1lbnQ+OwogICAgICAgICAgICBidXR0b246IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkJ1dHRvbkhUTUxBdHRyaWJ1dGVzPEhUTUxCdXR0b25FbGVtZW50PiwgSFRNTEJ1dHRvbkVsZW1lbnQ+OwogICAgICAgICAgICBjYW52YXM6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkNhbnZhc0hUTUxBdHRyaWJ1dGVzPEhUTUxDYW52YXNFbGVtZW50PiwgSFRNTENhbnZhc0VsZW1lbnQ+OwogICAgICAgICAgICBjYXB0aW9uOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgY2VudGVyOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgY2l0ZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGNvZGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBjb2w6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkNvbEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNvbEVsZW1lbnQ+LCBIVE1MVGFibGVDb2xFbGVtZW50PjsKICAgICAgICAgICAgY29sZ3JvdXA6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkNvbGdyb3VwSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlQ29sRWxlbWVudD4sIEhUTUxUYWJsZUNvbEVsZW1lbnQ+OwogICAgICAgICAgICBkYXRhOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5EYXRhSFRNTEF0dHJpYnV0ZXM8SFRNTERhdGFFbGVtZW50PiwgSFRNTERhdGFFbGVtZW50PjsKICAgICAgICAgICAgZGF0YWxpc3Q6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxEYXRhTGlzdEVsZW1lbnQ+LCBIVE1MRGF0YUxpc3RFbGVtZW50PjsKICAgICAgICAgICAgZGQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBkZWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkRlbEhUTUxBdHRyaWJ1dGVzPEhUTUxNb2RFbGVtZW50PiwgSFRNTE1vZEVsZW1lbnQ+OwogICAgICAgICAgICBkZXRhaWxzOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5EZXRhaWxzSFRNTEF0dHJpYnV0ZXM8SFRNTERldGFpbHNFbGVtZW50PiwgSFRNTERldGFpbHNFbGVtZW50PjsKICAgICAgICAgICAgZGZuOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZGlhbG9nOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5EaWFsb2dIVE1MQXR0cmlidXRlczxIVE1MRGlhbG9nRWxlbWVudD4sIEhUTUxEaWFsb2dFbGVtZW50PjsKICAgICAgICAgICAgZGl2OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4sIEhUTUxEaXZFbGVtZW50PjsKICAgICAgICAgICAgZGw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxETGlzdEVsZW1lbnQ+LCBIVE1MRExpc3RFbGVtZW50PjsKICAgICAgICAgICAgZHQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBlbTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGVtYmVkOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5FbWJlZEhUTUxBdHRyaWJ1dGVzPEhUTUxFbWJlZEVsZW1lbnQ+LCBIVE1MRW1iZWRFbGVtZW50PjsKICAgICAgICAgICAgZmllbGRzZXQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkZpZWxkc2V0SFRNTEF0dHJpYnV0ZXM8SFRNTEZpZWxkU2V0RWxlbWVudD4sIEhUTUxGaWVsZFNldEVsZW1lbnQ+OwogICAgICAgICAgICBmaWdjYXB0aW9uOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZmlndXJlOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZm9vdGVyOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZm9ybTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuRm9ybUhUTUxBdHRyaWJ1dGVzPEhUTUxGb3JtRWxlbWVudD4sIEhUTUxGb3JtRWxlbWVudD47CiAgICAgICAgICAgIGgxOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgICAgICBoMjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICAgICAgaDM6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgICAgIGg0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgICAgICBoNTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICAgICAgaDY6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgICAgIGhlYWQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkRWxlbWVudD4sIEhUTUxIZWFkRWxlbWVudD47CiAgICAgICAgICAgIGhlYWRlcjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGhncm91cDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGhyOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MSFJFbGVtZW50PiwgSFRNTEhSRWxlbWVudD47CiAgICAgICAgICAgIGh0bWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lkh0bWxIVE1MQXR0cmlidXRlczxIVE1MSHRtbEVsZW1lbnQ+LCBIVE1MSHRtbEVsZW1lbnQ+OwogICAgICAgICAgICBpOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgaWZyYW1lOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JZnJhbWVIVE1MQXR0cmlidXRlczxIVE1MSUZyYW1lRWxlbWVudD4sIEhUTUxJRnJhbWVFbGVtZW50PjsKICAgICAgICAgICAgaW1nOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JbWdIVE1MQXR0cmlidXRlczxIVE1MSW1hZ2VFbGVtZW50PiwgSFRNTEltYWdlRWxlbWVudD47CiAgICAgICAgICAgIGlucHV0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JbnB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+LCBIVE1MSW5wdXRFbGVtZW50PjsKICAgICAgICAgICAgaW5zOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JbnNIVE1MQXR0cmlidXRlczxIVE1MTW9kRWxlbWVudD4sIEhUTUxNb2RFbGVtZW50PjsKICAgICAgICAgICAga2JkOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAga2V5Z2VuOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5LZXlnZW5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbGFiZWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkxhYmVsSFRNTEF0dHJpYnV0ZXM8SFRNTExhYmVsRWxlbWVudD4sIEhUTUxMYWJlbEVsZW1lbnQ+OwogICAgICAgICAgICBsZWdlbmQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxMZWdlbmRFbGVtZW50PiwgSFRNTExlZ2VuZEVsZW1lbnQ+OwogICAgICAgICAgICBsaTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuTGlIVE1MQXR0cmlidXRlczxIVE1MTElFbGVtZW50PiwgSFRNTExJRWxlbWVudD47CiAgICAgICAgICAgIGxpbms6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkxpbmtIVE1MQXR0cmlidXRlczxIVE1MTGlua0VsZW1lbnQ+LCBIVE1MTGlua0VsZW1lbnQ+OwogICAgICAgICAgICBtYWluOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbWFwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5NYXBIVE1MQXR0cmlidXRlczxIVE1MTWFwRWxlbWVudD4sIEhUTUxNYXBFbGVtZW50PjsKICAgICAgICAgICAgbWFyazogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIG1lbnU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lk1lbnVIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbWVudWl0ZW06IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBtZXRhOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5NZXRhSFRNTEF0dHJpYnV0ZXM8SFRNTE1ldGFFbGVtZW50PiwgSFRNTE1ldGFFbGVtZW50PjsKICAgICAgICAgICAgbWV0ZXI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lk1ldGVySFRNTEF0dHJpYnV0ZXM8SFRNTE1ldGVyRWxlbWVudD4sIEhUTUxNZXRlckVsZW1lbnQ+OwogICAgICAgICAgICBuYXY6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBub2luZGV4OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbm9zY3JpcHQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBvYmplY3Q6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lk9iamVjdEhUTUxBdHRyaWJ1dGVzPEhUTUxPYmplY3RFbGVtZW50PiwgSFRNTE9iamVjdEVsZW1lbnQ+OwogICAgICAgICAgICBvbDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuT2xIVE1MQXR0cmlidXRlczxIVE1MT0xpc3RFbGVtZW50PiwgSFRNTE9MaXN0RWxlbWVudD47CiAgICAgICAgICAgIG9wdGdyb3VwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5PcHRncm91cEhUTUxBdHRyaWJ1dGVzPEhUTUxPcHRHcm91cEVsZW1lbnQ+LCBIVE1MT3B0R3JvdXBFbGVtZW50PjsKICAgICAgICAgICAgb3B0aW9uOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5PcHRpb25IVE1MQXR0cmlidXRlczxIVE1MT3B0aW9uRWxlbWVudD4sIEhUTUxPcHRpb25FbGVtZW50PjsKICAgICAgICAgICAgb3V0cHV0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5PdXRwdXRIVE1MQXR0cmlidXRlczxIVE1MT3V0cHV0RWxlbWVudD4sIEhUTUxPdXRwdXRFbGVtZW50PjsKICAgICAgICAgICAgcDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFBhcmFncmFwaEVsZW1lbnQ+LCBIVE1MUGFyYWdyYXBoRWxlbWVudD47CiAgICAgICAgICAgIHBhcmFtOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5QYXJhbUhUTUxBdHRyaWJ1dGVzPEhUTUxQYXJhbUVsZW1lbnQ+LCBIVE1MUGFyYW1FbGVtZW50PjsKICAgICAgICAgICAgcGljdHVyZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHByZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFByZUVsZW1lbnQ+LCBIVE1MUHJlRWxlbWVudD47CiAgICAgICAgICAgIHByb2dyZXNzOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5Qcm9ncmVzc0hUTUxBdHRyaWJ1dGVzPEhUTUxQcm9ncmVzc0VsZW1lbnQ+LCBIVE1MUHJvZ3Jlc3NFbGVtZW50PjsKICAgICAgICAgICAgcTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuUXVvdGVIVE1MQXR0cmlidXRlczxIVE1MUXVvdGVFbGVtZW50PiwgSFRNTFF1b3RlRWxlbWVudD47CiAgICAgICAgICAgIHJwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgcnQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBydWJ5OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgczogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHNhbXA6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBzZWFyY2g6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBzbG90OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5TbG90SFRNTEF0dHJpYnV0ZXM8SFRNTFNsb3RFbGVtZW50PiwgSFRNTFNsb3RFbGVtZW50PjsKICAgICAgICAgICAgc2NyaXB0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5TY3JpcHRIVE1MQXR0cmlidXRlczxIVE1MU2NyaXB0RWxlbWVudD4sIEhUTUxTY3JpcHRFbGVtZW50PjsKICAgICAgICAgICAgc2VjdGlvbjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHNlbGVjdDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuU2VsZWN0SFRNTEF0dHJpYnV0ZXM8SFRNTFNlbGVjdEVsZW1lbnQ+LCBIVE1MU2VsZWN0RWxlbWVudD47CiAgICAgICAgICAgIHNtYWxsOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgc291cmNlOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5Tb3VyY2VIVE1MQXR0cmlidXRlczxIVE1MU291cmNlRWxlbWVudD4sIEhUTUxTb3VyY2VFbGVtZW50PjsKICAgICAgICAgICAgc3BhbjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFNwYW5FbGVtZW50PiwgSFRNTFNwYW5FbGVtZW50PjsKICAgICAgICAgICAgc3Ryb25nOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgc3R5bGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LlN0eWxlSFRNTEF0dHJpYnV0ZXM8SFRNTFN0eWxlRWxlbWVudD4sIEhUTUxTdHlsZUVsZW1lbnQ+OwogICAgICAgICAgICBzdWI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBzdW1tYXJ5OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgc3VwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgdGFibGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LlRhYmxlSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlRWxlbWVudD4sIEhUTUxUYWJsZUVsZW1lbnQ+OwogICAgICAgICAgICB0ZW1wbGF0ZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRlbXBsYXRlRWxlbWVudD4sIEhUTUxUZW1wbGF0ZUVsZW1lbnQ+OwogICAgICAgICAgICB0Ym9keTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+LCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudD47CiAgICAgICAgICAgIHRkOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5UZEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD4sIEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD47CiAgICAgICAgICAgIHRleHRhcmVhOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5UZXh0YXJlYUhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+LCBIVE1MVGV4dEFyZWFFbGVtZW50PjsKICAgICAgICAgICAgdGZvb3Q6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PiwgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+OwogICAgICAgICAgICB0aDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuVGhIVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4sIEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PjsKICAgICAgICAgICAgdGhlYWQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PiwgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+OwogICAgICAgICAgICB0aW1lOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5UaW1lSFRNTEF0dHJpYnV0ZXM8SFRNTFRpbWVFbGVtZW50PiwgSFRNTFRpbWVFbGVtZW50PjsKICAgICAgICAgICAgdGl0bGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUaXRsZUVsZW1lbnQ+LCBIVE1MVGl0bGVFbGVtZW50PjsKICAgICAgICAgICAgdHI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVJvd0VsZW1lbnQ+LCBIVE1MVGFibGVSb3dFbGVtZW50PjsKICAgICAgICAgICAgdHJhY2s6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LlRyYWNrSFRNTEF0dHJpYnV0ZXM8SFRNTFRyYWNrRWxlbWVudD4sIEhUTUxUcmFja0VsZW1lbnQ+OwogICAgICAgICAgICB1OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgdWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxVTGlzdEVsZW1lbnQ+LCBIVE1MVUxpc3RFbGVtZW50PjsKICAgICAgICAgICAgInZhciI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICB2aWRlbzogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuVmlkZW9IVE1MQXR0cmlidXRlczxIVE1MVmlkZW9FbGVtZW50PiwgSFRNTFZpZGVvRWxlbWVudD47CiAgICAgICAgICAgIHdicjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHdlYnZpZXc6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LldlYlZpZXdIVE1MQXR0cmlidXRlczxIVE1MV2ViVmlld0VsZW1lbnQ+LCBIVE1MV2ViVmlld0VsZW1lbnQ+OwoKICAgICAgICAgICAgLy8gU1ZHCiAgICAgICAgICAgIHN2ZzogUmVhY3QuU1ZHUHJvcHM8U1ZHU1ZHRWxlbWVudD47CgogICAgICAgICAgICBhbmltYXRlOiBSZWFjdC5TVkdQcm9wczxTVkdFbGVtZW50PjsgLy8gVE9ETzogSXQgaXMgU1ZHQW5pbWF0ZUVsZW1lbnQgYnV0IGlzIG5vdCBpbiBUeXBlU2NyaXB0J3MgbGliLmRvbS5kLnRzIGZvciBub3cuCiAgICAgICAgICAgIGFuaW1hdGVNb3Rpb246IFJlYWN0LlNWR1Byb3BzPFNWR0VsZW1lbnQ+OwogICAgICAgICAgICBhbmltYXRlVHJhbnNmb3JtOiBSZWFjdC5TVkdQcm9wczxTVkdFbGVtZW50PjsgLy8gVE9ETzogSXQgaXMgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQgYnV0IGlzIG5vdCBpbiBUeXBlU2NyaXB0J3MgbGliLmRvbS5kLnRzIGZvciBub3cuCiAgICAgICAgICAgIGNpcmNsZTogUmVhY3QuU1ZHUHJvcHM8U1ZHQ2lyY2xlRWxlbWVudD47CiAgICAgICAgICAgIGNsaXBQYXRoOiBSZWFjdC5TVkdQcm9wczxTVkdDbGlwUGF0aEVsZW1lbnQ+OwogICAgICAgICAgICBkZWZzOiBSZWFjdC5TVkdQcm9wczxTVkdEZWZzRWxlbWVudD47CiAgICAgICAgICAgIGRlc2M6IFJlYWN0LlNWR1Byb3BzPFNWR0Rlc2NFbGVtZW50PjsKICAgICAgICAgICAgZWxsaXBzZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRWxsaXBzZUVsZW1lbnQ+OwogICAgICAgICAgICBmZUJsZW5kOiBSZWFjdC5TVkdQcm9wczxTVkdGRUJsZW5kRWxlbWVudD47CiAgICAgICAgICAgIGZlQ29sb3JNYXRyaXg6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50PjsKICAgICAgICAgICAgZmVDb21wb25lbnRUcmFuc2ZlcjogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ+OwogICAgICAgICAgICBmZUNvbXBvc2l0ZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVDb21wb3NpdGVFbGVtZW50PjsKICAgICAgICAgICAgZmVDb252b2x2ZU1hdHJpeDogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ+OwogICAgICAgICAgICBmZURpZmZ1c2VMaWdodGluZzogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50PjsKICAgICAgICAgICAgZmVEaXNwbGFjZW1lbnRNYXA6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudD47CiAgICAgICAgICAgIGZlRGlzdGFudExpZ2h0OiBSZWFjdC5TVkdQcm9wczxTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ+OwogICAgICAgICAgICBmZURyb3BTaGFkb3c6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ+OwogICAgICAgICAgICBmZUZsb29kOiBSZWFjdC5TVkdQcm9wczxTVkdGRUZsb29kRWxlbWVudD47CiAgICAgICAgICAgIGZlRnVuY0E6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRnVuY0FFbGVtZW50PjsKICAgICAgICAgICAgZmVGdW5jQjogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVGdW5jQkVsZW1lbnQ+OwogICAgICAgICAgICBmZUZ1bmNHOiBSZWFjdC5TVkdQcm9wczxTVkdGRUZ1bmNHRWxlbWVudD47CiAgICAgICAgICAgIGZlRnVuY1I6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRnVuY1JFbGVtZW50PjsKICAgICAgICAgICAgZmVHYXVzc2lhbkJsdXI6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudD47CiAgICAgICAgICAgIGZlSW1hZ2U6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFSW1hZ2VFbGVtZW50PjsKICAgICAgICAgICAgZmVNZXJnZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVNZXJnZUVsZW1lbnQ+OwogICAgICAgICAgICBmZU1lcmdlTm9kZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVNZXJnZU5vZGVFbGVtZW50PjsKICAgICAgICAgICAgZmVNb3JwaG9sb2d5OiBSZWFjdC5TVkdQcm9wczxTVkdGRU1vcnBob2xvZ3lFbGVtZW50PjsKICAgICAgICAgICAgZmVPZmZzZXQ6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFT2Zmc2V0RWxlbWVudD47CiAgICAgICAgICAgIGZlUG9pbnRMaWdodDogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVQb2ludExpZ2h0RWxlbWVudD47CiAgICAgICAgICAgIGZlU3BlY3VsYXJMaWdodGluZzogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudD47CiAgICAgICAgICAgIGZlU3BvdExpZ2h0OiBSZWFjdC5TVkdQcm9wczxTVkdGRVNwb3RMaWdodEVsZW1lbnQ+OwogICAgICAgICAgICBmZVRpbGU6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFVGlsZUVsZW1lbnQ+OwogICAgICAgICAgICBmZVR1cmJ1bGVuY2U6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ+OwogICAgICAgICAgICBmaWx0ZXI6IFJlYWN0LlNWR1Byb3BzPFNWR0ZpbHRlckVsZW1lbnQ+OwogICAgICAgICAgICBmb3JlaWduT2JqZWN0OiBSZWFjdC5TVkdQcm9wczxTVkdGb3JlaWduT2JqZWN0RWxlbWVudD47CiAgICAgICAgICAgIGc6IFJlYWN0LlNWR1Byb3BzPFNWR0dFbGVtZW50PjsKICAgICAgICAgICAgaW1hZ2U6IFJlYWN0LlNWR1Byb3BzPFNWR0ltYWdlRWxlbWVudD47CiAgICAgICAgICAgIGxpbmU6IFJlYWN0LlNWR0xpbmVFbGVtZW50QXR0cmlidXRlczxTVkdMaW5lRWxlbWVudD47CiAgICAgICAgICAgIGxpbmVhckdyYWRpZW50OiBSZWFjdC5TVkdQcm9wczxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ+OwogICAgICAgICAgICBtYXJrZXI6IFJlYWN0LlNWR1Byb3BzPFNWR01hcmtlckVsZW1lbnQ+OwogICAgICAgICAgICBtYXNrOiBSZWFjdC5TVkdQcm9wczxTVkdNYXNrRWxlbWVudD47CiAgICAgICAgICAgIG1ldGFkYXRhOiBSZWFjdC5TVkdQcm9wczxTVkdNZXRhZGF0YUVsZW1lbnQ+OwogICAgICAgICAgICBtcGF0aDogUmVhY3QuU1ZHUHJvcHM8U1ZHRWxlbWVudD47CiAgICAgICAgICAgIHBhdGg6IFJlYWN0LlNWR1Byb3BzPFNWR1BhdGhFbGVtZW50PjsKICAgICAgICAgICAgcGF0dGVybjogUmVhY3QuU1ZHUHJvcHM8U1ZHUGF0dGVybkVsZW1lbnQ+OwogICAgICAgICAgICBwb2x5Z29uOiBSZWFjdC5TVkdQcm9wczxTVkdQb2x5Z29uRWxlbWVudD47CiAgICAgICAgICAgIHBvbHlsaW5lOiBSZWFjdC5TVkdQcm9wczxTVkdQb2x5bGluZUVsZW1lbnQ+OwogICAgICAgICAgICByYWRpYWxHcmFkaWVudDogUmVhY3QuU1ZHUHJvcHM8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50PjsKICAgICAgICAgICAgcmVjdDogUmVhY3QuU1ZHUHJvcHM8U1ZHUmVjdEVsZW1lbnQ+OwogICAgICAgICAgICBzdG9wOiBSZWFjdC5TVkdQcm9wczxTVkdTdG9wRWxlbWVudD47CiAgICAgICAgICAgIHN3aXRjaDogUmVhY3QuU1ZHUHJvcHM8U1ZHU3dpdGNoRWxlbWVudD47CiAgICAgICAgICAgIHN5bWJvbDogUmVhY3QuU1ZHUHJvcHM8U1ZHU3ltYm9sRWxlbWVudD47CiAgICAgICAgICAgIHRleHQ6IFJlYWN0LlNWR1RleHRFbGVtZW50QXR0cmlidXRlczxTVkdUZXh0RWxlbWVudD47CiAgICAgICAgICAgIHRleHRQYXRoOiBSZWFjdC5TVkdQcm9wczxTVkdUZXh0UGF0aEVsZW1lbnQ+OwogICAgICAgICAgICB0c3BhbjogUmVhY3QuU1ZHUHJvcHM8U1ZHVFNwYW5FbGVtZW50PjsKICAgICAgICAgICAgdXNlOiBSZWFjdC5TVkdQcm9wczxTVkdVc2VFbGVtZW50PjsKICAgICAgICAgICAgdmlldzogUmVhY3QuU1ZHUHJvcHM8U1ZHVmlld0VsZW1lbnQ+OwogICAgICAgIH0KICAgIH0KfQoKLy8gUmVhY3QuSlNYIG5lZWRzIHRvIHBvaW50IHRvIGdsb2JhbC5KU1ggdG8ga2VlcCBnbG9iYWwgbW9kdWxlIGF1Z21lbnRhdGlvbnMgaW50YWN0LgovLyBCdXQgd2UgY2FuJ3QgYWNjZXNzIGdsb2JhbC5KU1ggc28gd2UgbmVlZCB0byBjcmVhdGUgdGhlc2UgYWxpYXNlcyBpbnN0ZWFkLgovLyBPbmNlIHRoZSBnbG9iYWwgSlNYIG5hbWVzcGFjZSB3aWxsIGJlIHJlbW92ZWQgd2UgcmVwbGFjZSBSZWFjdC5KU1ggd2l0aCB0aGUgY29udGVudHMgb2YgZ2xvYmFsLkpTWAp0eXBlIEdsb2JhbEpTWEVsZW1lbnRUeXBlID0gSlNYLkVsZW1lbnRUeXBlOwppbnRlcmZhY2UgR2xvYmFsSlNYRWxlbWVudCBleHRlbmRzIEpTWC5FbGVtZW50IHt9CmludGVyZmFjZSBHbG9iYWxKU1hFbGVtZW50Q2xhc3MgZXh0ZW5kcyBKU1guRWxlbWVudENsYXNzIHt9CmludGVyZmFjZSBHbG9iYWxKU1hFbGVtZW50QXR0cmlidXRlc1Byb3BlcnR5IGV4dGVuZHMgSlNYLkVsZW1lbnRBdHRyaWJ1dGVzUHJvcGVydHkge30KaW50ZXJmYWNlIEdsb2JhbEpTWEVsZW1lbnRDaGlsZHJlbkF0dHJpYnV0ZSBleHRlbmRzIEpTWC5FbGVtZW50Q2hpbGRyZW5BdHRyaWJ1dGUge30KCnR5cGUgR2xvYmFsSlNYTGlicmFyeU1hbmFnZWRBdHRyaWJ1dGVzPEMsIFA+ID0gSlNYLkxpYnJhcnlNYW5hZ2VkQXR0cmlidXRlczxDLCBQPjsKCmludGVyZmFjZSBHbG9iYWxKU1hJbnRyaW5zaWNBdHRyaWJ1dGVzIGV4dGVuZHMgSlNYLkludHJpbnNpY0F0dHJpYnV0ZXMge30KaW50ZXJmYWNlIEdsb2JhbEpTWEludHJpbnNpY0NsYXNzQXR0cmlidXRlczxUPiBleHRlbmRzIEpTWC5JbnRyaW5zaWNDbGFzc0F0dHJpYnV0ZXM8VD4ge30KCmludGVyZmFjZSBHbG9iYWxKU1hJbnRyaW5zaWNFbGVtZW50cyBleHRlbmRzIEpTWC5JbnRyaW5zaWNFbGVtZW50cyB7fQo=","base64").toString("utf8")},elements:{url:"https://tlkfrontprodpublic.blob.core.windows.net/template-builder-production/tb-jsx.editor/elements.d.ts",sha256:"e3981b97a14159fcb236b232a765795765872a18ebdf2c7708c7fe9606a94e4b",source:Buffer.from("Cgp0eXBlIFByaW1pdGl2ZSA9IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCB8IGJpZ2ludCB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkOwoKZGVjbGFyZSBuYW1lc3BhY2UgdXRpbCB7CiAgICB0eXBlIEFzc2VydEVxdWFsPFQsIFU+ID0gKDxWPigpID0+IFYgZXh0ZW5kcyBUID8gMSA6IDIpIGV4dGVuZHMgPFY+KCkgPT4gViBleHRlbmRzIFUgPyAxIDogMiA/IHRydWUgOiBmYWxzZTsKICAgIGV4cG9ydCB0eXBlIGlzQW55PFQ+ID0gMCBleHRlbmRzIDEgJiBUID8gdHJ1ZSA6IGZhbHNlOwogICAgZXhwb3J0IGNvbnN0IGFzc2VydEVxdWFsOiA8QSwgQj4odmFsOiBBc3NlcnRFcXVhbDxBLCBCPikgPT4gQXNzZXJ0RXF1YWw8QSwgQj47CiAgICBleHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4oX2FyZzogVCk6IHZvaWQ7CiAgICBleHBvcnQgZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoX3g6IG5ldmVyKTogbmV2ZXI7CiAgICBleHBvcnQgdHlwZSBPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IFBpY2s8VCwgRXhjbHVkZTxrZXlvZiBULCBLPj47CiAgICBleHBvcnQgdHlwZSBPbWl0S2V5czxULCBLIGV4dGVuZHMgc3RyaW5nPiA9IFBpY2s8VCwgRXhjbHVkZTxrZXlvZiBULCBLPj47CiAgICBleHBvcnQgdHlwZSBNYWtlUGFydGlhbDxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBPbWl0PFQsIEs+ICYgUGFydGlhbDxQaWNrPFQsIEs+PjsKICAgIGV4cG9ydCB0eXBlIEV4YWN0bHk8VCwgWD4gPSBUICYgUmVjb3JkPEV4Y2x1ZGU8a2V5b2YgWCwga2V5b2YgVD4sIG5ldmVyPjsKICAgIGV4cG9ydCBjb25zdCBhcnJheVRvRW51bTogPFQgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBbVCwgLi4uVFtdXT4oaXRlbXM6IFUpID0+IHsgW2sgaW4gVVtudW1iZXJdXTogazsgfTsKICAgIGV4cG9ydCBjb25zdCBnZXRWYWxpZEVudW1WYWx1ZXM6IChvYmo6IGFueSkgPT4gYW55W107CiAgICBleHBvcnQgY29uc3Qgb2JqZWN0VmFsdWVzOiAob2JqOiBhbnkpID0+IGFueVtdOwogICAgZXhwb3J0IGNvbnN0IG9iamVjdEtleXM6IE9iamVjdENvbnN0cnVjdG9yWyJrZXlzIl07CiAgICBleHBvcnQgY29uc3QgZmluZDogPFQ+KGFycjogVFtdLCBjaGVja2VyOiAoYXJnOiBUKSA9PiBhbnkpID0+IFQgfCB1bmRlZmluZWQ7CiAgICBleHBvcnQgdHlwZSBpZGVudGl0eTxUPiA9IG9iamVjdFV0aWwuaWRlbnRpdHk8VD47CiAgICBleHBvcnQgdHlwZSBmbGF0dGVuPFQ+ID0gb2JqZWN0VXRpbC5mbGF0dGVuPFQ+OwogICAgZXhwb3J0IHR5cGUgbm9VbmRlZmluZWQ8VD4gPSBUIGV4dGVuZHMgdW5kZWZpbmVkID8gbmV2ZXIgOiBUOwogICAgZXhwb3J0IGNvbnN0IGlzSW50ZWdlcjogTnVtYmVyQ29uc3RydWN0b3JbImlzSW50ZWdlciJdOwogICAgZXhwb3J0IGZ1bmN0aW9uIGpvaW5WYWx1ZXM8VCBleHRlbmRzIGFueVtdPihhcnJheTogVCwgc2VwYXJhdG9yPzogc3RyaW5nKTogc3RyaW5nOwogICAgZXhwb3J0IGNvbnN0IGpzb25TdHJpbmdpZnlSZXBsYWNlcjogKF86IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55OwogICAgZXhwb3J0IHt9Owp9CmRlY2xhcmUgbmFtZXNwYWNlIG9iamVjdFV0aWwgewogICAgZXhwb3J0IHR5cGUgTWVyZ2VTaGFwZXM8VSwgVj4gPSB7CiAgICAgICAgW2sgaW4gRXhjbHVkZTxrZXlvZiBVLCBrZXlvZiBWPl06IFVba107CiAgICB9ICYgVjsKICAgIHR5cGUgb3B0aW9uYWxLZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0gewogICAgICAgIFtrIGluIGtleW9mIFRdOiB1bmRlZmluZWQgZXh0ZW5kcyBUW2tdID8gayA6IG5ldmVyOwogICAgfVtrZXlvZiBUXTsKICAgIHR5cGUgcmVxdWlyZWRLZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0gewogICAgICAgIFtrIGluIGtleW9mIFRdOiB1bmRlZmluZWQgZXh0ZW5kcyBUW2tdID8gbmV2ZXIgOiBrOwogICAgfVtrZXlvZiBUXTsKICAgIGV4cG9ydCB0eXBlIGFkZFF1ZXN0aW9uTWFya3M8VCBleHRlbmRzIG9iamVjdCwgX08gPSBhbnk+ID0gewogICAgICAgIFtLIGluIHJlcXVpcmVkS2V5czxUPl06IFRbS107CiAgICB9ICYgewogICAgICAgIFtLIGluIG9wdGlvbmFsS2V5czxUPl0/OiBUW0tdOwogICAgfSAmIHsKICAgICAgICBbayBpbiBrZXlvZiBUXT86IHVua25vd247CiAgICB9OwogICAgZXhwb3J0IHR5cGUgaWRlbnRpdHk8VD4gPSBUOwogICAgZXhwb3J0IHR5cGUgZmxhdHRlbjxUPiA9IGlkZW50aXR5PHsKICAgICAgICBbayBpbiBrZXlvZiBUXTogVFtrXTsKICAgIH0+OwogICAgZXhwb3J0IHR5cGUgbm9OZXZlcktleXM8VD4gPSB7CiAgICAgICAgW2sgaW4ga2V5b2YgVF06IFtUW2tdXSBleHRlbmRzIFtuZXZlcl0gPyBuZXZlciA6IGs7CiAgICB9W2tleW9mIFRdOwogICAgZXhwb3J0IHR5cGUgbm9OZXZlcjxUPiA9IGlkZW50aXR5PHsKICAgICAgICBbayBpbiBub05ldmVyS2V5czxUPl06IGsgZXh0ZW5kcyBrZXlvZiBUID8gVFtrXSA6IG5ldmVyOwogICAgfT47CiAgICBleHBvcnQgY29uc3QgbWVyZ2VTaGFwZXM6IDxVLCBUPihmaXJzdDogVSwgc2Vjb25kOiBUKSA9PiBUICYgVTsKICAgIGV4cG9ydCB0eXBlIGV4dGVuZFNoYXBlPEEgZXh0ZW5kcyBvYmplY3QsIEIgZXh0ZW5kcyBvYmplY3Q+ID0gewogICAgICAgIFtLIGluIGtleW9mIEEgYXMgSyBleHRlbmRzIGtleW9mIEIgPyBuZXZlciA6IEtdOiBBW0tdOwogICAgfSAmIHsKICAgICAgICBbSyBpbiBrZXlvZiBCXTogQltLXTsKICAgIH07CiAgICBleHBvcnQge307Cn0KZGVjbGFyZSBjb25zdCBab2RQYXJzZWRUeXBlOiB7CiAgICBzdHJpbmc6ICJzdHJpbmciOwogICAgbnVtYmVyOiAibnVtYmVyIjsKICAgIGJpZ2ludDogImJpZ2ludCI7CiAgICBib29sZWFuOiAiYm9vbGVhbiI7CiAgICBzeW1ib2w6ICJzeW1ib2wiOwogICAgdW5kZWZpbmVkOiAidW5kZWZpbmVkIjsKICAgIG9iamVjdDogIm9iamVjdCI7CiAgICBmdW5jdGlvbjogImZ1bmN0aW9uIjsKICAgIG1hcDogIm1hcCI7CiAgICBuYW46ICJuYW4iOwogICAgaW50ZWdlcjogImludGVnZXIiOwogICAgZmxvYXQ6ICJmbG9hdCI7CiAgICBkYXRlOiAiZGF0ZSI7CiAgICBudWxsOiAibnVsbCI7CiAgICBhcnJheTogImFycmF5IjsKICAgIHVua25vd246ICJ1bmtub3duIjsKICAgIHByb21pc2U6ICJwcm9taXNlIjsKICAgIHZvaWQ6ICJ2b2lkIjsKICAgIG5ldmVyOiAibmV2ZXIiOwogICAgc2V0OiAic2V0IjsKfTsKdHlwZSBab2RQYXJzZWRUeXBlID0ga2V5b2YgdHlwZW9mIFpvZFBhcnNlZFR5cGU7Cgp0eXBlIGFsbEtleXM8VD4gPSBUIGV4dGVuZHMgYW55ID8ga2V5b2YgVCA6IG5ldmVyOwp0eXBlIHR5cGVUb0ZsYXR0ZW5lZEVycm9yPFQsIFUgPSBzdHJpbmc+ID0gewogICAgZm9ybUVycm9yczogVVtdOwogICAgZmllbGRFcnJvcnM6IHsKICAgICAgICBbUCBpbiBhbGxLZXlzPFQ+XT86IFVbXTsKICAgIH07Cn07CmRlY2xhcmUgY29uc3QgWm9kSXNzdWVDb2RlOiB7CiAgICBpbnZhbGlkX3R5cGU6ICJpbnZhbGlkX3R5cGUiOwogICAgaW52YWxpZF9saXRlcmFsOiAiaW52YWxpZF9saXRlcmFsIjsKICAgIGN1c3RvbTogImN1c3RvbSI7CiAgICBpbnZhbGlkX3VuaW9uOiAiaW52YWxpZF91bmlvbiI7CiAgICBpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3I6ICJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3IiOwogICAgaW52YWxpZF9lbnVtX3ZhbHVlOiAiaW52YWxpZF9lbnVtX3ZhbHVlIjsKICAgIHVucmVjb2duaXplZF9rZXlzOiAidW5yZWNvZ25pemVkX2tleXMiOwogICAgaW52YWxpZF9hcmd1bWVudHM6ICJpbnZhbGlkX2FyZ3VtZW50cyI7CiAgICBpbnZhbGlkX3JldHVybl90eXBlOiAiaW52YWxpZF9yZXR1cm5fdHlwZSI7CiAgICBpbnZhbGlkX2RhdGU6ICJpbnZhbGlkX2RhdGUiOwogICAgaW52YWxpZF9zdHJpbmc6ICJpbnZhbGlkX3N0cmluZyI7CiAgICB0b29fc21hbGw6ICJ0b29fc21hbGwiOwogICAgdG9vX2JpZzogInRvb19iaWciOwogICAgaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXM6ICJpbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlcyI7CiAgICBub3RfbXVsdGlwbGVfb2Y6ICJub3RfbXVsdGlwbGVfb2YiOwogICAgbm90X2Zpbml0ZTogIm5vdF9maW5pdGUiOwp9Owp0eXBlIFpvZElzc3VlQ29kZSA9IGtleW9mIHR5cGVvZiBab2RJc3N1ZUNvZGU7CnR5cGUgWm9kSXNzdWVCYXNlID0gewogICAgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXTsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn07CmludGVyZmFjZSBab2RJbnZhbGlkVHlwZUlzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlOwogICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGU7CiAgICByZWNlaXZlZDogWm9kUGFyc2VkVHlwZTsKfQppbnRlcmZhY2UgWm9kSW52YWxpZExpdGVyYWxJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmludmFsaWRfbGl0ZXJhbDsKICAgIGV4cGVjdGVkOiB1bmtub3duOwogICAgcmVjZWl2ZWQ6IHVua25vd247Cn0KaW50ZXJmYWNlIFpvZFVucmVjb2duaXplZEtleXNJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLnVucmVjb2duaXplZF9rZXlzOwogICAga2V5czogc3RyaW5nW107Cn0KaW50ZXJmYWNlIFpvZEludmFsaWRVbmlvbklzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbjsKICAgIHVuaW9uRXJyb3JzOiBab2RFcnJvcltdOwp9CmludGVyZmFjZSBab2RJbnZhbGlkVW5pb25EaXNjcmltaW5hdG9ySXNzdWUgZXh0ZW5kcyBab2RJc3N1ZUJhc2UgewogICAgY29kZTogdHlwZW9mIFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3I7CiAgICBvcHRpb25zOiBQcmltaXRpdmVbXTsKfQppbnRlcmZhY2UgWm9kSW52YWxpZEVudW1WYWx1ZUlzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIHJlY2VpdmVkOiBzdHJpbmcgfCBudW1iZXI7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZTsKICAgIG9wdGlvbnM6IChzdHJpbmcgfCBudW1iZXIpW107Cn0KaW50ZXJmYWNlIFpvZEludmFsaWRBcmd1bWVudHNJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmludmFsaWRfYXJndW1lbnRzOwogICAgYXJndW1lbnRzRXJyb3I6IFpvZEVycm9yOwp9CmludGVyZmFjZSBab2RJbnZhbGlkUmV0dXJuVHlwZUlzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZTsKICAgIHJldHVyblR5cGVFcnJvcjogWm9kRXJyb3I7Cn0KaW50ZXJmYWNlIFpvZEludmFsaWREYXRlSXNzdWUgZXh0ZW5kcyBab2RJc3N1ZUJhc2UgewogICAgY29kZTogdHlwZW9mIFpvZElzc3VlQ29kZS5pbnZhbGlkX2RhdGU7Cn0KdHlwZSBTdHJpbmdWYWxpZGF0aW9uID0gImVtYWlsIiB8ICJ1cmwiIHwgImVtb2ppIiB8ICJ1dWlkIiB8ICJuYW5vaWQiIHwgInJlZ2V4IiB8ICJjdWlkIiB8ICJjdWlkMiIgfCAidWxpZCIgfCAiZGF0ZXRpbWUiIHwgImRhdGUiIHwgInRpbWUiIHwgImR1cmF0aW9uIiB8ICJpcCIgfCAiY2lkciIgfCAiYmFzZTY0IiB8ICJqd3QiIHwgImJhc2U2NHVybCIgfCB7CiAgICBpbmNsdWRlczogc3RyaW5nOwogICAgcG9zaXRpb24/OiBudW1iZXI7Cn0gfCB7CiAgICBzdGFydHNXaXRoOiBzdHJpbmc7Cn0gfCB7CiAgICBlbmRzV2l0aDogc3RyaW5nOwp9OwppbnRlcmZhY2UgWm9kSW52YWxpZFN0cmluZ0lzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmc7CiAgICB2YWxpZGF0aW9uOiBTdHJpbmdWYWxpZGF0aW9uOwp9CmludGVyZmFjZSBab2RUb29TbWFsbElzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsOwogICAgbWluaW11bTogbnVtYmVyIHwgYmlnaW50OwogICAgaW5jbHVzaXZlOiBib29sZWFuOwogICAgZXhhY3Q/OiBib29sZWFuOwogICAgdHlwZTogImFycmF5IiB8ICJzdHJpbmciIHwgIm51bWJlciIgfCAic2V0IiB8ICJkYXRlIiB8ICJiaWdpbnQiOwp9CmludGVyZmFjZSBab2RUb29CaWdJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLnRvb19iaWc7CiAgICBtYXhpbXVtOiBudW1iZXIgfCBiaWdpbnQ7CiAgICBpbmNsdXNpdmU6IGJvb2xlYW47CiAgICBleGFjdD86IGJvb2xlYW47CiAgICB0eXBlOiAiYXJyYXkiIHwgInN0cmluZyIgfCAibnVtYmVyIiB8ICJzZXQiIHwgImRhdGUiIHwgImJpZ2ludCI7Cn0KaW50ZXJmYWNlIFpvZEludmFsaWRJbnRlcnNlY3Rpb25UeXBlc0lzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXM7Cn0KaW50ZXJmYWNlIFpvZE5vdE11bHRpcGxlT2ZJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZjsKICAgIG11bHRpcGxlT2Y6IG51bWJlciB8IGJpZ2ludDsKfQppbnRlcmZhY2UgWm9kTm90RmluaXRlSXNzdWUgZXh0ZW5kcyBab2RJc3N1ZUJhc2UgewogICAgY29kZTogdHlwZW9mIFpvZElzc3VlQ29kZS5ub3RfZmluaXRlOwp9CmludGVyZmFjZSBab2RDdXN0b21Jc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmN1c3RvbTsKICAgIHBhcmFtcz86IHsKICAgICAgICBbazogc3RyaW5nXTogYW55OwogICAgfTsKfQp0eXBlIFpvZElzc3VlT3B0aW9uYWxNZXNzYWdlID0gWm9kSW52YWxpZFR5cGVJc3N1ZSB8IFpvZEludmFsaWRMaXRlcmFsSXNzdWUgfCBab2RVbnJlY29nbml6ZWRLZXlzSXNzdWUgfCBab2RJbnZhbGlkVW5pb25Jc3N1ZSB8IFpvZEludmFsaWRVbmlvbkRpc2NyaW1pbmF0b3JJc3N1ZSB8IFpvZEludmFsaWRFbnVtVmFsdWVJc3N1ZSB8IFpvZEludmFsaWRBcmd1bWVudHNJc3N1ZSB8IFpvZEludmFsaWRSZXR1cm5UeXBlSXNzdWUgfCBab2RJbnZhbGlkRGF0ZUlzc3VlIHwgWm9kSW52YWxpZFN0cmluZ0lzc3VlIHwgWm9kVG9vU21hbGxJc3N1ZSB8IFpvZFRvb0JpZ0lzc3VlIHwgWm9kSW52YWxpZEludGVyc2VjdGlvblR5cGVzSXNzdWUgfCBab2ROb3RNdWx0aXBsZU9mSXNzdWUgfCBab2ROb3RGaW5pdGVJc3N1ZSB8IFpvZEN1c3RvbUlzc3VlOwp0eXBlIFpvZElzc3VlID0gWm9kSXNzdWVPcHRpb25hbE1lc3NhZ2UgJiB7CiAgICBmYXRhbD86IGJvb2xlYW47CiAgICBtZXNzYWdlOiBzdHJpbmc7Cn07CnR5cGUgcmVjdXJzaXZlWm9kRm9ybWF0dGVkRXJyb3I8VD4gPSBUIGV4dGVuZHMgW2FueSwgLi4uYW55W11dID8gewogICAgW0sgaW4ga2V5b2YgVF0/OiBab2RGb3JtYXR0ZWRFcnJvcjxUW0tdPjsKfSA6IFQgZXh0ZW5kcyBhbnlbXSA/IHsKICAgIFtrOiBudW1iZXJdOiBab2RGb3JtYXR0ZWRFcnJvcjxUW251bWJlcl0+Owp9IDogVCBleHRlbmRzIG9iamVjdCA/IHsKICAgIFtLIGluIGtleW9mIFRdPzogWm9kRm9ybWF0dGVkRXJyb3I8VFtLXT47Cn0gOiB1bmtub3duOwp0eXBlIFpvZEZvcm1hdHRlZEVycm9yPFQsIFUgPSBzdHJpbmc+ID0gewogICAgX2Vycm9yczogVVtdOwp9ICYgcmVjdXJzaXZlWm9kRm9ybWF0dGVkRXJyb3I8Tm9uTnVsbGFibGU8VD4+OwpkZWNsYXJlIGNsYXNzIFpvZEVycm9yPFQgPSBhbnk+IGV4dGVuZHMgRXJyb3IgewogICAgaXNzdWVzOiBab2RJc3N1ZVtdOwogICAgZ2V0IGVycm9ycygpOiBab2RJc3N1ZVtdOwogICAgY29uc3RydWN0b3IoaXNzdWVzOiBab2RJc3N1ZVtdKTsKICAgIGZvcm1hdCgpOiBab2RGb3JtYXR0ZWRFcnJvcjxUPjsKICAgIGZvcm1hdDxVPihtYXBwZXI6IChpc3N1ZTogWm9kSXNzdWUpID0+IFUpOiBab2RGb3JtYXR0ZWRFcnJvcjxULCBVPjsKICAgIHN0YXRpYyBjcmVhdGU6IChpc3N1ZXM6IFpvZElzc3VlW10pID0+IFpvZEVycm9yPGFueT47CiAgICBzdGF0aWMgYXNzZXJ0KHZhbHVlOiB1bmtub3duKTogYXNzZXJ0cyB2YWx1ZSBpcyBab2RFcnJvcjsKICAgIHRvU3RyaW5nKCk6IHN0cmluZzsKICAgIGdldCBtZXNzYWdlKCk6IHN0cmluZzsKICAgIGdldCBpc0VtcHR5KCk6IGJvb2xlYW47CiAgICBhZGRJc3N1ZTogKHN1YjogWm9kSXNzdWUpID0+IHZvaWQ7CiAgICBhZGRJc3N1ZXM6IChzdWJzPzogWm9kSXNzdWVbXSkgPT4gdm9pZDsKICAgIGZsYXR0ZW4oKTogdHlwZVRvRmxhdHRlbmVkRXJyb3I8VD47CiAgICBmbGF0dGVuPFU+KG1hcHBlcj86IChpc3N1ZTogWm9kSXNzdWUpID0+IFUpOiB0eXBlVG9GbGF0dGVuZWRFcnJvcjxULCBVPjsKICAgIGdldCBmb3JtRXJyb3JzKCk6IHR5cGVUb0ZsYXR0ZW5lZEVycm9yPFQsIHN0cmluZz47Cn0KdHlwZSBzdHJpcFBhdGg8VCBleHRlbmRzIG9iamVjdD4gPSBUIGV4dGVuZHMgYW55ID8gdXRpbC5PbWl0S2V5czxULCAicGF0aCI+IDogbmV2ZXI7CnR5cGUgSXNzdWVEYXRhID0gc3RyaXBQYXRoPFpvZElzc3VlT3B0aW9uYWxNZXNzYWdlPiAmIHsKICAgIHBhdGg/OiAoc3RyaW5nIHwgbnVtYmVyKVtdOwogICAgZmF0YWw/OiBib29sZWFuOwp9Owp0eXBlIEVycm9yTWFwQ3R4ID0gewogICAgZGVmYXVsdEVycm9yOiBzdHJpbmc7CiAgICBkYXRhOiBhbnk7Cn07CnR5cGUgWm9kRXJyb3JNYXAgPSAoaXNzdWU6IFpvZElzc3VlT3B0aW9uYWxNZXNzYWdlLCBfY3R4OiBFcnJvck1hcEN0eCkgPT4gewogICAgbWVzc2FnZTogc3RyaW5nOwp9OwoKdHlwZSBQYXJzZVBhcmFtcyA9IHsKICAgIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW107CiAgICBlcnJvck1hcDogWm9kRXJyb3JNYXA7CiAgICBhc3luYzogYm9vbGVhbjsKfTsKdHlwZSBQYXJzZVBhdGhDb21wb25lbnQgPSBzdHJpbmcgfCBudW1iZXI7CnR5cGUgUGFyc2VQYXRoID0gUGFyc2VQYXRoQ29tcG9uZW50W107CmludGVyZmFjZSBQYXJzZUNvbnRleHQgewogICAgcmVhZG9ubHkgY29tbW9uOiB7CiAgICAgICAgcmVhZG9ubHkgaXNzdWVzOiBab2RJc3N1ZVtdOwogICAgICAgIHJlYWRvbmx5IGNvbnRleHR1YWxFcnJvck1hcD86IFpvZEVycm9yTWFwOwogICAgICAgIHJlYWRvbmx5IGFzeW5jOiBib29sZWFuOwogICAgfTsKICAgIHJlYWRvbmx5IHBhdGg6IFBhcnNlUGF0aDsKICAgIHJlYWRvbmx5IHNjaGVtYUVycm9yTWFwPzogWm9kRXJyb3JNYXA7CiAgICByZWFkb25seSBwYXJlbnQ6IFBhcnNlQ29udGV4dCB8IG51bGw7CiAgICByZWFkb25seSBkYXRhOiBhbnk7CiAgICByZWFkb25seSBwYXJzZWRUeXBlOiBab2RQYXJzZWRUeXBlOwp9CnR5cGUgUGFyc2VJbnB1dCA9IHsKICAgIGRhdGE6IGFueTsKICAgIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW107CiAgICBwYXJlbnQ6IFBhcnNlQ29udGV4dDsKfTsKZGVjbGFyZSBjbGFzcyBQYXJzZVN0YXR1cyB7CiAgICB2YWx1ZTogImFib3J0ZWQiIHwgImRpcnR5IiB8ICJ2YWxpZCI7CiAgICBkaXJ0eSgpOiB2b2lkOwogICAgYWJvcnQoKTogdm9pZDsKICAgIHN0YXRpYyBtZXJnZUFycmF5KHN0YXR1czogUGFyc2VTdGF0dXMsIHJlc3VsdHM6IFN5bmNQYXJzZVJldHVyblR5cGU8YW55PltdKTogU3luY1BhcnNlUmV0dXJuVHlwZTsKICAgIHN0YXRpYyBtZXJnZU9iamVjdEFzeW5jKHN0YXR1czogUGFyc2VTdGF0dXMsIHBhaXJzOiB7CiAgICAgICAga2V5OiBQYXJzZVJldHVyblR5cGU8YW55PjsKICAgICAgICB2YWx1ZTogUGFyc2VSZXR1cm5UeXBlPGFueT47CiAgICB9W10pOiBQcm9taXNlPFN5bmNQYXJzZVJldHVyblR5cGU8YW55Pj47CiAgICBzdGF0aWMgbWVyZ2VPYmplY3RTeW5jKHN0YXR1czogUGFyc2VTdGF0dXMsIHBhaXJzOiB7CiAgICAgICAga2V5OiBTeW5jUGFyc2VSZXR1cm5UeXBlPGFueT47CiAgICAgICAgdmFsdWU6IFN5bmNQYXJzZVJldHVyblR5cGU8YW55PjsKICAgICAgICBhbHdheXNTZXQ/OiBib29sZWFuOwogICAgfVtdKTogU3luY1BhcnNlUmV0dXJuVHlwZTsKfQp0eXBlIElOVkFMSUQgPSB7CiAgICBzdGF0dXM6ICJhYm9ydGVkIjsKfTsKZGVjbGFyZSBjb25zdCBJTlZBTElEOiBJTlZBTElEOwp0eXBlIERJUlRZPFQ+ID0gewogICAgc3RhdHVzOiAiZGlydHkiOwogICAgdmFsdWU6IFQ7Cn07CmRlY2xhcmUgY29uc3QgRElSVFk6IDxUPih2YWx1ZTogVCkgPT4gRElSVFk8VD47CnR5cGUgT0s8VD4gPSB7CiAgICBzdGF0dXM6ICJ2YWxpZCI7CiAgICB2YWx1ZTogVDsKfTsKZGVjbGFyZSBjb25zdCBPSzogPFQ+KHZhbHVlOiBUKSA9PiBPSzxUPjsKdHlwZSBTeW5jUGFyc2VSZXR1cm5UeXBlPFQgPSBhbnk+ID0gT0s8VD4gfCBESVJUWTxUPiB8IElOVkFMSUQ7CnR5cGUgQXN5bmNQYXJzZVJldHVyblR5cGU8VD4gPSBQcm9taXNlPFN5bmNQYXJzZVJldHVyblR5cGU8VD4+Owp0eXBlIFBhcnNlUmV0dXJuVHlwZTxUPiA9IFN5bmNQYXJzZVJldHVyblR5cGU8VD4gfCBBc3luY1BhcnNlUmV0dXJuVHlwZTxUPjsKCmRlY2xhcmUgbmFtZXNwYWNlIGVycm9yVXRpbCB7CiAgICB0eXBlIEVyck1lc3NhZ2UgPSBzdHJpbmcgfCB7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH07CiAgICBjb25zdCBlcnJUb09iajogKG1lc3NhZ2U/OiBFcnJNZXNzYWdlKSA9PiB7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH07CiAgICBjb25zdCB0b1N0cmluZzogKG1lc3NhZ2U/OiBFcnJNZXNzYWdlKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7Cn0KCi8qKgogKiBUaGUgU3RhbmRhcmQgU2NoZW1hIGludGVyZmFjZS4KICovCnR5cGUgU3RhbmRhcmRTY2hlbWFWMTxJbnB1dCA9IHVua25vd24sIE91dHB1dCA9IElucHV0PiA9IHsKICAgIC8qKgogICAgICogVGhlIFN0YW5kYXJkIFNjaGVtYSBwcm9wZXJ0aWVzLgogICAgICovCiAgICByZWFkb25seSAifnN0YW5kYXJkIjogU3RhbmRhcmRTY2hlbWFWMS5Qcm9wczxJbnB1dCwgT3V0cHV0PjsKfTsKZGVjbGFyZSBuYW1lc3BhY2UgU3RhbmRhcmRTY2hlbWFWMSB7CiAgICAvKioKICAgICAqIFRoZSBTdGFuZGFyZCBTY2hlbWEgcHJvcGVydGllcyBpbnRlcmZhY2UuCiAgICAgKi8KICAgIGV4cG9ydCBpbnRlcmZhY2UgUHJvcHM8SW5wdXQgPSB1bmtub3duLCBPdXRwdXQgPSBJbnB1dD4gewogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgc3RhbmRhcmQuCiAgICAgICAgICovCiAgICAgICAgcmVhZG9ubHkgdmVyc2lvbjogMTsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgdmVuZG9yIG5hbWUgb2YgdGhlIHNjaGVtYSBsaWJyYXJ5LgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IHZlbmRvcjogc3RyaW5nOwogICAgICAgIC8qKgogICAgICAgICAqIFZhbGlkYXRlcyB1bmtub3duIGlucHV0IHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICByZWFkb25seSB2YWxpZGF0ZTogKHZhbHVlOiB1bmtub3duKSA9PiBSZXN1bHQ8T3V0cHV0PiB8IFByb21pc2U8UmVzdWx0PE91dHB1dD4+OwogICAgICAgIC8qKgogICAgICAgICAqIEluZmVycmVkIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NoZW1hLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IHR5cGVzPzogVHlwZXM8SW5wdXQsIE91dHB1dD4gfCB1bmRlZmluZWQ7CiAgICB9CiAgICAvKioKICAgICAqIFRoZSByZXN1bHQgaW50ZXJmYWNlIG9mIHRoZSB2YWxpZGF0ZSBmdW5jdGlvbi4KICAgICAqLwogICAgZXhwb3J0IHR5cGUgUmVzdWx0PE91dHB1dD4gPSBTdWNjZXNzUmVzdWx0PE91dHB1dD4gfCBGYWlsdXJlUmVzdWx0OwogICAgLyoqCiAgICAgKiBUaGUgcmVzdWx0IGludGVyZmFjZSBpZiB2YWxpZGF0aW9uIHN1Y2NlZWRzLgogICAgICovCiAgICBleHBvcnQgaW50ZXJmYWNlIFN1Y2Nlc3NSZXN1bHQ8T3V0cHV0PiB7CiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIHR5cGVkIG91dHB1dCB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICByZWFkb25seSB2YWx1ZTogT3V0cHV0OwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBub24tZXhpc3RlbnQgaXNzdWVzLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGlzc3Vlcz86IHVuZGVmaW5lZDsKICAgIH0KICAgIC8qKgogICAgICogVGhlIHJlc3VsdCBpbnRlcmZhY2UgaWYgdmFsaWRhdGlvbiBmYWlscy4KICAgICAqLwogICAgZXhwb3J0IGludGVyZmFjZSBGYWlsdXJlUmVzdWx0IHsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgaXNzdWVzIG9mIGZhaWxlZCB2YWxpZGF0aW9uLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGlzc3VlczogUmVhZG9ubHlBcnJheTxJc3N1ZT47CiAgICB9CiAgICAvKioKICAgICAqIFRoZSBpc3N1ZSBpbnRlcmZhY2Ugb2YgdGhlIGZhaWx1cmUgb3V0cHV0LgogICAgICovCiAgICBleHBvcnQgaW50ZXJmYWNlIElzc3VlIHsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgZXJyb3IgbWVzc2FnZSBvZiB0aGUgaXNzdWUuCiAgICAgICAgICovCiAgICAgICAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nOwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBwYXRoIG9mIHRoZSBpc3N1ZSwgaWYgYW55LgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IHBhdGg/OiBSZWFkb25seUFycmF5PFByb3BlcnR5S2V5IHwgUGF0aFNlZ21lbnQ+IHwgdW5kZWZpbmVkOwogICAgfQogICAgLyoqCiAgICAgKiBUaGUgcGF0aCBzZWdtZW50IGludGVyZmFjZSBvZiB0aGUgaXNzdWUuCiAgICAgKi8KICAgIGV4cG9ydCBpbnRlcmZhY2UgUGF0aFNlZ21lbnQgewogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBrZXkgcmVwcmVzZW50aW5nIGEgcGF0aCBzZWdtZW50LgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGtleTogUHJvcGVydHlLZXk7CiAgICB9CiAgICAvKioKICAgICAqIFRoZSBTdGFuZGFyZCBTY2hlbWEgdHlwZXMgaW50ZXJmYWNlLgogICAgICovCiAgICBleHBvcnQgaW50ZXJmYWNlIFR5cGVzPElucHV0ID0gdW5rbm93biwgT3V0cHV0ID0gSW5wdXQ+IHsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgaW5wdXQgdHlwZSBvZiB0aGUgc2NoZW1hLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGlucHV0OiBJbnB1dDsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgb3V0cHV0IHR5cGUgb2YgdGhlIHNjaGVtYS4KICAgICAgICAgKi8KICAgICAgICByZWFkb25seSBvdXRwdXQ6IE91dHB1dDsKICAgIH0KICAgIC8qKgogICAgICogSW5mZXJzIHRoZSBpbnB1dCB0eXBlIG9mIGEgU3RhbmRhcmQgU2NoZW1hLgogICAgICovCiAgICBleHBvcnQgdHlwZSBJbmZlcklucHV0PFNjaGVtYSBleHRlbmRzIFN0YW5kYXJkU2NoZW1hVjE+ID0gTm9uTnVsbGFibGU8U2NoZW1hWyJ+c3RhbmRhcmQiXVsidHlwZXMiXT5bImlucHV0Il07CiAgICAvKioKICAgICAqIEluZmVycyB0aGUgb3V0cHV0IHR5cGUgb2YgYSBTdGFuZGFyZCBTY2hlbWEuCiAgICAgKi8KICAgIGV4cG9ydCB0eXBlIEluZmVyT3V0cHV0PFNjaGVtYSBleHRlbmRzIFN0YW5kYXJkU2NoZW1hVjE+ID0gTm9uTnVsbGFibGU8U2NoZW1hWyJ+c3RhbmRhcmQiXVsidHlwZXMiXT5bIm91dHB1dCJdOwogICAgZXhwb3J0IHt9Owp9CgppbnRlcmZhY2UgUmVmaW5lbWVudEN0eCB7CiAgICBhZGRJc3N1ZTogKGFyZzogSXNzdWVEYXRhKSA9PiB2b2lkOwogICAgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXTsKfQp0eXBlIFpvZFJhd1NoYXBlID0gewogICAgW2s6IHN0cmluZ106IFpvZFR5cGVBbnk7Cn07CnR5cGUgWm9kVHlwZUFueSA9IFpvZFR5cGU8YW55LCBhbnksIGFueT47CnR5cGUgaW5wdXQ8VCBleHRlbmRzIFpvZFR5cGU8YW55LCBhbnksIGFueT4+ID0gVFsiX2lucHV0Il07CnR5cGUgb3V0cHV0PFQgZXh0ZW5kcyBab2RUeXBlPGFueSwgYW55LCBhbnk+PiA9IFRbIl9vdXRwdXQiXTsKCnR5cGUgQ3VzdG9tRXJyb3JQYXJhbXMgPSBQYXJ0aWFsPHV0aWwuT21pdDxab2RDdXN0b21Jc3N1ZSwgImNvZGUiPj47CmludGVyZmFjZSBab2RUeXBlRGVmIHsKICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXA7CiAgICBkZXNjcmlwdGlvbj86IHN0cmluZzsKfQp0eXBlIFJhd0NyZWF0ZVBhcmFtcyA9IHsKICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXA7CiAgICBpbnZhbGlkX3R5cGVfZXJyb3I/OiBzdHJpbmc7CiAgICByZXF1aXJlZF9lcnJvcj86IHN0cmluZzsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7CiAgICBkZXNjcmlwdGlvbj86IHN0cmluZzsKfSB8IHVuZGVmaW5lZDsKdHlwZSBTYWZlUGFyc2VTdWNjZXNzPE91dHB1dD4gPSB7CiAgICBzdWNjZXNzOiB0cnVlOwogICAgZGF0YTogT3V0cHV0OwogICAgZXJyb3I/OiBuZXZlcjsKfTsKdHlwZSBTYWZlUGFyc2VFcnJvcjxJbnB1dD4gPSB7CiAgICBzdWNjZXNzOiBmYWxzZTsKICAgIGVycm9yOiBab2RFcnJvcjxJbnB1dD47CiAgICBkYXRhPzogbmV2ZXI7Cn07CnR5cGUgU2FmZVBhcnNlUmV0dXJuVHlwZTxJbnB1dCwgT3V0cHV0PiA9IFNhZmVQYXJzZVN1Y2Nlc3M8T3V0cHV0PiB8IFNhZmVQYXJzZUVycm9yPElucHV0PjsKZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBab2RUeXBlPE91dHB1dCA9IGFueSwgRGVmIGV4dGVuZHMgWm9kVHlwZURlZiA9IFpvZFR5cGVEZWYsIElucHV0ID0gT3V0cHV0PiB7CiAgICByZWFkb25seSBfdHlwZTogT3V0cHV0OwogICAgcmVhZG9ubHkgX291dHB1dDogT3V0cHV0OwogICAgcmVhZG9ubHkgX2lucHV0OiBJbnB1dDsKICAgIHJlYWRvbmx5IF9kZWY6IERlZjsKICAgIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAifnN0YW5kYXJkIjogU3RhbmRhcmRTY2hlbWFWMS5Qcm9wczxJbnB1dCwgT3V0cHV0PjsKICAgIGFic3RyYWN0IF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTxPdXRwdXQ+OwogICAgX2dldFR5cGUoaW5wdXQ6IFBhcnNlSW5wdXQpOiBzdHJpbmc7CiAgICBfZ2V0T3JSZXR1cm5DdHgoaW5wdXQ6IFBhcnNlSW5wdXQsIGN0eD86IFBhcnNlQ29udGV4dCB8IHVuZGVmaW5lZCk6IFBhcnNlQ29udGV4dDsKICAgIF9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQ6IFBhcnNlSW5wdXQpOiB7CiAgICAgICAgc3RhdHVzOiBQYXJzZVN0YXR1czsKICAgICAgICBjdHg6IFBhcnNlQ29udGV4dDsKICAgIH07CiAgICBfcGFyc2VTeW5jKGlucHV0OiBQYXJzZUlucHV0KTogU3luY1BhcnNlUmV0dXJuVHlwZTxPdXRwdXQ+OwogICAgX3BhcnNlQXN5bmMoaW5wdXQ6IFBhcnNlSW5wdXQpOiBBc3luY1BhcnNlUmV0dXJuVHlwZTxPdXRwdXQ+OwogICAgcGFyc2UoZGF0YTogdW5rbm93biwgcGFyYW1zPzogUGFydGlhbDxQYXJzZVBhcmFtcz4pOiBPdXRwdXQ7CiAgICBzYWZlUGFyc2UoZGF0YTogdW5rbm93biwgcGFyYW1zPzogUGFydGlhbDxQYXJzZVBhcmFtcz4pOiBTYWZlUGFyc2VSZXR1cm5UeXBlPElucHV0LCBPdXRwdXQ+OwogICAgIn52YWxpZGF0ZSIoZGF0YTogdW5rbm93bik6IFN0YW5kYXJkU2NoZW1hVjEuUmVzdWx0PE91dHB1dD4gfCBQcm9taXNlPFN0YW5kYXJkU2NoZW1hVjEuUmVzdWx0PE91dHB1dD4+OwogICAgcGFyc2VBc3luYyhkYXRhOiB1bmtub3duLCBwYXJhbXM/OiBQYXJ0aWFsPFBhcnNlUGFyYW1zPik6IFByb21pc2U8T3V0cHV0PjsKICAgIHNhZmVQYXJzZUFzeW5jKGRhdGE6IHVua25vd24sIHBhcmFtcz86IFBhcnRpYWw8UGFyc2VQYXJhbXM+KTogUHJvbWlzZTxTYWZlUGFyc2VSZXR1cm5UeXBlPElucHV0LCBPdXRwdXQ+PjsKICAgIC8qKiBBbGlhcyBvZiBzYWZlUGFyc2VBc3luYyAqLwogICAgc3BhOiAoZGF0YTogdW5rbm93biwgcGFyYW1zPzogUGFydGlhbDxQYXJzZVBhcmFtcz4pID0+IFByb21pc2U8U2FmZVBhcnNlUmV0dXJuVHlwZTxJbnB1dCwgT3V0cHV0Pj47CiAgICByZWZpbmU8UmVmaW5lZE91dHB1dCBleHRlbmRzIE91dHB1dD4oY2hlY2s6IChhcmc6IE91dHB1dCkgPT4gYXJnIGlzIFJlZmluZWRPdXRwdXQsIG1lc3NhZ2U/OiBzdHJpbmcgfCBDdXN0b21FcnJvclBhcmFtcyB8ICgoYXJnOiBPdXRwdXQpID0+IEN1c3RvbUVycm9yUGFyYW1zKSk6IFpvZEVmZmVjdHM8dGhpcywgUmVmaW5lZE91dHB1dCwgSW5wdXQ+OwogICAgcmVmaW5lKGNoZWNrOiAoYXJnOiBPdXRwdXQpID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+LCBtZXNzYWdlPzogc3RyaW5nIHwgQ3VzdG9tRXJyb3JQYXJhbXMgfCAoKGFyZzogT3V0cHV0KSA9PiBDdXN0b21FcnJvclBhcmFtcykpOiBab2RFZmZlY3RzPHRoaXMsIE91dHB1dCwgSW5wdXQ+OwogICAgcmVmaW5lbWVudDxSZWZpbmVkT3V0cHV0IGV4dGVuZHMgT3V0cHV0PihjaGVjazogKGFyZzogT3V0cHV0KSA9PiBhcmcgaXMgUmVmaW5lZE91dHB1dCwgcmVmaW5lbWVudERhdGE6IElzc3VlRGF0YSB8ICgoYXJnOiBPdXRwdXQsIGN0eDogUmVmaW5lbWVudEN0eCkgPT4gSXNzdWVEYXRhKSk6IFpvZEVmZmVjdHM8dGhpcywgUmVmaW5lZE91dHB1dCwgSW5wdXQ+OwogICAgcmVmaW5lbWVudChjaGVjazogKGFyZzogT3V0cHV0KSA9PiBib29sZWFuLCByZWZpbmVtZW50RGF0YTogSXNzdWVEYXRhIHwgKChhcmc6IE91dHB1dCwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiBJc3N1ZURhdGEpKTogWm9kRWZmZWN0czx0aGlzLCBPdXRwdXQsIElucHV0PjsKICAgIF9yZWZpbmVtZW50KHJlZmluZW1lbnQ6IFJlZmluZW1lbnRFZmZlY3Q8T3V0cHV0PlsicmVmaW5lbWVudCJdKTogWm9kRWZmZWN0czx0aGlzLCBPdXRwdXQsIElucHV0PjsKICAgIHN1cGVyUmVmaW5lPFJlZmluZWRPdXRwdXQgZXh0ZW5kcyBPdXRwdXQ+KHJlZmluZW1lbnQ6IChhcmc6IE91dHB1dCwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiBhcmcgaXMgUmVmaW5lZE91dHB1dCk6IFpvZEVmZmVjdHM8dGhpcywgUmVmaW5lZE91dHB1dCwgSW5wdXQ+OwogICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudDogKGFyZzogT3V0cHV0LCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IHZvaWQpOiBab2RFZmZlY3RzPHRoaXMsIE91dHB1dCwgSW5wdXQ+OwogICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudDogKGFyZzogT3V0cHV0LCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IFByb21pc2U8dm9pZD4pOiBab2RFZmZlY3RzPHRoaXMsIE91dHB1dCwgSW5wdXQ+OwogICAgY29uc3RydWN0b3IoZGVmOiBEZWYpOwogICAgb3B0aW9uYWwoKTogWm9kT3B0aW9uYWw8dGhpcz47CiAgICBudWxsYWJsZSgpOiBab2ROdWxsYWJsZTx0aGlzPjsKICAgIG51bGxpc2goKTogWm9kT3B0aW9uYWw8Wm9kTnVsbGFibGU8dGhpcz4+OwogICAgYXJyYXkoKTogWm9kQXJyYXk8dGhpcz47CiAgICBwcm9taXNlKCk6IFpvZFByb21pc2U8dGhpcz47CiAgICBvcjxUIGV4dGVuZHMgWm9kVHlwZUFueT4ob3B0aW9uOiBUKTogWm9kVW5pb248W3RoaXMsIFRdPjsKICAgIGFuZDxUIGV4dGVuZHMgWm9kVHlwZUFueT4oaW5jb21pbmc6IFQpOiBab2RJbnRlcnNlY3Rpb248dGhpcywgVD47CiAgICB0cmFuc2Zvcm08TmV3T3V0Pih0cmFuc2Zvcm06IChhcmc6IE91dHB1dCwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiBOZXdPdXQgfCBQcm9taXNlPE5ld091dD4pOiBab2RFZmZlY3RzPHRoaXMsIE5ld091dD47CiAgICBkZWZhdWx0KGRlZjogdXRpbC5ub1VuZGVmaW5lZDxJbnB1dD4pOiBab2REZWZhdWx0PHRoaXM+OwogICAgZGVmYXVsdChkZWY6ICgpID0+IHV0aWwubm9VbmRlZmluZWQ8SW5wdXQ+KTogWm9kRGVmYXVsdDx0aGlzPjsKICAgIGJyYW5kPEIgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w+KGJyYW5kPzogQik6IFpvZEJyYW5kZWQ8dGhpcywgQj47CiAgICBjYXRjaChkZWY6IE91dHB1dCk6IFpvZENhdGNoPHRoaXM+OwogICAgY2F0Y2goZGVmOiAoY3R4OiB7CiAgICAgICAgZXJyb3I6IFpvZEVycm9yOwogICAgICAgIGlucHV0OiBJbnB1dDsKICAgIH0pID0+IE91dHB1dCk6IFpvZENhdGNoPHRoaXM+OwogICAgZGVzY3JpYmUoZGVzY3JpcHRpb246IHN0cmluZyk6IHRoaXM7CiAgICBwaXBlPFQgZXh0ZW5kcyBab2RUeXBlQW55Pih0YXJnZXQ6IFQpOiBab2RQaXBlbGluZTx0aGlzLCBUPjsKICAgIHJlYWRvbmx5KCk6IFpvZFJlYWRvbmx5PHRoaXM+OwogICAgaXNPcHRpb25hbCgpOiBib29sZWFuOwogICAgaXNOdWxsYWJsZSgpOiBib29sZWFuOwp9CnR5cGUgSXBWZXJzaW9uID0gInY0IiB8ICJ2NiI7CnR5cGUgWm9kU3RyaW5nQ2hlY2sgPSB7CiAgICBraW5kOiAibWluIjsKICAgIHZhbHVlOiBudW1iZXI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogIm1heCI7CiAgICB2YWx1ZTogbnVtYmVyOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJsZW5ndGgiOwogICAgdmFsdWU6IG51bWJlcjsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiZW1haWwiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJ1cmwiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJlbW9qaSI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInV1aWQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJuYW5vaWQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJjdWlkIjsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiaW5jbHVkZXMiOwogICAgdmFsdWU6IHN0cmluZzsKICAgIHBvc2l0aW9uPzogbnVtYmVyOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJjdWlkMiI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInVsaWQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJzdGFydHNXaXRoIjsKICAgIHZhbHVlOiBzdHJpbmc7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImVuZHNXaXRoIjsKICAgIHZhbHVlOiBzdHJpbmc7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInJlZ2V4IjsKICAgIHJlZ2V4OiBSZWdFeHA7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInRyaW0iOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJ0b0xvd2VyQ2FzZSI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInRvVXBwZXJDYXNlIjsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiand0IjsKICAgIGFsZz86IHN0cmluZzsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiZGF0ZXRpbWUiOwogICAgb2Zmc2V0OiBib29sZWFuOwogICAgbG9jYWw6IGJvb2xlYW47CiAgICBwcmVjaXNpb246IG51bWJlciB8IG51bGw7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImRhdGUiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJ0aW1lIjsKICAgIHByZWNpc2lvbjogbnVtYmVyIHwgbnVsbDsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiZHVyYXRpb24iOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJpcCI7CiAgICB2ZXJzaW9uPzogSXBWZXJzaW9uOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJjaWRyIjsKICAgIHZlcnNpb24/OiBJcFZlcnNpb247CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImJhc2U2NCI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImJhc2U2NHVybCI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9OwppbnRlcmZhY2UgWm9kU3RyaW5nRGVmIGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICBjaGVja3M6IFpvZFN0cmluZ0NoZWNrW107CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFN0cmluZzsKICAgIGNvZXJjZTogYm9vbGVhbjsKfQpkZWNsYXJlIGNsYXNzIFpvZFN0cmluZyBleHRlbmRzIFpvZFR5cGU8c3RyaW5nLCBab2RTdHJpbmdEZWYsIHN0cmluZz4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHN0cmluZz47CiAgICBwcm90ZWN0ZWQgX3JlZ2V4KHJlZ2V4OiBSZWdFeHAsIHZhbGlkYXRpb246IFN0cmluZ1ZhbGlkYXRpb24sIG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZEVmZmVjdHM8dGhpcywgc3RyaW5nLCBzdHJpbmc+OwogICAgX2FkZENoZWNrKGNoZWNrOiBab2RTdHJpbmdDaGVjayk6IFpvZFN0cmluZzsKICAgIGVtYWlsKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIHVybChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBlbW9qaShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICB1dWlkKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIG5hbm9pZChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBjdWlkKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIGN1aWQyKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIHVsaWQobWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgYmFzZTY0KG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIGJhc2U2NHVybChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBqd3Qob3B0aW9ucz86IHsKICAgICAgICBhbGc/OiBzdHJpbmc7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH0pOiBab2RTdHJpbmc7CiAgICBpcChvcHRpb25zPzogc3RyaW5nIHwgewogICAgICAgIHZlcnNpb24/OiBJcFZlcnNpb247CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH0pOiBab2RTdHJpbmc7CiAgICBjaWRyKG9wdGlvbnM/OiBzdHJpbmcgfCB7CiAgICAgICAgdmVyc2lvbj86IElwVmVyc2lvbjsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nOwogICAgfSk6IFpvZFN0cmluZzsKICAgIGRhdGV0aW1lKG9wdGlvbnM/OiBzdHJpbmcgfCB7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVjaXNpb24/OiBudW1iZXIgfCBudWxsOwogICAgICAgIG9mZnNldD86IGJvb2xlYW47CiAgICAgICAgbG9jYWw/OiBib29sZWFuOwogICAgfSk6IFpvZFN0cmluZzsKICAgIGRhdGUobWVzc2FnZT86IHN0cmluZyk6IFpvZFN0cmluZzsKICAgIHRpbWUob3B0aW9ucz86IHN0cmluZyB8IHsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHByZWNpc2lvbj86IG51bWJlciB8IG51bGw7CiAgICB9KTogWm9kU3RyaW5nOwogICAgZHVyYXRpb24obWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgcmVnZXgocmVnZXg6IFJlZ0V4cCwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgaW5jbHVkZXModmFsdWU6IHN0cmluZywgb3B0aW9ucz86IHsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nOwogICAgICAgIHBvc2l0aW9uPzogbnVtYmVyOwogICAgfSk6IFpvZFN0cmluZzsKICAgIHN0YXJ0c1dpdGgodmFsdWU6IHN0cmluZywgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgZW5kc1dpdGgodmFsdWU6IHN0cmluZywgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgbWluKG1pbkxlbmd0aDogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBtYXgobWF4TGVuZ3RoOiBudW1iZXIsIG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIGxlbmd0aChsZW46IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgLyoqCiAgICAgKiBFcXVpdmFsZW50IHRvIGAubWluKDEpYAogICAgICovCiAgICBub25lbXB0eShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICB0cmltKCk6IFpvZFN0cmluZzsKICAgIHRvTG93ZXJDYXNlKCk6IFpvZFN0cmluZzsKICAgIHRvVXBwZXJDYXNlKCk6IFpvZFN0cmluZzsKICAgIGdldCBpc0RhdGV0aW1lKCk6IGJvb2xlYW47CiAgICBnZXQgaXNEYXRlKCk6IGJvb2xlYW47CiAgICBnZXQgaXNUaW1lKCk6IGJvb2xlYW47CiAgICBnZXQgaXNEdXJhdGlvbigpOiBib29sZWFuOwogICAgZ2V0IGlzRW1haWwoKTogYm9vbGVhbjsKICAgIGdldCBpc1VSTCgpOiBib29sZWFuOwogICAgZ2V0IGlzRW1vamkoKTogYm9vbGVhbjsKICAgIGdldCBpc1VVSUQoKTogYm9vbGVhbjsKICAgIGdldCBpc05BTk9JRCgpOiBib29sZWFuOwogICAgZ2V0IGlzQ1VJRCgpOiBib29sZWFuOwogICAgZ2V0IGlzQ1VJRDIoKTogYm9vbGVhbjsKICAgIGdldCBpc1VMSUQoKTogYm9vbGVhbjsKICAgIGdldCBpc0lQKCk6IGJvb2xlYW47CiAgICBnZXQgaXNDSURSKCk6IGJvb2xlYW47CiAgICBnZXQgaXNCYXNlNjQoKTogYm9vbGVhbjsKICAgIGdldCBpc0Jhc2U2NHVybCgpOiBib29sZWFuOwogICAgZ2V0IG1pbkxlbmd0aCgpOiBudW1iZXIgfCBudWxsOwogICAgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIgfCBudWxsOwogICAgc3RhdGljIGNyZWF0ZTogKHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcyAmIHsKICAgICAgICBjb2VyY2U/OiB0cnVlOwogICAgfSkgPT4gWm9kU3RyaW5nOwp9CnR5cGUgWm9kTnVtYmVyQ2hlY2sgPSB7CiAgICBraW5kOiAibWluIjsKICAgIHZhbHVlOiBudW1iZXI7CiAgICBpbmNsdXNpdmU6IGJvb2xlYW47CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogIm1heCI7CiAgICB2YWx1ZTogbnVtYmVyOwogICAgaW5jbHVzaXZlOiBib29sZWFuOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJpbnQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJtdWx0aXBsZU9mIjsKICAgIHZhbHVlOiBudW1iZXI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImZpbml0ZSI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9OwppbnRlcmZhY2UgWm9kTnVtYmVyRGVmIGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICBjaGVja3M6IFpvZE51bWJlckNoZWNrW107CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE51bWJlcjsKICAgIGNvZXJjZTogYm9vbGVhbjsKfQpkZWNsYXJlIGNsYXNzIFpvZE51bWJlciBleHRlbmRzIFpvZFR5cGU8bnVtYmVyLCBab2ROdW1iZXJEZWYsIG51bWJlcj4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPG51bWJlcj47CiAgICBzdGF0aWMgY3JlYXRlOiAocGFyYW1zPzogUmF3Q3JlYXRlUGFyYW1zICYgewogICAgICAgIGNvZXJjZT86IGJvb2xlYW47CiAgICB9KSA9PiBab2ROdW1iZXI7CiAgICBndGUodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kTnVtYmVyOwogICAgbWluOiAodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKSA9PiBab2ROdW1iZXI7CiAgICBndCh2YWx1ZTogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBsdGUodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kTnVtYmVyOwogICAgbWF4OiAodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKSA9PiBab2ROdW1iZXI7CiAgICBsdCh2YWx1ZTogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBwcm90ZWN0ZWQgc2V0TGltaXQoa2luZDogIm1pbiIgfCAibWF4IiwgdmFsdWU6IG51bWJlciwgaW5jbHVzaXZlOiBib29sZWFuLCBtZXNzYWdlPzogc3RyaW5nKTogWm9kTnVtYmVyOwogICAgX2FkZENoZWNrKGNoZWNrOiBab2ROdW1iZXJDaGVjayk6IFpvZE51bWJlcjsKICAgIGludChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBwb3NpdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBuZWdhdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBub25wb3NpdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBub25uZWdhdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBtdWx0aXBsZU9mKHZhbHVlOiBudW1iZXIsIG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZE51bWJlcjsKICAgIHN0ZXA6ICh2YWx1ZTogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpID0+IFpvZE51bWJlcjsKICAgIGZpbml0ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBzYWZlKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZE51bWJlcjsKICAgIGdldCBtaW5WYWx1ZSgpOiBudW1iZXIgfCBudWxsOwogICAgZ2V0IG1heFZhbHVlKCk6IG51bWJlciB8IG51bGw7CiAgICBnZXQgaXNJbnQoKTogYm9vbGVhbjsKICAgIGdldCBpc0Zpbml0ZSgpOiBib29sZWFuOwp9CmludGVyZmFjZSBab2RVbmtub3duRGVmIGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVua25vd247Cn0KZGVjbGFyZSBjbGFzcyBab2RVbmtub3duIGV4dGVuZHMgWm9kVHlwZTx1bmtub3duLCBab2RVbmtub3duRGVmLCB1bmtub3duPiB7CiAgICBfdW5rbm93bjogdHJ1ZTsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgc3RhdGljIGNyZWF0ZTogKHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kVW5rbm93bjsKfQppbnRlcmZhY2UgWm9kQXJyYXlEZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgdHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQXJyYXk7CiAgICBleGFjdExlbmd0aDogewogICAgICAgIHZhbHVlOiBudW1iZXI7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH0gfCBudWxsOwogICAgbWluTGVuZ3RoOiB7CiAgICAgICAgdmFsdWU6IG51bWJlcjsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nOwogICAgfSB8IG51bGw7CiAgICBtYXhMZW5ndGg6IHsKICAgICAgICB2YWx1ZTogbnVtYmVyOwogICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7CiAgICB9IHwgbnVsbDsKfQp0eXBlIEFycmF5Q2FyZGluYWxpdHkgPSAibWFueSIgfCAiYXRsZWFzdG9uZSI7CnR5cGUgYXJyYXlPdXRwdXRUeXBlPFQgZXh0ZW5kcyBab2RUeXBlQW55LCBDYXJkaW5hbGl0eSBleHRlbmRzIEFycmF5Q2FyZGluYWxpdHkgPSAibWFueSI+ID0gQ2FyZGluYWxpdHkgZXh0ZW5kcyAiYXRsZWFzdG9uZSIgPyBbVFsiX291dHB1dCJdLCAuLi5UWyJfb3V0cHV0Il1bXV0gOiBUWyJfb3V0cHV0Il1bXTsKZGVjbGFyZSBjbGFzcyBab2RBcnJheTxUIGV4dGVuZHMgWm9kVHlwZUFueSwgQ2FyZGluYWxpdHkgZXh0ZW5kcyBBcnJheUNhcmRpbmFsaXR5ID0gIm1hbnkiPiBleHRlbmRzIFpvZFR5cGU8YXJyYXlPdXRwdXRUeXBlPFQsIENhcmRpbmFsaXR5PiwgWm9kQXJyYXlEZWY8VD4sIENhcmRpbmFsaXR5IGV4dGVuZHMgImF0bGVhc3RvbmUiID8gW1RbIl9pbnB1dCJdLCAuLi5UWyJfaW5wdXQiXVtdXSA6IFRbIl9pbnB1dCJdW10+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgZ2V0IGVsZW1lbnQoKTogVDsKICAgIG1pbihtaW5MZW5ndGg6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogdGhpczsKICAgIG1heChtYXhMZW5ndGg6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogdGhpczsKICAgIGxlbmd0aChsZW46IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogdGhpczsKICAgIG5vbmVtcHR5KG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZEFycmF5PFQsICJhdGxlYXN0b25lIj47CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4oc2NoZW1hOiBUXzEsIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kQXJyYXk8VF8xLCAibWFueSI+Owp9CnR5cGUgVW5rbm93bktleXNQYXJhbSA9ICJwYXNzdGhyb3VnaCIgfCAic3RyaWN0IiB8ICJzdHJpcCI7CnR5cGUgb2JqZWN0T3V0cHV0VHlwZTxTaGFwZSBleHRlbmRzIFpvZFJhd1NoYXBlLCBDYXRjaGFsbCBleHRlbmRzIFpvZFR5cGVBbnksIFVua25vd25LZXlzIGV4dGVuZHMgVW5rbm93bktleXNQYXJhbSA9IFVua25vd25LZXlzUGFyYW0+ID0gb2JqZWN0VXRpbC5mbGF0dGVuPG9iamVjdFV0aWwuYWRkUXVlc3Rpb25NYXJrczxiYXNlT2JqZWN0T3V0cHV0VHlwZTxTaGFwZT4+PiAmIENhdGNoYWxsT3V0cHV0PENhdGNoYWxsPiAmIFBhc3N0aHJvdWdoVHlwZTxVbmtub3duS2V5cz47CnR5cGUgYmFzZU9iamVjdE91dHB1dFR5cGU8U2hhcGUgZXh0ZW5kcyBab2RSYXdTaGFwZT4gPSB7CiAgICBbayBpbiBrZXlvZiBTaGFwZV06IFNoYXBlW2tdWyJfb3V0cHV0Il07Cn07CnR5cGUgb2JqZWN0SW5wdXRUeXBlPFNoYXBlIGV4dGVuZHMgWm9kUmF3U2hhcGUsIENhdGNoYWxsIGV4dGVuZHMgWm9kVHlwZUFueSwgVW5rbm93bktleXMgZXh0ZW5kcyBVbmtub3duS2V5c1BhcmFtID0gVW5rbm93bktleXNQYXJhbT4gPSBvYmplY3RVdGlsLmZsYXR0ZW48YmFzZU9iamVjdElucHV0VHlwZTxTaGFwZT4+ICYgQ2F0Y2hhbGxJbnB1dDxDYXRjaGFsbD4gJiBQYXNzdGhyb3VnaFR5cGU8VW5rbm93bktleXM+Owp0eXBlIGJhc2VPYmplY3RJbnB1dFR5cGU8U2hhcGUgZXh0ZW5kcyBab2RSYXdTaGFwZT4gPSBvYmplY3RVdGlsLmFkZFF1ZXN0aW9uTWFya3M8ewogICAgW2sgaW4ga2V5b2YgU2hhcGVdOiBTaGFwZVtrXVsiX2lucHV0Il07Cn0+Owp0eXBlIENhdGNoYWxsT3V0cHV0PFQgZXh0ZW5kcyBab2RUeXBlPiA9IFpvZFR5cGUgZXh0ZW5kcyBUID8gdW5rbm93biA6IHsKICAgIFtrOiBzdHJpbmddOiBUWyJfb3V0cHV0Il07Cn07CnR5cGUgQ2F0Y2hhbGxJbnB1dDxUIGV4dGVuZHMgWm9kVHlwZT4gPSBab2RUeXBlIGV4dGVuZHMgVCA/IHVua25vd24gOiB7CiAgICBbazogc3RyaW5nXTogVFsiX2lucHV0Il07Cn07CnR5cGUgUGFzc3Rocm91Z2hUeXBlPFQgZXh0ZW5kcyBVbmtub3duS2V5c1BhcmFtPiA9IFQgZXh0ZW5kcyAicGFzc3Rocm91Z2giID8gewogICAgW2s6IHN0cmluZ106IHVua25vd247Cn0gOiB1bmtub3duOwp0eXBlIFpvZFVuaW9uT3B0aW9ucyA9IFJlYWRvbmx5PFtab2RUeXBlQW55LCAuLi5ab2RUeXBlQW55W11dPjsKaW50ZXJmYWNlIFpvZFVuaW9uRGVmPFQgZXh0ZW5kcyBab2RVbmlvbk9wdGlvbnMgPSBSZWFkb25seTxbCiAgICBab2RUeXBlQW55LAogICAgWm9kVHlwZUFueSwKICAgIC4uLlpvZFR5cGVBbnlbXQpdPj4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIG9wdGlvbnM6IFQ7CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVuaW9uOwp9CmRlY2xhcmUgY2xhc3MgWm9kVW5pb248VCBleHRlbmRzIFpvZFVuaW9uT3B0aW9ucz4gZXh0ZW5kcyBab2RUeXBlPFRbbnVtYmVyXVsiX291dHB1dCJdLCBab2RVbmlvbkRlZjxUPiwgVFtudW1iZXJdWyJfaW5wdXQiXT4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBnZXQgb3B0aW9ucygpOiBUOwogICAgc3RhdGljIGNyZWF0ZTogPFRfMSBleHRlbmRzIHJlYWRvbmx5IFtab2RUeXBlQW55LCBab2RUeXBlQW55LCAuLi5ab2RUeXBlQW55W11dPih0eXBlczogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZFVuaW9uPFRfMT47Cn0KaW50ZXJmYWNlIFpvZEludGVyc2VjdGlvbkRlZjxUIGV4dGVuZHMgWm9kVHlwZUFueSA9IFpvZFR5cGVBbnksIFUgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGxlZnQ6IFQ7CiAgICByaWdodDogVTsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kSW50ZXJzZWN0aW9uOwp9CmRlY2xhcmUgY2xhc3MgWm9kSW50ZXJzZWN0aW9uPFQgZXh0ZW5kcyBab2RUeXBlQW55LCBVIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFRbIl9vdXRwdXQiXSAmIFVbIl9vdXRwdXQiXSwgWm9kSW50ZXJzZWN0aW9uRGVmPFQsIFU+LCBUWyJfaW5wdXQiXSAmIFVbIl9pbnB1dCJdPiB7CiAgICBfcGFyc2UoaW5wdXQ6IFBhcnNlSW5wdXQpOiBQYXJzZVJldHVyblR5cGU8dGhpc1siX291dHB1dCJdPjsKICAgIHN0YXRpYyBjcmVhdGU6IDxUXzEgZXh0ZW5kcyBab2RUeXBlQW55LCBVXzEgZXh0ZW5kcyBab2RUeXBlQW55PihsZWZ0OiBUXzEsIHJpZ2h0OiBVXzEsIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kSW50ZXJzZWN0aW9uPFRfMSwgVV8xPjsKfQppbnRlcmZhY2UgWm9kUHJvbWlzZURlZjxUIGV4dGVuZHMgWm9kVHlwZUFueSA9IFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICB0eXBlOiBUOwogICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RQcm9taXNlOwp9CmRlY2xhcmUgY2xhc3MgWm9kUHJvbWlzZTxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFByb21pc2U8VFsiX291dHB1dCJdPiwgWm9kUHJvbWlzZURlZjxUPiwgUHJvbWlzZTxUWyJfaW5wdXQiXT4+IHsKICAgIHVud3JhcCgpOiBUOwogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4oc2NoZW1hOiBUXzEsIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kUHJvbWlzZTxUXzE+Owp9CnR5cGUgUmVmaW5lbWVudEVmZmVjdDxUPiA9IHsKICAgIHR5cGU6ICJyZWZpbmVtZW50IjsKICAgIHJlZmluZW1lbnQ6IChhcmc6IFQsIGN0eDogUmVmaW5lbWVudEN0eCkgPT4gYW55Owp9Owp0eXBlIFRyYW5zZm9ybUVmZmVjdDxUPiA9IHsKICAgIHR5cGU6ICJ0cmFuc2Zvcm0iOwogICAgdHJhbnNmb3JtOiAoYXJnOiBULCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IGFueTsKfTsKdHlwZSBQcmVwcm9jZXNzRWZmZWN0PFQ+ID0gewogICAgdHlwZTogInByZXByb2Nlc3MiOwogICAgdHJhbnNmb3JtOiAoYXJnOiBULCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IGFueTsKfTsKdHlwZSBFZmZlY3Q8VD4gPSBSZWZpbmVtZW50RWZmZWN0PFQ+IHwgVHJhbnNmb3JtRWZmZWN0PFQ+IHwgUHJlcHJvY2Vzc0VmZmVjdDxUPjsKaW50ZXJmYWNlIFpvZEVmZmVjdHNEZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgc2NoZW1hOiBUOwogICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzOwogICAgZWZmZWN0OiBFZmZlY3Q8YW55PjsKfQpkZWNsYXJlIGNsYXNzIFpvZEVmZmVjdHM8VCBleHRlbmRzIFpvZFR5cGVBbnksIE91dHB1dCA9IG91dHB1dDxUPiwgSW5wdXQgPSBpbnB1dDxUPj4gZXh0ZW5kcyBab2RUeXBlPE91dHB1dCwgWm9kRWZmZWN0c0RlZjxUPiwgSW5wdXQ+IHsKICAgIGlubmVyVHlwZSgpOiBUOwogICAgc291cmNlVHlwZSgpOiBUOwogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlOiA8SSBleHRlbmRzIFpvZFR5cGVBbnk+KHNjaGVtYTogSSwgZWZmZWN0OiBFZmZlY3Q8SVsiX291dHB1dCJdPiwgcGFyYW1zPzogUmF3Q3JlYXRlUGFyYW1zKSA9PiBab2RFZmZlY3RzPEksIElbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlV2l0aFByZXByb2Nlc3M6IDxJIGV4dGVuZHMgWm9kVHlwZUFueT4ocHJlcHJvY2VzczogKGFyZzogdW5rbm93biwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiB1bmtub3duLCBzY2hlbWE6IEksIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kRWZmZWN0czxJLCBJWyJfb3V0cHV0Il0sIHVua25vd24+Owp9CgppbnRlcmZhY2UgWm9kT3B0aW9uYWxEZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgaW5uZXJUeXBlOiBUOwogICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPcHRpb25hbDsKfQpkZWNsYXJlIGNsYXNzIFpvZE9wdGlvbmFsPFQgZXh0ZW5kcyBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGU8VFsiX291dHB1dCJdIHwgdW5kZWZpbmVkLCBab2RPcHRpb25hbERlZjxUPiwgVFsiX2lucHV0Il0gfCB1bmRlZmluZWQ+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgdW53cmFwKCk6IFQ7CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4odHlwZTogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZE9wdGlvbmFsPFRfMT47Cn0KaW50ZXJmYWNlIFpvZE51bGxhYmxlRGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGlubmVyVHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVsbGFibGU7Cn0KZGVjbGFyZSBjbGFzcyBab2ROdWxsYWJsZTxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFRbIl9vdXRwdXQiXSB8IG51bGwsIFpvZE51bGxhYmxlRGVmPFQ+LCBUWyJfaW5wdXQiXSB8IG51bGw+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgdW53cmFwKCk6IFQ7CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4odHlwZTogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZE51bGxhYmxlPFRfMT47Cn0KaW50ZXJmYWNlIFpvZERlZmF1bHREZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgaW5uZXJUeXBlOiBUOwogICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1dGlsLm5vVW5kZWZpbmVkPFRbIl9pbnB1dCJdPjsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdDsKfQpkZWNsYXJlIGNsYXNzIFpvZERlZmF1bHQ8VCBleHRlbmRzIFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZTx1dGlsLm5vVW5kZWZpbmVkPFRbIl9vdXRwdXQiXT4sIFpvZERlZmF1bHREZWY8VD4sIFRbIl9pbnB1dCJdIHwgdW5kZWZpbmVkPiB7CiAgICBfcGFyc2UoaW5wdXQ6IFBhcnNlSW5wdXQpOiBQYXJzZVJldHVyblR5cGU8dGhpc1siX291dHB1dCJdPjsKICAgIHJlbW92ZURlZmF1bHQoKTogVDsKICAgIHN0YXRpYyBjcmVhdGU6IDxUXzEgZXh0ZW5kcyBab2RUeXBlQW55Pih0eXBlOiBUXzEsIHBhcmFtczogewogICAgICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXAgfCB1bmRlZmluZWQ7CiAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlcXVpcmVkX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGRlZmF1bHQ6IFRfMVsiX2lucHV0Il0gfCAoKCkgPT4gdXRpbC5ub1VuZGVmaW5lZDxUXzFbIl9pbnB1dCJdPik7CiAgICB9KSA9PiBab2REZWZhdWx0PFRfMT47Cn0KaW50ZXJmYWNlIFpvZENhdGNoRGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGlubmVyVHlwZTogVDsKICAgIGNhdGNoVmFsdWU6IChjdHg6IHsKICAgICAgICBlcnJvcjogWm9kRXJyb3I7CiAgICAgICAgaW5wdXQ6IHVua25vd247CiAgICB9KSA9PiBUWyJfaW5wdXQiXTsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQ2F0Y2g7Cn0KZGVjbGFyZSBjbGFzcyBab2RDYXRjaDxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFRbIl9vdXRwdXQiXSwgWm9kQ2F0Y2hEZWY8VD4sIHVua25vd24+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgcmVtb3ZlQ2F0Y2goKTogVDsKICAgIHN0YXRpYyBjcmVhdGU6IDxUXzEgZXh0ZW5kcyBab2RUeXBlQW55Pih0eXBlOiBUXzEsIHBhcmFtczogewogICAgICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXAgfCB1bmRlZmluZWQ7CiAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlcXVpcmVkX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNhdGNoOiBUXzFbIl9vdXRwdXQiXSB8ICgoKSA9PiBUXzFbIl9vdXRwdXQiXSk7CiAgICB9KSA9PiBab2RDYXRjaDxUXzE+Owp9CmludGVyZmFjZSBab2RCcmFuZGVkRGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgdHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQnJhbmRlZDsKfQpkZWNsYXJlIGNvbnN0IEJSQU5EOiB1bmlxdWUgc3ltYm9sOwp0eXBlIEJSQU5EPFQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w+ID0gewogICAgW0JSQU5EXTogewogICAgICAgIFtrIGluIFRdOiB0cnVlOwogICAgfTsKfTsKZGVjbGFyZSBjbGFzcyBab2RCcmFuZGVkPFQgZXh0ZW5kcyBab2RUeXBlQW55LCBCIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sPiBleHRlbmRzIFpvZFR5cGU8VFsiX291dHB1dCJdICYgQlJBTkQ8Qj4sIFpvZEJyYW5kZWREZWY8VD4sIFRbIl9pbnB1dCJdPiB7CiAgICBfcGFyc2UoaW5wdXQ6IFBhcnNlSW5wdXQpOiBQYXJzZVJldHVyblR5cGU8YW55PjsKICAgIHVud3JhcCgpOiBUOwp9CmludGVyZmFjZSBab2RQaXBlbGluZURlZjxBIGV4dGVuZHMgWm9kVHlwZUFueSwgQiBleHRlbmRzIFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICBpbjogQTsKICAgIG91dDogQjsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUGlwZWxpbmU7Cn0KZGVjbGFyZSBjbGFzcyBab2RQaXBlbGluZTxBIGV4dGVuZHMgWm9kVHlwZUFueSwgQiBleHRlbmRzIFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZTxCWyJfb3V0cHV0Il0sIFpvZFBpcGVsaW5lRGVmPEEsIEI+LCBBWyJfaW5wdXQiXT4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPGFueT47CiAgICBzdGF0aWMgY3JlYXRlPEEgZXh0ZW5kcyBab2RUeXBlQW55LCBCIGV4dGVuZHMgWm9kVHlwZUFueT4oYTogQSwgYjogQik6IFpvZFBpcGVsaW5lPEEsIEI+Owp9CnR5cGUgQnVpbHRJbiA9ICgoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHwgKG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueSkpIHwgewogICAgcmVhZG9ubHkgW1N5bWJvbC50b1N0cmluZ1RhZ106IHN0cmluZzsKfSB8IERhdGUgfCBFcnJvciB8IEdlbmVyYXRvciB8IFByb21pc2U8dW5rbm93bj4gfCBSZWdFeHA7CnR5cGUgTWFrZVJlYWRvbmx5PFQ+ID0gVCBleHRlbmRzIE1hcDxpbmZlciBLLCBpbmZlciBWPiA/IFJlYWRvbmx5TWFwPEssIFY+IDogVCBleHRlbmRzIFNldDxpbmZlciBWPiA/IFJlYWRvbmx5U2V0PFY+IDogVCBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXSA/IHJlYWRvbmx5IFtIZWFkLCAuLi5UYWlsXSA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBWPiA/IFJlYWRvbmx5QXJyYXk8Vj4gOiBUIGV4dGVuZHMgQnVpbHRJbiA/IFQgOiBSZWFkb25seTxUPjsKaW50ZXJmYWNlIFpvZFJlYWRvbmx5RGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGlubmVyVHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVhZG9ubHk7Cn0KZGVjbGFyZSBjbGFzcyBab2RSZWFkb25seTxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPE1ha2VSZWFkb25seTxUWyJfb3V0cHV0Il0+LCBab2RSZWFkb25seURlZjxUPiwgTWFrZVJlYWRvbmx5PFRbIl9pbnB1dCJdPj4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4odHlwZTogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZFJlYWRvbmx5PFRfMT47CiAgICB1bndyYXAoKTogVDsKfQpkZWNsYXJlIGVudW0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kIHsKICAgIFpvZFN0cmluZyA9ICJab2RTdHJpbmciLAogICAgWm9kTnVtYmVyID0gIlpvZE51bWJlciIsCiAgICBab2ROYU4gPSAiWm9kTmFOIiwKICAgIFpvZEJpZ0ludCA9ICJab2RCaWdJbnQiLAogICAgWm9kQm9vbGVhbiA9ICJab2RCb29sZWFuIiwKICAgIFpvZERhdGUgPSAiWm9kRGF0ZSIsCiAgICBab2RTeW1ib2wgPSAiWm9kU3ltYm9sIiwKICAgIFpvZFVuZGVmaW5lZCA9ICJab2RVbmRlZmluZWQiLAogICAgWm9kTnVsbCA9ICJab2ROdWxsIiwKICAgIFpvZEFueSA9ICJab2RBbnkiLAogICAgWm9kVW5rbm93biA9ICJab2RVbmtub3duIiwKICAgIFpvZE5ldmVyID0gIlpvZE5ldmVyIiwKICAgIFpvZFZvaWQgPSAiWm9kVm9pZCIsCiAgICBab2RBcnJheSA9ICJab2RBcnJheSIsCiAgICBab2RPYmplY3QgPSAiWm9kT2JqZWN0IiwKICAgIFpvZFVuaW9uID0gIlpvZFVuaW9uIiwKICAgIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiA9ICJab2REaXNjcmltaW5hdGVkVW5pb24iLAogICAgWm9kSW50ZXJzZWN0aW9uID0gIlpvZEludGVyc2VjdGlvbiIsCiAgICBab2RUdXBsZSA9ICJab2RUdXBsZSIsCiAgICBab2RSZWNvcmQgPSAiWm9kUmVjb3JkIiwKICAgIFpvZE1hcCA9ICJab2RNYXAiLAogICAgWm9kU2V0ID0gIlpvZFNldCIsCiAgICBab2RGdW5jdGlvbiA9ICJab2RGdW5jdGlvbiIsCiAgICBab2RMYXp5ID0gIlpvZExhenkiLAogICAgWm9kTGl0ZXJhbCA9ICJab2RMaXRlcmFsIiwKICAgIFpvZEVudW0gPSAiWm9kRW51bSIsCiAgICBab2RFZmZlY3RzID0gIlpvZEVmZmVjdHMiLAogICAgWm9kTmF0aXZlRW51bSA9ICJab2ROYXRpdmVFbnVtIiwKICAgIFpvZE9wdGlvbmFsID0gIlpvZE9wdGlvbmFsIiwKICAgIFpvZE51bGxhYmxlID0gIlpvZE51bGxhYmxlIiwKICAgIFpvZERlZmF1bHQgPSAiWm9kRGVmYXVsdCIsCiAgICBab2RDYXRjaCA9ICJab2RDYXRjaCIsCiAgICBab2RQcm9taXNlID0gIlpvZFByb21pc2UiLAogICAgWm9kQnJhbmRlZCA9ICJab2RCcmFuZGVkIiwKICAgIFpvZFBpcGVsaW5lID0gIlpvZFBpcGVsaW5lIiwKICAgIFpvZFJlYWRvbmx5ID0gIlpvZFJlYWRvbmx5Igp9Cgp0eXBlIExvZ1ZhbHVlT2JqZWN0ID0gewogICAgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCBMb2dWYWx1ZU9iamVjdCB8IExvZ1ZhbHVlT2JqZWN0W107Cn07CgppbnRlcmZhY2UgR2l0SHViV29ya2Zsb3dSZXN1bHQgewogICAgam9iX2lkOiBzdHJpbmc7CiAgICBzdGF0dXM6ICdwZW5kaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAndGltZW91dCc7CiAgICByZXN1bHQ/OiB7CiAgICAgICAgb3V0cHV0PzogYW55OwogICAgICAgIHdvcmtmbG93X3J1bl9pZD86IG51bWJlcjsKICAgICAgICB3b3JrZmxvd19jb25jbHVzaW9uPzogc3RyaW5nOwogICAgICAgIGV4ZWN1dGlvbl90aW1lPzogbnVtYmVyOwogICAgfTsKICAgIGFydGlmYWN0cz86IEFycmF5PHsKICAgICAgICBpZDogbnVtYmVyOwogICAgICAgIG5hbWU6IHN0cmluZzsKICAgICAgICBzaXplX2J5dGVzOiBudW1iZXI7CiAgICAgICAgY29udGVudD86IGFueTsKICAgICAgICBjb250ZW50X3R5cGU/OiBzdHJpbmc7CiAgICB9PjsKICAgIHN0YXJ0ZWRfYXQ/OiBzdHJpbmc7CiAgICBjb21wbGV0ZWRfYXQ/OiBzdHJpbmc7CiAgICBnaXRodWJfdXJsPzogc3RyaW5nOwogICAgZXJyb3I/OiBzdHJpbmc7Cn0KCmludGVyZmFjZSBUcmFpbmluZ0V4YW1wbGVSZW5kZXJDb250ZXh0IHsKICAgIC8qKiBTY29wZWQgYWN0aW9uczogYGdldGAvYHNldGAgcmVhZCBhbmQgd3JpdGUgdGhlIGV4YW1wbGUgc2FuZGJveCBpbnN0ZWFkIG9mIHRoZSB0YXNrIGRhdGEgcm9vdC4gKi8KICAgIGFjdGlvbnM6IHR5cGVvZiBhY3Rpb25zOwogICAgLyoqCiAgICAgKiBUaGUgY3VycmVudCBleGFtcGxlIGlucHV0IEFGVEVSIHRoZSBub2RlIHByZXByb2Nlc3MgcnVucyAoaWRlbnRpdHkgd2hlbgogICAgICogdGhlIGJsb2NrIGhhcyBubyBwcmVwcm9jZXNzKSwgc28gdGhlIGludGVyZmFjZSBzZWVzIHRoZSBzYW1lIGRhdGEgYXMKICAgICAqIHByb2R1Y3Rpb24uIEFsc28gcmVhZGFibGUgdmlhIGBhY3Rpb25zLmdldCgnPG5hbWU+JylgLgogICAgICovCiAgICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47CiAgICBleGFtcGxlSWQ6IHN0cmluZzsKfQoKZGVjbGFyZSBjb25zdCBTdXNwZW5zZVBlbmRpbmdNYXJrZXI6IFJlYWN0LkZDOwpkZWNsYXJlIGNvbnN0IEZpZWxkOiB7CiAgICByZWFkb25seSBBaUVkaXRvcjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbW1lbnRzPzogewogICAgICAgICAgICB1c2VyVHlwZTogc3RyaW5nOwogICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRlbnRFZGl0YWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWlDaGVja3M/OiB7CiAgICAgICAgICAgIGNvZGU/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgdmFsaWRhdGU6IGJvb2xlYW47CiAgICAgICAgICAgICAgICBjaGVja1R5cGVzPzogKCJDT0RFQkxPQ0tfRVhJU1RTIiB8ICJJTlRST19DT01NRU5UX0VYSVNUUyIgfCAiTEFOR19TUEVDSUZJRUQiIHwgIkNPREVfQ09NTUVOVFNfRVhJU1RTIilbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgaW50ZW50PzogewogICAgICAgICAgICAgICAgZW5hYmxlZDogYm9vbGVhbjsKICAgICAgICAgICAgICAgIHZhbGlkYXRlOiBib29sZWFuOwogICAgICAgICAgICAgICAgcHJvbXB0OiBzdHJpbmc7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZhY3RzPzogewogICAgICAgICAgICAgICAgZW5hYmxlZDogYm9vbGVhbjsKICAgICAgICAgICAgICAgIHNvdXJjZVRleHRzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBzb3VyY2VMaW5rcz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgbWF4U2VsZWN0ZWRTeW1ib2xzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgc3VnZ2VzdGVkRmFjdHM/OiB7CiAgICAgICAgICAgICAgICAgICAgY29udGVudDogc3RyaW5nOwogICAgICAgICAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBncmFtbWFyU2NvcmU/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgbWluU2NvcmU6IG51bWJlcjsKICAgICAgICAgICAgICAgIHZhbGlkYXRlOiBib29sZWFuOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3b3JkQ291bnQ/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgdmFsaWRhdGU6IGJvb2xlYW47CiAgICAgICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRva2VuQ291bnQ/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgdmFsaWRhdGU6IGJvb2xlYW47CiAgICAgICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBpZ25vcmVNYXJrZG93bj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB0b2tlbml6ZXJJZD86ICJ1bmlncmFtXzAycGN0X2NjX3YxLjBfaGZfY29udmVydGVkX2NsZWFuZWQiIHwgImNsYXVkZS0zLTUtc29ubmV0LTIwMjQwNjIwLWFudGhyb3BpYy1haS1jb3VudC10b2tlbnMiIHwgImNsYXVkZS0zLTUtc29ubmV0LTIwMjQxMDIyLWFudGhyb3BpYy1haS1jb3VudC10b2tlbnMiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBhaUdlbmVyYXRlZD86IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47CiAgICAgICAgICAgICAgICB2YWxpZGF0ZTogYm9vbGVhbjsKICAgICAgICAgICAgICAgIG9yaWdpbmFsVGhyZXNob2xkOiBudW1iZXI7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0TW9kZT86ICJtYXJrZG93biIgfCAicmljaC10ZXh0IiB8IHVuZGVmaW5lZDsKICAgICAgICBpbWFnZVR5cGU/OiAidXJsIiB8ICJiYXNlNjQiIHwgImJsb2IiIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZVNpbmdsZURvbGxhck1hdGg/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRlZmF1bHRBaVBhbmVsQ29udGVudD86ICJjb2RlIiB8ICJjb21tZW50cyIgfCAiaW50ZW50IiB8ICJncmFtbWFyU2NvcmUiIHwgImFpR2VuZXJhdGVkIiB8ICJmYWN0IiB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZENvbnRlbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlQ29udGVudD86ICgoYXJnc18wOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgQ2hlY2tib3g6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVzZXJ2ZUZhbHNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgQ2hhdEFzc2lzdGFudDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBvcHRpb25zPzogewogICAgICAgICAgICB0aGlua2luZz86IHsKICAgICAgICAgICAgICAgIHR5cGU6ICJlbmFibGVkIjsKICAgICAgICAgICAgICAgIGJ1ZGdldF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRvcF9wPzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdG9wX2s/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXhfdG9rZW5zPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0b29scz86IGFueVtdIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGluaXRpYWxNZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IENvZGU6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgbGFuZ3VhZ2U6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybWF0aW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgQ29kZUV4ZWN1dGlvbjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBsYW5ndWFnZTogInB5dGhvbkAzLjEwLjAiIHwgImphdmFzY3JpcHRAMjAuMTEuMSI7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm1hdGluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IERpYWxvZ1JldmlldzogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBhbGxvd2VkTWV0YU1vZGVsczogUGFydGlhbDxSZWNvcmQ8ImNoYXRncHQiIHwgImNsYXVkZSIgfCAiZ2VtaW5pIiB8ICJtZXRhIiB8ICJtZXRhXzEiIHwgIm1ldGFfMiIsIHN0cmluZz4+OwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRvcGljPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHFhPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbHM/OiAoImNoYXRncHQiIHwgImNsYXVkZSIgfCAiZ2VtaW5pIiB8ICJtZXRhIiB8ICJtZXRhXzEiIHwgIm1ldGFfMiIpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgZGltZW5zaW9ucz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBFeHRlcm5hbDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB1cmw6IHN0cmluZzsKICAgICAgICBjb25maWc6IHt9OwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBGYWNlQ29sbGVjdGlvbjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBxYT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9iaWxlT25seT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWF0aW9uPzogIkEiIHwgIkIiIHwgdW5kZWZpbmVkOwogICAgICAgIHBhZ2U/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVidWc/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNhbWVQZXJzb25UaHJlc2hvbGQ/OiB7CiAgICAgICAgICAgIHNlbGZpZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcG9zZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgaGlzdG9yaWNhbD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBGaWxlVXBsb2FkOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG11bHRpcGxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhY2NlcHQ/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDsKICAgICAgICBsaW5rVHlwZT86ICJzYXNMaW5rIiB8ICJkb3dubG9hZExpbmsiIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbmltdW1GaWxlcz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgSW1hZ2VBbm5vdGF0aW9uOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIGltYWdlOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRvb2xzPzogKCJyZWN0YW5nbGUiIHwgInBvbHlnb24iKVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVscz86IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgY29sb3I6ICJyZWQiIHwgIm9yYW5nZSIgfCAiYW1iZXIiIHwgInllbGxvdyIgfCAibGltZSIgfCAiZ3JlZW4iIHwgImVtZXJhbGQiIHwgInRlYWwiIHwgImN5YW4iIHwgInNreSIgfCAiYmx1ZSIgfCAiaW5kaWdvIiB8ICJ2aW9sZXQiIHwgInB1cnBsZSIgfCAiZnVjaHNpYSIgfCAicGluayIgfCAicm9zZSIgfCAid2hpdGUiOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBxdWVzdGlvbnM/OiAoewogICAgICAgICAgICB0eXBlOiAidGV4dCI7CiAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgewogICAgICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgfVtdOwogICAgICAgICAgICB0eXBlOiAidG9nZ2xlLWdyb3VwIjsKICAgICAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgICAgICB9W107CiAgICAgICAgICAgIHR5cGU6ICJzZWxlY3QiOwogICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdHlwZTogIm51bWJlciI7CiAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGRlY2ltYWxTY2FsZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB9KVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGFubm90YXRpb25TaXplPzogewogICAgICAgICAgICBtaW5IZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbldpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzcGxheUxhYmVscz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbmF2aWdhdG9yPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0QW5ub3RhdGlvbkNvbG9yPzogInJlZCIgfCAib3JhbmdlIiB8ICJhbWJlciIgfCAieWVsbG93IiB8ICJsaW1lIiB8ICJncmVlbiIgfCAiZW1lcmFsZCIgfCAidGVhbCIgfCAiY3lhbiIgfCAic2t5IiB8ICJibHVlIiB8ICJpbmRpZ28iIHwgInZpb2xldCIgfCAicHVycGxlIiB8ICJmdWNoc2lhIiB8ICJwaW5rIiB8ICJyb3NlIiB8ICJ3aGl0ZSIgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IEltYWdlU2tlbGV0b25Bbm5vdGF0aW9uOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHRvb2xzOiB7CiAgICAgICAgICAgIHR5cGU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgY29sb3I6ICJyZWQiIHwgIm9yYW5nZSIgfCAiYW1iZXIiIHwgInllbGxvdyIgfCAibGltZSIgfCAiZ3JlZW4iIHwgImVtZXJhbGQiIHwgInRlYWwiIHwgImN5YW4iIHwgInNreSIgfCAiYmx1ZSIgfCAiaW5kaWdvIiB8ICJ2aW9sZXQiIHwgInB1cnBsZSIgfCAiZnVjaHNpYSIgfCAicGluayIgfCAicm9zZSIgfCAid2hpdGUiOwogICAgICAgICAgICB0ZW1wbGF0ZTogUmVjb3JkPHN0cmluZywgW251bWJlciwgbnVtYmVyXT47CiAgICAgICAgICAgIGNvbm5lY3Rpb25zOiBbc3RyaW5nLCBzdHJpbmddW107CiAgICAgICAgICAgIHBvaW50c0NvbG9yPzogUmVjb3JkPHN0cmluZywgInJlZCIgfCAib3JhbmdlIiB8ICJhbWJlciIgfCAieWVsbG93IiB8ICJsaW1lIiB8ICJncmVlbiIgfCAiZW1lcmFsZCIgfCAidGVhbCIgfCAiY3lhbiIgfCAic2t5IiB8ICJibHVlIiB8ICJpbmRpZ28iIHwgInZpb2xldCIgfCAicHVycGxlIiB8ICJmdWNoc2lhIiB8ICJwaW5rIiB8ICJyb3NlIiB8ICJ3aGl0ZSI+IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBzaG93UG9pbnRMYWJlbD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHNjYWxlPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICBpbWFnZTogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgSnNvblNjaGVtYUZvcm06IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc2NoZW1hPzogYW55OwogICAgfT47CiAgICByZWFkb25seSBMaXN0OiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHJlbmRlckl0ZW06IChhcmdzXzA6IHN0cmluZywgYXJnc18xOiBhbnksIGFyZ3NfMjogbnVtYmVyKSA9PiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBmbGF0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4TGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGl0ZW1XaXRoQm9yZGVyPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhZGRCdXR0b25MYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhZGRCdXR0b25WYXJpYW50PzogImRlZmF1bHQiIHwgInNlY29uZGFyeSIgfCAiZ2hvc3QiIHwgIm91dGxpbmUiIHwgdW5kZWZpbmVkOwogICAgICAgIGdhcD86IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICByZW9yZGVyYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE1lZGlhVGFza1JldmlldzogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgTWxFbmRwb2ludDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIGVuZHBvaW50OiBzdHJpbmc7CiAgICAgICAgZGF0YToge30gfCAoKCkgPT4ge30pOwogICAgICAgIGZ1bmN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB1c2VfY2FjaGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHBvc3RQcm9jZXNzaW5nRm4/OiAoKGVuZHBvaW50UmVzdWx0OiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWFudD86ICJkZWZhdWx0IiB8ICJzZWNvbmRhcnkiIHwgImdob3N0IiB8ICJvdXRsaW5lIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb21wbGFpbj86IHsKICAgICAgICAgICAgdHlwZT86ICJidXR0b24iIHwgImNoZWNrYm94IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGRlZmF1bHRDb21tZW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBvblN1Y2Nlc3M/OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGluc3RydWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE1sRW5kcG9pbnRNdWx0aXBsZTogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIHJlcXVlc3RzOiB7CiAgICAgICAgICAgIGVuZHBvaW50OiBzdHJpbmc7CiAgICAgICAgICAgIGRhdGE6IHt9IHwgKCgpID0+IHt9KTsKICAgICAgICAgICAgZnVuY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1vbmRheVN1Yml0ZW1JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdXNlX2NhY2hlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcG9zdFByb2Nlc3NpbmdGbj86ICgoZW5kcG9pbnRSZXN1bHQ6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWFudD86ICJkZWZhdWx0IiB8ICJzZWNvbmRhcnkiIHwgImdob3N0IiB8ICJvdXRsaW5lIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb21wbGFpbj86IHsKICAgICAgICAgICAgdHlwZT86ICJidXR0b24iIHwgImNoZWNrYm94IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGRlZmF1bHRDb21tZW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBvblN1Y2Nlc3M/OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGluc3RydWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE11bHRpU2VsZWN0OiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE51bWJlcjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRlY2ltYWxTY2FsZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgUG9ydGFsQ2hhdEFzc2lzdGFudDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBvcHRpb25zPzogewogICAgICAgICAgICB0aGlua2luZz86IHsKICAgICAgICAgICAgICAgIHR5cGU6ICJlbmFibGVkIjsKICAgICAgICAgICAgICAgIGJ1ZGdldF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRvcF9wPzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdG9wX2s/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXhfdG9rZW5zPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0b29scz86IGFueVtdIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGluaXRpYWxNZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFJhZGlvR3JvdXA6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgICAgICBoaW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgU2VsZWN0OiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFNob3BpZnlPbmVEY2c6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgc2hvcEFwcEVtYWlsOiBzdHJpbmc7CiAgICAgICAgY291bnRyeTogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcWE/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHF1ZXJ5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHF1ZXJ5U2hhcGU/OiAia2V5d29yZCIgfCAiY29tcGxleCIgfCAiY29udmVyc2F0aW9uYWwiIHwgdW5kZWZpbmVkOwogICAgICAgIHBlcnNvbmE/OiB7CiAgICAgICAgICAgIHV1aWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlbGF0aW9uc2hpcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgc3VtbWFyeT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgc25hcHNob3Q/OiB1bmtub3duOwogICAgICAgICAgICBsb29rdXBfc291cmNlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgcGFpcnNUYXJnZXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgaXNUZXN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByZWFzb25pbmdGYWN0b3JzPzogewogICAgICAgICAgICBpZDogc3RyaW5nOwogICAgICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgU2hvcGlmeVN0b3JlZnJvbnQ6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAganVkZ2VzOiB7CiAgICAgICAgICAgIHNob3BfYXBwX2VtYWlsOiBzdHJpbmc7CiAgICAgICAgICAgIGNvdW50cnk6IHN0cmluZzsKICAgICAgICAgICAgcGVyc29uYTogewogICAgICAgICAgICAgICAgdXVpZDogc3RyaW5nOwogICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwOiBzdHJpbmc7CiAgICAgICAgICAgICAgICBzdW1tYXJ5OiBzdHJpbmc7CiAgICAgICAgICAgICAgICBsb29rdXBfc291cmNlOiBzdHJpbmc7CiAgICAgICAgICAgICAgICBzbmFwc2hvdD86IHVua25vd247CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHN0b3JlczogewogICAgICAgICAgICAgICAgc2hvcF9naWQ6IHN0cmluZzsKICAgICAgICAgICAgICAgIG1lcmNoYW50X25hbWU6IHN0cmluZzsKICAgICAgICAgICAgICAgIGRvbWFpbjogc3RyaW5nOwogICAgICAgICAgICAgICAgbWVyY2hhbnRfY2F0ZWdvcnk6IHN0cmluZzsKICAgICAgICAgICAgICAgIHNhbXBsZV9wcm9kdWN0czogc3RyaW5nW107CiAgICAgICAgICAgICAgICB2aXNpdGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJhbms/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH1bXTsKICAgICAgICAgICAgbGF0ZXN0X3F1ZXJ5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGlzVGVzdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFNwZWVjaFRvVGV4dDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG1vbmRheVN1Yml0ZW1JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9kZWxJZD86ICJncHQtNG8tdHJhbnNjcmliZSIgfCAiZ3B0LTRvLW1pbmktdHJhbnNjcmliZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFNwZWVjaFRvVGV4dFYyOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbElkPzogImdwdC00by10cmFuc2NyaWJlIiB8ICJncHQtNG8tbWluaS10cmFuc2NyaWJlIiB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVGV4dDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcGVsbENoZWNrPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZENvcHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkUGFzdGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBUZXh0QW5ub3RhdGlvbjogUmVhY3QuRkM8ewogICAgICAgIGNvbnRlbnQ6IHN0cmluZzsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgbGFiZWxzOiB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgIGNvbG9yOiAicmVkIiB8ICJvcmFuZ2UiIHwgImFtYmVyIiB8ICJ5ZWxsb3ciIHwgImxpbWUiIHwgImdyZWVuIiB8ICJlbWVyYWxkIiB8ICJ0ZWFsIiB8ICJjeWFuIiB8ICJza3kiIHwgImJsdWUiIHwgImluZGlnbyIgfCAidmlvbGV0IiB8ICJwdXJwbGUiIHwgImZ1Y2hzaWEiIHwgInBpbmsiIHwgInJvc2UiIHwgIndoaXRlIjsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9kZT86ICJjbGFzc2lmeWluZyIgfCAiY2xhc3NpZnlpbmctY29tbWVudGluZyIgfCB1bmRlZmluZWQ7CiAgICAgICAgYWRqdXN0PzogInN5bWJvbHMiIHwgIndvcmRzIiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVGV4dGFyZWE6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3BlbGxDaGVjaz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWRDb3B5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZFBhc3RlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByZXNpemFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJvd3M/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFRvZ2dsZUdyb3VwOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiAibXVsdGlwbGUiIHwgInNpbmdsZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBWaWRlb1RpbWVsaW5lU2VnbWVudGF0aW9uOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHZpZGVvOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcXVlc3Rpb25zPzogewogICAgICAgICAgICBrZXlmcmFtZXM/OiAoewogICAgICAgICAgICAgICAgdHlwZTogInRleHQiOwogICAgICAgICAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgewogICAgICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9W107CiAgICAgICAgICAgICAgICB0eXBlOiAidG9nZ2xlLWdyb3VwIjsKICAgICAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0pW10gfCAoKGFyZ3NfMDogb2JqZWN0SW5wdXRUeXBlPHsKICAgICAgICAgICAgICAgIHRpbWU6IFpvZE51bWJlcjsKICAgICAgICAgICAgfSwgWm9kVW5rbm93biwgInN0cmlwIj4pID0+ICh7CiAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCI7CiAgICAgICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB7CiAgICAgICAgICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH1bXTsKICAgICAgICAgICAgICAgIHR5cGU6ICJ0b2dnbGUtZ3JvdXAiOwogICAgICAgICAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSlbXSkgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHNlZ21lbnRzPzogKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IjsKICAgICAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfVtdOwogICAgICAgICAgICAgICAgdHlwZTogInRvZ2dsZS1ncm91cCI7CiAgICAgICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9KVtdIHwgKChhcmdzXzA6IG9iamVjdElucHV0VHlwZTx7CiAgICAgICAgICAgICAgICBmcm9tOiBab2ROdW1iZXI7CiAgICAgICAgICAgICAgICB0bzogWm9kTnVtYmVyOwogICAgICAgICAgICB9LCBab2RVbmtub3duLCAic3RyaXAiPikgPT4gKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IjsKICAgICAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfVtdOwogICAgICAgICAgICAgICAgdHlwZTogInRvZ2dsZS1ncm91cCI7CiAgICAgICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9KVtdKSB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgIG1vZGU/OiAia2V5ZnJhbWVzIiB8ICJzZWdtZW50cyIgfCAia2V5ZnJhbWVzLXNlZ21lbnRzIiB8IHVuZGVmaW5lZDsKICAgICAgICB2aWRlb0hlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0UGxheWJhY2tSYXRlPzogMSB8IDIgfCAwLjI1IHwgMC41IHwgMC43NSB8IDEuMjUgfCAxLjUgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFZpZGVvRnJhbWluZzogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2aWRlbzogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZpZGVvSGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGRlZmF1bHRQbGF5YmFja1JhdGU/OiAxIHwgMiB8IDAuMjUgfCAwLjUgfCAwLjc1IHwgMS4yNSB8IDEuNSB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVmlkZW9SZWNvcmQ6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgZnBzVG9sZXJhbmNlRnJhY3Rpb246IG51bWJlcjsKICAgICAgICByZXNvbHV0aW9uVG9sZXJhbmNlRnJhY3Rpb246IG51bWJlcjsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtb2JpbGVPbmx5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsaW5rVHlwZT86ICJzYXNMaW5rIiB8ICJkb3dubG9hZExpbmsiIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtaW5XaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvcmllbnRhdGlvbj86ICJsYW5kc2NhcGUiIHwgInBvcnRyYWl0IiB8IHVuZGVmaW5lZDsKICAgICAgICBsb2NrU2NyZWVuT3JpZW50YXRpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkR1cmF0aW9uU2VjPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1heER1cmF0aW9uU2VjPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGNhbWVyYUZhY2luZz86ICJ1c2VyIiB8ICJlbnZpcm9ubWVudCIgfCB1bmRlZmluZWQ7CiAgICAgICAgYXVkaW8/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJlY29yZGluZ1F1YWxpdHk/OiAiaGlnaCIgfCAibG93IiB8ICJiYWxhbmNlZCIgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5zdXBwb3J0ZWRNZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hdGl2ZUNhbWVyYT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhdGZvcm0/OiAiaW9zIiB8ICJhbmRyb2lkIiB8ICJib3RoIiB8IHVuZGVmaW5lZDsKICAgICAgICBsZW5zPzogImRlZmF1bHQiIHwgIndpZGUiIHwgInVsdHJhV2lkZSIgfCAidGVsZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluRm92RGVnPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkZwcz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtaW5CaXRyYXRlPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGhkck1vZGU/OiAib2ZmIiB8ICJoZHIxMCIgfCAiYXV0byIgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlnaHRpbmdUaHJlc2hvbGQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVjb3JkSW11PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVmlkZW9VcGxvYWQ6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbXVsdGlwbGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGFjY2VwdD86IHN0cmluZ1tdIHwgdW5kZWZpbmVkOwogICAgICAgIGxpbmtUeXBlPzogInNhc0xpbmsiIHwgImRvd25sb2FkTGluayIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluaW11bUZpbGVzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG9yaWVudGF0aW9uPzogImxhbmRzY2FwZSIgfCAicG9ydHJhaXQiIHwgInNxdWFyZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluRHVyYXRpb25TZWM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4RHVyYXRpb25TZWM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFdvcmxkU2VhcmNoOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIGF2YWlsYWJsZVdvcmxkczogc3RyaW5nW107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGVyUGFnZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzZWxlY3REb2N1bWVudHM/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47Cn07CmRlY2xhcmUgY29uc3QgTGF5b3V0OiB7CiAgICBTdGlja3lIZWFkZXI6IFJlYWN0LkZDPHsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWFkZXI/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKfTsKZGVjbGFyZSBjb25zdCBWaWV3OiB7CiAgICBBY3Rpb25CdXR0b246IFJlYWN0LkZDPHsKICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIGFjdGlvbjogKCkgPT4gYW55OwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YXJpYW50PzogImRlZmF1bHQiIHwgInNlY29uZGFyeSIgfCAiZ2hvc3QiIHwgIm91dGxpbmUiIHwgdW5kZWZpbmVkOwogICAgICAgIGxvYWRpbmdMYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgQWxlcnQ6IFJlYWN0LkZDPHsKICAgICAgICB0aXRsZT86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBkZXNjcmlwdGlvbj86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YXJpYW50PzogImVycm9yIiB8ICJkZWZhdWx0IiB8ICJpbmZvIiB8ICJzdWNjZXNzIiB8ICJ3YXJuaW5nIiB8IHVuZGVmaW5lZDsKICAgICAgICBwYWRkaW5nPzogInNtIiB8ICJtZCIgfCB1bmRlZmluZWQ7CiAgICAgICAgaWNvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIEF1ZGlvOiBSZWFjdC5GQzx7CiAgICAgICAgdXJsOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgcGxheWVkRnVsbHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIENhcmQ6IFJlYWN0LkZDPHsKICAgICAgICBmbGF0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBkZXNjcmlwdGlvbj86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YXJpYW50PzogImVycm9yIiB8ICJkZWZhdWx0IiB8ICJpbmZvIiB8ICJzdWNjZXNzIiB8ICJ3YXJuaW5nIiB8IHVuZGVmaW5lZDsKICAgICAgICB2aWV3PzogImZpbGwiIHwgIm91dGxpbmUiIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBDb2RlRGlmZjogUmVhY3QuRkM8ewogICAgICAgIG9yaWdpbmFsOiBzdHJpbmc7CiAgICAgICAgbGFuZ3VhZ2U6IHN0cmluZzsKICAgICAgICBtb2RpZmllZDogc3RyaW5nOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzaWRlQnlTaWRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgQ29sOiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvZmZzZXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2V0UGFyYW1zPzogKChhcmdzXzA6IG51bWJlcikgPT4gewogICAgICAgICAgICBzcGFuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgfSkgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIENvbGxhcHNpYmxlOiBSZWFjdC5GQzx7CiAgICAgICAgZmxhdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdGl0bGU/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhcmlhbnQ/OiAiZGVmYXVsdCIgfCAiaW5mbyIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdE9wZW4/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBEaXZpZGVyOiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3JpZW50YXRpb24/OiAiaG9yaXpvbnRhbCIgfCAidmVydGljYWwiIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBGbGV4OiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2FwPzogc3RyaW5nIHwgbnVtYmVyIHwgW3N0cmluZyB8IG51bWJlciwgc3RyaW5nIHwgbnVtYmVyXSB8IHVuZGVmaW5lZDsKICAgICAgICBqdXN0aWZ5PzogInN0YXJ0IiB8ICJlbmQiIHwgImNlbnRlciIgfCAibm9ybWFsIiB8ICJzcGFjZS1hcm91bmQiIHwgInNwYWNlLWJldHdlZW4iIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRpY2FsPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB3cmFwPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhbGlnbj86ICJzdGFydCIgfCAiZW5kIiB8ICJtaWRkbGUiIHwgInN0cmV0Y2giIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBJbWFnZTogUmVhY3QuRkM8ewogICAgICAgIHNyYzogc3RyaW5nOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHByZXZpZXc/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBJbWFnZUdhbGxlcnk6IFJlYWN0LkZDPHsKICAgICAgICBpbWFnZXM6IHN0cmluZ1tdOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmV2aWV3PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgTGFiZWw6IFJlYWN0LkZDPHsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBMYWJlbHM6IFJlYWN0LkZDPHsKICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgdGl0bGU6IHN0cmluZzsKICAgICAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aGVtZT86ICJkZWZhdWx0IiB8ICJhbGVydCIgfCAic3VjY2VzcyIgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBMZWFmbGV0TWFwOiBSZWFjdC5GQzx7CiAgICAgICAgY2VudGVyOiBbbnVtYmVyLCBudW1iZXJdOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB6b29tPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1hcmtlcnM/OiB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBbbnVtYmVyLCBudW1iZXJdOwogICAgICAgICAgICBjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcG9wdXA/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBMaW5rOiBSZWFjdC5GQzx7CiAgICAgICAgdXJsOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgb3BlbmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBNYXJrZG93bjogUmVhY3QuRkM8ewogICAgICAgIGNvbnRlbnQ6IHN0cmluZzsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZENvcHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGh0bWw/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBSb3c6IFJlYWN0LkZDPHsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnYXA/OiBzdHJpbmcgfCBudW1iZXIgfCBbc3RyaW5nIHwgbnVtYmVyLCBzdHJpbmcgfCBudW1iZXJdIHwgdW5kZWZpbmVkOwogICAgICAgIGp1c3RpZnk/OiAic3RhcnQiIHwgImVuZCIgfCAiY2VudGVyIiB8ICJzcGFjZS1hcm91bmQiIHwgInNwYWNlLWJldHdlZW4iIHwgdW5kZWZpbmVkOwogICAgICAgIGFsaWduPzogInN0YXJ0IiB8ICJlbmQiIHwgIm1pZGRsZSIgfCAic3RyZXRjaCIgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIFRhYnM6IFJlYWN0LkZDPHsKICAgICAgICB0YWJzOiB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIGNvbnRlbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICBmbGF0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBkZXNjcmlwdGlvbj86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0VGFiPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYnNWaWV3S2V5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUZXh0OiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sb3I/OiAiZXJyb3IiIHwgInNlY29uZGFyeSIgfCAicHJpbWFyeSIgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWFudD86ICJjb2RlIiB8ICJibG9ja3F1b3RlIiB8ICJoMSIgfCAiaDIiIHwgImgzIiB8ICJoNCIgfCAicCIgfCAic21hbGwiIHwgImxhcmdlIiB8IHVuZGVmaW5lZDsKICAgIH0gJiB7CiAgICAgICAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTsKICAgIH0+OwogICAgVGV4dERpZmY6IFJlYWN0LkZDPHsKICAgICAgICBzb3VyY2U6IHN0cmluZzsKICAgICAgICB0YXJnZXQ6IHN0cmluZzsKICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0T3Blbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWxnb3JpdGhtPzogInN5bWJvbHMiIHwgIndvcmRzIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50SGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYnNMYWJlbHM/OiB7CiAgICAgICAgICAgIHNvdXJjZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBkaWZmPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIFR1dG9yaWFsOiBSZWFjdC5GQzx7CiAgICAgICAgdW5pcXVlSWQ6IHN0cmluZzsKICAgICAgICBzdGVwczogewogICAgICAgICAgICB0aXRsZTogc3RyaW5nOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZGlzYWJsZUFjdGl2ZUludGVyYWN0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB9W107CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW5zdGFudD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgd2l0aEJ1dHRvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWxsb3dDbG9zZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIFBkZjogUmVhY3QuRkM8ewogICAgICAgIHVybDogc3RyaW5nOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgVmlkZW86IFJlYWN0LkZDPHsKICAgICAgICB1cmw6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBwbGF5ZWRGdWxseT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByYXRpbz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgT25ib2FyZGluZzogUmVhY3QuRkM8ewogICAgICAgIG1vZHVsZXM6IHsKICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgcm9sZTogc3RyaW5nOwogICAgICAgICAgICBzdGVwczogewogICAgICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgICAgIHZhbGlkYXRvcnM6IHsKICAgICAgICAgICAgICAgICAgICBpZDogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGJvb2xlYW47CiAgICAgICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGNyaXRlcmlhOiBzdHJpbmc7CiAgICAgICAgICAgICAgICB9W107CiAgICAgICAgICAgICAgICBjb250ZW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgICAgICB9W107CiAgICAgICAgICAgIHNjZW5hcmlvOiBzdHJpbmc7CiAgICAgICAgICAgIGdvYWw6IHN0cmluZzsKICAgICAgICAgICAgc3VjY2Vzc0NyaXRlcmlhOiBzdHJpbmc7CiAgICAgICAgfVtdOwogICAgICAgIGZsYXQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHRpdGxlPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGRlc2NyaXB0aW9uPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUcmFpbmluZzogUmVhY3QuRkM8ewogICAgICAgIHN0ZXBzOiB7CiAgICAgICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgICAgIGJsb2NrczogYW55W107CiAgICAgICAgfVtdOwogICAgICAgIHRpdGxlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUcmFpbmluZ1RoZW9yeTogUmVhY3QuRkM8ewogICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgY29udGVudD86ICh7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJtYXJrZG93biI7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogImltYWdlIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGFsdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAidmlkZW8iOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAiY29kZSI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsYW5ndWFnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9KVtdIHwgdW5kZWZpbmVkOwogICAgICAgIHRpdGxlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUcmFpbmluZ0NvbnNlbnQ6IFJlYWN0LkZDPHsKICAgICAgICBpZDogc3RyaW5nOwogICAgICAgIGNvbnNlbnRMYWJlbDogc3RyaW5nOwogICAgICAgIGNvbnRlbnQ/OiAoewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAibWFya2Rvd24iOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJpbWFnZSI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogInZpZGVvIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogImNvZGUiOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFuZ3VhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSlbXSB8IHVuZGVmaW5lZDsKICAgICAgICBwYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRpdGxlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgVHJhaW5pbmdRdWl6OiBSZWFjdC5GQzx7CiAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICBxdWVzdGlvbnM6IHsKICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgIH1bXTsKICAgICAgICAgICAgdHlwZTogInNpbmdsZS1jaG9pY2UiIHwgIm11bHRpcGxlLWNob2ljZSI7CiAgICAgICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgICAgIHF1ZXN0aW9uOiBzdHJpbmc7CiAgICAgICAgICAgIGNvcnJlY3RBbnN3ZXI6IHN0cmluZyB8IHN0cmluZ1tdOwogICAgICAgICAgICBoaW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBjb3JyZWN0QW5zd2VyRmVlZGJhY2s/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGluY29ycmVjdEFuc3dlckZlZWRiYWNrPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICBjb250ZW50PzogKHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogIm1hcmtkb3duIjsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAiaW1hZ2UiOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgYWx0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJ2aWRlbyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJjb2RlIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxhbmd1YWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0pW10gfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIFRyYWluaW5nUHJhY3RpY2U6IFJlYWN0LkZDPHsKICAgICAgICBpZDogc3RyaW5nOwogICAgICAgIHZhbGlkYXRvcnM6IHsKICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZzsKICAgICAgICAgICAgcmVxdWlyZWQ6IGJvb2xlYW47CiAgICAgICAgICAgIG5hbWU6IHN0cmluZzsKICAgICAgICAgICAgY3JpdGVyaWE6IHN0cmluZzsKICAgICAgICB9W107CiAgICAgICAgZWRpdG9yVHlwZTogIlRFWFQiIHwgIk1BUktET1dOIiB8ICJDT0RFIjsKICAgICAgICBjb250ZW50PzogKHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogIm1hcmtkb3duIjsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAiaW1hZ2UiOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgYWx0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJ2aWRlbyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJjb2RlIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxhbmd1YWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0pW10gfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VVcmw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZWRpdG9yQ29uZmlnPzogewogICAgICAgICAgICBsYW5ndWFnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJvd3M/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgVHJhaW5pbmdFeGFtcGxlczogUmVhY3QuRkM8ewogICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgZXhhbXBsZXM6IHsKICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgY2hlY2tzOiAoewogICAgICAgICAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgICAgICAgICAgdHlwZTogImV4YWN0IjsKICAgICAgICAgICAgICAgIGhpbnQ6IHN0cmluZzsKICAgICAgICAgICAgICAgIGdvbGRlbjogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVua25vd25bXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIGNvZGU6IHN0cmluZzsKICAgICAgICAgICAgICAgIHR5cGU6ICJjb2RlIjsKICAgICAgICAgICAgICAgIGhpbnQ6IHN0cmluZzsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIHR5cGU6ICJsbG0iOwogICAgICAgICAgICAgICAgY3JpdGVyaWE6IHN0cmluZzsKICAgICAgICAgICAgICAgIHBhdGhzOiBzdHJpbmdbXTsKICAgICAgICAgICAgICAgIGhpbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBpbWFnZVVybD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJlZmVyZW5jZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSlbXTsKICAgICAgICAgICAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+OwogICAgICAgICAgICBleHBsYW5hdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9W107CiAgICAgICAgcGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcHJlcHJvY2Vzcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb3N0cHJvY2Vzcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0gJiB7CiAgICAgICAgY2hpbGRyZW46IChjb250ZXh0OiBUcmFpbmluZ0V4YW1wbGVSZW5kZXJDb250ZXh0KSA9PiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIFRyYWluaW5nSW5mbzogUmVhY3QuRkM8ewogICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgcm9sZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnb2FsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN1Y2Nlc3NDcml0ZXJpYT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb21wbGV0aW9uVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+Owp9OwpkZWNsYXJlIGNvbnN0IFZhbGlkYXRpb246IFJlYWN0LkZDPHsKICAgIG1lc3NhZ2U6IHN0cmluZzsKICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIGlzVmFsaWQ/OiBhbnk7Cn0gJiB7CiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwp9PjsKZGVjbGFyZSBjb25zdCBhY3Rpb25zOiB7CiAgICBsbG06IChwYXJhbXM6IHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgcHJvbXB0OiBzdHJpbmcgfCB7CiAgICAgICAgICAgIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZzsKICAgICAgICAgICAgfVtdOwogICAgICAgICAgICByb2xlOiBzdHJpbmc7CiAgICAgICAgfVtdIHwgKCgpID0+IHN0cmluZyB8IHsKICAgICAgICAgICAgY29udGVudDogewogICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nOwogICAgICAgICAgICB9W107CiAgICAgICAgICAgIHJvbGU6IHN0cmluZzsKICAgICAgICB9W10pOwogICAgICAgIG9wdGlvbnM/OiB7CiAgICAgICAgICAgIHRoaW5raW5nPzogewogICAgICAgICAgICAgICAgdHlwZTogImVuYWJsZWQiOwogICAgICAgICAgICAgICAgYnVkZ2V0X3Rva2Vucz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdG9wX3A/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0b3Bfaz86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRvb2xzPzogYW55W10gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzeXN0ZW1fcHJvbXB0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1vZGVsX2lkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlc3BvbnNlX2Zvcm1hdF90eXBlPzogImpzb25fb2JqZWN0IiB8IHVuZGVmaW5lZDsKICAgICAgICBpbWFnZV91cmw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VfZGV0YWlsPzogImhpZ2giIHwgImxvdyIgfCB1bmRlZmluZWQ7CiAgICAgICAganNvbl9zY2hlbWE/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICBwbHVnaW5zPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7CiAgICAgICAgcmV0dXJuX2Z1bGxfYm9keT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdXNlX2xpdGVsbG0/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHBhcnNlSnNvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5X3N1Yml0ZW1faWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhdGZvcm1fcHJvamVjdF9pZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbD47CiAgICBsbG1NdWx0aXBsZTogKHBhcmFtczogewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICByZXF1ZXN0czogewogICAgICAgICAgICBwcm9tcHQ6IHN0cmluZyB8IHsKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmc7CiAgICAgICAgICAgICAgICB9W107CiAgICAgICAgICAgICAgICByb2xlOiBzdHJpbmc7CiAgICAgICAgICAgIH1bXSB8ICgoKSA9PiBzdHJpbmcgfCB7CiAgICAgICAgICAgICAgICBjb250ZW50OiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nOwogICAgICAgICAgICAgICAgfVtdOwogICAgICAgICAgICAgICAgcm9sZTogc3RyaW5nOwogICAgICAgICAgICB9W10pOwogICAgICAgICAgICBvcHRpb25zPzogewogICAgICAgICAgICAgICAgdGhpbmtpbmc/OiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogImVuYWJsZWQiOwogICAgICAgICAgICAgICAgICAgIGJ1ZGdldF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgdG9wX3A/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgdG9wX2s/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgbWF4X3Rva2Vucz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB0b29scz86IGFueVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtb25kYXlTdWJpdGVtSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRlbXBlcmF0dXJlPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBzeXN0ZW1fcHJvbXB0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtb2RlbF9pZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVzcG9uc2VfZm9ybWF0X3R5cGU/OiAianNvbl9vYmplY3QiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBpbWFnZV91cmw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGltYWdlX2RldGFpbD86ICJoaWdoIiB8ICJsb3ciIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBqc29uX3NjaGVtYT86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwbHVnaW5zPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJldHVybl9mdWxsX2JvZHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB1c2VfbGl0ZWxsbT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhcnNlSnNvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdOwogICAgfSkgPT4gUHJvbWlzZTwoc3RyaW5nIHwgbnVsbClbXT47CiAgICBsbG1RYTogKHBhcmFtczogewogICAgICAgIGNvbmZpZ0lkOiBudW1iZXI7CiAgICAgICAgaW5wdXRQYXRoOiBzdHJpbmc7CiAgICAgICAgb3V0cHV0UGF0aDogc3RyaW5nOwogICAgICAgIHN0YXRlUGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB0aW1lb3V0TXM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9KSA9PiBQcm9taXNlPHsKICAgICAgICBzdGF0dXM6IHN0cmluZzsKICAgICAgICBydW5fa2V5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1ldHJpY3M/OiB1bmtub3duW10gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIG1sRW5kcG9pbnQ6IChwYXJhbXM6IHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgZW5kcG9pbnQ6IHN0cmluZzsKICAgICAgICBkYXRhOiB7fSB8ICgoKSA9PiB7fSk7CiAgICAgICAgZnVuY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZV9jYWNoZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcG9zdFByb2Nlc3NpbmdGbj86ICgoZW5kcG9pbnRSZXN1bHQ6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8YW55PjsKICAgIG1sRW5kcG9pbnRNdWx0aXBsZTogKHBhcmFtczogewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICByZXF1ZXN0czogewogICAgICAgICAgICBlbmRwb2ludDogc3RyaW5nOwogICAgICAgICAgICBkYXRhOiB7fSB8ICgoKSA9PiB7fSk7CiAgICAgICAgICAgIGZ1bmN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtb25kYXlTdWJpdGVtSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHVzZV9jYWNoZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBvc3RQcm9jZXNzaW5nRm4/OiAoKGVuZHBvaW50UmVzdWx0OiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdOwogICAgfSkgPT4gUHJvbWlzZTxhbnlbXT47CiAgICBnaXRodWJXb3JrZmxvdzogKChwYXJhbXM6IHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgcmVmOiBzdHJpbmc7CiAgICAgICAgb3duZXI6IHN0cmluZzsKICAgICAgICByZXBvOiBzdHJpbmc7CiAgICAgICAgd29ya2Zsb3c6IHN0cmluZzsKICAgICAgICBpbnB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCAoKCkgPT4gUmVjb3JkPHN0cmluZywgYW55Pik7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgcG9zdFByb2Nlc3NpbmdGbj86ICgoZW5kcG9pbnRSZXN1bHQ6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8YW55PikgJiB7CiAgICAgICAgc3RhcnQ6IChwYXJhbXM6IHsKICAgICAgICAgICAgcmVmOiBzdHJpbmc7CiAgICAgICAgICAgIG93bmVyOiBzdHJpbmc7CiAgICAgICAgICAgIHJlcG86IHN0cmluZzsKICAgICAgICAgICAgd29ya2Zsb3c6IHN0cmluZzsKICAgICAgICAgICAgaW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgKCgpID0+IFJlY29yZDxzdHJpbmcsIGFueT4pOwogICAgICAgICAgICBtb25kYXlTdWJpdGVtSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGpvYlN0b3JlUGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9KSA9PiBQcm9taXNlPEdpdEh1YldvcmtmbG93UmVzdWx0PjsKICAgICAgICBwb2xsOiAocGFyYW1zOiB7CiAgICAgICAgICAgIG1vbmRheVN1Yml0ZW1JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgam9iU3RvcmVQYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBqb2JJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9KSA9PiBQcm9taXNlPEdpdEh1YldvcmtmbG93UmVzdWx0PjsKICAgICAgICBnZXRSZXN1bHRzOiAocGFyYW1zOiB7CiAgICAgICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwb3N0UHJvY2Vzc2luZ0ZuPzogKChlbmRwb2ludFJlc3VsdDogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBqb2JTdG9yZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGpvYklkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0pID0+IFByb21pc2U8dW5rbm93bj47CiAgICB9OwogICAgZ2V0OiAocGF0aDogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnkpID0+IGFueTsKICAgIHNldDogKHBhdGg6IHN0cmluZywgcGF5bG9hZDogYW55KSA9PiB2b2lkOwogICAgc2V0VGFiOiAocGFyYW1zOiB7CiAgICAgICAgdGFic1ZpZXdLZXk6IHN0cmluZzsKICAgICAgICB0YWJWYWx1ZTogc3RyaW5nOwogICAgICAgIHNjcm9sbFRvVGFiU3RhcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfSkgPT4gdm9pZDsKICAgIG5leHRUYWI6IChwYXJhbXM6IHsKICAgICAgICB0YWJzVmlld0tleTogc3RyaW5nOwogICAgICAgIHNjcm9sbFRvVGFiU3RhcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGN5Y2xlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0pID0+IHZvaWQ7CiAgICBjb252ZXJ0TWFya2Rvd25Ub0xsbVByb21wdDogKHBhcmFtczogewogICAgICAgIG1hcmtkb3duOiBzdHJpbmc7CiAgICAgICAgbW9kZWw/OiAiY2xhdWRlIiB8ICJncHQiIHwgdW5kZWZpbmVkOwogICAgfSkgPT4gewogICAgICAgIGNvbnRlbnQ6IG9iamVjdE91dHB1dFR5cGU8ewogICAgICAgICAgICB0eXBlOiBab2RTdHJpbmc7CiAgICAgICAgfSwgWm9kVW5rbm93biwgInN0cmlwIj5bXTsKICAgICAgICByb2xlOiBzdHJpbmc7CiAgICB9W107CiAgICBnZXRUZXh0RGlmZjogKHBhcmFtczogewogICAgICAgIHNvdXJjZTogc3RyaW5nOwogICAgICAgIHRhcmdldDogc3RyaW5nOwogICAgICAgIGFsZ29yaXRobT86ICJzeW1ib2xzIiB8ICJ3b3JkcyIgfCB1bmRlZmluZWQ7CiAgICB9KSA9PiBQcm9taXNlPG51bWJlcj47CiAgICBub3RpZnk6IChwYXJhbXM6IHsKICAgICAgICBtZXNzYWdlOiBzdHJpbmc7CiAgICAgICAgdmFyaWFudDogImVycm9yIiB8ICJpbmZvIiB8ICJzdWNjZXNzIiB8ICJ3YXJuaW5nIjsKICAgIH0pID0+IHZvaWQ7CiAgICBleGVjdXRlQ29kZTogKHBhcmFtczogewogICAgICAgIGNvZGU6IHN0cmluZzsKICAgICAgICBsYW5ndWFnZTogInB5dGhvbkAzLjEwLjAiIHwgImphdmFzY3JpcHRAMjAuMTEuMSI7CiAgICB9KSA9PiBQcm9taXNlPHsKICAgICAgICBvdXRwdXQ6IHN0cmluZzsKICAgICAgICBpc0Vycm9yOiBib29sZWFuOwogICAgfT47CiAgICBzdGFydEVkaXRpbmc6IChwYXJhbXM6IHVuZGVmaW5lZCkgPT4gUHJvbWlzZTx7CiAgICAgICAgc3VjY2VzczogYm9vbGVhbjsKICAgIH0+OwogICAgc3VibWl0VGFzazogKHBhcmFtczogewogICAgICAgIHBhdGNoVmFsdWVzPzogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDsKICAgICAgICByZXNldFZhbHVlcz86IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7CiAgICB9KSA9PiBQcm9taXNlPHsKICAgICAgICBzdWNjZXNzOiBib29sZWFuOwogICAgfT47CiAgICBpbnZhbGlkYXRlVGFzazogKHBhcmFtczogdW5kZWZpbmVkKSA9PiBQcm9taXNlPHsKICAgICAgICBzdWNjZXNzOiBib29sZWFuOwogICAgfT47CiAgICB1bmFzc2lnbkFuZEV4aXQ6IChwYXJhbXM6IHsKICAgICAgICB3aXRob3V0Q29uZmlybWF0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8ewogICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47CiAgICB9PjsKICAgIHNlbmRVc2VyTG9nOiAocGFyYW1zOiB7CiAgICAgICAgdmFsdWU6IExvZ1ZhbHVlT2JqZWN0OwogICAgICAgIHR5cGU6IHN0cmluZzsKICAgIH0pID0+IFByb21pc2U8dW5rbm93bj47CiAgICBzaWduV2l0aEdlb0lwOiAocGFyYW1zOiB7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47CiAgICB9KSA9PiBQcm9taXNlPHN0cmluZz47Cn07CgpleHBvcnQgeyBGaWVsZCwgTGF5b3V0LCBTdXNwZW5zZVBlbmRpbmdNYXJrZXIsIFZhbGlkYXRpb24sIFZpZXcsIGFjdGlvbnMgfTsK","base64").toString("utf8")}};var Zt=require("@typescript/vfs");var EH=tm.default.dirname(em.createRequire("file:///Users/gzarip/code/potato-5/packages/sdk/src/checks/task-ui-typecheck.ts").resolve("typescript-api")),it={data:"DATA_INJECTION",constants:"CONST_INJECTION",preprocess:"PREPROCESS_INJECTION",postprocess:"POSTPROCESS_INJECTION",code:"CODE_INJECTION"},Ni="index.tsx",UH=[["data",it.data],["constants",it.constants],["preprocess",it.preprocess],["postprocess",it.postprocess],["code",it.code]],OH=()=>({data:[],constants:[],preprocess:[],postprocess:[],code:[]}),Lu=(e)=>`
42
+ })`,"ts");if(!t)return null;let i=t.body.length===1?t.body[0]:void 0;if(i?.type!=="ExpressionStatement"||i.expression.type!=="ArrowFunctionExpression"||i.expression.body.type!=="BlockStatement")return null;let n=new Set;for(let o of EH(i.expression.body))Mt(o,n);return n},JH=new Set(["ArrowFunctionExpression","FunctionExpression","FunctionDeclaration"]),EH=(e)=>{let t=[],i=(n)=>{if(!n||typeof n!=="object")return;if(Array.isArray(n)){for(let s of n)i(s);return}let o=n;if(typeof o.type==="string"){if(JH.has(o.type))return;if(o.type==="ReturnStatement"&&o.argument)t.push(o.argument)}for(let s of Object.values(o))i(s)};return i(e.body),t},Mt=(e,t)=>{if(e.type==="ObjectExpression")Mu(e,t);else if(e.type==="ConditionalExpression")Mt(e.consequent,t),Mt(e.alternate,t);else if(e.type==="LogicalExpression")Mt(e.left,t),Mt(e.right,t);else if(e.type==="SequenceExpression"){let i=e.expressions.at(-1);if(i)Mt(i,t)}else if(e.type==="TSAsExpression"||e.type==="TSSatisfiesExpression"||e.type==="TSNonNullExpression"||e.type==="TSTypeAssertion")Mt(e.expression,t)},Mu=(e,t)=>{for(let i of e.properties){if(i.type==="SpreadElement"){if(i.argument.type==="ObjectExpression")Mu(i.argument,t);continue}if(!i.computed&&i.key.type==="Identifier")t.add(i.key.name);else if(i.key.type==="Literal"&&(typeof i.key.value==="string"||typeof i.key.value==="number"))t.add(String(i.key.value))}};var im=be(require("path"));var Zs=require("oxc-parser"),Ge=be(require("typescript-api"));var jn={version:1,react:{url:"https://tlkfrontprod.azureedge.net/template-builder-production/static/types/react@18.2.17/index.d.ts",sha256:"40a1b33c67109be18a961127873e8ba198429eacf11a468b4a052cddc9a73f8d",source:Buffer.from("Ly8gVHlwZSBkZWZpbml0aW9ucyBmb3IgUmVhY3QgMTguMgovLyBQcm9qZWN0OiBodHRwczovL3JlYWN0LmRldi8KLy8gRGVmaW5pdGlvbnMgYnk6IEFzYW5hIDxodHRwczovL2FzYW5hLmNvbT4KLy8gICAgICAgICAgICAgICAgIEFzc3VyZVNpZ24gPGh0dHA6Ly93d3cuYXNzdXJlc2lnbi5jb20+Ci8vICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgPGh0dHBzOi8vbWljcm9zb2Z0LmNvbT4KLy8gICAgICAgICAgICAgICAgIEpvaG4gUmVpbGx5IDxodHRwczovL2dpdGh1Yi5jb20vam9obm55cmVpbGx5PgovLyAgICAgICAgICAgICAgICAgQmVub2l0IEJlbmV6ZWNoIDxodHRwczovL2dpdGh1Yi5jb20vYmJlbmV6ZWNoPgovLyAgICAgICAgICAgICAgICAgUGF0cmljaW8gWmF2b2xpbnNreSA8aHR0cHM6Ly9naXRodWIuY29tL3B6YXZvbGluc2t5PgovLyAgICAgICAgICAgICAgICAgRXJpYyBBbmRlcnNvbiA8aHR0cHM6Ly9naXRodWIuY29tL2VyaWNhbmRlcnNvbj4KLy8gICAgICAgICAgICAgICAgIERvdnlkYXMgTmF2aWNrYXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9Eb3Z5ZGFzTmF2aWNrYXM+Ci8vICAgICAgICAgICAgICAgICBKb3NoIFJ1dGhlcmZvcmQgPGh0dHBzOi8vZ2l0aHViLmNvbS90aGVydXRoZXI0ZD4KLy8gICAgICAgICAgICAgICAgIEd1aWxoZXJtZSBIw7xibmVyIDxodHRwczovL2dpdGh1Yi5jb20vZ3VpbGhlcm1laHVibmVyPgovLyAgICAgICAgICAgICAgICAgRmVyZHkgQnVkaGlkaGFybWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJkYWJlcj4KLy8gICAgICAgICAgICAgICAgIEpvaGFubiBSYWtvdG9oYXJpc29hIDxodHRwczovL2dpdGh1Yi5jb20vanJha290b2hhcmlzb2E+Ci8vICAgICAgICAgICAgICAgICBPbGl2aWVyIFBhc2NhbCA8aHR0cHM6Ly9naXRodWIuY29tL3Bhc2NhbG9saXY+Ci8vICAgICAgICAgICAgICAgICBNYXJ0aW4gSG9jaGVsIDxodHRwczovL2dpdGh1Yi5jb20vaG90ZWxsPgovLyAgICAgICAgICAgICAgICAgRnJhbmsgTGkgPGh0dHBzOi8vZ2l0aHViLmNvbS9mcmFua2xpeHVlZmVpPgovLyAgICAgICAgICAgICAgICAgSmVzc2ljYSBGcmFuY28gPGh0dHBzOi8vZ2l0aHViLmNvbS9KZXNzaWRoaWE+Ci8vICAgICAgICAgICAgICAgICBTYXJhbnNoIEthdGFyaWEgPGh0dHBzOi8vZ2l0aHViLmNvbS9zYXJhbnNoa2F0YXJpYT4KLy8gICAgICAgICAgICAgICAgIEthbml0a29ybiBTdWphdXRyYSA8aHR0cHM6Ly9naXRodWIuY29tL2x1a3l0aD4KLy8gICAgICAgICAgICAgICAgIFNlYmFzdGlhbiBTaWxiZXJtYW5uIDxodHRwczovL2dpdGh1Yi5jb20vZXBzMWxvbj4KLy8gICAgICAgICAgICAgICAgIEt5bGUgU2N1bGx5IDxodHRwczovL2dpdGh1Yi5jb20vemlla2E+Ci8vICAgICAgICAgICAgICAgICBDb25nIFpoYW5nIDxodHRwczovL2dpdGh1Yi5jb20vZGFuY2VycGhpbD4KLy8gICAgICAgICAgICAgICAgIERpbWl0cmkgTWl0cm9wb3Vsb3MgPGh0dHBzOi8vZ2l0aHViLmNvbS9kaW1pdHJvcG91bG9zPgovLyAgICAgICAgICAgICAgICAgSm9uZ0NoYW4gQ2hvaSA8aHR0cHM6Ly9naXRodWIuY29tL2Rpc2p1a3I+Ci8vICAgICAgICAgICAgICAgICBWaWN0b3IgTWFnYWxow6NlcyA8aHR0cHM6Ly9naXRodWIuY29tL3ZoZm1hZz4KLy8gICAgICAgICAgICAgICAgIERhbGUgVGFuIDxodHRwczovL2dpdGh1Yi5jb20vaGVsbGF0YW4+Ci8vICAgICAgICAgICAgICAgICBQcml5YW5zaHUgUmF2IDxodHRwczovL2dpdGh1Yi5jb20vcHJpeWFuc2h1cmF2PgovLyAgICAgICAgICAgICAgICAgRG1pdHJ5IFNlbWlncmFkc2t5IDxodHRwczovL2dpdGh1Yi5jb20vU2VtaWdyYWRza3k+Ci8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZAovLyBUeXBlU2NyaXB0IFZlcnNpb246IDIuOAoKLy8gTk9URTogVXNlcnMgb2YgdGhlIGBleHBlcmltZW50YWxgIGJ1aWxkcyBvZiBSZWFjdCBzaG91bGQgYWRkIGEgcmVmZXJlbmNlCi8vIHRvICdyZWFjdC9leHBlcmltZW50YWwnIGluIHRoZWlyIHByb2plY3QuIFNlZSBleHBlcmltZW50YWwuZC50cydzIHRvcCBjb21tZW50Ci8vIGZvciByZWZlcmVuY2UgYW5kIGRvY3VtZW50YXRpb24gb24gaG93IGV4YWN0bHkgdG8gZG8gaXQuCgovLy8gPHJlZmVyZW5jZSBwYXRoPSJnbG9iYWwuZC50cyIgLz4KCmltcG9ydCAqIGFzIENTUyBmcm9tICdjc3N0eXBlJzsKaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnOwppbXBvcnQgeyBJbnRlcmFjdGlvbiBhcyBTY2hlZHVsZXJJbnRlcmFjdGlvbiB9IGZyb20gJ3NjaGVkdWxlci90cmFjaW5nJzsKCnR5cGUgTmF0aXZlQW5pbWF0aW9uRXZlbnQgPSBBbmltYXRpb25FdmVudDsKdHlwZSBOYXRpdmVDbGlwYm9hcmRFdmVudCA9IENsaXBib2FyZEV2ZW50Owp0eXBlIE5hdGl2ZUNvbXBvc2l0aW9uRXZlbnQgPSBDb21wb3NpdGlvbkV2ZW50Owp0eXBlIE5hdGl2ZURyYWdFdmVudCA9IERyYWdFdmVudDsKdHlwZSBOYXRpdmVGb2N1c0V2ZW50ID0gRm9jdXNFdmVudDsKdHlwZSBOYXRpdmVLZXlib2FyZEV2ZW50ID0gS2V5Ym9hcmRFdmVudDsKdHlwZSBOYXRpdmVNb3VzZUV2ZW50ID0gTW91c2VFdmVudDsKdHlwZSBOYXRpdmVUb3VjaEV2ZW50ID0gVG91Y2hFdmVudDsKdHlwZSBOYXRpdmVQb2ludGVyRXZlbnQgPSBQb2ludGVyRXZlbnQ7CnR5cGUgTmF0aXZlVHJhbnNpdGlvbkV2ZW50ID0gVHJhbnNpdGlvbkV2ZW50Owp0eXBlIE5hdGl2ZVVJRXZlbnQgPSBVSUV2ZW50Owp0eXBlIE5hdGl2ZVdoZWVsRXZlbnQgPSBXaGVlbEV2ZW50Owp0eXBlIEJvb2xlYW5pc2ggPSBib29sZWFuIHwgJ3RydWUnIHwgJ2ZhbHNlJzsKCmRlY2xhcmUgY29uc3QgVU5ERUZJTkVEX1ZPSURfT05MWTogdW5pcXVlIHN5bWJvbDsKLy8gRGVzdHJ1Y3RvcnMgYXJlIG9ubHkgYWxsb3dlZCB0byByZXR1cm4gdm9pZC4KdHlwZSBEZXN0cnVjdG9yID0gKCkgPT4gdm9pZCB8IHsgW1VOREVGSU5FRF9WT0lEX09OTFldOiBuZXZlciB9Owp0eXBlIFZvaWRPclVuZGVmaW5lZE9ubHkgPSB2b2lkIHwgeyBbVU5ERUZJTkVEX1ZPSURfT05MWV06IG5ldmVyIH07CgovLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXhwb3J0LWp1c3QtbmFtZXNwYWNlCmV4cG9ydCA9IFJlYWN0OwpleHBvcnQgYXMgbmFtZXNwYWNlIFJlYWN0OwoKZGVjbGFyZSBuYW1lc3BhY2UgUmVhY3QgewogICAgLy8KICAgIC8vIFJlYWN0IEVsZW1lbnRzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgdHlwZSBFbGVtZW50VHlwZTxQID0gYW55PiA9CiAgICAgICAgewogICAgICAgICAgICBbSyBpbiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHNdOiBQIGV4dGVuZHMgSlNYLkludHJpbnNpY0VsZW1lbnRzW0tdID8gSyA6IG5ldmVyCiAgICAgICAgfVtrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHNdIHwKICAgICAgICBDb21wb25lbnRUeXBlPFA+OwogICAgdHlwZSBDb21wb25lbnRUeXBlPFAgPSB7fT4gPSBDb21wb25lbnRDbGFzczxQPiB8IEZ1bmN0aW9uQ29tcG9uZW50PFA+OwoKICAgIHR5cGUgSlNYRWxlbWVudENvbnN0cnVjdG9yPFA+ID0KICAgICAgICB8ICgoCiAgICAgICAgICAgICAgcHJvcHM6IFAsCiAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvZG9jcy9sZWdhY3ktY29udGV4dC5odG1sI3JlZmVyZW5jaW5nLWNvbnRleHQtaW4tc3RhdGVsZXNzLWZ1bmN0aW9uLWNvbXBvbmVudHMKICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICBkZXByZWNhdGVkTGVnYWN5Q29udGV4dD86IGFueSwKICAgICAgICAgICkgPT4gUmVhY3ROb2RlKQogICAgICAgIHwgKG5ldyAoCiAgICAgICAgICAgICAgcHJvcHM6IFAsCiAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICogQGRlcHJlY2F0ZWQgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvZG9jcy9sZWdhY3ktY29udGV4dC5odG1sI3JlZmVyZW5jaW5nLWNvbnRleHQtaW4tbGlmZWN5Y2xlLW1ldGhvZHMKICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICBkZXByZWNhdGVkTGVnYWN5Q29udGV4dD86IGFueSwKICAgICAgICAgICkgPT4gQ29tcG9uZW50PGFueSwgYW55Pik7CgogICAgaW50ZXJmYWNlIFJlZk9iamVjdDxUPiB7CiAgICAgICAgcmVhZG9ubHkgY3VycmVudDogVCB8IG51bGw7CiAgICB9CiAgICAvLyBCaXZhcmlhbmNlIGhhY2sgZm9yIGNvbnNpc3RlbnQgdW5zb3VuZG5lc3Mgd2l0aCBSZWZPYmplY3QKICAgIHR5cGUgUmVmQ2FsbGJhY2s8VD4gPSB7IGJpdmFyaWFuY2VIYWNrKGluc3RhbmNlOiBUIHwgbnVsbCk6IHZvaWQgfVsiYml2YXJpYW5jZUhhY2siXTsKICAgIHR5cGUgUmVmPFQ+ID0gUmVmQ2FsbGJhY2s8VD4gfCBSZWZPYmplY3Q8VD4gfCBudWxsOwogICAgdHlwZSBMZWdhY3lSZWY8VD4gPSBzdHJpbmcgfCBSZWY8VD47CiAgICAvKioKICAgICAqIEdldHMgdGhlIGluc3RhbmNlIHR5cGUgZm9yIGEgUmVhY3QgZWxlbWVudC4gVGhlIGluc3RhbmNlIHdpbGwgYmUgZGlmZmVyZW50IGZvciB2YXJpb3VzIGNvbXBvbmVudCB0eXBlczoKICAgICAqCiAgICAgKiAtIFJlYWN0IGNsYXNzIGNvbXBvbmVudHMgd2lsbCBiZSB0aGUgY2xhc3MgaW5zdGFuY2UuIFNvIGlmIHlvdSBoYWQgYGNsYXNzIEZvbyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fT4ge31gCiAgICAgKiAgIGFuZCB1c2VkIGBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBGb28+YCB0aGVuIHRoZSB0eXBlIHdvdWxkIGJlIHRoZSBpbnN0YW5jZSBvZiBgRm9vYC4KICAgICAqIC0gUmVhY3Qgc3RhdGVsZXNzIGZ1bmN0aW9uYWwgY29tcG9uZW50cyBkbyBub3QgaGF2ZSBhIGJhY2tpbmcgaW5zdGFuY2UgYW5kIHNvIGBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBCYXI+YAogICAgICogICAod2hlbiBgQmFyYCBpcyBgZnVuY3Rpb24gQmFyKCkge31gKSB3aWxsIGdpdmUgeW91IHRoZSBgdW5kZWZpbmVkYCB0eXBlLgogICAgICogLSBKU1ggaW50cmluc2ljcyBsaWtlIGBkaXZgIHdpbGwgZ2l2ZSB5b3UgdGhlaXIgRE9NIGluc3RhbmNlLiBGb3IgYFJlYWN0LkVsZW1lbnRSZWY8J2Rpdic+YCB0aGF0IHdvdWxkIGJlCiAgICAgKiAgIGBIVE1MRGl2RWxlbWVudGAuIEZvciBgUmVhY3QuRWxlbWVudFJlZjwnaW5wdXQnPmAgdGhhdCB3b3VsZCBiZSBgSFRNTElucHV0RWxlbWVudGAuCiAgICAgKiAtIFJlYWN0IHN0YXRlbGVzcyBmdW5jdGlvbmFsIGNvbXBvbmVudHMgdGhhdCBmb3J3YXJkIGEgYHJlZmAgd2lsbCBnaXZlIHlvdSB0aGUgYEVsZW1lbnRSZWZgIG9mIHRoZSBmb3J3YXJkZWQKICAgICAqICAgdG8gY29tcG9uZW50LgogICAgICoKICAgICAqIGBDYCBtdXN0IGJlIHRoZSB0eXBlIF9vZl8gYSBSZWFjdCBjb21wb25lbnQgc28geW91IG5lZWQgdG8gdXNlIHR5cGVvZiBhcyBpbiBgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgTXlDb21wb25lbnQ+YC4KICAgICAqCiAgICAgKiBAdG9kbyBJbiBGbG93LCB0aGlzIHdvcmtzIGEgbGl0dGxlIGRpZmZlcmVudCB3aXRoIGZvcndhcmRlZCByZWZzIGFuZCB0aGUgYEFic3RyYWN0Q29tcG9uZW50YCB0aGF0CiAgICAgKiAgICAgICBgUmVhY3QuZm9yd2FyZFJlZigpYCByZXR1cm5zLgogICAgICovCiAgICB0eXBlIEVsZW1lbnRSZWY8CiAgICAgICAgQyBleHRlbmRzCiAgICAgICAgICAgIHwgRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxhbnk+CiAgICAgICAgICAgIHwgeyBuZXcgKHByb3BzOiBhbnkpOiBDb21wb25lbnQ8YW55PiB9CiAgICAgICAgICAgIHwgKChwcm9wczogYW55LCBjb250ZXh0PzogYW55KSA9PiBSZWFjdE5vZGUpCiAgICAgICAgICAgIHwga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzCiAgICA+ID0KICAgICAgICAvLyBuZWVkIHRvIGNoZWNrIGZpcnN0IGlmIGByZWZgIGlzIGEgdmFsaWQgcHJvcCBmb3IgdHNAMy4wCiAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgaW5mZXIgYHt9YCBpbnN0ZWFkIG9mIGBuZXZlcmAKICAgICAgICAicmVmIiBleHRlbmRzIGtleW9mIENvbXBvbmVudFByb3BzV2l0aFJlZjxDPgogICAgICAgICAgICA/IE5vbk51bGxhYmxlPENvbXBvbmVudFByb3BzV2l0aFJlZjxDPlsicmVmIl0+IGV4dGVuZHMgUmVmPAogICAgICAgICAgICAgICAgaW5mZXIgSW5zdGFuY2UKICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPyBJbnN0YW5jZQogICAgICAgICAgICAgICAgOiBuZXZlcgogICAgICAgICAgICA6IG5ldmVyOwoKICAgIHR5cGUgQ29tcG9uZW50U3RhdGUgPSBhbnk7CgogICAgdHlwZSBLZXkgPSBzdHJpbmcgfCBudW1iZXI7CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwgWW91IHNob3VsZG4ndCBuZWVkIHRvIHVzZSB0aGlzIHR5cGUgc2luY2UgeW91IG5ldmVyIHNlZSB0aGVzZSBhdHRyaWJ1dGVzCiAgICAgKiBpbnNpZGUgeW91ciBjb21wb25lbnQgb3IgaGF2ZSB0byB2YWxpZGF0ZSB0aGVtLgogICAgICovCiAgICBpbnRlcmZhY2UgQXR0cmlidXRlcyB7CiAgICAgICAga2V5PzogS2V5IHwgbnVsbCB8IHVuZGVmaW5lZDsKICAgIH0KICAgIGludGVyZmFjZSBSZWZBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgQXR0cmlidXRlcyB7CiAgICAgICAgLyoqCiAgICAgICAgICogQWxsb3dzIGdldHRpbmcgYSByZWYgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZS4KICAgICAgICAgKiBPbmNlIHRoZSBjb21wb25lbnQgdW5tb3VudHMsIFJlYWN0IHdpbGwgc2V0IGByZWYuY3VycmVudGAgdG8gYG51bGxgIChvciBjYWxsIHRoZSByZWYgd2l0aCBgbnVsbGAgaWYgeW91IHBhc3NlZCBhIGNhbGxiYWNrIHJlZikuCiAgICAgICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9sZWFybi9yZWZlcmVuY2luZy12YWx1ZXMtd2l0aC1yZWZzI3JlZnMtYW5kLXRoZS1kb20KICAgICAgICAgKi8KICAgICAgICByZWY/OiBSZWY8VD4gfCB1bmRlZmluZWQ7CiAgICB9CiAgICBpbnRlcmZhY2UgQ2xhc3NBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgQXR0cmlidXRlcyB7CiAgICAgICAgLyoqCiAgICAgICAgICogQWxsb3dzIGdldHRpbmcgYSByZWYgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZS4KICAgICAgICAgKiBPbmNlIHRoZSBjb21wb25lbnQgdW5tb3VudHMsIFJlYWN0IHdpbGwgc2V0IGByZWYuY3VycmVudGAgdG8gYG51bGxgIChvciBjYWxsIHRoZSByZWYgd2l0aCBgbnVsbGAgaWYgeW91IHBhc3NlZCBhIGNhbGxiYWNrIHJlZikuCiAgICAgICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9sZWFybi9yZWZlcmVuY2luZy12YWx1ZXMtd2l0aC1yZWZzI3JlZnMtYW5kLXRoZS1kb20KICAgICAgICAgKi8KICAgICAgICByZWY/OiBMZWdhY3lSZWY8VD4gfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFJlYWN0RWxlbWVudDxQID0gYW55LCBUIGV4dGVuZHMgc3RyaW5nIHwgSlNYRWxlbWVudENvbnN0cnVjdG9yPGFueT4gPSBzdHJpbmcgfCBKU1hFbGVtZW50Q29uc3RydWN0b3I8YW55Pj4gewogICAgICAgIHR5cGU6IFQ7CiAgICAgICAgcHJvcHM6IFA7CiAgICAgICAga2V5OiBLZXkgfCBudWxsOwogICAgfQoKICAgIGludGVyZmFjZSBSZWFjdENvbXBvbmVudEVsZW1lbnQ8CiAgICAgICAgVCBleHRlbmRzIGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cyB8IEpTWEVsZW1lbnRDb25zdHJ1Y3Rvcjxhbnk+LAogICAgICAgIFAgPSBQaWNrPENvbXBvbmVudFByb3BzPFQ+LCBFeGNsdWRlPGtleW9mIENvbXBvbmVudFByb3BzPFQ+LCAna2V5JyB8ICdyZWYnPj4KICAgID4gZXh0ZW5kcyBSZWFjdEVsZW1lbnQ8UCwgRXhjbHVkZTxULCBudW1iZXI+PiB7IH0KCiAgICBpbnRlcmZhY2UgRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+IGV4dGVuZHMgUmVhY3RFbGVtZW50PFAsIEZ1bmN0aW9uQ29tcG9uZW50PFA+PiB7CiAgICAgICAgcmVmPzogKCdyZWYnIGV4dGVuZHMga2V5b2YgUCA/IFAgZXh0ZW5kcyB7IHJlZj86IGluZmVyIFIgfCB1bmRlZmluZWQgfSA/IFIgOiBuZXZlciA6IG5ldmVyKSB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIENFbGVtZW50PFAsIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PiA9IENvbXBvbmVudEVsZW1lbnQ8UCwgVD47CiAgICBpbnRlcmZhY2UgQ29tcG9uZW50RWxlbWVudDxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPj4gZXh0ZW5kcyBSZWFjdEVsZW1lbnQ8UCwgQ29tcG9uZW50Q2xhc3M8UD4+IHsKICAgICAgICByZWY/OiBMZWdhY3lSZWY8VD4gfCB1bmRlZmluZWQ7CiAgICB9CgogICAgdHlwZSBDbGFzc2ljRWxlbWVudDxQPiA9IENFbGVtZW50PFAsIENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PjsKCiAgICAvLyBzdHJpbmcgZmFsbGJhY2sgZm9yIGN1c3RvbSB3ZWItY29tcG9uZW50cwogICAgaW50ZXJmYWNlIERPTUVsZW1lbnQ8UCBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHwgU1ZHQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIEVsZW1lbnQ+IGV4dGVuZHMgUmVhY3RFbGVtZW50PFAsIHN0cmluZz4gewogICAgICAgIHJlZjogTGVnYWN5UmVmPFQ+OwogICAgfQoKICAgIC8vIFJlYWN0SFRNTCBmb3IgUmVhY3RIVE1MRWxlbWVudAogICAgaW50ZXJmYWNlIFJlYWN0SFRNTEVsZW1lbnQ8VCBleHRlbmRzIEhUTUxFbGVtZW50PiBleHRlbmRzIERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxBbGxIVE1MQXR0cmlidXRlczxUPiwgVD4geyB9CgogICAgaW50ZXJmYWNlIERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4gZXh0ZW5kcyBET01FbGVtZW50PFAsIFQ+IHsKICAgICAgICB0eXBlOiBrZXlvZiBSZWFjdEhUTUw7CiAgICB9CgogICAgLy8gUmVhY3RTVkcgZm9yIFJlYWN0U1ZHRWxlbWVudAogICAgaW50ZXJmYWNlIFJlYWN0U1ZHRWxlbWVudCBleHRlbmRzIERPTUVsZW1lbnQ8U1ZHQXR0cmlidXRlczxTVkdFbGVtZW50PiwgU1ZHRWxlbWVudD4gewogICAgICAgIHR5cGU6IGtleW9mIFJlYWN0U1ZHOwogICAgfQoKICAgIGludGVyZmFjZSBSZWFjdFBvcnRhbCBleHRlbmRzIFJlYWN0RWxlbWVudCB7CiAgICAgICAga2V5OiBLZXkgfCBudWxsOwogICAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7CiAgICB9CgogICAgLy8KICAgIC8vIEZhY3RvcmllcwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHR5cGUgRmFjdG9yeTxQPiA9IChwcm9wcz86IEF0dHJpYnV0ZXMgJiBQLCAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pID0+IFJlYWN0RWxlbWVudDxQPjsKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYEZ1bmN0aW9uQ29tcG9uZW50RmFjdG9yeWAKICAgICAqLwogICAgdHlwZSBTRkNGYWN0b3J5PFA+ID0gRnVuY3Rpb25Db21wb25lbnRGYWN0b3J5PFA+OwoKICAgIHR5cGUgRnVuY3Rpb25Db21wb25lbnRGYWN0b3J5PFA+ID0gKHByb3BzPzogQXR0cmlidXRlcyAmIFAsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSkgPT4gRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+OwoKICAgIHR5cGUgQ29tcG9uZW50RmFjdG9yeTxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPj4gPQogICAgICAgIChwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSkgPT4gQ0VsZW1lbnQ8UCwgVD47CgogICAgdHlwZSBDRmFjdG9yeTxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPj4gPSBDb21wb25lbnRGYWN0b3J5PFAsIFQ+OwogICAgdHlwZSBDbGFzc2ljRmFjdG9yeTxQPiA9IENGYWN0b3J5PFAsIENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PjsKCiAgICB0eXBlIERPTUZhY3Rvcnk8UCBleHRlbmRzIERPTUF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBFbGVtZW50PiA9CiAgICAgICAgKHByb3BzPzogQ2xhc3NBdHRyaWJ1dGVzPFQ+ICYgUCB8IG51bGwsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSkgPT4gRE9NRWxlbWVudDxQLCBUPjsKCiAgICBpbnRlcmZhY2UgSFRNTEZhY3Rvcnk8VCBleHRlbmRzIEhUTUxFbGVtZW50PiBleHRlbmRzIERldGFpbGVkSFRNTEZhY3Rvcnk8QWxsSFRNTEF0dHJpYnV0ZXM8VD4sIFQ+IHt9CgogICAgaW50ZXJmYWNlIERldGFpbGVkSFRNTEZhY3Rvcnk8UCBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+LCBUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+IGV4dGVuZHMgRE9NRmFjdG9yeTxQLCBUPiB7CiAgICAgICAgKHByb3BzPzogQ2xhc3NBdHRyaWJ1dGVzPFQ+ICYgUCB8IG51bGwsIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQLCBUPjsKICAgIH0KCiAgICBpbnRlcmZhY2UgU1ZHRmFjdG9yeSBleHRlbmRzIERPTUZhY3Rvcnk8U1ZHQXR0cmlidXRlczxTVkdFbGVtZW50PiwgU1ZHRWxlbWVudD4gewogICAgICAgIChwcm9wcz86IENsYXNzQXR0cmlidXRlczxTVkdFbGVtZW50PiAmIFNWR0F0dHJpYnV0ZXM8U1ZHRWxlbWVudD4gfCBudWxsLCAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pOiBSZWFjdFNWR0VsZW1lbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgdHlwZSBpcyBub3QgcmVsZXZhbnQgd2hlbiB1c2luZyBSZWFjdC4gSW5saW5lIHRoZSB0eXBlIGluc3RlYWQgdG8gbWFrZSB0aGUgaW50ZW50IGNsZWFyLgogICAgICovCiAgICB0eXBlIFJlYWN0VGV4dCA9IHN0cmluZyB8IG51bWJlcjsKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIHR5cGUgaXMgbm90IHJlbGV2YW50IHdoZW4gdXNpbmcgUmVhY3QuIElubGluZSB0aGUgdHlwZSBpbnN0ZWFkIHRvIG1ha2UgdGhlIGludGVudCBjbGVhci4KICAgICAqLwogICAgdHlwZSBSZWFjdENoaWxkID0gUmVhY3RFbGVtZW50IHwgc3RyaW5nIHwgbnVtYmVyOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgVXNlIGVpdGhlciBgUmVhY3ROb2RlW11gIGlmIHlvdSBuZWVkIGFuIGFycmF5IG9yIGBJdGVyYWJsZTxSZWFjdE5vZGU+YCBpZiBpdHMgcGFzc2VkIHRvIGEgaG9zdCBjb21wb25lbnQuCiAgICAgKi8KICAgIGludGVyZmFjZSBSZWFjdE5vZGVBcnJheSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8UmVhY3ROb2RlPiB7fQogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgdHlwZSBpcyBub3QgcmVsZXZhbnQgd2hlbiB1c2luZyBSZWFjdC4gSW5saW5lIHRoZSB0eXBlIGluc3RlYWQgdG8gbWFrZSB0aGUgaW50ZW50IGNsZWFyLgogICAgICovCiAgICB0eXBlIFJlYWN0RnJhZ21lbnQgPSBJdGVyYWJsZTxSZWFjdE5vZGU+OwoKICAgIC8qKgogICAgICogRm9yIGludGVybmFsIHVzYWdlIG9ubHkuCiAgICAgKiBEaWZmZXJlbnQgcmVsZWFzZSBjaGFubmVscyBkZWNsYXJlIGFkZGl0aW9uYWwgdHlwZXMgb2YgUmVhY3ROb2RlIHRoaXMgcGFydGljdWxhciByZWxlYXNlIGNoYW5uZWwgYWNjZXB0cy4KICAgICAqIEFwcCBvciBsaWJyYXJ5IHR5cGVzIHNob3VsZCBuZXZlciBhdWdtZW50IHRoaXMgaW50ZXJmYWNlLgogICAgICovCiAgICBpbnRlcmZhY2UgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfUkVBQ1RfTk9ERVMge30KICAgIHR5cGUgUmVhY3ROb2RlID0KICAgICAgICB8IFJlYWN0RWxlbWVudAogICAgICAgIHwgc3RyaW5nCiAgICAgICAgfCBudW1iZXIKICAgICAgICB8IEl0ZXJhYmxlPFJlYWN0Tm9kZT4KICAgICAgICB8IFJlYWN0UG9ydGFsCiAgICAgICAgfCBib29sZWFuCiAgICAgICAgfCBudWxsCiAgICAgICAgfCB1bmRlZmluZWQKICAgICAgICB8IERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX1JFQUNUX05PREVTW2tleW9mIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX1JFQUNUX05PREVTXTsKCiAgICAvLwogICAgLy8gVG9wIExldmVsIEFQSQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIC8vIERPTSBFbGVtZW50cwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeTxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KAogICAgICAgIHR5cGU6IGtleW9mIFJlYWN0SFRNTCk6IEhUTUxGYWN0b3J5PFQ+OwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSgKICAgICAgICB0eXBlOiBrZXlvZiBSZWFjdFNWRyk6IFNWR0ZhY3Rvcnk7CiAgICBmdW5jdGlvbiBjcmVhdGVGYWN0b3J5PFAgZXh0ZW5kcyBET01BdHRyaWJ1dGVzPFQ+LCBUIGV4dGVuZHMgRWxlbWVudD4oCiAgICAgICAgdHlwZTogc3RyaW5nKTogRE9NRmFjdG9yeTxQLCBUPjsKCiAgICAvLyBDdXN0b20gY29tcG9uZW50cwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeTxQPih0eXBlOiBGdW5jdGlvbkNvbXBvbmVudDxQPik6IEZ1bmN0aW9uQ29tcG9uZW50RmFjdG9yeTxQPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUZhY3Rvcnk8UD4oCiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPFAsIENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+LCBDbGFzc2ljQ29tcG9uZW50Q2xhc3M8UD4+KTogQ0ZhY3Rvcnk8UCwgQ2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4+OwogICAgZnVuY3Rpb24gY3JlYXRlRmFjdG9yeTxQLCBUIGV4dGVuZHMgQ29tcG9uZW50PFAsIENvbXBvbmVudFN0YXRlPiwgQyBleHRlbmRzIENvbXBvbmVudENsYXNzPFA+PigKICAgICAgICB0eXBlOiBDbGFzc1R5cGU8UCwgVCwgQz4pOiBDRmFjdG9yeTxQLCBUPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUZhY3Rvcnk8UD4odHlwZTogQ29tcG9uZW50Q2xhc3M8UD4pOiBGYWN0b3J5PFA+OwoKICAgIC8vIERPTSBFbGVtZW50cwogICAgLy8gVE9ETzogZ2VuZXJhbGl6ZSB0aGlzIHRvIGV2ZXJ5dGhpbmcgaW4gYGtleW9mIFJlYWN0SFRNTGAsIG5vdCBqdXN0ICJpbnB1dCIKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoCiAgICAgICAgdHlwZTogImlucHV0IiwKICAgICAgICBwcm9wcz86IElucHV0SFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4gJiBDbGFzc0F0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4gfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxJbnB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+LCBIVE1MSW5wdXRFbGVtZW50PjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+LCBUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KAogICAgICAgIHR5cGU6IGtleW9mIFJlYWN0SFRNTCwKICAgICAgICBwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQLCBUPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIFNWR0F0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBTVkdFbGVtZW50PigKICAgICAgICB0eXBlOiBrZXlvZiBSZWFjdFNWRywKICAgICAgICBwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IFJlYWN0U1ZHRWxlbWVudDsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIERPTUF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBFbGVtZW50PigKICAgICAgICB0eXBlOiBzdHJpbmcsCiAgICAgICAgcHJvcHM/OiBDbGFzc0F0dHJpYnV0ZXM8VD4gJiBQIHwgbnVsbCwKICAgICAgICAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pOiBET01FbGVtZW50PFAsIFQ+OwoKICAgIC8vIEN1c3RvbSBjb21wb25lbnRzCgogICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxQIGV4dGVuZHMge30+KAogICAgICAgIHR5cGU6IEZ1bmN0aW9uQ29tcG9uZW50PFA+LAogICAgICAgIHByb3BzPzogQXR0cmlidXRlcyAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IEZ1bmN0aW9uQ29tcG9uZW50RWxlbWVudDxQPjsKICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8UCBleHRlbmRzIHt9PigKICAgICAgICB0eXBlOiBDbGFzc1R5cGU8UCwgQ2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4sIENsYXNzaWNDb21wb25lbnRDbGFzczxQPj4sCiAgICAgICAgcHJvcHM/OiBDbGFzc0F0dHJpYnV0ZXM8Q2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4+ICYgUCB8IG51bGwsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogQ0VsZW1lbnQ8UCwgQ2xhc3NpY0NvbXBvbmVudDxQLCBDb21wb25lbnRTdGF0ZT4+OwogICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxQIGV4dGVuZHMge30sIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+LCBDIGV4dGVuZHMgQ29tcG9uZW50Q2xhc3M8UD4+KAogICAgICAgIHR5cGU6IENsYXNzVHlwZTxQLCBULCBDPiwKICAgICAgICBwcm9wcz86IENsYXNzQXR0cmlidXRlczxUPiAmIFAgfCBudWxsLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IENFbGVtZW50PFAsIFQ+OwogICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxQIGV4dGVuZHMge30+KAogICAgICAgIHR5cGU6IEZ1bmN0aW9uQ29tcG9uZW50PFA+IHwgQ29tcG9uZW50Q2xhc3M8UD4gfCBzdHJpbmcsCiAgICAgICAgcHJvcHM/OiBBdHRyaWJ1dGVzICYgUCB8IG51bGwsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RFbGVtZW50PFA+OwoKICAgIC8vIERPTSBFbGVtZW50cwogICAgLy8gUmVhY3RIVE1MRWxlbWVudAogICAgZnVuY3Rpb24gY2xvbmVFbGVtZW50PFAgZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIEhUTUxFbGVtZW50PigKICAgICAgICBlbGVtZW50OiBEZXRhaWxlZFJlYWN0SFRNTEVsZW1lbnQ8UCwgVD4sCiAgICAgICAgcHJvcHM/OiBQLAogICAgICAgIC4uLmNoaWxkcmVuOiBSZWFjdE5vZGVbXSk6IERldGFpbGVkUmVhY3RIVE1MRWxlbWVudDxQLCBUPjsKICAgIC8vIFJlYWN0SFRNTEVsZW1lbnQsIGxlc3Mgc3BlY2lmaWMKICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudDxQIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4sIFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4oCiAgICAgICAgZWxlbWVudDogUmVhY3RIVE1MRWxlbWVudDxUPiwKICAgICAgICBwcm9wcz86IFAsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RIVE1MRWxlbWVudDxUPjsKICAgIC8vIFNWR0VsZW1lbnQKICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudDxQIGV4dGVuZHMgU1ZHQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIFNWR0VsZW1lbnQ+KAogICAgICAgIGVsZW1lbnQ6IFJlYWN0U1ZHRWxlbWVudCwKICAgICAgICBwcm9wcz86IFAsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RTVkdFbGVtZW50OwogICAgLy8gRE9NIEVsZW1lbnQgKGhhcyB0byBiZSB0aGUgbGFzdCwgYmVjYXVzZSB0eXBlIGNoZWNraW5nIHN0b3BzIGF0IGZpcnN0IG92ZXJsb2FkIHRoYXQgZml0cykKICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudDxQIGV4dGVuZHMgRE9NQXR0cmlidXRlczxUPiwgVCBleHRlbmRzIEVsZW1lbnQ+KAogICAgICAgIGVsZW1lbnQ6IERPTUVsZW1lbnQ8UCwgVD4sCiAgICAgICAgcHJvcHM/OiBET01BdHRyaWJ1dGVzPFQ+ICYgUCwKICAgICAgICAuLi5jaGlsZHJlbjogUmVhY3ROb2RlW10pOiBET01FbGVtZW50PFAsIFQ+OwoKICAgIC8vIEN1c3RvbSBjb21wb25lbnRzCiAgICBmdW5jdGlvbiBjbG9uZUVsZW1lbnQ8UD4oCiAgICAgICAgZWxlbWVudDogRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+LAogICAgICAgIHByb3BzPzogUGFydGlhbDxQPiAmIEF0dHJpYnV0ZXMsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogRnVuY3Rpb25Db21wb25lbnRFbGVtZW50PFA+OwogICAgZnVuY3Rpb24gY2xvbmVFbGVtZW50PFAsIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+PigKICAgICAgICBlbGVtZW50OiBDRWxlbWVudDxQLCBUPiwKICAgICAgICBwcm9wcz86IFBhcnRpYWw8UD4gJiBDbGFzc0F0dHJpYnV0ZXM8VD4sCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogQ0VsZW1lbnQ8UCwgVD47CiAgICBmdW5jdGlvbiBjbG9uZUVsZW1lbnQ8UD4oCiAgICAgICAgZWxlbWVudDogUmVhY3RFbGVtZW50PFA+LAogICAgICAgIHByb3BzPzogUGFydGlhbDxQPiAmIEF0dHJpYnV0ZXMsCiAgICAgICAgLi4uY2hpbGRyZW46IFJlYWN0Tm9kZVtdKTogUmVhY3RFbGVtZW50PFA+OwoKICAgIC8vIENvbnRleHQgdmlhIFJlbmRlclByb3BzCiAgICBpbnRlcmZhY2UgUHJvdmlkZXJQcm9wczxUPiB7CiAgICAgICAgdmFsdWU6IFQ7CiAgICAgICAgY2hpbGRyZW4/OiBSZWFjdE5vZGUgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbnN1bWVyUHJvcHM8VD4gewogICAgICAgIGNoaWxkcmVuOiAodmFsdWU6IFQpID0+IFJlYWN0Tm9kZTsKICAgIH0KCiAgICAvLyBUT0RPOiBzaW1pbGFyIHRvIGhvdyBGcmFnbWVudCBpcyBhY3R1YWxseSBhIHN5bWJvbCwgdGhlIHZhbHVlcyByZXR1cm5lZCBmcm9tIGNyZWF0ZUNvbnRleHQsCiAgICAvLyBmb3J3YXJkUmVmIGFuZCBtZW1vIGFyZSBhY3R1YWxseSBvYmplY3RzIHRoYXQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5IGJ5IHRoZSByZW5kZXJlcjsgc2VlOgogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvdjE2LjYuMC9wYWNrYWdlcy9yZWFjdC9zcmMvUmVhY3RDb250ZXh0LmpzI0wzNS1MNDgKICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL3YxNi42LjAvcGFja2FnZXMvcmVhY3Qvc3JjL2ZvcndhcmRSZWYuanMjTDQyLUw0NQogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvdjE2LjYuMC9wYWNrYWdlcy9yZWFjdC9zcmMvbWVtby5qcyNMMjctTDMxCiAgICAvLyBIb3dldmVyLCB3ZSBoYXZlIG5vIHdheSBvZiB0ZWxsaW5nIHRoZSBKU1ggcGFyc2VyIHRoYXQgaXQncyBhIEpTWCBlbGVtZW50IHR5cGUgb3IgaXRzIHByb3BzIG90aGVyIHRoYW4KICAgIC8vIGJ5IHByZXRlbmRpbmcgdG8gYmUgYSBub3JtYWwgY29tcG9uZW50LgogICAgLy8KICAgIC8vIFdlIGRvbid0IGp1c3QgdXNlIENvbXBvbmVudFR5cGUgb3IgRnVuY3Rpb25Db21wb25lbnQgdHlwZXMgYmVjYXVzZSB5b3UgYXJlIG5vdCBzdXBwb3NlZCB0byBhdHRhY2ggc3RhdGljcyB0byB0aGlzCiAgICAvLyBvYmplY3QsIGJ1dCByYXRoZXIgdG8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLgogICAgaW50ZXJmYWNlIEV4b3RpY0NvbXBvbmVudDxQID0ge30+IHsKICAgICAgICAvKioKICAgICAgICAgKiAqKk5PVEUqKjogRXhvdGljIGNvbXBvbmVudHMgYXJlIG5vdCBjYWxsYWJsZS4KICAgICAgICAgKi8KICAgICAgICAocHJvcHM6IFApOiBSZWFjdE5vZGU7CiAgICAgICAgcmVhZG9ubHkgJCR0eXBlb2Y6IHN5bWJvbDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTmFtZWRFeG90aWNDb21wb25lbnQ8UCA9IHt9PiBleHRlbmRzIEV4b3RpY0NvbXBvbmVudDxQPiB7CiAgICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFByb3ZpZGVyRXhvdGljQ29tcG9uZW50PFA+IGV4dGVuZHMgRXhvdGljQ29tcG9uZW50PFA+IHsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIENvbnRleHRUeXBlPEMgZXh0ZW5kcyBDb250ZXh0PGFueT4+ID0gQyBleHRlbmRzIENvbnRleHQ8aW5mZXIgVD4gPyBUIDogbmV2ZXI7CgogICAgLy8gTk9URTogb25seSB0aGUgQ29udGV4dCBvYmplY3QgaXRzZWxmIGNhbiBnZXQgYSBkaXNwbGF5TmFtZQogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LWRldnRvb2xzL2Jsb2IvZTBiODU0ZTRjL2JhY2tlbmQvYXR0YWNoUmVuZGVyZXJGaWJlci5qcyNMMzEwLUwzMjUKICAgIHR5cGUgUHJvdmlkZXI8VD4gPSBQcm92aWRlckV4b3RpY0NvbXBvbmVudDxQcm92aWRlclByb3BzPFQ+PjsKICAgIHR5cGUgQ29uc3VtZXI8VD4gPSBFeG90aWNDb21wb25lbnQ8Q29uc3VtZXJQcm9wczxUPj47CiAgICBpbnRlcmZhY2UgQ29udGV4dDxUPiB7CiAgICAgICAgUHJvdmlkZXI6IFByb3ZpZGVyPFQ+OwogICAgICAgIENvbnN1bWVyOiBDb25zdW1lcjxUPjsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQ8VD4oCiAgICAgICAgLy8gSWYgeW91IHRob3VnaHQgdGhpcyBzaG91bGQgYmUgb3B0aW9uYWwsIHNlZQogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkL3B1bGwvMjQ1MDkjaXNzdWVjb21tZW50LTM4MjIxMzEwNgogICAgICAgIGRlZmF1bHRWYWx1ZTogVCwKICAgICk6IENvbnRleHQ8VD47CgogICAgZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQ8UD4ob2JqZWN0OiB7fSB8IG51bGwgfCB1bmRlZmluZWQpOiBvYmplY3QgaXMgUmVhY3RFbGVtZW50PFA+OwoKICAgIC8vIFN5bmMgd2l0aCBgUmVhY3RDaGlsZHJlbmAgdW50aWwgYFJlYWN0Q2hpbGRyZW5gIGlzIHJlbW92ZWQuCiAgICBjb25zdCBDaGlsZHJlbjogewogICAgICAgIG1hcDxULCBDPihjaGlsZHJlbjogQyB8IFJlYWRvbmx5QXJyYXk8Qz4sIGZuOiAoY2hpbGQ6IEMsIGluZGV4OiBudW1iZXIpID0+IFQpOgogICAgICAgICAgICBDIGV4dGVuZHMgbnVsbCB8IHVuZGVmaW5lZCA/IEMgOiBBcnJheTxFeGNsdWRlPFQsIGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkPj47CiAgICAgICAgZm9yRWFjaDxDPihjaGlsZHJlbjogQyB8IFJlYWRvbmx5QXJyYXk8Qz4sIGZuOiAoY2hpbGQ6IEMsIGluZGV4OiBudW1iZXIpID0+IHZvaWQpOiB2b2lkOwogICAgICAgIGNvdW50KGNoaWxkcmVuOiBhbnkpOiBudW1iZXI7CiAgICAgICAgb25seTxDPihjaGlsZHJlbjogQyk6IEMgZXh0ZW5kcyBhbnlbXSA/IG5ldmVyIDogQzsKICAgICAgICB0b0FycmF5KGNoaWxkcmVuOiBSZWFjdE5vZGUgfCBSZWFjdE5vZGVbXSk6IEFycmF5PEV4Y2x1ZGU8UmVhY3ROb2RlLCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZD4+OwogICAgfTsKICAgIGNvbnN0IEZyYWdtZW50OiBFeG90aWNDb21wb25lbnQ8eyBjaGlsZHJlbj86IFJlYWN0Tm9kZSB8IHVuZGVmaW5lZCB9PjsKICAgIGNvbnN0IFN0cmljdE1vZGU6IEV4b3RpY0NvbXBvbmVudDx7IGNoaWxkcmVuPzogUmVhY3ROb2RlIHwgdW5kZWZpbmVkIH0+OwoKICAgIGludGVyZmFjZSBTdXNwZW5zZVByb3BzIHsKICAgICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZSB8IHVuZGVmaW5lZDsKCiAgICAgICAgLyoqIEEgZmFsbGJhY2sgcmVhY3QgdHJlZSB0byBzaG93IHdoZW4gYSBTdXNwZW5zZSBjaGlsZCAobGlrZSBSZWFjdC5sYXp5KSBzdXNwZW5kcyAqLwogICAgICAgIGZhbGxiYWNrPzogUmVhY3ROb2RlOwogICAgfQoKICAgIGNvbnN0IFN1c3BlbnNlOiBFeG90aWNDb21wb25lbnQ8U3VzcGVuc2VQcm9wcz47CiAgICBjb25zdCB2ZXJzaW9uOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L1Byb2ZpbGVyI29ucmVuZGVyLWNhbGxiYWNrIFByb2ZpbGVyIEFQSX0KICAgICAqLwogICAgdHlwZSBQcm9maWxlck9uUmVuZGVyQ2FsbGJhY2sgPSAoCiAgICAgICAgaWQ6IHN0cmluZywKICAgICAgICBwaGFzZTogIm1vdW50IiB8ICJ1cGRhdGUiLAogICAgICAgIGFjdHVhbER1cmF0aW9uOiBudW1iZXIsCiAgICAgICAgYmFzZUR1cmF0aW9uOiBudW1iZXIsCiAgICAgICAgc3RhcnRUaW1lOiBudW1iZXIsCiAgICAgICAgY29tbWl0VGltZTogbnVtYmVyLAogICAgICAgIGludGVyYWN0aW9uczogU2V0PFNjaGVkdWxlckludGVyYWN0aW9uPiwKICAgICkgPT4gdm9pZDsKICAgIGludGVyZmFjZSBQcm9maWxlclByb3BzIHsKICAgICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZSB8IHVuZGVmaW5lZDsKICAgICAgICBpZDogc3RyaW5nOwogICAgICAgIG9uUmVuZGVyOiBQcm9maWxlck9uUmVuZGVyQ2FsbGJhY2s7CiAgICB9CgogICAgY29uc3QgUHJvZmlsZXI6IEV4b3RpY0NvbXBvbmVudDxQcm9maWxlclByb3BzPjsKCiAgICAvLwogICAgLy8gQ29tcG9uZW50IEFQSQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHR5cGUgUmVhY3RJbnN0YW5jZSA9IENvbXBvbmVudDxhbnk+IHwgRWxlbWVudDsKCiAgICAvLyBCYXNlIGNvbXBvbmVudCBmb3IgcGxhaW4gSlMgY2xhc3NlcwogICAgaW50ZXJmYWNlIENvbXBvbmVudDxQID0ge30sIFMgPSB7fSwgU1MgPSBhbnk+IGV4dGVuZHMgQ29tcG9uZW50TGlmZWN5Y2xlPFAsIFMsIFNTPiB7IH0KICAgIGNsYXNzIENvbXBvbmVudDxQLCBTPiB7CiAgICAgICAgLy8gdHNsaW50IHdvbid0IGxldCBtZSBmb3JtYXQgdGhlIHNhbXBsZSBjb2RlIGluIGEgd2F5IHRoYXQgdnNjb2RlIGxpa2VzIGl0IDooCiAgICAgICAgLyoqCiAgICAgICAgICogSWYgc2V0LCBgdGhpcy5jb250ZXh0YCB3aWxsIGJlIHNldCBhdCBydW50aW1lIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBnaXZlbiBDb250ZXh0LgogICAgICAgICAqCiAgICAgICAgICogVXNhZ2U6CiAgICAgICAgICoKICAgICAgICAgKiBgYGB0cwogICAgICAgICAqIHR5cGUgTXlDb250ZXh0ID0gbnVtYmVyCiAgICAgICAgICogY29uc3QgQ3R4ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxNeUNvbnRleHQ+KDApCiAgICAgICAgICoKICAgICAgICAgKiBjbGFzcyBGb28gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgewogICAgICAgICAqICAgc3RhdGljIGNvbnRleHRUeXBlID0gQ3R4CiAgICAgICAgICogICBjb250ZXh0ITogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIEN0eD4KICAgICAgICAgKiAgIHJlbmRlciAoKSB7CiAgICAgICAgICogICAgIHJldHVybiA8Pk15IGNvbnRleHQncyB2YWx1ZToge3RoaXMuY29udGV4dH08Lz47CiAgICAgICAgICogICB9CiAgICAgICAgICogfQogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvQ29tcG9uZW50I3N0YXRpYy1jb250ZXh0dHlwZQogICAgICAgICAqLwogICAgICAgIHN0YXRpYyBjb250ZXh0VHlwZT86IENvbnRleHQ8YW55PiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLyoqCiAgICAgICAgICogSWYgdXNpbmcgdGhlIG5ldyBzdHlsZSBjb250ZXh0LCByZS1kZWNsYXJlIHRoaXMgaW4geW91ciBjbGFzcyB0byBiZSB0aGUKICAgICAgICAgKiBgUmVhY3QuQ29udGV4dFR5cGVgIG9mIHlvdXIgYHN0YXRpYyBjb250ZXh0VHlwZWAuCiAgICAgICAgICogU2hvdWxkIGJlIHVzZWQgd2l0aCB0eXBlIGFubm90YXRpb24gb3Igc3RhdGljIGNvbnRleHRUeXBlLgogICAgICAgICAqCiAgICAgICAgICogYGBgdHMKICAgICAgICAgKiBzdGF0aWMgY29udGV4dFR5cGUgPSBNeUNvbnRleHQKICAgICAgICAgKiAvLyBGb3IgVFMgcHJlLTMuNzoKICAgICAgICAgKiBjb250ZXh0ITogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIE15Q29udGV4dD4KICAgICAgICAgKiAvLyBGb3IgVFMgMy43IGFuZCBhYm92ZToKICAgICAgICAgKiBkZWNsYXJlIGNvbnRleHQ6IFJlYWN0LkNvbnRleHRUeXBlPHR5cGVvZiBNeUNvbnRleHQ+CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC9Db21wb25lbnQjY29udGV4dAogICAgICAgICAqLwogICAgICAgIGNvbnRleHQ6IHVua25vd247CgogICAgICAgIGNvbnN0cnVjdG9yKHByb3BzOiBSZWFkb25seTxQPiB8IFApOwogICAgICAgIC8qKgogICAgICAgICAqIEBkZXByZWNhdGVkCiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9kb2NzL2xlZ2FjeS1jb250ZXh0Lmh0bWwKICAgICAgICAgKi8KICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wczogUCwgY29udGV4dDogYW55KTsKCiAgICAgICAgLy8gV2UgTVVTVCBrZWVwIHNldFN0YXRlKCkgYXMgYSB1bmlmaWVkIHNpZ25hdHVyZSBiZWNhdXNlIGl0IGFsbG93cyBwcm9wZXIgY2hlY2tpbmcgb2YgdGhlIG1ldGhvZCByZXR1cm4gdHlwZS4KICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkL2lzc3Vlcy8xODM2NSNpc3N1ZWNvbW1lbnQtMzUxMDEzMjU3CiAgICAgICAgLy8gQWxzbywgdGhlIGAgfCBTYCBhbGxvd3MgaW50ZWxsaXNlbnNlIHRvIG5vdCBiZSBkdW1iaXNlbnNlCiAgICAgICAgc2V0U3RhdGU8SyBleHRlbmRzIGtleW9mIFM+KAogICAgICAgICAgICBzdGF0ZTogKChwcmV2U3RhdGU6IFJlYWRvbmx5PFM+LCBwcm9wczogUmVhZG9ubHk8UD4pID0+IChQaWNrPFMsIEs+IHwgUyB8IG51bGwpKSB8IChQaWNrPFMsIEs+IHwgUyB8IG51bGwpLAogICAgICAgICAgICBjYWxsYmFjaz86ICgpID0+IHZvaWQKICAgICAgICApOiB2b2lkOwoKICAgICAgICBmb3JjZVVwZGF0ZShjYWxsYmFjaz86ICgpID0+IHZvaWQpOiB2b2lkOwogICAgICAgIHJlbmRlcigpOiBSZWFjdE5vZGU7CgogICAgICAgIHJlYWRvbmx5IHByb3BzOiBSZWFkb25seTxQPjsKICAgICAgICBzdGF0ZTogUmVhZG9ubHk8Uz47CiAgICAgICAgLyoqCiAgICAgICAgICogQGRlcHJlY2F0ZWQKICAgICAgICAgKiBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9kb2NzL3JlZnMtYW5kLXRoZS1kb20uaHRtbCNsZWdhY3ktYXBpLXN0cmluZy1yZWZzCiAgICAgICAgICovCiAgICAgICAgcmVmczogewogICAgICAgICAgICBba2V5OiBzdHJpbmddOiBSZWFjdEluc3RhbmNlCiAgICAgICAgfTsKICAgIH0KCiAgICBjbGFzcyBQdXJlQ29tcG9uZW50PFAgPSB7fSwgUyA9IHt9LCBTUyA9IGFueT4gZXh0ZW5kcyBDb21wb25lbnQ8UCwgUywgU1M+IHsgfQoKICAgIGludGVyZmFjZSBDbGFzc2ljQ29tcG9uZW50PFAgPSB7fSwgUyA9IHt9PiBleHRlbmRzIENvbXBvbmVudDxQLCBTPiB7CiAgICAgICAgcmVwbGFjZVN0YXRlKG5leHRTdGF0ZTogUywgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKTogdm9pZDsKICAgICAgICBpc01vdW50ZWQoKTogYm9vbGVhbjsKICAgICAgICBnZXRJbml0aWFsU3RhdGU/KCk6IFM7CiAgICB9CgogICAgaW50ZXJmYWNlIENoaWxkQ29udGV4dFByb3ZpZGVyPENDPiB7CiAgICAgICAgZ2V0Q2hpbGRDb250ZXh0KCk6IENDOwogICAgfQoKICAgIC8vCiAgICAvLyBDbGFzcyBJbnRlcmZhY2VzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgdHlwZSBGQzxQID0ge30+ID0gRnVuY3Rpb25Db21wb25lbnQ8UD47CgogICAgaW50ZXJmYWNlIEZ1bmN0aW9uQ29tcG9uZW50PFAgPSB7fT4gewogICAgICAgIChwcm9wczogUCwgY29udGV4dD86IGFueSk6IFJlYWN0Tm9kZTsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdFByb3BzPzogUGFydGlhbDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIC0gRXF1aXZhbGVudCB3aXRoIGBSZWFjdC5GQ2AuCiAgICAgKi8KICAgIHR5cGUgVkZDPFAgPSB7fT4gPSBWb2lkRnVuY3Rpb25Db21wb25lbnQ8UD47CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZCAtIEVxdWl2YWxlbnQgd2l0aCBgUmVhY3QuRnVuY3Rpb25Db21wb25lbnRgLgogICAgICovCiAgICBpbnRlcmZhY2UgVm9pZEZ1bmN0aW9uQ29tcG9uZW50PFAgPSB7fT4gewogICAgICAgIChwcm9wczogUCwgY29udGV4dD86IGFueSk6IFJlYWN0Tm9kZTsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdFByb3BzPzogUGFydGlhbDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEZvcndhcmRlZFJlZjxUPiA9ICgoaW5zdGFuY2U6IFQgfCBudWxsKSA9PiB2b2lkKSB8IE11dGFibGVSZWZPYmplY3Q8VCB8IG51bGw+IHwgbnVsbDsKCiAgICBpbnRlcmZhY2UgRm9yd2FyZFJlZlJlbmRlckZ1bmN0aW9uPFQsIFAgPSB7fT4gewogICAgICAgIChwcm9wczogUCwgcmVmOiBGb3J3YXJkZWRSZWY8VD4pOiBSZWFjdE5vZGU7CiAgICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLy8gZXhwbGljaXQgcmVqZWN0ZWQgd2l0aCBgbmV2ZXJgIHJlcXVpcmVkIGR1ZSB0bwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzY4MjYKICAgICAgICAvKioKICAgICAgICAgKiBkZWZhdWx0UHJvcHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gcmVuZGVyIGZ1bmN0aW9ucwogICAgICAgICAqLwogICAgICAgIGRlZmF1bHRQcm9wcz86IG5ldmVyIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIHByb3BUeXBlcyBhcmUgbm90IHN1cHBvcnRlZCBvbiByZW5kZXIgZnVuY3Rpb25zCiAgICAgICAgICovCiAgICAgICAgcHJvcFR5cGVzPzogbmV2ZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbXBvbmVudENsYXNzPFAgPSB7fSwgUyA9IENvbXBvbmVudFN0YXRlPiBleHRlbmRzIFN0YXRpY0xpZmVjeWNsZTxQLCBTPiB7CiAgICAgICAgbmV3IChwcm9wczogUCwgY29udGV4dD86IGFueSk6IENvbXBvbmVudDxQLCBTPjsKICAgICAgICBwcm9wVHlwZXM/OiBXZWFrVmFsaWRhdGlvbk1hcDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZT86IENvbnRleHQ8YW55PiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgY2hpbGRDb250ZXh0VHlwZXM/OiBWYWxpZGF0aW9uTWFwPGFueT4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdFByb3BzPzogUGFydGlhbDxQPiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgQ2xhc3NpY0NvbXBvbmVudENsYXNzPFAgPSB7fT4gZXh0ZW5kcyBDb21wb25lbnRDbGFzczxQPiB7CiAgICAgICAgbmV3IChwcm9wczogUCwgY29udGV4dD86IGFueSk6IENsYXNzaWNDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+OwogICAgICAgIGdldERlZmF1bHRQcm9wcz8oKTogUDsKICAgIH0KCiAgICAvKioKICAgICAqIFdlIHVzZSBhbiBpbnRlcnNlY3Rpb24gdHlwZSB0byBpbmZlciBtdWx0aXBsZSB0eXBlIHBhcmFtZXRlcnMgZnJvbQogICAgICogYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgbWFueSB0b3AtbGV2ZWwgQVBJIGRlZnMuCiAgICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy83MjM0IGZvciBtb3JlIGluZm8uCiAgICAgKi8KICAgIHR5cGUgQ2xhc3NUeXBlPFAsIFQgZXh0ZW5kcyBDb21wb25lbnQ8UCwgQ29tcG9uZW50U3RhdGU+LCBDIGV4dGVuZHMgQ29tcG9uZW50Q2xhc3M8UD4+ID0KICAgICAgICBDICYKICAgICAgICAobmV3IChwcm9wczogUCwgY29udGV4dD86IGFueSkgPT4gVCk7CgogICAgLy8KICAgIC8vIENvbXBvbmVudCBTcGVjcyBhbmQgTGlmZWN5Y2xlCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgLy8gVGhpcyBzaG91bGQgYWN0dWFsbHkgYmUgc29tZXRoaW5nIGxpa2UgYExpZmVjeWNsZTxQLCBTPiB8IERlcHJlY2F0ZWRMaWZlY3ljbGU8UCwgUz5gLAogICAgLy8gYXMgUmVhY3Qgd2lsbCBfbm90XyBjYWxsIHRoZSBkZXByZWNhdGVkIGxpZmVjeWNsZSBtZXRob2RzIGlmIGFueSBvZiB0aGUgbmV3IGxpZmVjeWNsZQogICAgLy8gbWV0aG9kcyBhcmUgcHJlc2VudC4KICAgIGludGVyZmFjZSBDb21wb25lbnRMaWZlY3ljbGU8UCwgUywgU1MgPSBhbnk+IGV4dGVuZHMgTmV3TGlmZWN5Y2xlPFAsIFMsIFNTPiwgRGVwcmVjYXRlZExpZmVjeWNsZTxQLCBTPiB7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgY29tcG9uZW50IGlzIG1vdW50ZWQuIFNldHRpbmcgc3RhdGUgaGVyZSB3aWxsIHRyaWdnZXIgcmUtcmVuZGVyaW5nLgogICAgICAgICAqLwogICAgICAgIGNvbXBvbmVudERpZE1vdW50PygpOiB2b2lkOwogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2hhbmdlIGluIHByb3BzIGFuZCBzdGF0ZSBzaG91bGQgdHJpZ2dlciBhIHJlLXJlbmRlci4KICAgICAgICAgKgogICAgICAgICAqIGBDb21wb25lbnRgIGFsd2F5cyByZXR1cm5zIHRydWUuCiAgICAgICAgICogYFB1cmVDb21wb25lbnRgIGltcGxlbWVudHMgYSBzaGFsbG93IGNvbXBhcmlzb24gb24gcHJvcHMgYW5kIHN0YXRlIGFuZCByZXR1cm5zIHRydWUgaWYgYW55CiAgICAgICAgICogcHJvcHMgb3Igc3RhdGVzIGhhdmUgY2hhbmdlZC4KICAgICAgICAgKgogICAgICAgICAqIElmIGZhbHNlIGlzIHJldHVybmVkLCBgQ29tcG9uZW50I3JlbmRlcmAsIGBjb21wb25lbnRXaWxsVXBkYXRlYAogICAgICAgICAqIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYCB3aWxsIG5vdCBiZSBjYWxsZWQuCiAgICAgICAgICovCiAgICAgICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0U3RhdGU6IFJlYWRvbmx5PFM+LCBuZXh0Q29udGV4dDogYW55KTogYm9vbGVhbjsKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZC4gUGVyZm9ybSBhbnkgbmVjZXNzYXJ5IGNsZWFudXAgaW4gdGhpcyBtZXRob2QsIHN1Y2ggYXMKICAgICAgICAgKiBjYW5jZWxsZWQgbmV0d29yayByZXF1ZXN0cywgb3IgY2xlYW5pbmcgdXAgYW55IERPTSBlbGVtZW50cyBjcmVhdGVkIGluIGBjb21wb25lbnREaWRNb3VudGAuCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQ/KCk6IHZvaWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2F0Y2hlcyBleGNlcHRpb25zIGdlbmVyYXRlZCBpbiBkZXNjZW5kYW50IGNvbXBvbmVudHMuIFVuaGFuZGxlZCBleGNlcHRpb25zIHdpbGwgY2F1c2UKICAgICAgICAgKiB0aGUgZW50aXJlIGNvbXBvbmVudCB0cmVlIHRvIHVubW91bnQuCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50RGlkQ2F0Y2g/KGVycm9yOiBFcnJvciwgZXJyb3JJbmZvOiBFcnJvckluZm8pOiB2b2lkOwogICAgfQoKICAgIC8vIFVuZm9ydHVuYXRlbHksIHdlIGhhdmUgbm8gd2F5IG9mIGRlY2xhcmluZyB0aGF0IHRoZSBjb21wb25lbnQgY29uc3RydWN0b3IgbXVzdCBpbXBsZW1lbnQgdGhpcwogICAgaW50ZXJmYWNlIFN0YXRpY0xpZmVjeWNsZTxQLCBTPiB7CiAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPzogR2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPFAsIFM+IHwgdW5kZWZpbmVkOwogICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj86IEdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjxQLCBTPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczxQLCBTPiA9CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyBhbiB1cGRhdGUgdG8gYSBjb21wb25lbnQncyBzdGF0ZSBiYXNlZCBvbiBpdHMgbmV3IHByb3BzIGFuZCBvbGQgc3RhdGUuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiBpdHMgcHJlc2VuY2UgcHJldmVudHMgYW55IG9mIHRoZSBkZXByZWNhdGVkIGxpZmVjeWNsZSBtZXRob2RzIGZyb20gYmVpbmcgaW52b2tlZAogICAgICAgICAqLwogICAgICAgIChuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBwcmV2U3RhdGU6IFMpID0+IFBhcnRpYWw8Uz4gfCBudWxsOwoKICAgIHR5cGUgR2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPFAsIFM+ID0KICAgICAgICAvKioKICAgICAgICAgKiBUaGlzIGxpZmVjeWNsZSBpcyBpbnZva2VkIGFmdGVyIGFuIGVycm9yIGhhcyBiZWVuIHRocm93biBieSBhIGRlc2NlbmRhbnQgY29tcG9uZW50LgogICAgICAgICAqIEl0IHJlY2VpdmVzIHRoZSBlcnJvciB0aGF0IHdhcyB0aHJvd24gYXMgYSBwYXJhbWV0ZXIgYW5kIHNob3VsZCByZXR1cm4gYSB2YWx1ZSB0byB1cGRhdGUgc3RhdGUuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiBpdHMgcHJlc2VuY2UgcHJldmVudHMgYW55IG9mIHRoZSBkZXByZWNhdGVkIGxpZmVjeWNsZSBtZXRob2RzIGZyb20gYmVpbmcgaW52b2tlZAogICAgICAgICAqLwogICAgICAgIChlcnJvcjogYW55KSA9PiBQYXJ0aWFsPFM+IHwgbnVsbDsKCiAgICAvLyBUaGlzIHNob3VsZCBiZSAiaW5mZXIgU1MiIGJ1dCBjYW4ndCB1c2UgaXQgeWV0CiAgICBpbnRlcmZhY2UgTmV3TGlmZWN5Y2xlPFAsIFMsIFNTPiB7CiAgICAgICAgLyoqCiAgICAgICAgICogUnVucyBiZWZvcmUgUmVhY3QgYXBwbGllcyB0aGUgcmVzdWx0IG9mIGByZW5kZXJgIHRvIHRoZSBkb2N1bWVudCwgYW5kCiAgICAgICAgICogcmV0dXJucyBhbiBvYmplY3QgdG8gYmUgZ2l2ZW4gdG8gY29tcG9uZW50RGlkVXBkYXRlLiBVc2VmdWwgZm9yIHNhdmluZwogICAgICAgICAqIHRoaW5ncyBzdWNoIGFzIHNjcm9sbCBwb3NpdGlvbiBiZWZvcmUgYHJlbmRlcmAgY2F1c2VzIGNoYW5nZXMgdG8gaXQuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgcHJldmVudHMgYW55IG9mIHRoZSBkZXByZWNhdGVkCiAgICAgICAgICogbGlmZWN5Y2xlIGV2ZW50cyBmcm9tIHJ1bm5pbmcuCiAgICAgICAgICovCiAgICAgICAgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU/KHByZXZQcm9wczogUmVhZG9ubHk8UD4sIHByZXZTdGF0ZTogUmVhZG9ubHk8Uz4pOiBTUyB8IG51bGw7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHVwZGF0aW5nIG9jY3Vycy4gTm90IGNhbGxlZCBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLgogICAgICAgICAqCiAgICAgICAgICogVGhlIHNuYXBzaG90IGlzIG9ubHkgcHJlc2VudCBpZiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBpcyBwcmVzZW50IGFuZCByZXR1cm5zIG5vbi1udWxsLgogICAgICAgICAqLwogICAgICAgIGNvbXBvbmVudERpZFVwZGF0ZT8ocHJldlByb3BzOiBSZWFkb25seTxQPiwgcHJldlN0YXRlOiBSZWFkb25seTxTPiwgc25hcHNob3Q/OiBTUyk6IHZvaWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIERlcHJlY2F0ZWRMaWZlY3ljbGU8UCwgUz4gewogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgbW91bnRpbmcgb2NjdXJzLCBhbmQgYmVmb3JlIGBDb21wb25lbnQjcmVuZGVyYC4KICAgICAgICAgKiBBdm9pZCBpbnRyb2R1Y2luZyBhbnkgc2lkZS1lZmZlY3RzIG9yIHN1YnNjcmlwdGlvbnMgaW4gdGhpcyBtZXRob2QuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgY29tcG9uZW50RGlkTW91bnQgb3IgdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQ7IHdpbGwgc3RvcCB3b3JraW5nIGluIFJlYWN0IDE3CiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9ibG9nLzIwMTgvMDMvMjcvdXBkYXRlLW9uLWFzeW5jLXJlbmRlcmluZy5odG1sI2luaXRpYWxpemluZy1zdGF0ZQogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCNncmFkdWFsLW1pZ3JhdGlvbi1wYXRoCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50V2lsbE1vdW50PygpOiB2b2lkOwogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgbW91bnRpbmcgb2NjdXJzLCBhbmQgYmVmb3JlIGBDb21wb25lbnQjcmVuZGVyYC4KICAgICAgICAgKiBBdm9pZCBpbnRyb2R1Y2luZyBhbnkgc2lkZS1lZmZlY3RzIG9yIHN1YnNjcmlwdGlvbnMgaW4gdGhpcyBtZXRob2QuCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIG5vdCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgMTcuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgY29tcG9uZW50RGlkTW91bnQgb3IgdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjaW5pdGlhbGl6aW5nLXN0YXRlCiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9ibG9nLzIwMTgvMDMvMjcvdXBkYXRlLW9uLWFzeW5jLXJlbmRlcmluZy5odG1sI2dyYWR1YWwtbWlncmF0aW9uLXBhdGgKICAgICAgICAgKi8KICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50PygpOiB2b2lkOwogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgbWF5IGJlIHJlY2VpdmluZyBuZXcgcHJvcHMuCiAgICAgICAgICogUmVhY3QgbWF5IGNhbGwgdGhpcyBldmVuIGlmIHByb3BzIGhhdmUgbm90IGNoYW5nZWQsIHNvIGJlIHN1cmUgdG8gY29tcGFyZSBuZXcgYW5kIGV4aXN0aW5nCiAgICAgICAgICogcHJvcHMgaWYgeW91IG9ubHkgd2FudCB0byBoYW5kbGUgY2hhbmdlcy4KICAgICAgICAgKgogICAgICAgICAqIENhbGxpbmcgYENvbXBvbmVudCNzZXRTdGF0ZWAgZ2VuZXJhbGx5IGRvZXMgbm90IHRyaWdnZXIgdGhpcyBtZXRob2QuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2Ugc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyBpbnN0ZWFkOyB3aWxsIHN0b3Agd29ya2luZyBpbiBSZWFjdCAxNwogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCN1cGRhdGluZy1zdGF0ZS1iYXNlZC1vbi1wcm9wcwogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCNncmFkdWFsLW1pZ3JhdGlvbi1wYXRoCiAgICAgICAgICovCiAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz8obmV4dFByb3BzOiBSZWFkb25seTxQPiwgbmV4dENvbnRleHQ6IGFueSk6IHZvaWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBtYXkgYmUgcmVjZWl2aW5nIG5ldyBwcm9wcy4KICAgICAgICAgKiBSZWFjdCBtYXkgY2FsbCB0aGlzIGV2ZW4gaWYgcHJvcHMgaGF2ZSBub3QgY2hhbmdlZCwgc28gYmUgc3VyZSB0byBjb21wYXJlIG5ldyBhbmQgZXhpc3RpbmcKICAgICAgICAgKiBwcm9wcyBpZiB5b3Ugb25seSB3YW50IHRvIGhhbmRsZSBjaGFuZ2VzLgogICAgICAgICAqCiAgICAgICAgICogQ2FsbGluZyBgQ29tcG9uZW50I3NldFN0YXRlYCBnZW5lcmFsbHkgZG9lcyBub3QgdHJpZ2dlciB0aGlzIG1ldGhvZC4KICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgbm90IHN0b3Agd29ya2luZyBpbiBSZWFjdCAxNy4KICAgICAgICAgKgogICAgICAgICAqIE5vdGU6IHRoZSBwcmVzZW5jZSBvZiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMKICAgICAgICAgKiBwcmV2ZW50cyB0aGlzIGZyb20gYmVpbmcgaW52b2tlZC4KICAgICAgICAgKgogICAgICAgICAqIEBkZXByZWNhdGVkIDE2LjMsIHVzZSBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIGluc3RlYWQKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjdXBkYXRpbmctc3RhdGUtYmFzZWQtb24tcHJvcHMKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjZ3JhZHVhbC1taWdyYXRpb24tcGF0aAogICAgICAgICAqLwogICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0Q29udGV4dDogYW55KTogdm9pZDsKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlbmRlcmluZyB3aGVuIG5ldyBwcm9wcyBvciBzdGF0ZSBpcyByZWNlaXZlZC4gTm90IGNhbGxlZCBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLgogICAgICAgICAqCiAgICAgICAgICogTm90ZTogWW91IGNhbm5vdCBjYWxsIGBDb21wb25lbnQjc2V0U3RhdGVgIGhlcmUuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaW5zdGVhZDsgd2lsbCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgMTcKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjcmVhZGluZy1kb20tcHJvcGVydGllcy1iZWZvcmUtYW4tdXBkYXRlCiAgICAgICAgICogQHNlZSBodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9ibG9nLzIwMTgvMDMvMjcvdXBkYXRlLW9uLWFzeW5jLXJlbmRlcmluZy5odG1sI2dyYWR1YWwtbWlncmF0aW9uLXBhdGgKICAgICAgICAgKi8KICAgICAgICBjb21wb25lbnRXaWxsVXBkYXRlPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0U3RhdGU6IFJlYWRvbmx5PFM+LCBuZXh0Q29udGV4dDogYW55KTogdm9pZDsKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlbmRlcmluZyB3aGVuIG5ldyBwcm9wcyBvciBzdGF0ZSBpcyByZWNlaXZlZC4gTm90IGNhbGxlZCBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLgogICAgICAgICAqCiAgICAgICAgICogTm90ZTogWW91IGNhbm5vdCBjYWxsIGBDb21wb25lbnQjc2V0U3RhdGVgIGhlcmUuCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIG5vdCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgMTcuCiAgICAgICAgICoKICAgICAgICAgKiBOb3RlOiB0aGUgcHJlc2VuY2Ugb2YgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzCiAgICAgICAgICogcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGludm9rZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZGVwcmVjYXRlZCAxNi4zLCB1c2UgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaW5zdGVhZAogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDE4LzAzLzI3L3VwZGF0ZS1vbi1hc3luYy1yZW5kZXJpbmcuaHRtbCNyZWFkaW5nLWRvbS1wcm9wZXJ0aWVzLWJlZm9yZS1hbi11cGRhdGUKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAxOC8wMy8yNy91cGRhdGUtb24tYXN5bmMtcmVuZGVyaW5nLmh0bWwjZ3JhZHVhbC1taWdyYXRpb24tcGF0aAogICAgICAgICAqLwogICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlPyhuZXh0UHJvcHM6IFJlYWRvbmx5PFA+LCBuZXh0U3RhdGU6IFJlYWRvbmx5PFM+LCBuZXh0Q29udGV4dDogYW55KTogdm9pZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTWl4aW48UCwgUz4gZXh0ZW5kcyBDb21wb25lbnRMaWZlY3ljbGU8UCwgUz4gewogICAgICAgIG1peGlucz86IEFycmF5PE1peGluPFAsIFM+PiB8IHVuZGVmaW5lZDsKICAgICAgICBzdGF0aWNzPzogewogICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKCiAgICAgICAgZGlzcGxheU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcHJvcFR5cGVzPzogVmFsaWRhdGlvbk1hcDxhbnk+IHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHRUeXBlcz86IFZhbGlkYXRpb25NYXA8YW55PiB8IHVuZGVmaW5lZDsKICAgICAgICBjaGlsZENvbnRleHRUeXBlcz86IFZhbGlkYXRpb25NYXA8YW55PiB8IHVuZGVmaW5lZDsKCiAgICAgICAgZ2V0RGVmYXVsdFByb3BzPygpOiBQOwogICAgICAgIGdldEluaXRpYWxTdGF0ZT8oKTogUzsKICAgIH0KCiAgICBpbnRlcmZhY2UgQ29tcG9uZW50U3BlYzxQLCBTPiBleHRlbmRzIE1peGluPFAsIFM+IHsKICAgICAgICByZW5kZXIoKTogUmVhY3ROb2RlOwoKICAgICAgICBbcHJvcGVydHlOYW1lOiBzdHJpbmddOiBhbnk7CiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlUmVmPFQ+KCk6IFJlZk9iamVjdDxUPjsKCiAgICAvLyB3aWxsIHNob3cgYEZvcndhcmRSZWYoJHtDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWV9KWAgaW4gZGV2dG9vbHMgYnkgZGVmYXVsdCwKICAgIC8vIGJ1dCBjYW4gYmUgZ2l2ZW4gaXRzIG93biBzcGVjaWZpYyBuYW1lCiAgICBpbnRlcmZhY2UgRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxQPiBleHRlbmRzIE5hbWVkRXhvdGljQ29tcG9uZW50PFA+IHsKICAgICAgICBkZWZhdWx0UHJvcHM/OiBQYXJ0aWFsPFA+IHwgdW5kZWZpbmVkOwogICAgICAgIHByb3BUeXBlcz86IFdlYWtWYWxpZGF0aW9uTWFwPFA+IHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIGZvcndhcmRSZWY8VCwgUCA9IHt9PihyZW5kZXI6IEZvcndhcmRSZWZSZW5kZXJGdW5jdGlvbjxULCBQPik6IEZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8UHJvcHNXaXRob3V0UmVmPFA+ICYgUmVmQXR0cmlidXRlczxUPj47CgogICAgLyoqIEVuc3VyZXMgdGhhdCB0aGUgcHJvcHMgZG8gbm90IGluY2x1ZGUgcmVmIGF0IGFsbCAqLwogICAgdHlwZSBQcm9wc1dpdGhvdXRSZWY8UD4gPQogICAgICAgIC8vIE9taXQgd291bGQgbm90IGJlIHN1ZmZpY2llbnQgZm9yIHRoaXMuIFdlJ2QgbGlrZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBtYXBwaW5nIGFuZCBuZWVkIGEgZGlzdHJpYnV0aXZlIGNvbmRpdGlvbmFsIHRvIHN1cHBvcnQgdW5pb25zLgogICAgICAgIC8vIHNlZTogaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9jb25kaXRpb25hbC10eXBlcy5odG1sI2Rpc3RyaWJ1dGl2ZS1jb25kaXRpb25hbC10eXBlcwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjgzMzkKICAgICAgICBQIGV4dGVuZHMgYW55ID8gKCdyZWYnIGV4dGVuZHMga2V5b2YgUCA/IE9taXQ8UCwgJ3JlZic+IDogUCkgOiBQOwogICAgLyoqIEVuc3VyZXMgdGhhdCB0aGUgcHJvcHMgZG8gbm90IGluY2x1ZGUgc3RyaW5nIHJlZiwgd2hpY2ggY2Fubm90IGJlIGZvcndhcmRlZCAqLwogICAgdHlwZSBQcm9wc1dpdGhSZWY8UD4gPQogICAgICAgIC8vIEp1c3QgIlAgZXh0ZW5kcyB7IHJlZj86IGluZmVyIFIgfSIgbG9va3Mgc3VmZmljaWVudCwgYnV0IFIgd2lsbCBpbmZlciBhcyB7fSBpZiBQIGlzIHt9LgogICAgICAgICdyZWYnIGV4dGVuZHMga2V5b2YgUAogICAgICAgICAgICA/IFAgZXh0ZW5kcyB7IHJlZj86IGluZmVyIFIgfCB1bmRlZmluZWQgfQogICAgICAgICAgICAgICAgPyBzdHJpbmcgZXh0ZW5kcyBSCiAgICAgICAgICAgICAgICAgICAgPyBQcm9wc1dpdGhvdXRSZWY8UD4gJiB7IHJlZj86IEV4Y2x1ZGU8Uiwgc3RyaW5nPiB8IHVuZGVmaW5lZCB9CiAgICAgICAgICAgICAgICAgICAgOiBQCiAgICAgICAgICAgICAgICA6IFAKICAgICAgICAgICAgOiBQOwoKICAgIHR5cGUgUHJvcHNXaXRoQ2hpbGRyZW48UCA9IHVua25vd24+ID0gUCAmIHsgY2hpbGRyZW4/OiBSZWFjdE5vZGUgfCB1bmRlZmluZWQgfTsKCiAgICAvKioKICAgICAqIE5PVEU6IHByZWZlciBDb21wb25lbnRQcm9wc1dpdGhSZWYsIGlmIHRoZSByZWYgaXMgZm9yd2FyZGVkLAogICAgICogb3IgQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmIHdoZW4gcmVmcyBhcmUgbm90IHN1cHBvcnRlZC4KICAgICAqLwogICAgdHlwZSBDb21wb25lbnRQcm9wczxUIGV4dGVuZHMga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzIHwgSlNYRWxlbWVudENvbnN0cnVjdG9yPGFueT4+ID0KICAgICAgICBUIGV4dGVuZHMgSlNYRWxlbWVudENvbnN0cnVjdG9yPGluZmVyIFA+CiAgICAgICAgICAgID8gUAogICAgICAgICAgICA6IFQgZXh0ZW5kcyBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHMKICAgICAgICAgICAgICAgID8gSlNYLkludHJpbnNpY0VsZW1lbnRzW1RdCiAgICAgICAgICAgICAgICA6IHt9OwogICAgdHlwZSBDb21wb25lbnRQcm9wc1dpdGhSZWY8VCBleHRlbmRzIEVsZW1lbnRUeXBlPiA9CiAgICAgICAgVCBleHRlbmRzIChuZXcgKHByb3BzOiBpbmZlciBQKSA9PiBDb21wb25lbnQ8YW55LCBhbnk+KQogICAgICAgICAgICA/IFByb3BzV2l0aG91dFJlZjxQPiAmIFJlZkF0dHJpYnV0ZXM8SW5zdGFuY2VUeXBlPFQ+PgogICAgICAgICAgICA6IFByb3BzV2l0aFJlZjxDb21wb25lbnRQcm9wczxUPj47CiAgICB0eXBlIENvbXBvbmVudFByb3BzV2l0aG91dFJlZjxUIGV4dGVuZHMgRWxlbWVudFR5cGU+ID0KICAgICAgICBQcm9wc1dpdGhvdXRSZWY8Q29tcG9uZW50UHJvcHM8VD4+OwoKICAgIHR5cGUgQ29tcG9uZW50UmVmPFQgZXh0ZW5kcyBFbGVtZW50VHlwZT4gPSBUIGV4dGVuZHMgTmFtZWRFeG90aWNDb21wb25lbnQ8CiAgICAgICAgQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPFQ+ICYgUmVmQXR0cmlidXRlczxpbmZlciBNZXRob2Q+CiAgICA+CiAgICAgICAgPyBNZXRob2QKICAgICAgICA6IENvbXBvbmVudFByb3BzV2l0aFJlZjxUPiBleHRlbmRzIFJlZkF0dHJpYnV0ZXM8aW5mZXIgTWV0aG9kPgogICAgICAgICAgICA/IE1ldGhvZAogICAgICAgICAgICA6IG5ldmVyOwoKICAgIC8vIHdpbGwgc2hvdyBgTWVtbygke0NvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZX0pYCBpbiBkZXZ0b29scyBieSBkZWZhdWx0LAogICAgLy8gYnV0IGNhbiBiZSBnaXZlbiBpdHMgb3duIHNwZWNpZmljIG5hbWUKICAgIHR5cGUgTWVtb0V4b3RpY0NvbXBvbmVudDxUIGV4dGVuZHMgQ29tcG9uZW50VHlwZTxhbnk+PiA9IE5hbWVkRXhvdGljQ29tcG9uZW50PENvbXBvbmVudFByb3BzV2l0aFJlZjxUPj4gJiB7CiAgICAgICAgcmVhZG9ubHkgdHlwZTogVDsKICAgIH07CgogICAgZnVuY3Rpb24gbWVtbzxQIGV4dGVuZHMgb2JqZWN0PigKICAgICAgICBDb21wb25lbnQ6IEZ1bmN0aW9uQ29tcG9uZW50PFA+LAogICAgICAgIHByb3BzQXJlRXF1YWw/OiAocHJldlByb3BzOiBSZWFkb25seTxQPiwgbmV4dFByb3BzOiBSZWFkb25seTxQPikgPT4gYm9vbGVhbgogICAgKTogTmFtZWRFeG90aWNDb21wb25lbnQ8UD47CiAgICBmdW5jdGlvbiBtZW1vPFQgZXh0ZW5kcyBDb21wb25lbnRUeXBlPGFueT4+KAogICAgICAgIENvbXBvbmVudDogVCwKICAgICAgICBwcm9wc0FyZUVxdWFsPzogKHByZXZQcm9wczogUmVhZG9ubHk8Q29tcG9uZW50UHJvcHM8VD4+LCBuZXh0UHJvcHM6IFJlYWRvbmx5PENvbXBvbmVudFByb3BzPFQ+PikgPT4gYm9vbGVhbgogICAgKTogTWVtb0V4b3RpY0NvbXBvbmVudDxUPjsKCiAgICB0eXBlIExhenlFeG90aWNDb21wb25lbnQ8VCBleHRlbmRzIENvbXBvbmVudFR5cGU8YW55Pj4gPSBFeG90aWNDb21wb25lbnQ8Q29tcG9uZW50UHJvcHNXaXRoUmVmPFQ+PiAmIHsKICAgICAgICByZWFkb25seSBfcmVzdWx0OiBUOwogICAgfTsKCiAgICBmdW5jdGlvbiBsYXp5PFQgZXh0ZW5kcyBDb21wb25lbnRUeXBlPGFueT4+KAogICAgICAgIGZhY3Rvcnk6ICgpID0+IFByb21pc2U8eyBkZWZhdWx0OiBUIH0+CiAgICApOiBMYXp5RXhvdGljQ29tcG9uZW50PFQ+OwoKICAgIC8vCiAgICAvLyBSZWFjdCBIb29rcwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIC8vIGJhc2VkIG9uIHRoZSBjb2RlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEzOTY4CgogICAgLy8gVW5saWtlIHRoZSBjbGFzcyBjb21wb25lbnQgc2V0U3RhdGUsIHRoZSB1cGRhdGVzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBwYXJ0aWFsCiAgICB0eXBlIFNldFN0YXRlQWN0aW9uPFM+ID0gUyB8ICgocHJldlN0YXRlOiBTKSA9PiBTKTsKICAgIC8vIHRoaXMgdGVjaG5pY2FsbHkgZG9lcyBhY2NlcHQgYSBzZWNvbmQgYXJndW1lbnQsIGJ1dCBpdCdzIGFscmVhZHkgdW5kZXIgYSBkZXByZWNhdGlvbiB3YXJuaW5nCiAgICAvLyBhbmQgaXQncyBub3QgZXZlbiByZWxlYXNlZCBzbyBwcm9iYWJseSBiZXR0ZXIgdG8gbm90IGRlZmluZSBpdC4KICAgIHR5cGUgRGlzcGF0Y2g8QT4gPSAodmFsdWU6IEEpID0+IHZvaWQ7CiAgICAvLyBTaW5jZSBhY3Rpb24gX2Nhbl8gYmUgdW5kZWZpbmVkLCBkaXNwYXRjaCBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMuCiAgICB0eXBlIERpc3BhdGNoV2l0aG91dEFjdGlvbiA9ICgpID0+IHZvaWQ7CiAgICAvLyBVbmxpa2UgcmVkdXgsIHRoZSBhY3Rpb25zIF9jYW5fIGJlIGFueXRoaW5nCiAgICB0eXBlIFJlZHVjZXI8UywgQT4gPSAocHJldlN0YXRlOiBTLCBhY3Rpb246IEEpID0+IFM7CiAgICAvLyBJZiB1c2VSZWR1Y2VyIGFjY2VwdHMgYSByZWR1Y2VyIHdpdGhvdXQgYWN0aW9uLCBkaXNwYXRjaCBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMuCiAgICB0eXBlIFJlZHVjZXJXaXRob3V0QWN0aW9uPFM+ID0gKHByZXZTdGF0ZTogUykgPT4gUzsKICAgIC8vIHR5cGVzIHVzZWQgdG8gdHJ5IGFuZCBwcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIHJlZHVjaW5nIFMKICAgIC8vIHRvIGEgc3VwZXJ0eXBlIGNvbW1vbiB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdXNlUmVkdWNlcigpCiAgICB0eXBlIFJlZHVjZXJTdGF0ZTxSIGV4dGVuZHMgUmVkdWNlcjxhbnksIGFueT4+ID0gUiBleHRlbmRzIFJlZHVjZXI8aW5mZXIgUywgYW55PiA/IFMgOiBuZXZlcjsKICAgIHR5cGUgUmVkdWNlckFjdGlvbjxSIGV4dGVuZHMgUmVkdWNlcjxhbnksIGFueT4+ID0gUiBleHRlbmRzIFJlZHVjZXI8YW55LCBpbmZlciBBPiA/IEEgOiBuZXZlcjsKICAgIC8vIFRoZSBpZGVudGl0eSBjaGVjayBpcyBkb25lIHdpdGggdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKE9iamVjdC5pcyksIHdoaWNoIGlzIHN0cmljdGVyIHRoYW4gPT09CiAgICB0eXBlIFJlZHVjZXJTdGF0ZVdpdGhvdXRBY3Rpb248UiBleHRlbmRzIFJlZHVjZXJXaXRob3V0QWN0aW9uPGFueT4+ID0KICAgICAgICBSIGV4dGVuZHMgUmVkdWNlcldpdGhvdXRBY3Rpb248aW5mZXIgUz4gPyBTIDogbmV2ZXI7CiAgICB0eXBlIERlcGVuZGVuY3lMaXN0ID0gUmVhZG9ubHlBcnJheTx1bmtub3duPjsKCiAgICAvLyBOT1RFOiBjYWxsYmFja3MgYXJlIF9vbmx5XyBhbGxvd2VkIHRvIHJldHVybiBlaXRoZXIgdm9pZCwgb3IgYSBkZXN0cnVjdG9yLgogICAgdHlwZSBFZmZlY3RDYWxsYmFjayA9ICgpID0+ICh2b2lkIHwgRGVzdHJ1Y3Rvcik7CgogICAgaW50ZXJmYWNlIE11dGFibGVSZWZPYmplY3Q8VD4gewogICAgICAgIGN1cnJlbnQ6IFQ7CiAgICB9CgogICAgLy8gVGhpcyB3aWxsIHRlY2huaWNhbGx5IHdvcmsgaWYgeW91IGdpdmUgYSBDb25zdW1lcjxUPiBvciBQcm92aWRlcjxUPiBidXQgaXQncyBkZXByZWNhdGVkIGFuZCB3YXJucwogICAgLyoqCiAgICAgKiBBY2NlcHRzIGEgY29udGV4dCBvYmplY3QgKHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGBSZWFjdC5jcmVhdGVDb250ZXh0YCkgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQKICAgICAqIGNvbnRleHQgdmFsdWUsIGFzIGdpdmVuIGJ5IHRoZSBuZWFyZXN0IGNvbnRleHQgcHJvdmlkZXIgZm9yIHRoZSBnaXZlbiBjb250ZXh0LgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlQ29udGV4dAogICAgICovCiAgICBmdW5jdGlvbiB1c2VDb250ZXh0PFQ+KGNvbnRleHQ6IENvbnRleHQ8VD4vKiwgKG5vdCBwdWJsaWMgQVBJKSBvYnNlcnZlZEJpdHM/OiBudW1iZXJ8Ym9vbGVhbiAqLyk6IFQ7CiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdGF0ZWZ1bCB2YWx1ZSwgYW5kIGEgZnVuY3Rpb24gdG8gdXBkYXRlIGl0LgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlU3RhdGUKICAgICAqLwogICAgZnVuY3Rpb24gdXNlU3RhdGU8Uz4oaW5pdGlhbFN0YXRlOiBTIHwgKCgpID0+IFMpKTogW1MsIERpc3BhdGNoPFNldFN0YXRlQWN0aW9uPFM+Pl07CiAgICAvLyBjb252ZW5pZW5jZSBvdmVybG9hZCB3aGVuIGZpcnN0IGFyZ3VtZW50IGlzIG9taXR0ZWQKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0YXRlZnVsIHZhbHVlLCBhbmQgYSBmdW5jdGlvbiB0byB1cGRhdGUgaXQuCiAgICAgKgogICAgICogQHZlcnNpb24gMTYuOC4wCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VTdGF0ZQogICAgICovCiAgICBmdW5jdGlvbiB1c2VTdGF0ZTxTID0gdW5kZWZpbmVkPigpOiBbUyB8IHVuZGVmaW5lZCwgRGlzcGF0Y2g8U2V0U3RhdGVBY3Rpb248UyB8IHVuZGVmaW5lZD4+XTsKICAgIC8qKgogICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gYHVzZVN0YXRlYC4KICAgICAqCiAgICAgKiBgdXNlUmVkdWNlcmAgaXMgdXN1YWxseSBwcmVmZXJhYmxlIHRvIGB1c2VTdGF0ZWAgd2hlbiB5b3UgaGF2ZSBjb21wbGV4IHN0YXRlIGxvZ2ljIHRoYXQgaW52b2x2ZXMKICAgICAqIG11bHRpcGxlIHN1Yi12YWx1ZXMuIEl0IGFsc28gbGV0cyB5b3Ugb3B0aW1pemUgcGVyZm9ybWFuY2UgZm9yIGNvbXBvbmVudHMgdGhhdCB0cmlnZ2VyIGRlZXAKICAgICAqIHVwZGF0ZXMgYmVjYXVzZSB5b3UgY2FuIHBhc3MgYGRpc3BhdGNoYCBkb3duIGluc3RlYWQgb2YgY2FsbGJhY2tzLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlUmVkdWNlcgogICAgICovCiAgICAvLyBvdmVybG9hZCB3aGVyZSBkaXNwYXRjaCBjb3VsZCBhY2NlcHQgMCBhcmd1bWVudHMuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyV2l0aG91dEFjdGlvbjxhbnk+LCBJPigKICAgICAgICByZWR1Y2VyOiBSLAogICAgICAgIGluaXRpYWxpemVyQXJnOiBJLAogICAgICAgIGluaXRpYWxpemVyOiAoYXJnOiBJKSA9PiBSZWR1Y2VyU3RhdGVXaXRob3V0QWN0aW9uPFI+CiAgICApOiBbUmVkdWNlclN0YXRlV2l0aG91dEFjdGlvbjxSPiwgRGlzcGF0Y2hXaXRob3V0QWN0aW9uXTsKICAgIC8qKgogICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gYHVzZVN0YXRlYC4KICAgICAqCiAgICAgKiBgdXNlUmVkdWNlcmAgaXMgdXN1YWxseSBwcmVmZXJhYmxlIHRvIGB1c2VTdGF0ZWAgd2hlbiB5b3UgaGF2ZSBjb21wbGV4IHN0YXRlIGxvZ2ljIHRoYXQgaW52b2x2ZXMKICAgICAqIG11bHRpcGxlIHN1Yi12YWx1ZXMuIEl0IGFsc28gbGV0cyB5b3Ugb3B0aW1pemUgcGVyZm9ybWFuY2UgZm9yIGNvbXBvbmVudHMgdGhhdCB0cmlnZ2VyIGRlZXAKICAgICAqIHVwZGF0ZXMgYmVjYXVzZSB5b3UgY2FuIHBhc3MgYGRpc3BhdGNoYCBkb3duIGluc3RlYWQgb2YgY2FsbGJhY2tzLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlUmVkdWNlcgogICAgICovCiAgICAvLyBvdmVybG9hZCB3aGVyZSBkaXNwYXRjaCBjb3VsZCBhY2NlcHQgMCBhcmd1bWVudHMuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyV2l0aG91dEFjdGlvbjxhbnk+PigKICAgICAgICByZWR1Y2VyOiBSLAogICAgICAgIGluaXRpYWxpemVyQXJnOiBSZWR1Y2VyU3RhdGVXaXRob3V0QWN0aW9uPFI+LAogICAgICAgIGluaXRpYWxpemVyPzogdW5kZWZpbmVkCiAgICApOiBbUmVkdWNlclN0YXRlV2l0aG91dEFjdGlvbjxSPiwgRGlzcGF0Y2hXaXRob3V0QWN0aW9uXTsKICAgIC8qKgogICAgICogQW4gYWx0ZXJuYXRpdmUgdG8gYHVzZVN0YXRlYC4KICAgICAqCiAgICAgKiBgdXNlUmVkdWNlcmAgaXMgdXN1YWxseSBwcmVmZXJhYmxlIHRvIGB1c2VTdGF0ZWAgd2hlbiB5b3UgaGF2ZSBjb21wbGV4IHN0YXRlIGxvZ2ljIHRoYXQgaW52b2x2ZXMKICAgICAqIG11bHRpcGxlIHN1Yi12YWx1ZXMuIEl0IGFsc28gbGV0cyB5b3Ugb3B0aW1pemUgcGVyZm9ybWFuY2UgZm9yIGNvbXBvbmVudHMgdGhhdCB0cmlnZ2VyIGRlZXAKICAgICAqIHVwZGF0ZXMgYmVjYXVzZSB5b3UgY2FuIHBhc3MgYGRpc3BhdGNoYCBkb3duIGluc3RlYWQgb2YgY2FsbGJhY2tzLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlUmVkdWNlcgogICAgICovCiAgICAvLyBvdmVybG9hZCB3aGVyZSAiSSIgbWF5IGJlIGEgc3Vic2V0IG9mIFJlZHVjZXJTdGF0ZTxSPjsgdXNlZCB0byBwcm92aWRlIGF1dG9jb21wbGV0aW9uLgogICAgLy8gSWYgIkkiIG1hdGNoZXMgUmVkdWNlclN0YXRlPFI+IGV4YWN0bHkgdGhlbiB0aGUgbGFzdCBvdmVybG9hZCB3aWxsIGFsbG93IGluaXRpYWxpemVyIHRvIGJlIG9taXR0ZWQuCiAgICAvLyB0aGUgbGFzdCBvdmVybG9hZCBlZmZlY3RpdmVseSBiZWhhdmVzIGFzIGlmIHRoZSBpZGVudGl0eSBmdW5jdGlvbiAoeCA9PiB4KSBpcyB0aGUgaW5pdGlhbGl6ZXIuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyPGFueSwgYW55PiwgST4oCiAgICAgICAgcmVkdWNlcjogUiwKICAgICAgICBpbml0aWFsaXplckFyZzogSSAmIFJlZHVjZXJTdGF0ZTxSPiwKICAgICAgICBpbml0aWFsaXplcjogKGFyZzogSSAmIFJlZHVjZXJTdGF0ZTxSPikgPT4gUmVkdWNlclN0YXRlPFI+CiAgICApOiBbUmVkdWNlclN0YXRlPFI+LCBEaXNwYXRjaDxSZWR1Y2VyQWN0aW9uPFI+Pl07CiAgICAvKioKICAgICAqIEFuIGFsdGVybmF0aXZlIHRvIGB1c2VTdGF0ZWAuCiAgICAgKgogICAgICogYHVzZVJlZHVjZXJgIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0byBgdXNlU3RhdGVgIHdoZW4geW91IGhhdmUgY29tcGxleCBzdGF0ZSBsb2dpYyB0aGF0IGludm9sdmVzCiAgICAgKiBtdWx0aXBsZSBzdWItdmFsdWVzLiBJdCBhbHNvIGxldHMgeW91IG9wdGltaXplIHBlcmZvcm1hbmNlIGZvciBjb21wb25lbnRzIHRoYXQgdHJpZ2dlciBkZWVwCiAgICAgKiB1cGRhdGVzIGJlY2F1c2UgeW91IGNhbiBwYXNzIGBkaXNwYXRjaGAgZG93biBpbnN0ZWFkIG9mIGNhbGxiYWNrcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZHVjZXIKICAgICAqLwogICAgLy8gb3ZlcmxvYWQgZm9yIGZyZWUgIkkiOyBhbGwgZ29lcyBhcyBsb25nIGFzIGluaXRpYWxpemVyIGNvbnZlcnRzIGl0IGludG8gIlJlZHVjZXJTdGF0ZTxSPiIuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyPGFueSwgYW55PiwgST4oCiAgICAgICAgcmVkdWNlcjogUiwKICAgICAgICBpbml0aWFsaXplckFyZzogSSwKICAgICAgICBpbml0aWFsaXplcjogKGFyZzogSSkgPT4gUmVkdWNlclN0YXRlPFI+CiAgICApOiBbUmVkdWNlclN0YXRlPFI+LCBEaXNwYXRjaDxSZWR1Y2VyQWN0aW9uPFI+Pl07CiAgICAvKioKICAgICAqIEFuIGFsdGVybmF0aXZlIHRvIGB1c2VTdGF0ZWAuCiAgICAgKgogICAgICogYHVzZVJlZHVjZXJgIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0byBgdXNlU3RhdGVgIHdoZW4geW91IGhhdmUgY29tcGxleCBzdGF0ZSBsb2dpYyB0aGF0IGludm9sdmVzCiAgICAgKiBtdWx0aXBsZSBzdWItdmFsdWVzLiBJdCBhbHNvIGxldHMgeW91IG9wdGltaXplIHBlcmZvcm1hbmNlIGZvciBjb21wb25lbnRzIHRoYXQgdHJpZ2dlciBkZWVwCiAgICAgKiB1cGRhdGVzIGJlY2F1c2UgeW91IGNhbiBwYXNzIGBkaXNwYXRjaGAgZG93biBpbnN0ZWFkIG9mIGNhbGxiYWNrcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZHVjZXIKICAgICAqLwoKICAgIC8vIEknbSBub3Qgc3VyZSBpZiBJIGtlZXAgdGhpcyAyLWFyeSBvciBpZiBJIG1ha2UgaXQgKDIsMyktYXJ5OyBpdCdzIGN1cnJlbnRseSAoMiwzKS1hcnkuCiAgICAvLyBUaGUgRmxvdyB0eXBlcyBkbyBoYXZlIGFuIG92ZXJsb2FkIGZvciAzLWFyeSBpbnZvY2F0aW9uIHdpdGggdW5kZWZpbmVkIGluaXRpYWxpemVyLgoKICAgIC8vIE5PVEU6IHdpdGhvdXQgdGhlIFJlZHVjZXJTdGF0ZSBpbmRpcmVjdGlvbiwgVHlwZVNjcmlwdCB3b3VsZCByZWR1Y2UgUyB0byBiZSB0aGUgbW9zdCBjb21tb24KICAgIC8vIHN1cGVydHlwZSBiZXR3ZWVuIHRoZSByZWR1Y2VyJ3MgcmV0dXJuIHR5cGUgYW5kIHRoZSBpbml0aWFsU3RhdGUgKG9yIHRoZSBpbml0aWFsaXplcidzIHJldHVybiB0eXBlKSwKICAgIC8vIHdoaWNoIHdvdWxkIHByZXZlbnQgYXV0b2NvbXBsZXRpb24gZnJvbSBldmVyIHdvcmtpbmcuCgogICAgLy8gVE9ETzogZG91YmxlLWNoZWNrIGlmIHRoaXMgd2VpcmQgb3ZlcmxvYWQgbG9naWMgaXMgbmVjZXNzYXJ5LiBJdCBpcyBwb3NzaWJsZSBpdCdzIGVpdGhlciBhIGJ1ZwogICAgLy8gaW4gb2xkZXIgdmVyc2lvbnMsIG9yIGEgcmVncmVzc2lvbiBpbiBuZXdlciB2ZXJzaW9ucyBvZiB0aGUgdHlwZXNjcmlwdCBjb21wbGV0aW9uIHNlcnZpY2UuCiAgICBmdW5jdGlvbiB1c2VSZWR1Y2VyPFIgZXh0ZW5kcyBSZWR1Y2VyPGFueSwgYW55Pj4oCiAgICAgICAgcmVkdWNlcjogUiwKICAgICAgICBpbml0aWFsU3RhdGU6IFJlZHVjZXJTdGF0ZTxSPiwKICAgICAgICBpbml0aWFsaXplcj86IHVuZGVmaW5lZAogICAgKTogW1JlZHVjZXJTdGF0ZTxSPiwgRGlzcGF0Y2g8UmVkdWNlckFjdGlvbjxSPj5dOwogICAgLyoqCiAgICAgKiBgdXNlUmVmYCByZXR1cm5zIGEgbXV0YWJsZSByZWYgb2JqZWN0IHdob3NlIGAuY3VycmVudGAgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIHBhc3NlZCBhcmd1bWVudAogICAgICogKGBpbml0aWFsVmFsdWVgKS4gVGhlIHJldHVybmVkIG9iamVjdCB3aWxsIHBlcnNpc3QgZm9yIHRoZSBmdWxsIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuCiAgICAgKgogICAgICogTm90ZSB0aGF0IGB1c2VSZWYoKWAgaXMgdXNlZnVsIGZvciBtb3JlIHRoYW4gdGhlIGByZWZgIGF0dHJpYnV0ZS4gSXTigJlzIGhhbmR5IGZvciBrZWVwaW5nIGFueSBtdXRhYmxlCiAgICAgKiB2YWx1ZSBhcm91bmQgc2ltaWxhciB0byBob3cgeW914oCZZCB1c2UgaW5zdGFuY2UgZmllbGRzIGluIGNsYXNzZXMuCiAgICAgKgogICAgICogQHZlcnNpb24gMTYuOC4wCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VSZWYKICAgICAqLwogICAgZnVuY3Rpb24gdXNlUmVmPFQ+KGluaXRpYWxWYWx1ZTogVCk6IE11dGFibGVSZWZPYmplY3Q8VD47CiAgICAvLyBjb252ZW5pZW5jZSBvdmVybG9hZCBmb3IgcmVmcyBnaXZlbiBhcyBhIHJlZiBwcm9wIGFzIHRoZXkgdHlwaWNhbGx5IHN0YXJ0IHdpdGggYSBudWxsIHZhbHVlCiAgICAvKioKICAgICAqIGB1c2VSZWZgIHJldHVybnMgYSBtdXRhYmxlIHJlZiBvYmplY3Qgd2hvc2UgYC5jdXJyZW50YCBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCB0byB0aGUgcGFzc2VkIGFyZ3VtZW50CiAgICAgKiAoYGluaXRpYWxWYWx1ZWApLiBUaGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgcGVyc2lzdCBmb3IgdGhlIGZ1bGwgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBOb3RlIHRoYXQgYHVzZVJlZigpYCBpcyB1c2VmdWwgZm9yIG1vcmUgdGhhbiB0aGUgYHJlZmAgYXR0cmlidXRlLiBJdOKAmXMgaGFuZHkgZm9yIGtlZXBpbmcgYW55IG11dGFibGUKICAgICAqIHZhbHVlIGFyb3VuZCBzaW1pbGFyIHRvIGhvdyB5b3XigJlkIHVzZSBpbnN0YW5jZSBmaWVsZHMgaW4gY2xhc3Nlcy4KICAgICAqCiAgICAgKiBVc2FnZSBub3RlOiBpZiB5b3UgbmVlZCB0aGUgcmVzdWx0IG9mIHVzZVJlZiB0byBiZSBkaXJlY3RseSBtdXRhYmxlLCBpbmNsdWRlIGB8IG51bGxgIGluIHRoZSB0eXBlCiAgICAgKiBvZiB0aGUgZ2VuZXJpYyBhcmd1bWVudC4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZgogICAgICovCiAgICBmdW5jdGlvbiB1c2VSZWY8VD4oaW5pdGlhbFZhbHVlOiBUfG51bGwpOiBSZWZPYmplY3Q8VD47CiAgICAvLyBjb252ZW5pZW5jZSBvdmVybG9hZCBmb3IgcG90ZW50aWFsbHkgdW5kZWZpbmVkIGluaXRpYWxWYWx1ZSAvIGNhbGwgd2l0aCAwIGFyZ3VtZW50cwogICAgLy8gaGFzIGEgZGVmYXVsdCB0byBzdG9wIGl0IGZyb20gZGVmYXVsdGluZyB0byB7fSBpbnN0ZWFkCiAgICAvKioKICAgICAqIGB1c2VSZWZgIHJldHVybnMgYSBtdXRhYmxlIHJlZiBvYmplY3Qgd2hvc2UgYC5jdXJyZW50YCBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCB0byB0aGUgcGFzc2VkIGFyZ3VtZW50CiAgICAgKiAoYGluaXRpYWxWYWx1ZWApLiBUaGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgcGVyc2lzdCBmb3IgdGhlIGZ1bGwgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4KICAgICAqCiAgICAgKiBOb3RlIHRoYXQgYHVzZVJlZigpYCBpcyB1c2VmdWwgZm9yIG1vcmUgdGhhbiB0aGUgYHJlZmAgYXR0cmlidXRlLiBJdOKAmXMgaGFuZHkgZm9yIGtlZXBpbmcgYW55IG11dGFibGUKICAgICAqIHZhbHVlIGFyb3VuZCBzaW1pbGFyIHRvIGhvdyB5b3XigJlkIHVzZSBpbnN0YW5jZSBmaWVsZHMgaW4gY2xhc3Nlcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVJlZgogICAgICovCiAgICBmdW5jdGlvbiB1c2VSZWY8VCA9IHVuZGVmaW5lZD4oKTogTXV0YWJsZVJlZk9iamVjdDxUIHwgdW5kZWZpbmVkPjsKICAgIC8qKgogICAgICogVGhlIHNpZ25hdHVyZSBpcyBpZGVudGljYWwgdG8gYHVzZUVmZmVjdGAsIGJ1dCBpdCBmaXJlcyBzeW5jaHJvbm91c2x5IGFmdGVyIGFsbCBET00gbXV0YXRpb25zLgogICAgICogVXNlIHRoaXMgdG8gcmVhZCBsYXlvdXQgZnJvbSB0aGUgRE9NIGFuZCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlci4gVXBkYXRlcyBzY2hlZHVsZWQgaW5zaWRlCiAgICAgKiBgdXNlTGF5b3V0RWZmZWN0YCB3aWxsIGJlIGZsdXNoZWQgc3luY2hyb25vdXNseSwgYmVmb3JlIHRoZSBicm93c2VyIGhhcyBhIGNoYW5jZSB0byBwYWludC4KICAgICAqCiAgICAgKiBQcmVmZXIgdGhlIHN0YW5kYXJkIGB1c2VFZmZlY3RgIHdoZW4gcG9zc2libGUgdG8gYXZvaWQgYmxvY2tpbmcgdmlzdWFsIHVwZGF0ZXMuCiAgICAgKgogICAgICogSWYgeW914oCZcmUgbWlncmF0aW5nIGNvZGUgZnJvbSBhIGNsYXNzIGNvbXBvbmVudCwgYHVzZUxheW91dEVmZmVjdGAgZmlyZXMgaW4gdGhlIHNhbWUgcGhhc2UgYXMKICAgICAqIGBjb21wb25lbnREaWRNb3VudGAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlTGF5b3V0RWZmZWN0CiAgICAgKi8KICAgIGZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChlZmZlY3Q6IEVmZmVjdENhbGxiYWNrLCBkZXBzPzogRGVwZW5kZW5jeUxpc3QpOiB2b2lkOwogICAgLyoqCiAgICAgKiBBY2NlcHRzIGEgZnVuY3Rpb24gdGhhdCBjb250YWlucyBpbXBlcmF0aXZlLCBwb3NzaWJseSBlZmZlY3RmdWwgY29kZS4KICAgICAqCiAgICAgKiBAcGFyYW0gZWZmZWN0IEltcGVyYXRpdmUgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuIGEgY2xlYW51cCBmdW5jdGlvbgogICAgICogQHBhcmFtIGRlcHMgSWYgcHJlc2VudCwgZWZmZWN0IHdpbGwgb25seSBhY3RpdmF0ZSBpZiB0aGUgdmFsdWVzIGluIHRoZSBsaXN0IGNoYW5nZS4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZUVmZmVjdAogICAgICovCiAgICBmdW5jdGlvbiB1c2VFZmZlY3QoZWZmZWN0OiBFZmZlY3RDYWxsYmFjaywgZGVwcz86IERlcGVuZGVuY3lMaXN0KTogdm9pZDsKICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgYWNjZXB0IHN0cmluZ3MsIGJ1dCB0aGlzIHdpbGwgaGF2ZSB0byBiZSBmaXhlZCBieSByZW1vdmluZyBzdHJpbmdzIGZyb20gdHlwZSBSZWY8VD4KICAgIC8qKgogICAgICogYHVzZUltcGVyYXRpdmVIYW5kbGVgIGN1c3RvbWl6ZXMgdGhlIGluc3RhbmNlIHZhbHVlIHRoYXQgaXMgZXhwb3NlZCB0byBwYXJlbnQgY29tcG9uZW50cyB3aGVuIHVzaW5nCiAgICAgKiBgcmVmYC4gQXMgYWx3YXlzLCBpbXBlcmF0aXZlIGNvZGUgdXNpbmcgcmVmcyBzaG91bGQgYmUgYXZvaWRlZCBpbiBtb3N0IGNhc2VzLgogICAgICoKICAgICAqIGB1c2VJbXBlcmF0aXZlSGFuZGxlYCBzaG91bGQgYmUgdXNlZCB3aXRoIGBSZWFjdC5mb3J3YXJkUmVmYC4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZUltcGVyYXRpdmVIYW5kbGUKICAgICAqLwogICAgZnVuY3Rpb24gdXNlSW1wZXJhdGl2ZUhhbmRsZTxULCBSIGV4dGVuZHMgVD4ocmVmOiBSZWY8VD58dW5kZWZpbmVkLCBpbml0OiAoKSA9PiBSLCBkZXBzPzogRGVwZW5kZW5jeUxpc3QpOiB2b2lkOwogICAgLy8gSSBtYWRlICdpbnB1dHMnIHJlcXVpcmVkIGhlcmUgYW5kIGluIHVzZU1lbW8gYXMgdGhlcmUncyBubyBwb2ludCB0byBtZW1vaXppbmcgd2l0aG91dCB0aGUgbWVtb2l6YXRpb24ga2V5CiAgICAvLyB1c2VDYWxsYmFjayhYKSBpcyBpZGVudGljYWwgdG8ganVzdCB1c2luZyBYLCB1c2VNZW1vKCgpID0+IFkpIGlzIGlkZW50aWNhbCB0byBqdXN0IHVzaW5nIFkuCiAgICAvKioKICAgICAqIGB1c2VDYWxsYmFja2Agd2lsbCByZXR1cm4gYSBtZW1vaXplZCB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFjayB0aGF0IG9ubHkgY2hhbmdlcyBpZiBvbmUgb2YgdGhlIGBpbnB1dHNgCiAgICAgKiBoYXMgY2hhbmdlZC4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZUNhbGxiYWNrCiAgICAgKi8KICAgIC8vIEEgc3BlY2lmaWMgZnVuY3Rpb24gdHlwZSB3b3VsZCBub3QgdHJpZ2dlciBpbXBsaWNpdCBhbnkuCiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzUyODczI2lzc3VlY29tbWVudC04NDU4MDY0MzUgZm9yIGEgY29tcGFyaXNvbiBiZXR3ZWVuIGBGdW5jdGlvbmAgYW5kIG1vcmUgc3BlY2lmaWMgdHlwZXMuCiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgYmFuLXR5cGVzCiAgICBmdW5jdGlvbiB1c2VDYWxsYmFjazxUIGV4dGVuZHMgRnVuY3Rpb24+KGNhbGxiYWNrOiBULCBkZXBzOiBEZXBlbmRlbmN5TGlzdCk6IFQ7CiAgICAvKioKICAgICAqIGB1c2VNZW1vYCB3aWxsIG9ubHkgcmVjb21wdXRlIHRoZSBtZW1vaXplZCB2YWx1ZSB3aGVuIG9uZSBvZiB0aGUgYGRlcHNgIGhhcyBjaGFuZ2VkLgogICAgICoKICAgICAqIEB2ZXJzaW9uIDE2LjguMAogICAgICogQHNlZSBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlTWVtbwogICAgICovCiAgICAvLyBhbGxvdyB1bmRlZmluZWQsIGJ1dCBkb24ndCBtYWtlIGl0IG9wdGlvbmFsIGFzIHRoYXQgaXMgdmVyeSBsaWtlbHkgYSBtaXN0YWtlCiAgICBmdW5jdGlvbiB1c2VNZW1vPFQ+KGZhY3Rvcnk6ICgpID0+IFQsIGRlcHM6IERlcGVuZGVuY3lMaXN0IHwgdW5kZWZpbmVkKTogVDsKICAgIC8qKgogICAgICogYHVzZURlYnVnVmFsdWVgIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgYSBsYWJlbCBmb3IgY3VzdG9tIGhvb2tzIGluIFJlYWN0IERldlRvb2xzLgogICAgICoKICAgICAqIE5PVEU6IFdlIGRvbuKAmXQgcmVjb21tZW5kIGFkZGluZyBkZWJ1ZyB2YWx1ZXMgdG8gZXZlcnkgY3VzdG9tIGhvb2suCiAgICAgKiBJdOKAmXMgbW9zdCB2YWx1YWJsZSBmb3IgY3VzdG9tIGhvb2tzIHRoYXQgYXJlIHBhcnQgb2Ygc2hhcmVkIGxpYnJhcmllcy4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAxNi44LjAKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZURlYnVnVmFsdWUKICAgICAqLwogICAgLy8gdGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBob29rIGlzIGl0c2VsZiBkZXJpdmVkIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgYXQgcnVudGltZToKICAgIC8vIGl0J3MganVzdCB0aGUgZnVuY3Rpb24gbmFtZSB3aXRob3V0IHRoZSAidXNlIiBwcmVmaXguCiAgICBmdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlPFQ+KHZhbHVlOiBULCBmb3JtYXQ/OiAodmFsdWU6IFQpID0+IGFueSk6IHZvaWQ7CgogICAgLy8gbXVzdCBiZSBzeW5jaHJvbm91cwogICAgZXhwb3J0IHR5cGUgVHJhbnNpdGlvbkZ1bmN0aW9uID0gKCkgPT4gVm9pZE9yVW5kZWZpbmVkT25seTsKICAgIC8vIHN0cmFuZ2UgZGVmaW5pdGlvbiB0byBhbGxvdyB2c2NvZGUgdG8gc2hvdyBkb2N1bWVudGF0aW9uIG9uIHRoZSBpbnZvY2F0aW9uCiAgICBleHBvcnQgaW50ZXJmYWNlIFRyYW5zaXRpb25TdGFydEZ1bmN0aW9uIHsKICAgICAgICAvKioKICAgICAgICAgKiBTdGF0ZSB1cGRhdGVzIGNhdXNlZCBpbnNpZGUgdGhlIGNhbGxiYWNrIGFyZSBhbGxvd2VkIHRvIGJlIGRlZmVycmVkLgogICAgICAgICAqCiAgICAgICAgICogKipJZiBzb21lIHN0YXRlIHVwZGF0ZSBjYXVzZXMgYSBjb21wb25lbnQgdG8gc3VzcGVuZCwgdGhhdCBzdGF0ZSB1cGRhdGUgc2hvdWxkIGJlIHdyYXBwZWQgaW4gYSB0cmFuc2l0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBfc3luY2hyb25vdXNfIGZ1bmN0aW9uIHdoaWNoIGNhdXNlcyBzdGF0ZSB1cGRhdGVzIHRoYXQgY2FuIGJlIGRlZmVycmVkLgogICAgICAgICAqLwogICAgICAgIChjYWxsYmFjazogVHJhbnNpdGlvbkZ1bmN0aW9uKTogdm9pZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBkZWZlcnJlZCB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSB0aGF0IG1heSDigJxsYWcgYmVoaW5k4oCdIGl0LgogICAgICoKICAgICAqIFRoaXMgaXMgY29tbW9ubHkgdXNlZCB0byBrZWVwIHRoZSBpbnRlcmZhY2UgcmVzcG9uc2l2ZSB3aGVuIHlvdSBoYXZlIHNvbWV0aGluZyB0aGF0IHJlbmRlcnMgaW1tZWRpYXRlbHkKICAgICAqIGJhc2VkIG9uIHVzZXIgaW5wdXQgYW5kIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIHdhaXQgZm9yIGEgZGF0YSBmZXRjaC4KICAgICAqCiAgICAgKiBBIGdvb2QgZXhhbXBsZSBvZiB0aGlzIGlzIGEgdGV4dCBpbnB1dC4KICAgICAqCiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRoYXQgaXMgZ29pbmcgdG8gYmUgZGVmZXJyZWQKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VEZWZlcnJlZFZhbHVlCiAgICAgKi8KICAgIGV4cG9ydCBmdW5jdGlvbiB1c2VEZWZlcnJlZFZhbHVlPFQ+KHZhbHVlOiBUKTogVDsKCiAgICAvKioKICAgICAqIEFsbG93cyBjb21wb25lbnRzIHRvIGF2b2lkIHVuZGVzaXJhYmxlIGxvYWRpbmcgc3RhdGVzIGJ5IHdhaXRpbmcgZm9yIGNvbnRlbnQgdG8gbG9hZAogICAgICogYmVmb3JlIHRyYW5zaXRpb25pbmcgdG8gdGhlIG5leHQgc2NyZWVuLiBJdCBhbHNvIGFsbG93cyBjb21wb25lbnRzIHRvIGRlZmVyIHNsb3dlciwKICAgICAqIGRhdGEgZmV0Y2hpbmcgdXBkYXRlcyB1bnRpbCBzdWJzZXF1ZW50IHJlbmRlcnMgc28gdGhhdCBtb3JlIGNydWNpYWwgdXBkYXRlcyBjYW4gYmUKICAgICAqIHJlbmRlcmVkIGltbWVkaWF0ZWx5LgogICAgICoKICAgICAqIFRoZSBgdXNlVHJhbnNpdGlvbmAgaG9vayByZXR1cm5zIHR3byB2YWx1ZXMgaW4gYW4gYXJyYXkuCiAgICAgKgogICAgICogVGhlIGZpcnN0IGlzIGEgYm9vbGVhbiwgUmVhY3TigJlzIHdheSBvZiBpbmZvcm1pbmcgdXMgd2hldGhlciB3ZeKAmXJlIHdhaXRpbmcgZm9yIHRoZSB0cmFuc2l0aW9uIHRvIGZpbmlzaC4KICAgICAqIFRoZSBzZWNvbmQgaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY2FsbGJhY2suIFdlIGNhbiB1c2UgaXQgdG8gdGVsbCBSZWFjdCB3aGljaCBzdGF0ZSB3ZSB3YW50IHRvIGRlZmVyLgogICAgICoKICAgICAqICoqSWYgc29tZSBzdGF0ZSB1cGRhdGUgY2F1c2VzIGEgY29tcG9uZW50IHRvIHN1c3BlbmQsIHRoYXQgc3RhdGUgdXBkYXRlIHNob3VsZCBiZSB3cmFwcGVkIGluIGEgdHJhbnNpdGlvbi4qKmAKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VUcmFuc2l0aW9uCiAgICAgKi8KICAgIGV4cG9ydCBmdW5jdGlvbiB1c2VUcmFuc2l0aW9uKCk6IFtib29sZWFuLCBUcmFuc2l0aW9uU3RhcnRGdW5jdGlvbl07CgogICAgLyoqCiAgICAgKiBTaW1pbGFyIHRvIGB1c2VUcmFuc2l0aW9uYCBidXQgYWxsb3dzIHVzZXMgd2hlcmUgaG9va3MgYXJlIG5vdCBhdmFpbGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxiYWNrIEEgX3N5bmNocm9ub3VzXyBmdW5jdGlvbiB3aGljaCBjYXVzZXMgc3RhdGUgdXBkYXRlcyB0aGF0IGNhbiBiZSBkZWZlcnJlZC4KICAgICAqLwogICAgZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihzY29wZTogVHJhbnNpdGlvbkZ1bmN0aW9uKTogdm9pZDsKCiAgICBleHBvcnQgZnVuY3Rpb24gdXNlSWQoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQHBhcmFtIGVmZmVjdCBJbXBlcmF0aXZlIGZ1bmN0aW9uIHRoYXQgY2FuIHJldHVybiBhIGNsZWFudXAgZnVuY3Rpb24KICAgICAqIEBwYXJhbSBkZXBzIElmIHByZXNlbnQsIGVmZmVjdCB3aWxsIG9ubHkgYWN0aXZhdGUgaWYgdGhlIHZhbHVlcyBpbiB0aGUgbGlzdCBjaGFuZ2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMTkxMwogICAgICovCiAgICAgZXhwb3J0IGZ1bmN0aW9uIHVzZUluc2VydGlvbkVmZmVjdChlZmZlY3Q6IEVmZmVjdENhbGxiYWNrLCBkZXBzPzogRGVwZW5kZW5jeUxpc3QpOiB2b2lkOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN1YnNjcmliZQogICAgICogQHBhcmFtIGdldFNuYXBzaG90CiAgICAgKgogICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3R3Zy9yZWFjdC0xOC9kaXNjdXNzaW9ucy84NgogICAgICovCiAgICAvLyBrZWVwIGluIHN5bmMgd2l0aCBgdXNlU3luY0V4dGVybmFsU3RvcmVgIGZyb20gYHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlYAogICAgZXhwb3J0IGZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlPFNuYXBzaG90PigKICAgICAgICBzdWJzY3JpYmU6IChvblN0b3JlQ2hhbmdlOiAoKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkLAogICAgICAgIGdldFNuYXBzaG90OiAoKSA9PiBTbmFwc2hvdCwKICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdD86ICgpID0+IFNuYXBzaG90LAogICAgKTogU25hcHNob3Q7CgogICAgLy8KICAgIC8vIEV2ZW50IFN5c3RlbQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gVE9ETzogY2hhbmdlIGFueSB0byB1bmtub3duIHdoZW4gbW92aW5nIHRvIFRTIHYzCiAgICBpbnRlcmZhY2UgQmFzZVN5bnRoZXRpY0V2ZW50PEUgPSBvYmplY3QsIEMgPSBhbnksIFQgPSBhbnk+IHsKICAgICAgICBuYXRpdmVFdmVudDogRTsKICAgICAgICBjdXJyZW50VGFyZ2V0OiBDOwogICAgICAgIHRhcmdldDogVDsKICAgICAgICBidWJibGVzOiBib29sZWFuOwogICAgICAgIGNhbmNlbGFibGU6IGJvb2xlYW47CiAgICAgICAgZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjsKICAgICAgICBldmVudFBoYXNlOiBudW1iZXI7CiAgICAgICAgaXNUcnVzdGVkOiBib29sZWFuOwogICAgICAgIHByZXZlbnREZWZhdWx0KCk6IHZvaWQ7CiAgICAgICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47CiAgICAgICAgc3RvcFByb3BhZ2F0aW9uKCk6IHZvaWQ7CiAgICAgICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTogYm9vbGVhbjsKICAgICAgICBwZXJzaXN0KCk6IHZvaWQ7CiAgICAgICAgdGltZVN0YW1wOiBudW1iZXI7CiAgICAgICAgdHlwZTogc3RyaW5nOwogICAgfQoKICAgIC8qKgogICAgICogY3VycmVudFRhcmdldCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IG9uIHdoaWNoIHRoZSBldmVudCBsaXN0ZW5lciBpcyByZWdpc3RlcmVkLgogICAgICoKICAgICAqIHRhcmdldCAtIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGZyb20gd2hpY2ggdGhlIGV2ZW50IHdhcyBvcmlnaW5hbGx5IGRpc3BhdGNoZWQuCiAgICAgKiBUaGlzIG1pZ2h0IGJlIGEgY2hpbGQgZWxlbWVudCB0byB0aGUgZWxlbWVudCBvbiB3aGljaCB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgcmVnaXN0ZXJlZC4KICAgICAqIElmIHlvdSB0aG91Z2h0IHRoaXMgc2hvdWxkIGJlIGBFdmVudFRhcmdldCAmIFRgLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvaXNzdWVzLzExNTA4I2lzc3VlY29tbWVudC0yNTYwNDU2ODIKICAgICAqLwogICAgaW50ZXJmYWNlIFN5bnRoZXRpY0V2ZW50PFQgPSBFbGVtZW50LCBFID0gRXZlbnQ+IGV4dGVuZHMgQmFzZVN5bnRoZXRpY0V2ZW50PEUsIEV2ZW50VGFyZ2V0ICYgVCwgRXZlbnRUYXJnZXQ+IHt9CgogICAgaW50ZXJmYWNlIENsaXBib2FyZEV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFQsIE5hdGl2ZUNsaXBib2FyZEV2ZW50PiB7CiAgICAgICAgY2xpcGJvYXJkRGF0YTogRGF0YVRyYW5zZmVyOwogICAgfQoKICAgIGludGVyZmFjZSBDb21wb3NpdGlvbkV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFQsIE5hdGl2ZUNvbXBvc2l0aW9uRXZlbnQ+IHsKICAgICAgICBkYXRhOiBzdHJpbmc7CiAgICB9CgogICAgaW50ZXJmYWNlIERyYWdFdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBNb3VzZUV2ZW50PFQsIE5hdGl2ZURyYWdFdmVudD4gewogICAgICAgIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyOwogICAgfQoKICAgIGludGVyZmFjZSBQb2ludGVyRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgTW91c2VFdmVudDxULCBOYXRpdmVQb2ludGVyRXZlbnQ+IHsKICAgICAgICBwb2ludGVySWQ6IG51bWJlcjsKICAgICAgICBwcmVzc3VyZTogbnVtYmVyOwogICAgICAgIHRhbmdlbnRpYWxQcmVzc3VyZTogbnVtYmVyOwogICAgICAgIHRpbHRYOiBudW1iZXI7CiAgICAgICAgdGlsdFk6IG51bWJlcjsKICAgICAgICB0d2lzdDogbnVtYmVyOwogICAgICAgIHdpZHRoOiBudW1iZXI7CiAgICAgICAgaGVpZ2h0OiBudW1iZXI7CiAgICAgICAgcG9pbnRlclR5cGU6ICdtb3VzZScgfCAncGVuJyB8ICd0b3VjaCc7CiAgICAgICAgaXNQcmltYXJ5OiBib29sZWFuOwogICAgfQoKICAgIGludGVyZmFjZSBGb2N1c0V2ZW50PFRhcmdldCA9IEVsZW1lbnQsIFJlbGF0ZWRUYXJnZXQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFRhcmdldCwgTmF0aXZlRm9jdXNFdmVudD4gewogICAgICAgIHJlbGF0ZWRUYXJnZXQ6IChFdmVudFRhcmdldCAmIFJlbGF0ZWRUYXJnZXQpIHwgbnVsbDsKICAgICAgICB0YXJnZXQ6IEV2ZW50VGFyZ2V0ICYgVGFyZ2V0OwogICAgfQoKICAgIGludGVyZmFjZSBGb3JtRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgU3ludGhldGljRXZlbnQ8VD4gewogICAgfQoKICAgIGludGVyZmFjZSBJbnZhbGlkRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgU3ludGhldGljRXZlbnQ8VD4gewogICAgICAgIHRhcmdldDogRXZlbnRUYXJnZXQgJiBUOwogICAgfQoKICAgIGludGVyZmFjZSBDaGFuZ2VFdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBTeW50aGV0aWNFdmVudDxUPiB7CiAgICAgICAgdGFyZ2V0OiBFdmVudFRhcmdldCAmIFQ7CiAgICB9CgogICAgZXhwb3J0IHR5cGUgTW9kaWZpZXJLZXkgPSAiQWx0IiB8ICJBbHRHcmFwaCIgfCAiQ2Fwc0xvY2siIHwgIkNvbnRyb2wiIHwgIkZuIiB8ICJGbkxvY2siIHwgIkh5cGVyIiB8ICJNZXRhIiB8ICJOdW1Mb2NrIiB8ICJTY3JvbGxMb2NrIiB8ICJTaGlmdCIgfCAiU3VwZXIiIHwgIlN5bWJvbCIgfCAiU3ltYm9sTG9jayI7CgogICAgaW50ZXJmYWNlIEtleWJvYXJkRXZlbnQ8VCA9IEVsZW1lbnQ+IGV4dGVuZHMgVUlFdmVudDxULCBOYXRpdmVLZXlib2FyZEV2ZW50PiB7CiAgICAgICAgYWx0S2V5OiBib29sZWFuOwogICAgICAgIC8qKiBAZGVwcmVjYXRlZCAqLwogICAgICAgIGNoYXJDb2RlOiBudW1iZXI7CiAgICAgICAgY3RybEtleTogYm9vbGVhbjsKICAgICAgICBjb2RlOiBzdHJpbmc7CiAgICAgICAgLyoqCiAgICAgICAgICogU2VlIFtET00gTGV2ZWwgMyBFdmVudHMgc3BlY10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3VpZXZlbnRzLWtleS8ja2V5cy1tb2RpZmllcikuIGZvciBhIGxpc3Qgb2YgdmFsaWQgKGNhc2Utc2Vuc2l0aXZlKSBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QuCiAgICAgICAgICovCiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZShrZXk6IE1vZGlmaWVyS2V5KTogYm9vbGVhbjsKICAgICAgICAvKioKICAgICAgICAgKiBTZWUgdGhlIFtET00gTGV2ZWwgMyBFdmVudHMgc3BlY10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3VpZXZlbnRzLWtleS8jbmFtZWQta2V5LWF0dHJpYnV0ZS12YWx1ZXMpLiBmb3IgcG9zc2libGUgdmFsdWVzCiAgICAgICAgICovCiAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAga2V5Q29kZTogbnVtYmVyOwogICAgICAgIGxvY2FsZTogc3RyaW5nOwogICAgICAgIGxvY2F0aW9uOiBudW1iZXI7CiAgICAgICAgbWV0YUtleTogYm9vbGVhbjsKICAgICAgICByZXBlYXQ6IGJvb2xlYW47CiAgICAgICAgc2hpZnRLZXk6IGJvb2xlYW47CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgd2hpY2g6IG51bWJlcjsKICAgIH0KCiAgICBpbnRlcmZhY2UgTW91c2VFdmVudDxUID0gRWxlbWVudCwgRSA9IE5hdGl2ZU1vdXNlRXZlbnQ+IGV4dGVuZHMgVUlFdmVudDxULCBFPiB7CiAgICAgICAgYWx0S2V5OiBib29sZWFuOwogICAgICAgIGJ1dHRvbjogbnVtYmVyOwogICAgICAgIGJ1dHRvbnM6IG51bWJlcjsKICAgICAgICBjbGllbnRYOiBudW1iZXI7CiAgICAgICAgY2xpZW50WTogbnVtYmVyOwogICAgICAgIGN0cmxLZXk6IGJvb2xlYW47CiAgICAgICAgLyoqCiAgICAgICAgICogU2VlIFtET00gTGV2ZWwgMyBFdmVudHMgc3BlY10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3VpZXZlbnRzLWtleS8ja2V5cy1tb2RpZmllcikuIGZvciBhIGxpc3Qgb2YgdmFsaWQgKGNhc2Utc2Vuc2l0aXZlKSBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QuCiAgICAgICAgICovCiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZShrZXk6IE1vZGlmaWVyS2V5KTogYm9vbGVhbjsKICAgICAgICBtZXRhS2V5OiBib29sZWFuOwogICAgICAgIG1vdmVtZW50WDogbnVtYmVyOwogICAgICAgIG1vdmVtZW50WTogbnVtYmVyOwogICAgICAgIHBhZ2VYOiBudW1iZXI7CiAgICAgICAgcGFnZVk6IG51bWJlcjsKICAgICAgICByZWxhdGVkVGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGw7CiAgICAgICAgc2NyZWVuWDogbnVtYmVyOwogICAgICAgIHNjcmVlblk6IG51bWJlcjsKICAgICAgICBzaGlmdEtleTogYm9vbGVhbjsKICAgIH0KCiAgICBpbnRlcmZhY2UgVG91Y2hFdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBVSUV2ZW50PFQsIE5hdGl2ZVRvdWNoRXZlbnQ+IHsKICAgICAgICBhbHRLZXk6IGJvb2xlYW47CiAgICAgICAgY2hhbmdlZFRvdWNoZXM6IFRvdWNoTGlzdDsKICAgICAgICBjdHJsS2V5OiBib29sZWFuOwogICAgICAgIC8qKgogICAgICAgICAqIFNlZSBbRE9NIExldmVsIDMgRXZlbnRzIHNwZWNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi91aWV2ZW50cy1rZXkvI2tleXMtbW9kaWZpZXIpLiBmb3IgYSBsaXN0IG9mIHZhbGlkIChjYXNlLXNlbnNpdGl2ZSkgYXJndW1lbnRzIHRvIHRoaXMgbWV0aG9kLgogICAgICAgICAqLwogICAgICAgIGdldE1vZGlmaWVyU3RhdGUoa2V5OiBNb2RpZmllcktleSk6IGJvb2xlYW47CiAgICAgICAgbWV0YUtleTogYm9vbGVhbjsKICAgICAgICBzaGlmdEtleTogYm9vbGVhbjsKICAgICAgICB0YXJnZXRUb3VjaGVzOiBUb3VjaExpc3Q7CiAgICAgICAgdG91Y2hlczogVG91Y2hMaXN0OwogICAgfQoKICAgIGludGVyZmFjZSBVSUV2ZW50PFQgPSBFbGVtZW50LCBFID0gTmF0aXZlVUlFdmVudD4gZXh0ZW5kcyBTeW50aGV0aWNFdmVudDxULCBFPiB7CiAgICAgICAgZGV0YWlsOiBudW1iZXI7CiAgICAgICAgdmlldzogQWJzdHJhY3RWaWV3OwogICAgfQoKICAgIGludGVyZmFjZSBXaGVlbEV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIE1vdXNlRXZlbnQ8VCwgTmF0aXZlV2hlZWxFdmVudD4gewogICAgICAgIGRlbHRhTW9kZTogbnVtYmVyOwogICAgICAgIGRlbHRhWDogbnVtYmVyOwogICAgICAgIGRlbHRhWTogbnVtYmVyOwogICAgICAgIGRlbHRhWjogbnVtYmVyOwogICAgfQoKICAgIGludGVyZmFjZSBBbmltYXRpb25FdmVudDxUID0gRWxlbWVudD4gZXh0ZW5kcyBTeW50aGV0aWNFdmVudDxULCBOYXRpdmVBbmltYXRpb25FdmVudD4gewogICAgICAgIGFuaW1hdGlvbk5hbWU6IHN0cmluZzsKICAgICAgICBlbGFwc2VkVGltZTogbnVtYmVyOwogICAgICAgIHBzZXVkb0VsZW1lbnQ6IHN0cmluZzsKICAgIH0KCiAgICBpbnRlcmZhY2UgVHJhbnNpdGlvbkV2ZW50PFQgPSBFbGVtZW50PiBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PFQsIE5hdGl2ZVRyYW5zaXRpb25FdmVudD4gewogICAgICAgIGVsYXBzZWRUaW1lOiBudW1iZXI7CiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmc7CiAgICAgICAgcHNldWRvRWxlbWVudDogc3RyaW5nOwogICAgfQoKICAgIC8vCiAgICAvLyBFdmVudCBIYW5kbGVyIFR5cGVzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgdHlwZSBFdmVudEhhbmRsZXI8RSBleHRlbmRzIFN5bnRoZXRpY0V2ZW50PGFueT4+ID0geyBiaXZhcmlhbmNlSGFjayhldmVudDogRSk6IHZvaWQgfVsiYml2YXJpYW5jZUhhY2siXTsKCiAgICB0eXBlIFJlYWN0RXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxTeW50aGV0aWNFdmVudDxUPj47CgogICAgdHlwZSBDbGlwYm9hcmRFdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPENsaXBib2FyZEV2ZW50PFQ+PjsKICAgIHR5cGUgQ29tcG9zaXRpb25FdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPENvbXBvc2l0aW9uRXZlbnQ8VD4+OwogICAgdHlwZSBEcmFnRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxEcmFnRXZlbnQ8VD4+OwogICAgdHlwZSBGb2N1c0V2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8Rm9jdXNFdmVudDxUPj47CiAgICB0eXBlIEZvcm1FdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPEZvcm1FdmVudDxUPj47CiAgICB0eXBlIENoYW5nZUV2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ8VD4+OwogICAgdHlwZSBLZXlib2FyZEV2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8S2V5Ym9hcmRFdmVudDxUPj47CiAgICB0eXBlIE1vdXNlRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxNb3VzZUV2ZW50PFQ+PjsKICAgIHR5cGUgVG91Y2hFdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPFRvdWNoRXZlbnQ8VD4+OwogICAgdHlwZSBQb2ludGVyRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxQb2ludGVyRXZlbnQ8VD4+OwogICAgdHlwZSBVSUV2ZW50SGFuZGxlcjxUID0gRWxlbWVudD4gPSBFdmVudEhhbmRsZXI8VUlFdmVudDxUPj47CiAgICB0eXBlIFdoZWVsRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxXaGVlbEV2ZW50PFQ+PjsKICAgIHR5cGUgQW5pbWF0aW9uRXZlbnRIYW5kbGVyPFQgPSBFbGVtZW50PiA9IEV2ZW50SGFuZGxlcjxBbmltYXRpb25FdmVudDxUPj47CiAgICB0eXBlIFRyYW5zaXRpb25FdmVudEhhbmRsZXI8VCA9IEVsZW1lbnQ+ID0gRXZlbnRIYW5kbGVyPFRyYW5zaXRpb25FdmVudDxUPj47CgogICAgLy8KICAgIC8vIFByb3BzIC8gRE9NIEF0dHJpYnV0ZXMKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBpbnRlcmZhY2UgSFRNTFByb3BzPFQ+IGV4dGVuZHMgQWxsSFRNTEF0dHJpYnV0ZXM8VD4sIENsYXNzQXR0cmlidXRlczxUPiB7CiAgICB9CgogICAgdHlwZSBEZXRhaWxlZEhUTUxQcm9wczxFIGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4sIFQ+ID0gQ2xhc3NBdHRyaWJ1dGVzPFQ+ICYgRTsKCiAgICBpbnRlcmZhY2UgU1ZHUHJvcHM8VD4gZXh0ZW5kcyBTVkdBdHRyaWJ1dGVzPFQ+LCBDbGFzc0F0dHJpYnV0ZXM8VD4gewogICAgfQoKICAgIGludGVyZmFjZSBTVkdMaW5lRWxlbWVudEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBTVkdQcm9wczxUPiB7fQogICAgaW50ZXJmYWNlIFNWR1RleHRFbGVtZW50QXR0cmlidXRlczxUPiBleHRlbmRzIFNWR1Byb3BzPFQ+IHt9CgogICAgaW50ZXJmYWNlIERPTUF0dHJpYnV0ZXM8VD4gewogICAgICAgIGNoaWxkcmVuPzogUmVhY3ROb2RlIHwgdW5kZWZpbmVkOwogICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPzogewogICAgICAgICAgICAvLyBTaG91bGQgYmUgSW5uZXJIVE1MWydpbm5lckhUTUwnXS4KICAgICAgICAgICAgLy8gQnV0IHVuZm9ydHVuYXRlbHkgd2UncmUgbWl4aW5nIHJlbmRlcmVyLXNwZWNpZmljIHR5cGUgZGVjbGFyYXRpb25zLgogICAgICAgICAgICBfX2h0bWw6IHN0cmluZyB8IFRydXN0ZWRIVE1MOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIENsaXBib2FyZCBFdmVudHMKICAgICAgICBvbkNvcHk/OiBDbGlwYm9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db3B5Q2FwdHVyZT86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkN1dD86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkN1dENhcHR1cmU/OiBDbGlwYm9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25QYXN0ZT86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBhc3RlQ2FwdHVyZT86IENsaXBib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gQ29tcG9zaXRpb24gRXZlbnRzCiAgICAgICAgb25Db21wb3NpdGlvbkVuZD86IENvbXBvc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ29tcG9zaXRpb25FbmRDYXB0dXJlPzogQ29tcG9zaXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db21wb3NpdGlvblN0YXJ0PzogQ29tcG9zaXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db21wb3NpdGlvblN0YXJ0Q2FwdHVyZT86IENvbXBvc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ29tcG9zaXRpb25VcGRhdGU/OiBDb21wb3NpdGlvbkV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNvbXBvc2l0aW9uVXBkYXRlQ2FwdHVyZT86IENvbXBvc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBGb2N1cyBFdmVudHMKICAgICAgICBvbkZvY3VzPzogRm9jdXNFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Gb2N1c0NhcHR1cmU/OiBGb2N1c0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkJsdXI/OiBGb2N1c0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkJsdXJDYXB0dXJlPzogRm9jdXNFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIEZvcm0gRXZlbnRzCiAgICAgICAgb25DaGFuZ2U/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlQ2FwdHVyZT86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25CZWZvcmVJbnB1dD86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25CZWZvcmVJbnB1dENhcHR1cmU/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uSW5wdXQ/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uSW5wdXRDYXB0dXJlPzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblJlc2V0PzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblJlc2V0Q2FwdHVyZT86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TdWJtaXQ/OiBGb3JtRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU3VibWl0Q2FwdHVyZT86IEZvcm1FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25JbnZhbGlkPzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkludmFsaWRDYXB0dXJlPzogRm9ybUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gSW1hZ2UgRXZlbnRzCiAgICAgICAgb25Mb2FkPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Mb2FkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRXJyb3I/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsgLy8gYWxzbyBhIE1lZGlhIEV2ZW50CiAgICAgICAgb25FcnJvckNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsgLy8gYWxzbyBhIE1lZGlhIEV2ZW50CgogICAgICAgIC8vIEtleWJvYXJkIEV2ZW50cwogICAgICAgIG9uS2V5RG93bj86IEtleWJvYXJkRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uS2V5RG93bkNhcHR1cmU/OiBLZXlib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogQGRlcHJlY2F0ZWQgKi8KICAgICAgICBvbktleVByZXNzPzogS2V5Ym9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgb25LZXlQcmVzc0NhcHR1cmU/OiBLZXlib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbktleVVwPzogS2V5Ym9hcmRFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25LZXlVcENhcHR1cmU/OiBLZXlib2FyZEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gTWVkaWEgRXZlbnRzCiAgICAgICAgb25BYm9ydD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQWJvcnRDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DYW5QbGF5PzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DYW5QbGF5Q2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2FuUGxheVRocm91Z2g/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNhblBsYXlUaHJvdWdoQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHVyYXRpb25DaGFuZ2U/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkR1cmF0aW9uQ2hhbmdlQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW1wdGllZD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW1wdGllZENhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkVuY3J5cHRlZD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW5jcnlwdGVkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRW5kZWQ/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkVuZGVkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9hZGVkRGF0YT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9hZGVkRGF0YUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkxvYWRlZE1ldGFkYXRhPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Mb2FkZWRNZXRhZGF0YUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkxvYWRTdGFydD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9hZFN0YXJ0Q2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUGF1c2U/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBhdXNlQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUGxheT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUGxheUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBsYXlpbmc/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBsYXlpbmdDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qcm9ncmVzcz86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUHJvZ3Jlc3NDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25SYXRlQ2hhbmdlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25SYXRlQ2hhbmdlQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUmVzaXplPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25SZXNpemVDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TZWVrZWQ/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblNlZWtlZENhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblNlZWtpbmc/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblNlZWtpbmdDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TdGFsbGVkPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25TdGFsbGVkQ2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU3VzcGVuZD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU3VzcGVuZENhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRpbWVVcGRhdGU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRpbWVVcGRhdGVDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Wb2x1bWVDaGFuZ2U/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblZvbHVtZUNoYW5nZUNhcHR1cmU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbldhaXRpbmc/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbldhaXRpbmdDYXB0dXJlPzogUmVhY3RFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIE1vdXNlRXZlbnRzCiAgICAgICAgb25BdXhDbGljaz86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQXV4Q2xpY2tDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DbGljaz86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2xpY2tDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Db250ZXh0TWVudT86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ29udGV4dE1lbnVDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Eb3VibGVDbGljaz86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRG91YmxlQ2xpY2tDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25EcmFnPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdFbmQ/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0VuZENhcHR1cmU/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0VudGVyPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdFbnRlckNhcHR1cmU/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0V4aXQ/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ0V4aXRDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdMZWF2ZT86IERyYWdFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25EcmFnTGVhdmVDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdPdmVyPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyYWdPdmVyQ2FwdHVyZT86IERyYWdFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25EcmFnU3RhcnQ/OiBEcmFnRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uRHJhZ1N0YXJ0Q2FwdHVyZT86IERyYWdFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ecm9wPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkRyb3BDYXB0dXJlPzogRHJhZ0V2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlRG93bj86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VEb3duQ2FwdHVyZT86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VFbnRlcj86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VMZWF2ZT86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VNb3ZlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Nb3VzZU1vdmVDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Nb3VzZU91dD86IE1vdXNlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTW91c2VPdXRDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Nb3VzZU92ZXI/OiBNb3VzZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlT3ZlckNhcHR1cmU/OiBNb3VzZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlVXA/OiBNb3VzZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbk1vdXNlVXBDYXB0dXJlPzogTW91c2VFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFNlbGVjdGlvbiBFdmVudHMKICAgICAgICBvblNlbGVjdD86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU2VsZWN0Q2FwdHVyZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBUb3VjaCBFdmVudHMKICAgICAgICBvblRvdWNoQ2FuY2VsPzogVG91Y2hFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ub3VjaENhbmNlbENhcHR1cmU/OiBUb3VjaEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRvdWNoRW5kPzogVG91Y2hFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ub3VjaEVuZENhcHR1cmU/OiBUb3VjaEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblRvdWNoTW92ZT86IFRvdWNoRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZT86IFRvdWNoRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVG91Y2hTdGFydD86IFRvdWNoRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVG91Y2hTdGFydENhcHR1cmU/OiBUb3VjaEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gUG9pbnRlciBFdmVudHMKICAgICAgICBvblBvaW50ZXJEb3duPzogUG9pbnRlckV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBvaW50ZXJEb3duQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyTW92ZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyTW92ZUNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlclVwPzogUG9pbnRlckV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvblBvaW50ZXJVcENhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlckNhbmNlbD86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyQ2FuY2VsQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyRW50ZXI/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlckVudGVyQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyTGVhdmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlckxlYXZlQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyT3Zlcj86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyT3ZlckNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uUG9pbnRlck91dD86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Qb2ludGVyT3V0Q2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Hb3RQb2ludGVyQ2FwdHVyZT86IFBvaW50ZXJFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Hb3RQb2ludGVyQ2FwdHVyZUNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlPzogUG9pbnRlckV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkxvc3RQb2ludGVyQ2FwdHVyZUNhcHR1cmU/OiBQb2ludGVyRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBVSSBFdmVudHMKICAgICAgICBvblNjcm9sbD86IFVJRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uU2Nyb2xsQ2FwdHVyZT86IFVJRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBXaGVlbCBFdmVudHMKICAgICAgICBvbldoZWVsPzogV2hlZWxFdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25XaGVlbENhcHR1cmU/OiBXaGVlbEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gQW5pbWF0aW9uIEV2ZW50cwogICAgICAgIG9uQW5pbWF0aW9uU3RhcnQ/OiBBbmltYXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25BbmltYXRpb25TdGFydENhcHR1cmU/OiBBbmltYXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25BbmltYXRpb25FbmQ/OiBBbmltYXRpb25FdmVudEhhbmRsZXI8VD4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25BbmltYXRpb25FbmRDYXB0dXJlPzogQW5pbWF0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQW5pbWF0aW9uSXRlcmF0aW9uPzogQW5pbWF0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uQW5pbWF0aW9uSXRlcmF0aW9uQ2FwdHVyZT86IEFuaW1hdGlvbkV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gVHJhbnNpdGlvbiBFdmVudHMKICAgICAgICBvblRyYW5zaXRpb25FbmQ/OiBUcmFuc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgICAgIG9uVHJhbnNpdGlvbkVuZENhcHR1cmU/OiBUcmFuc2l0aW9uRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGV4cG9ydCBpbnRlcmZhY2UgQ1NTUHJvcGVydGllcyBleHRlbmRzIENTUy5Qcm9wZXJ0aWVzPHN0cmluZyB8IG51bWJlcj4gewogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBpbmRleCBzaWduYXR1cmUgd2FzIHJlbW92ZWQgdG8gZW5hYmxlIGNsb3NlZCB0eXBpbmcgZm9yIHN0eWxlCiAgICAgICAgICogdXNpbmcgQ1NTVHlwZS4gWW91J3JlIGFibGUgdG8gdXNlIHR5cGUgYXNzZXJ0aW9uIG9yIG1vZHVsZSBhdWdtZW50YXRpb24KICAgICAgICAgKiB0byBhZGQgcHJvcGVydGllcyBvciBhbiBpbmRleCBzaWduYXR1cmUgb2YgeW91ciBvd24uCiAgICAgICAgICoKICAgICAgICAgKiBGb3IgZXhhbXBsZXMgYW5kIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0OgogICAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mcmVuaWMvY3NzdHlwZSN3aGF0LXNob3VsZC1pLWRvLXdoZW4taS1nZXQtdHlwZS1lcnJvcnMKICAgICAgICAgKi8KICAgIH0KCiAgICAvLyBBbGwgdGhlIFdBSS1BUklBIDEuMSBhdHRyaWJ1dGVzIGZyb20gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8KICAgIGludGVyZmFjZSBBcmlhQXR0cmlidXRlcyB7CiAgICAgICAgLyoqIElkZW50aWZpZXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCB3aGVuIERPTSBmb2N1cyBpcyBvbiBhIGNvbXBvc2l0ZSB3aWRnZXQsIHRleHRib3gsIGdyb3VwLCBvciBhcHBsaWNhdGlvbi4gKi8KICAgICAgICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgYXNzaXN0aXZlIHRlY2hub2xvZ2llcyB3aWxsIHByZXNlbnQgYWxsLCBvciBvbmx5IHBhcnRzIG9mLCB0aGUgY2hhbmdlZCByZWdpb24gYmFzZWQgb24gdGhlIGNoYW5nZSBub3RpZmljYXRpb25zIGRlZmluZWQgYnkgdGhlIGFyaWEtcmVsZXZhbnQgYXR0cmlidXRlLiAqLwogICAgICAgICdhcmlhLWF0b21pYyc/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIGlucHV0dGluZyB0ZXh0IGNvdWxkIHRyaWdnZXIgZGlzcGxheSBvZiBvbmUgb3IgbW9yZSBwcmVkaWN0aW9ucyBvZiB0aGUgdXNlcidzIGludGVuZGVkIHZhbHVlIGZvciBhbiBpbnB1dCBhbmQgc3BlY2lmaWVzIGhvdyBwcmVkaWN0aW9ucyB3b3VsZCBiZQogICAgICAgICAqIHByZXNlbnRlZCBpZiB0aGV5IGFyZSBtYWRlLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc/OiAnbm9uZScgfCAnaW5saW5lJyB8ICdsaXN0JyB8ICdib3RoJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIGFuIGVsZW1lbnQgaXMgYmVpbmcgbW9kaWZpZWQgYW5kIHRoYXQgYXNzaXN0aXZlIHRlY2hub2xvZ2llcyBNQVkgd2FudCB0byB3YWl0IHVudGlsIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjb21wbGV0ZSBiZWZvcmUgZXhwb3NpbmcgdGhlbSB0byB0aGUgdXNlci4gKi8KICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgc3RyaW5nIHZhbHVlIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQsIHdoaWNoIGlzIGludGVuZGVkIHRvIGJlIGNvbnZlcnRlZCBpbnRvIEJyYWlsbGUuCiAgICAgICAgICogQHNlZSBhcmlhLWxhYmVsLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWJyYWlsbGVsYWJlbCc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIGh1bWFuLXJlYWRhYmxlLCBhdXRob3ItbG9jYWxpemVkIGFiYnJldmlhdGVkIGRlc2NyaXB0aW9uIGZvciB0aGUgcm9sZSBvZiBhbiBlbGVtZW50LCB3aGljaCBpcyBpbnRlbmRlZCB0byBiZSBjb252ZXJ0ZWQgaW50byBCcmFpbGxlLgogICAgICAgICAqIEBzZWUgYXJpYS1yb2xlZGVzY3JpcHRpb24uCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtYnJhaWxsZXJvbGVkZXNjcmlwdGlvbic/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgJ2FyaWEtYnVzeSc/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIEluZGljYXRlcyB0aGUgY3VycmVudCAiY2hlY2tlZCIgc3RhdGUgb2YgY2hlY2tib3hlcywgcmFkaW8gYnV0dG9ucywgYW5kIG90aGVyIHdpZGdldHMuCiAgICAgICAgICogQHNlZSBhcmlhLXByZXNzZWQgQHNlZSBhcmlhLXNlbGVjdGVkLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWNoZWNrZWQnPzogYm9vbGVhbiB8ICdmYWxzZScgfCAnbWl4ZWQnIHwgJ3RydWUnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIERlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1jb2xpbmRleC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb2xjb3VudCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhbiBlbGVtZW50J3MgY29sdW1uIGluZGV4IG9yIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1jb2xjb3VudCBAc2VlIGFyaWEtY29sc3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb2xpbmRleCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIGh1bWFuIHJlYWRhYmxlIHRleHQgYWx0ZXJuYXRpdmUgb2YgYXJpYS1jb2xpbmRleC4KICAgICAgICAgKiBAc2VlIGFyaWEtcm93aW5kZXh0ZXh0LgogICAgICAgICAqLwogICAgICAgICdhcmlhLWNvbGluZGV4dGV4dCc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgc3Bhbm5lZCBieSBhIGNlbGwgb3IgZ3JpZGNlbGwgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1jb2xpbmRleCBAc2VlIGFyaWEtcm93c3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb2xzcGFuJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJZGVudGlmaWVzIHRoZSBlbGVtZW50IChvciBlbGVtZW50cykgd2hvc2UgY29udGVudHMgb3IgcHJlc2VuY2UgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgICAgICAgKiBAc2VlIGFyaWEtb3ducy4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1jb250cm9scyc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB0aGUgZWxlbWVudCB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgaXRlbSB3aXRoaW4gYSBjb250YWluZXIgb3Igc2V0IG9mIHJlbGF0ZWQgZWxlbWVudHMuICovCiAgICAgICAgJ2FyaWEtY3VycmVudCc/OiBib29sZWFuIHwgJ2ZhbHNlJyB8ICd0cnVlJyB8ICdwYWdlJyB8ICdzdGVwJyB8ICdsb2NhdGlvbicgfCAnZGF0ZScgfCAndGltZScgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSWRlbnRpZmllcyB0aGUgZWxlbWVudCAob3IgZWxlbWVudHMpIHRoYXQgZGVzY3JpYmVzIHRoZSBvYmplY3QuCiAgICAgICAgICogQHNlZSBhcmlhLWxhYmVsbGVkYnkKICAgICAgICAgKi8KICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIHN0cmluZyB2YWx1ZSB0aGF0IGRlc2NyaWJlcyBvciBhbm5vdGF0ZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgICAgICAgKiBAc2VlIHJlbGF0ZWQgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1kZXNjcmlwdGlvbic/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSWRlbnRpZmllcyB0aGUgZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgZGV0YWlsZWQsIGV4dGVuZGVkIGRlc2NyaXB0aW9uIGZvciB0aGUgb2JqZWN0LgogICAgICAgICAqIEBzZWUgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1kZXRhaWxzJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBwZXJjZWl2YWJsZSBidXQgZGlzYWJsZWQsIHNvIGl0IGlzIG5vdCBlZGl0YWJsZSBvciBvdGhlcndpc2Ugb3BlcmFibGUuCiAgICAgICAgICogQHNlZSBhcmlhLWhpZGRlbiBAc2VlIGFyaWEtcmVhZG9ubHkuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtZGlzYWJsZWQnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgd2hhdCBmdW5jdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCB3aGVuIGEgZHJhZ2dlZCBvYmplY3QgaXMgcmVsZWFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0LgogICAgICAgICAqIEBkZXByZWNhdGVkIGluIEFSSUEgMS4xCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtZHJvcGVmZmVjdCc/OiAnbm9uZScgfCAnY29weScgfCAnZXhlY3V0ZScgfCAnbGluaycgfCAnbW92ZScgfCAncG9wdXAnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIElkZW50aWZpZXMgdGhlIGVsZW1lbnQgdGhhdCBwcm92aWRlcyBhbiBlcnJvciBtZXNzYWdlIGZvciB0aGUgb2JqZWN0LgogICAgICAgICAqIEBzZWUgYXJpYS1pbnZhbGlkIEBzZWUgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1lcnJvcm1lc3NhZ2UnPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZWxlbWVudCwgb3IgYW5vdGhlciBncm91cGluZyBlbGVtZW50IGl0IGNvbnRyb2xzLCBpcyBjdXJyZW50bHkgZXhwYW5kZWQgb3IgY29sbGFwc2VkLiAqLwogICAgICAgICdhcmlhLWV4cGFuZGVkJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSWRlbnRpZmllcyB0aGUgbmV4dCBlbGVtZW50IChvciBlbGVtZW50cykgaW4gYW4gYWx0ZXJuYXRlIHJlYWRpbmcgb3JkZXIgb2YgY29udGVudCB3aGljaCwgYXQgdGhlIHVzZXIncyBkaXNjcmV0aW9uLAogICAgICAgICAqIGFsbG93cyBhc3Npc3RpdmUgdGVjaG5vbG9neSB0byBvdmVycmlkZSB0aGUgZ2VuZXJhbCBkZWZhdWx0IG9mIHJlYWRpbmcgaW4gZG9jdW1lbnQgc291cmNlIG9yZGVyLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWZsb3d0byc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSW5kaWNhdGVzIGFuIGVsZW1lbnQncyAiZ3JhYmJlZCIgc3RhdGUgaW4gYSBkcmFnLWFuZC1kcm9wIG9wZXJhdGlvbi4KICAgICAgICAgKiBAZGVwcmVjYXRlZCBpbiBBUklBIDEuMQogICAgICAgICAqLwogICAgICAgICdhcmlhLWdyYWJiZWQnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHRoZSBhdmFpbGFiaWxpdHkgYW5kIHR5cGUgb2YgaW50ZXJhY3RpdmUgcG9wdXAgZWxlbWVudCwgc3VjaCBhcyBtZW51IG9yIGRpYWxvZywgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFuIGVsZW1lbnQuICovCiAgICAgICAgJ2FyaWEtaGFzcG9wdXAnPzogYm9vbGVhbiB8ICdmYWxzZScgfCAndHJ1ZScgfCAnbWVudScgfCAnbGlzdGJveCcgfCAndHJlZScgfCAnZ3JpZCcgfCAnZGlhbG9nJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZWxlbWVudCBpcyBleHBvc2VkIHRvIGFuIGFjY2Vzc2liaWxpdHkgQVBJLgogICAgICAgICAqIEBzZWUgYXJpYS1kaXNhYmxlZC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1oaWRkZW4nPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhlIGVudGVyZWQgdmFsdWUgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KICAgICAgICAgKiBAc2VlIGFyaWEtZXJyb3JtZXNzYWdlLgogICAgICAgICAqLwogICAgICAgICdhcmlhLWludmFsaWQnPzogYm9vbGVhbiB8ICdmYWxzZScgfCAndHJ1ZScgfCAnZ3JhbW1hcicgfCAnc3BlbGxpbmcnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBJbmRpY2F0ZXMga2V5Ym9hcmQgc2hvcnRjdXRzIHRoYXQgYW4gYXV0aG9yIGhhcyBpbXBsZW1lbnRlZCB0byBhY3RpdmF0ZSBvciBnaXZlIGZvY3VzIHRvIGFuIGVsZW1lbnQuICovCiAgICAgICAgJ2FyaWEta2V5c2hvcnRjdXRzJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgc3RyaW5nIHZhbHVlIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQuCiAgICAgICAgICogQHNlZSBhcmlhLWxhYmVsbGVkYnkuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtbGFiZWwnPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIElkZW50aWZpZXMgdGhlIGVsZW1lbnQgKG9yIGVsZW1lbnRzKSB0aGF0IGxhYmVscyB0aGUgY3VycmVudCBlbGVtZW50LgogICAgICAgICAqIEBzZWUgYXJpYS1kZXNjcmliZWRieS4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5Jz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogRGVmaW5lcyB0aGUgaGllcmFyY2hpY2FsIGxldmVsIG9mIGFuIGVsZW1lbnQgd2l0aGluIGEgc3RydWN0dXJlLiAqLwogICAgICAgICdhcmlhLWxldmVsJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHRoYXQgYW4gZWxlbWVudCB3aWxsIGJlIHVwZGF0ZWQsIGFuZCBkZXNjcmliZXMgdGhlIHR5cGVzIG9mIHVwZGF0ZXMgdGhlIHVzZXIgYWdlbnRzLCBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBhbmQgdXNlciBjYW4gZXhwZWN0IGZyb20gdGhlIGxpdmUgcmVnaW9uLiAqLwogICAgICAgICdhcmlhLWxpdmUnPzogJ29mZicgfCAnYXNzZXJ0aXZlJyB8ICdwb2xpdGUnIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBJbmRpY2F0ZXMgd2hldGhlciBhbiBlbGVtZW50IGlzIG1vZGFsIHdoZW4gZGlzcGxheWVkLiAqLwogICAgICAgICdhcmlhLW1vZGFsJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB3aGV0aGVyIGEgdGV4dCBib3ggYWNjZXB0cyBtdWx0aXBsZSBsaW5lcyBvZiBpbnB1dCBvciBvbmx5IGEgc2luZ2xlIGxpbmUuICovCiAgICAgICAgJ2FyaWEtbXVsdGlsaW5lJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB0aGF0IHRoZSB1c2VyIG1heSBzZWxlY3QgbW9yZSB0aGFuIG9uZSBpdGVtIGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0YWJsZSBkZXNjZW5kYW50cy4gKi8KICAgICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVsZW1lbnQncyBvcmllbnRhdGlvbiBpcyBob3Jpem9udGFsLCB2ZXJ0aWNhbCwgb3IgdW5rbm93bi9hbWJpZ3VvdXMuICovCiAgICAgICAgJ2FyaWEtb3JpZW50YXRpb24nPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJZGVudGlmaWVzIGFuIGVsZW1lbnQgKG9yIGVsZW1lbnRzKSBpbiBvcmRlciB0byBkZWZpbmUgYSB2aXN1YWwsIGZ1bmN0aW9uYWwsIG9yIGNvbnRleHR1YWwgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcAogICAgICAgICAqIGJldHdlZW4gRE9NIGVsZW1lbnRzIHdoZXJlIHRoZSBET00gaGllcmFyY2h5IGNhbm5vdCBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgcmVsYXRpb25zaGlwLgogICAgICAgICAqIEBzZWUgYXJpYS1jb250cm9scy4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1vd25zJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgc2hvcnQgaGludCAoYSB3b3JkIG9yIHNob3J0IHBocmFzZSkgaW50ZW5kZWQgdG8gYWlkIHRoZSB1c2VyIHdpdGggZGF0YSBlbnRyeSB3aGVuIHRoZSBjb250cm9sIGhhcyBubyB2YWx1ZS4KICAgICAgICAgKiBBIGhpbnQgY291bGQgYmUgYSBzYW1wbGUgdmFsdWUgb3IgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAqLwogICAgICAgICdhcmlhLXBsYWNlaG9sZGVyJz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGFuIGVsZW1lbnQncyBudW1iZXIgb3IgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIGxpc3RpdGVtcyBvciB0cmVlaXRlbXMuIE5vdCByZXF1aXJlZCBpZiBhbGwgZWxlbWVudHMgaW4gdGhlIHNldCBhcmUgcHJlc2VudCBpbiB0aGUgRE9NLgogICAgICAgICAqIEBzZWUgYXJpYS1zZXRzaXplLgogICAgICAgICAqLwogICAgICAgICdhcmlhLXBvc2luc2V0Jz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgInByZXNzZWQiIHN0YXRlIG9mIHRvZ2dsZSBidXR0b25zLgogICAgICAgICAqIEBzZWUgYXJpYS1jaGVja2VkIEBzZWUgYXJpYS1zZWxlY3RlZC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1wcmVzc2VkJz86IGJvb2xlYW4gfCAnZmFsc2UnIHwgJ21peGVkJyB8ICd0cnVlJyB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBub3QgZWRpdGFibGUsIGJ1dCBpcyBvdGhlcndpc2Ugb3BlcmFibGUuCiAgICAgICAgICogQHNlZSBhcmlhLWRpc2FibGVkLgogICAgICAgICAqLwogICAgICAgICdhcmlhLXJlYWRvbmx5Jz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogSW5kaWNhdGVzIHdoYXQgbm90aWZpY2F0aW9ucyB0aGUgdXNlciBhZ2VudCB3aWxsIHRyaWdnZXIgd2hlbiB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIHdpdGhpbiBhIGxpdmUgcmVnaW9uIGlzIG1vZGlmaWVkLgogICAgICAgICAqIEBzZWUgYXJpYS1hdG9taWMuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtcmVsZXZhbnQnPzogJ2FkZGl0aW9ucycgfCAnYWRkaXRpb25zIHJlbW92YWxzJyB8ICdhZGRpdGlvbnMgdGV4dCcgfCAnYWxsJyB8ICdyZW1vdmFscycgfCAncmVtb3ZhbHMgYWRkaXRpb25zJyB8ICdyZW1vdmFscyB0ZXh0JyB8ICd0ZXh0JyB8ICd0ZXh0IGFkZGl0aW9ucycgfCAndGV4dCByZW1vdmFscycgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEluZGljYXRlcyB0aGF0IHVzZXIgaW5wdXQgaXMgcmVxdWlyZWQgb24gdGhlIGVsZW1lbnQgYmVmb3JlIGEgZm9ybSBtYXkgYmUgc3VibWl0dGVkLiAqLwogICAgICAgICdhcmlhLXJlcXVpcmVkJz86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIERlZmluZXMgYSBodW1hbi1yZWFkYWJsZSwgYXV0aG9yLWxvY2FsaXplZCBkZXNjcmlwdGlvbiBmb3IgdGhlIHJvbGUgb2YgYW4gZWxlbWVudC4gKi8KICAgICAgICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKgogICAgICAgICAqIERlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1yb3dpbmRleC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1yb3djb3VudCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhbiBlbGVtZW50J3Mgcm93IGluZGV4IG9yIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3Mgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1yb3djb3VudCBAc2VlIGFyaWEtcm93c3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1yb3dpbmRleCc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhIGh1bWFuIHJlYWRhYmxlIHRleHQgYWx0ZXJuYXRpdmUgb2YgYXJpYS1yb3dpbmRleC4KICAgICAgICAgKiBAc2VlIGFyaWEtY29saW5kZXh0ZXh0LgogICAgICAgICAqLwogICAgICAgICdhcmlhLXJvd2luZGV4dGV4dCc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJvd3Mgc3Bhbm5lZCBieSBhIGNlbGwgb3IgZ3JpZGNlbGwgd2l0aGluIGEgdGFibGUsIGdyaWQsIG9yIHRyZWVncmlkLgogICAgICAgICAqIEBzZWUgYXJpYS1yb3dpbmRleCBAc2VlIGFyaWEtY29sc3Bhbi4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1yb3dzcGFuJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgInNlbGVjdGVkIiBzdGF0ZSBvZiB2YXJpb3VzIHdpZGdldHMuCiAgICAgICAgICogQHNlZSBhcmlhLWNoZWNrZWQgQHNlZSBhcmlhLXByZXNzZWQuCiAgICAgICAgICovCiAgICAgICAgJ2FyaWEtc2VsZWN0ZWQnPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGN1cnJlbnQgc2V0IG9mIGxpc3RpdGVtcyBvciB0cmVlaXRlbXMuIE5vdCByZXF1aXJlZCBpZiBhbGwgZWxlbWVudHMgaW4gdGhlIHNldCBhcmUgcHJlc2VudCBpbiB0aGUgRE9NLgogICAgICAgICAqIEBzZWUgYXJpYS1wb3NpbnNldC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS1zZXRzaXplJz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogSW5kaWNhdGVzIGlmIGl0ZW1zIGluIGEgdGFibGUgb3IgZ3JpZCBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyLiAqLwogICAgICAgICdhcmlhLXNvcnQnPzogJ25vbmUnIHwgJ2FzY2VuZGluZycgfCAnZGVzY2VuZGluZycgfCAnb3RoZXInIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBEZWZpbmVzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgZm9yIGEgcmFuZ2Ugd2lkZ2V0LiAqLwogICAgICAgICdhcmlhLXZhbHVlbWF4Jz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogRGVmaW5lcyB0aGUgbWluaW11bSBhbGxvd2VkIHZhbHVlIGZvciBhIHJhbmdlIHdpZGdldC4gKi8KICAgICAgICAnYXJpYS12YWx1ZW1pbic/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyB0aGUgY3VycmVudCB2YWx1ZSBmb3IgYSByYW5nZSB3aWRnZXQuCiAgICAgICAgICogQHNlZSBhcmlhLXZhbHVldGV4dC4KICAgICAgICAgKi8KICAgICAgICAnYXJpYS12YWx1ZW5vdyc/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIERlZmluZXMgdGhlIGh1bWFuIHJlYWRhYmxlIHRleHQgYWx0ZXJuYXRpdmUgb2YgYXJpYS12YWx1ZW5vdyBmb3IgYSByYW5nZSB3aWRnZXQuICovCiAgICAgICAgJ2FyaWEtdmFsdWV0ZXh0Jz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvLyBBbGwgdGhlIFdBSS1BUklBIDEuMSByb2xlIGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNyb2xlX2RlZmluaXRpb25zCiAgICB0eXBlIEFyaWFSb2xlID0KICAgICAgICB8ICdhbGVydCcKICAgICAgICB8ICdhbGVydGRpYWxvZycKICAgICAgICB8ICdhcHBsaWNhdGlvbicKICAgICAgICB8ICdhcnRpY2xlJwogICAgICAgIHwgJ2Jhbm5lcicKICAgICAgICB8ICdidXR0b24nCiAgICAgICAgfCAnY2VsbCcKICAgICAgICB8ICdjaGVja2JveCcKICAgICAgICB8ICdjb2x1bW5oZWFkZXInCiAgICAgICAgfCAnY29tYm9ib3gnCiAgICAgICAgfCAnY29tcGxlbWVudGFyeScKICAgICAgICB8ICdjb250ZW50aW5mbycKICAgICAgICB8ICdkZWZpbml0aW9uJwogICAgICAgIHwgJ2RpYWxvZycKICAgICAgICB8ICdkaXJlY3RvcnknCiAgICAgICAgfCAnZG9jdW1lbnQnCiAgICAgICAgfCAnZmVlZCcKICAgICAgICB8ICdmaWd1cmUnCiAgICAgICAgfCAnZm9ybScKICAgICAgICB8ICdncmlkJwogICAgICAgIHwgJ2dyaWRjZWxsJwogICAgICAgIHwgJ2dyb3VwJwogICAgICAgIHwgJ2hlYWRpbmcnCiAgICAgICAgfCAnaW1nJwogICAgICAgIHwgJ2xpbmsnCiAgICAgICAgfCAnbGlzdCcKICAgICAgICB8ICdsaXN0Ym94JwogICAgICAgIHwgJ2xpc3RpdGVtJwogICAgICAgIHwgJ2xvZycKICAgICAgICB8ICdtYWluJwogICAgICAgIHwgJ21hcnF1ZWUnCiAgICAgICAgfCAnbWF0aCcKICAgICAgICB8ICdtZW51JwogICAgICAgIHwgJ21lbnViYXInCiAgICAgICAgfCAnbWVudWl0ZW0nCiAgICAgICAgfCAnbWVudWl0ZW1jaGVja2JveCcKICAgICAgICB8ICdtZW51aXRlbXJhZGlvJwogICAgICAgIHwgJ25hdmlnYXRpb24nCiAgICAgICAgfCAnbm9uZScKICAgICAgICB8ICdub3RlJwogICAgICAgIHwgJ29wdGlvbicKICAgICAgICB8ICdwcmVzZW50YXRpb24nCiAgICAgICAgfCAncHJvZ3Jlc3NiYXInCiAgICAgICAgfCAncmFkaW8nCiAgICAgICAgfCAncmFkaW9ncm91cCcKICAgICAgICB8ICdyZWdpb24nCiAgICAgICAgfCAncm93JwogICAgICAgIHwgJ3Jvd2dyb3VwJwogICAgICAgIHwgJ3Jvd2hlYWRlcicKICAgICAgICB8ICdzY3JvbGxiYXInCiAgICAgICAgfCAnc2VhcmNoJwogICAgICAgIHwgJ3NlYXJjaGJveCcKICAgICAgICB8ICdzZXBhcmF0b3InCiAgICAgICAgfCAnc2xpZGVyJwogICAgICAgIHwgJ3NwaW5idXR0b24nCiAgICAgICAgfCAnc3RhdHVzJwogICAgICAgIHwgJ3N3aXRjaCcKICAgICAgICB8ICd0YWInCiAgICAgICAgfCAndGFibGUnCiAgICAgICAgfCAndGFibGlzdCcKICAgICAgICB8ICd0YWJwYW5lbCcKICAgICAgICB8ICd0ZXJtJwogICAgICAgIHwgJ3RleHRib3gnCiAgICAgICAgfCAndGltZXInCiAgICAgICAgfCAndG9vbGJhcicKICAgICAgICB8ICd0b29sdGlwJwogICAgICAgIHwgJ3RyZWUnCiAgICAgICAgfCAndHJlZWdyaWQnCiAgICAgICAgfCAndHJlZWl0ZW0nCiAgICAgICAgfCAoc3RyaW5nICYge30pOwoKICAgIGludGVyZmFjZSBIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEFyaWFBdHRyaWJ1dGVzLCBET01BdHRyaWJ1dGVzPFQ+IHsKICAgICAgICAvLyBSZWFjdC1zcGVjaWZpYyBBdHRyaWJ1dGVzCiAgICAgICAgZGVmYXVsdENoZWNrZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bWJlciB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZDsKICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFN0YW5kYXJkIEhUTUwgQXR0cmlidXRlcwogICAgICAgIGFjY2Vzc0tleT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvRm9jdXM/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGNsYXNzTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50RWRpdGFibGU/OiBCb29sZWFuaXNoIHwgImluaGVyaXQiIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHRNZW51Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRpcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkcmFnZ2FibGU/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIGhpZGRlbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgaWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGFuZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBub25jZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzbG90Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwZWxsQ2hlY2s/OiBCb29sZWFuaXNoIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0YWJJbmRleD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0cmFuc2xhdGU/OiAneWVzJyB8ICdubycgfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFVua25vd24KICAgICAgICByYWRpb0dyb3VwPzogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLyA8Y29tbWFuZD4sIDxtZW51aXRlbT4KCiAgICAgICAgLy8gV0FJLUFSSUEKICAgICAgICByb2xlPzogQXJpYVJvbGUgfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIFJERmEgQXR0cmlidXRlcwogICAgICAgIGFib3V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRlbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGF0YXR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW5saXN0PzogYW55OwogICAgICAgIHByZWZpeD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcm9wZXJ0eT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVzb3VyY2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmV2Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGVvZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2b2NhYj86IHN0cmluZyB8IHVuZGVmaW5lZDsKCiAgICAgICAgLy8gTm9uLXN0YW5kYXJkIEF0dHJpYnV0ZXMKICAgICAgICBhdXRvQ2FwaXRhbGl6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvQ29ycmVjdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvU2F2ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpdGVtUHJvcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpdGVtU2NvcGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGl0ZW1UeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGl0ZW1JRD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpdGVtUmVmPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlc3VsdHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc2VjdXJpdHk/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5zZWxlY3RhYmxlPzogJ29uJyB8ICdvZmYnIHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBMaXZpbmcgU3RhbmRhcmQKICAgICAgICAvKioKICAgICAgICAgKiBIaW50cyBhdCB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgbWlnaHQgYmUgZW50ZXJlZCBieSB0aGUgdXNlciB3aGlsZSBlZGl0aW5nIHRoZSBlbGVtZW50IG9yIGl0cyBjb250ZW50cwogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNpbnB1dC1tb2RhbGl0aWVzOi10aGUtaW5wdXRtb2RlLWF0dHJpYnV0ZQogICAgICAgICAqLwogICAgICAgIGlucHV0TW9kZT86ICdub25lJyB8ICd0ZXh0JyB8ICd0ZWwnIHwgJ3VybCcgfCAnZW1haWwnIHwgJ251bWVyaWMnIHwgJ2RlY2ltYWwnIHwgJ3NlYXJjaCcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogU3BlY2lmeSB0aGF0IGEgc3RhbmRhcmQgSFRNTCBlbGVtZW50IHNob3VsZCBiZWhhdmUgbGlrZSBhIGRlZmluZWQgY3VzdG9tIGJ1aWx0LWluIGVsZW1lbnQKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2F0dHItaXMKICAgICAgICAgKi8KICAgICAgICBpcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvKioKICAgICAqIEZvciBpbnRlcm5hbCB1c2FnZSBvbmx5LgogICAgICogRGlmZmVyZW50IHJlbGVhc2UgY2hhbm5lbHMgZGVjbGFyZSBhZGRpdGlvbmFsIHR5cGVzIG9mIFJlYWN0Tm9kZSB0aGlzIHBhcnRpY3VsYXIgcmVsZWFzZSBjaGFubmVsIGFjY2VwdHMuCiAgICAgKiBBcHAgb3IgbGlicmFyeSB0eXBlcyBzaG91bGQgbmV2ZXIgYXVnbWVudCB0aGlzIGludGVyZmFjZS4KICAgICAqLwogICAgaW50ZXJmYWNlIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OUyB7fQoKICAgIGludGVyZmFjZSBBbGxIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICAvLyBTdGFuZGFyZCBIVE1MIEF0dHJpYnV0ZXMKICAgICAgICBhY2NlcHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYWNjZXB0Q2hhcnNldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhY3Rpb24/OgogICAgICAgICAgICB8IHN0cmluZwogICAgICAgICAgICB8IHVuZGVmaW5lZAogICAgICAgICAgICB8IERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OU1trZXlvZiBET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEX0VYUEVSSU1FTlRBTF9GT1JNX0FDVElPTlNdOwogICAgICAgIGFsbG93RnVsbFNjcmVlbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWxsb3dUcmFuc3BhcmVuY3k/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGFsdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhc3luYz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYXV0b0NvbXBsZXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGF1dG9QbGF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBjYXB0dXJlPzogYm9vbGVhbiB8ICd1c2VyJyB8ICdlbnZpcm9ubWVudCcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFBhZGRpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2hhclNldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjaGFsbGVuZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2hlY2tlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY2l0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjbGFzc0lEPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbHM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sU3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBjb250cm9scz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY29vcmRzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNyb3NzT3JpZ2luPzogImFub255bW91cyIgfCAidXNlLWNyZWRlbnRpYWxzIiB8ICIiIHwgdW5kZWZpbmVkOwogICAgICAgIGRhdGE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGF0ZVRpbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkb3dubG9hZD86IGFueTsKICAgICAgICBlbmNUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybUFjdGlvbj86CiAgICAgICAgICAgIHwgc3RyaW5nCiAgICAgICAgICAgIHwgdW5kZWZpbmVkCiAgICAgICAgICAgIHwgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TW2tleW9mIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OU107CiAgICAgICAgZm9ybUVuY1R5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybU1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtTm9WYWxpZGF0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybVRhcmdldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmcmFtZUJvcmRlcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWFkZXJzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoaWdoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHJlZkxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHRtbEZvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBodHRwRXF1aXY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW50ZWdyaXR5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtleVBhcmFtcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrZXlUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtpbmQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlzdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsb29wPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsb3c/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFuaWZlc3Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFyZ2luSGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1hcmdpbldpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1heD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXhMZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWFHcm91cD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtZXRob2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkxlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtdWx0aXBsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbXV0ZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbm9WYWxpZGF0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgb3Blbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgb3B0aW11bT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYXlzSW5saW5lPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwb3N0ZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcHJlbG9hZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWFkT25seT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJldmVyc2VkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByb3dzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHJvd1NwYW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc2FuZGJveD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNjcm9sbGluZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzZWFtbGVzcz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc2VsZWN0ZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNoYXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNpemU/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc2l6ZXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjRG9jPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyY0xhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjU2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0YXJ0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHN0ZXA/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3VtbWFyeT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB1c2VNYXA/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd21vZGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd3JhcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEhUTUxBdHRyaWJ1dGVSZWZlcnJlclBvbGljeSA9CiAgICAgICAgfCAnJwogICAgICAgIHwgJ25vLXJlZmVycmVyJwogICAgICAgIHwgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJwogICAgICAgIHwgJ29yaWdpbicKICAgICAgICB8ICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nCiAgICAgICAgfCAnc2FtZS1vcmlnaW4nCiAgICAgICAgfCAnc3RyaWN0LW9yaWdpbicKICAgICAgICB8ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJwogICAgICAgIHwgJ3Vuc2FmZS11cmwnOwoKICAgIHR5cGUgSFRNTEF0dHJpYnV0ZUFuY2hvclRhcmdldCA9CiAgICAgICAgfCAnX3NlbGYnCiAgICAgICAgfCAnX2JsYW5rJwogICAgICAgIHwgJ19wYXJlbnQnCiAgICAgICAgfCAnX3RvcCcKICAgICAgICB8IChzdHJpbmcgJiB7fSk7CgogICAgaW50ZXJmYWNlIEFuY2hvckhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGRvd25sb2FkPzogYW55OwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHJlZkxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGluZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBIVE1MQXR0cmlidXRlQW5jaG9yVGFyZ2V0IHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmZXJyZXJQb2xpY3k/OiBIVE1MQXR0cmlidXRlUmVmZXJyZXJQb2xpY3kgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEF1ZGlvSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBNZWRpYUhUTUxBdHRyaWJ1dGVzPFQ+IHt9CgogICAgaW50ZXJmYWNlIEFyZWFIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29vcmRzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRvd25sb2FkPzogYW55OwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHJlZkxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmZXJyZXJQb2xpY3k/OiBIVE1MQXR0cmlidXRlUmVmZXJyZXJQb2xpY3kgfCB1bmRlZmluZWQ7CiAgICAgICAgc2hhcGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBCYXNlSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgaHJlZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEJsb2NrcXVvdGVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjaXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBCdXR0b25IVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtQWN0aW9uPzoKICAgICAgICAgICAgfCBzdHJpbmcKICAgICAgICAgICAgfCBET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEX0VYUEVSSU1FTlRBTF9GT1JNX0FDVElPTlNba2V5b2YgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TXQogICAgICAgICAgICB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtRW5jVHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtTWV0aG9kPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm1Ob1ZhbGlkYXRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtVGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86ICdzdWJtaXQnIHwgJ3Jlc2V0JyB8ICdidXR0b24nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhbHVlPzogc3RyaW5nIHwgUmVhZG9ubHlBcnJheTxzdHJpbmc+IHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBDYW52YXNIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIHNwYW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIENvbGdyb3VwSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgc3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRGF0YUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIHZhbHVlPzogc3RyaW5nIHwgUmVhZG9ubHlBcnJheTxzdHJpbmc+IHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBEZXRhaWxzSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgb3Blbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgb25Ub2dnbGU/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRGVsSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgY2l0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkYXRlVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRGlhbG9nSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgb25DYW5jZWw/OiBSZWFjdEV2ZW50SGFuZGxlcjxUPiB8ICB1bmRlZmluZWQ7CiAgICAgICAgb25DbG9zZT86IFJlYWN0RXZlbnRIYW5kbGVyPFQ+IHwgIHVuZGVmaW5lZDsKICAgICAgICBvcGVuPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRW1iZWRIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEZpZWxkc2V0SFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgRm9ybUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGFjY2VwdENoYXJzZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYWN0aW9uPzoKICAgICAgICAgICAgfCBzdHJpbmcKICAgICAgICAgICAgfCB1bmRlZmluZWQKICAgICAgICAgICAgfCBET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEX0VYUEVSSU1FTlRBTF9GT1JNX0FDVElPTlNba2V5b2YgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TXTsKICAgICAgICBhdXRvQ29tcGxldGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW5jVHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtZXRob2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBub1ZhbGlkYXRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB0YXJnZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIEh0bWxIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBtYW5pZmVzdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgSWZyYW1lSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgYWxsb3c/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYWxsb3dGdWxsU2NyZWVuPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhbGxvd1RyYW5zcGFyZW5jeT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgZnJhbWVCb3JkZXI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxvYWRpbmc/OiAiZWFnZXIiIHwgImxhenkiIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBAZGVwcmVjYXRlZCAqLwogICAgICAgIG1hcmdpbkhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAvKiogQGRlcHJlY2F0ZWQgKi8KICAgICAgICBtYXJnaW5XaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlZmVycmVyUG9saWN5PzogSFRNTEF0dHJpYnV0ZVJlZmVycmVyUG9saWN5IHwgdW5kZWZpbmVkOwogICAgICAgIHNhbmRib3g/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgLyoqIEBkZXByZWNhdGVkICovCiAgICAgICAgc2Nyb2xsaW5nPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNlYW1sZXNzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjRG9jPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBJbWdIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY3Jvc3NPcmlnaW4/OiAiYW5vbnltb3VzIiB8ICJ1c2UtY3JlZGVudGlhbHMiIHwgIiIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVjb2Rpbmc/OiAiYXN5bmMiIHwgImF1dG8iIHwgInN5bmMiIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsb2FkaW5nPzogImVhZ2VyIiB8ICJsYXp5IiB8IHVuZGVmaW5lZDsKICAgICAgICByZWZlcnJlclBvbGljeT86IEhUTUxBdHRyaWJ1dGVSZWZlcnJlclBvbGljeSB8IHVuZGVmaW5lZDsKICAgICAgICBzaXplcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjU2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZU1hcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgSW5zSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgY2l0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkYXRlVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICB0eXBlIEhUTUxJbnB1dFR5cGVBdHRyaWJ1dGUgPQogICAgICAgIHwgJ2J1dHRvbicKICAgICAgICB8ICdjaGVja2JveCcKICAgICAgICB8ICdjb2xvcicKICAgICAgICB8ICdkYXRlJwogICAgICAgIHwgJ2RhdGV0aW1lLWxvY2FsJwogICAgICAgIHwgJ2VtYWlsJwogICAgICAgIHwgJ2ZpbGUnCiAgICAgICAgfCAnaGlkZGVuJwogICAgICAgIHwgJ2ltYWdlJwogICAgICAgIHwgJ21vbnRoJwogICAgICAgIHwgJ251bWJlcicKICAgICAgICB8ICdwYXNzd29yZCcKICAgICAgICB8ICdyYWRpbycKICAgICAgICB8ICdyYW5nZScKICAgICAgICB8ICdyZXNldCcKICAgICAgICB8ICdzZWFyY2gnCiAgICAgICAgfCAnc3VibWl0JwogICAgICAgIHwgJ3RlbCcKICAgICAgICB8ICd0ZXh0JwogICAgICAgIHwgJ3RpbWUnCiAgICAgICAgfCAndXJsJwogICAgICAgIHwgJ3dlZWsnCiAgICAgICAgfCAoc3RyaW5nICYge30pOwoKICAgIGludGVyZmFjZSBJbnB1dEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGFjY2VwdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYXV0b0NvbXBsZXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNhcHR1cmU/OiBib29sZWFuIHwgJ3VzZXInIHwgJ2Vudmlyb25tZW50JyB8IHVuZGVmaW5lZDsgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWwtbWVkaWEtY2FwdHVyZS8jdGhlLWNhcHR1cmUtYXR0cmlidXRlCiAgICAgICAgY2hlY2tlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY3Jvc3NPcmlnaW4/OiAiYW5vbnltb3VzIiB8ICJ1c2UtY3JlZGVudGlhbHMiIHwgIiIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGVyS2V5SGludD86ICdlbnRlcicgfCAnZG9uZScgfCAnZ28nIHwgJ25leHQnIHwgJ3ByZXZpb3VzJyB8ICdzZWFyY2gnIHwgJ3NlbmQnIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybUFjdGlvbj86CiAgICAgICAgICAgIHwgc3RyaW5nCiAgICAgICAgICAgIHwgRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRF9FWFBFUklNRU5UQUxfRk9STV9BQ1RJT05TW2tleW9mIERPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURfRVhQRVJJTUVOVEFMX0ZPUk1fQUNUSU9OU10KICAgICAgICAgICAgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybUVuY1R5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybU1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtTm9WYWxpZGF0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybVRhcmdldD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlzdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4TGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtaW5MZW5ndGg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbXVsdGlwbGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWFkT25seT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNpemU/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0ZXA/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86IEhUTUxJbnB1dFR5cGVBdHRyaWJ1dGUgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CgogICAgICAgIG9uQ2hhbmdlPzogQ2hhbmdlRXZlbnRIYW5kbGVyPFQ+IHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBLZXlnZW5IVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjaGFsbGVuZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAga2V5VHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrZXlQYXJhbXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTGFiZWxIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBmb3JtPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGh0bWxGb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIExpSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIExpbmtIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjcm9zc09yaWdpbj86ICJhbm9ueW1vdXMiIHwgInVzZS1jcmVkZW50aWFscyIgfCAiIiB8IHVuZGVmaW5lZDsKICAgICAgICBmZXRjaHByaW9yaXR5PzogImhpZ2giIHwgImxvdyIgfCAiYXV0byI7CiAgICAgICAgaHJlZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBocmVmTGFuZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBpbnRlZ3JpdHk/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VTcmNTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VTaXplcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZWZlcnJlclBvbGljeT86IEhUTUxBdHRyaWJ1dGVSZWZlcnJlclBvbGljeSB8IHVuZGVmaW5lZDsKICAgICAgICBzaXplcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0eXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNoYXJTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE1hcEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE1lbnVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICB0eXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBNZWRpYUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGF1dG9QbGF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250cm9scz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgY29udHJvbHNMaXN0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNyb3NzT3JpZ2luPzogImFub255bW91cyIgfCAidXNlLWNyZWRlbnRpYWxzIiB8ICIiIHwgdW5kZWZpbmVkOwogICAgICAgIGxvb3A/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG1lZGlhR3JvdXA/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbXV0ZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYXlzSW5saW5lPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVsb2FkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyYz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTWV0YUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGNoYXJTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHR0cEVxdWl2Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWVkaWE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29udGVudD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgTWV0ZXJIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBmb3JtPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhpZ2g/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbG93PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1heD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtaW4/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3B0aW11bT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB2YWx1ZT86IHN0cmluZyB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgUXVvdGVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjaXRlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBPYmplY3RIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBjbGFzc0lEPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRhdGE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0eXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZU1hcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3bW9kZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgT2xIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICByZXZlcnNlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3RhcnQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86ICcxJyB8ICdhJyB8ICdBJyB8ICdpJyB8ICdJJyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgT3B0Z3JvdXBIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE9wdGlvbkhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzZWxlY3RlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIE91dHB1dEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaHRtbEZvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBQYXJhbUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBSZWFkb25seUFycmF5PHN0cmluZz4gfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFByb2dyZXNzSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgbWF4PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhbHVlPzogc3RyaW5nIHwgUmVhZG9ubHlBcnJheTxzdHJpbmc+IHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBTbG90SFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgU2NyaXB0SFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgYXN5bmM/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIC8qKiBAZGVwcmVjYXRlZCAqLwogICAgICAgIGNoYXJTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY3Jvc3NPcmlnaW4/OiAiYW5vbnltb3VzIiB8ICJ1c2UtY3JlZGVudGlhbHMiIHwgIiIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGludGVncml0eT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBub01vZHVsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmZXJyZXJQb2xpY3k/OiBIVE1MQXR0cmlidXRlUmVmZXJyZXJQb2xpY3kgfCB1bmRlZmluZWQ7CiAgICAgICAgc3JjPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFNlbGVjdEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGF1dG9Db21wbGV0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtdWx0aXBsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc2l6ZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB2YWx1ZT86IHN0cmluZyB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86IENoYW5nZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgU291cmNlSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lZGlhPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNpemVzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyYz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmNTZXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgU3R5bGVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBtZWRpYT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFRhYmxlSFRNTEF0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgYWxpZ24/OiAibGVmdCIgfCAiY2VudGVyIiB8ICJyaWdodCIgfCB1bmRlZmluZWQ7CiAgICAgICAgYmdjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBib3JkZXI/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFBhZGRpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2VsbFNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZnJhbWU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJ1bGVzPzogIm5vbmUiIHwgImdyb3VwcyIgfCAicm93cyIgfCAiY29sdW1ucyIgfCAiYWxsIiB8IHVuZGVmaW5lZDsKICAgICAgICBzdW1tYXJ5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBUZXh0YXJlYUhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGF1dG9Db21wbGV0ZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGRpck5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4TGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkxlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlYWRPbmx5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcm93cz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB2YWx1ZT86IHN0cmluZyB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB3cmFwPzogc3RyaW5nIHwgdW5kZWZpbmVkOwoKICAgICAgICBvbkNoYW5nZT86IENoYW5nZUV2ZW50SGFuZGxlcjxUPiB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgVGRIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbGlnbj86ICJsZWZ0IiB8ICJjZW50ZXIiIHwgInJpZ2h0IiB8ICJqdXN0aWZ5IiB8ICJjaGFyIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xTcGFuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGhlYWRlcnM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcm93U3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzY29wZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhYmJyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YWxpZ24/OiAidG9wIiB8ICJtaWRkbGUiIHwgImJvdHRvbSIgfCAiYmFzZWxpbmUiIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBUaEhUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgSFRNTEF0dHJpYnV0ZXM8VD4gewogICAgICAgIGFsaWduPzogImxlZnQiIHwgImNlbnRlciIgfCAicmlnaHQiIHwgImp1c3RpZnkiIHwgImNoYXIiIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbFNwYW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgaGVhZGVycz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByb3dTcGFuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHNjb3BlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGFiYnI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFRpbWVIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkYXRlVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0KCiAgICBpbnRlcmZhY2UgVHJhY2tIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBkZWZhdWx0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBraW5kPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNyYz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmNMYW5nPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIGludGVyZmFjZSBWaWRlb0hUTUxBdHRyaWJ1dGVzPFQ+IGV4dGVuZHMgTWVkaWFIVE1MQXR0cmlidXRlczxUPiB7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYXlzSW5saW5lPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwb3N0ZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVSZW1vdGVQbGF5YmFjaz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9CgogICAgLy8gdGhpcyBsaXN0IGlzICJjb21wbGV0ZSIgaW4gdGhhdCBpdCBjb250YWlucyBldmVyeSBTVkcgYXR0cmlidXRlCiAgICAvLyB0aGF0IFJlYWN0IHN1cHBvcnRzLCBidXQgdGhlIHR5cGVzIGNhbiBiZSBpbXByb3ZlZC4KICAgIC8vIEZ1bGwgbGlzdCBoZXJlOiBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2RvbS1lbGVtZW50cy5odG1sCiAgICAvLwogICAgLy8gVGhlIHRocmVlIGJyb2FkIHR5cGUgY2F0ZWdvcmllcyBhcmUgKGluIG9yZGVyIG9mIHJlc3RyaWN0aXZlbmVzcyk6CiAgICAvLyAgIC0gIm51bWJlciB8IHN0cmluZyIKICAgIC8vICAgLSAic3RyaW5nIgogICAgLy8gICAtIHVuaW9uIG9mIHN0cmluZyBsaXRlcmFscwogICAgaW50ZXJmYWNlIFNWR0F0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBBcmlhQXR0cmlidXRlcywgRE9NQXR0cmlidXRlczxUPiB7CiAgICAgICAgLy8gUmVhY3Qtc3BlY2lmaWMgQXR0cmlidXRlcwogICAgICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIEF0dHJpYnV0ZXMgd2hpY2ggYWxzbyBkZWZpbmVkIGluIEhUTUxBdHRyaWJ1dGVzCiAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gU1ZHRE9NUHJvcGVydHlDb25maWcuanMKICAgICAgICBjbGFzc05hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxhbmc/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lZGlhPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtaW4/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IENTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CgogICAgICAgIC8vIE90aGVyIEhUTUwgcHJvcGVydGllcyBzdXBwb3J0ZWQgYnkgU1ZHIGVsZW1lbnRzIGluIGJyb3dzZXJzCiAgICAgICAgcm9sZT86IEFyaWFSb2xlIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYkluZGV4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGNyb3NzT3JpZ2luPzogImFub255bW91cyIgfCAidXNlLWNyZWRlbnRpYWxzIiB8ICIiIHwgdW5kZWZpbmVkOwoKICAgICAgICAvLyBTVkcgU3BlY2lmaWMgYXR0cmlidXRlcwogICAgICAgIGFjY2VudEhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhY2N1bXVsYXRlPzogIm5vbmUiIHwgInN1bSIgfCB1bmRlZmluZWQ7CiAgICAgICAgYWRkaXRpdmU/OiAicmVwbGFjZSIgfCAic3VtIiB8IHVuZGVmaW5lZDsKICAgICAgICBhbGlnbm1lbnRCYXNlbGluZT86ICJhdXRvIiB8ICJiYXNlbGluZSIgfCAiYmVmb3JlLWVkZ2UiIHwgInRleHQtYmVmb3JlLWVkZ2UiIHwgIm1pZGRsZSIgfCAiY2VudHJhbCIgfCAiYWZ0ZXItZWRnZSIgfAogICAgICAgICJ0ZXh0LWFmdGVyLWVkZ2UiIHwgImlkZW9ncmFwaGljIiB8ICJhbHBoYWJldGljIiB8ICJoYW5naW5nIiB8ICJtYXRoZW1hdGljYWwiIHwgImluaGVyaXQiIHwgdW5kZWZpbmVkOwogICAgICAgIGFsbG93UmVvcmRlcj86ICJubyIgfCAieWVzIiB8IHVuZGVmaW5lZDsKICAgICAgICBhbHBoYWJldGljPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGFtcGxpdHVkZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhcmFiaWNGb3JtPzogImluaXRpYWwiIHwgIm1lZGlhbCIgfCAidGVybWluYWwiIHwgImlzb2xhdGVkIiB8IHVuZGVmaW5lZDsKICAgICAgICBhc2NlbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYXR0cmlidXRlTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhdHRyaWJ1dGVUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGF1dG9SZXZlcnNlPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICBhemltdXRoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGJhc2VGcmVxdWVuY3k/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYmFzZWxpbmVTaGlmdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBiYXNlUHJvZmlsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBiYm94PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGJlZ2luPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGJpYXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgYnk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2FsY01vZGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2FwSGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNsaXA/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2xpcFBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY2xpcFBhdGhVbml0cz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjbGlwUnVsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xvckludGVycG9sYXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycz86ICJhdXRvIiB8ICJzUkdCIiB8ICJsaW5lYXJSR0IiIHwgImluaGVyaXQiIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbG9yUHJvZmlsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb2xvclJlbmRlcmluZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50U2NyaXB0VHlwZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50U3R5bGVUeXBlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGN1cnNvcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRlY2VsZXJhdGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVzY2VudD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaWZmdXNlQ29uc3RhbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlyZWN0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc3BsYXk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGl2aXNvcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkb21pbmFudEJhc2VsaW5lPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGR1cj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlZGdlTW9kZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbGV2YXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW5hYmxlQmFja2dyb3VuZD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbmQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZXhwb25lbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZD86IEJvb2xlYW5pc2ggfCB1bmRlZmluZWQ7CiAgICAgICAgZmlsbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmaWxsT3BhY2l0eT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmaWxsUnVsZT86ICJub256ZXJvIiB8ICJldmVub2RkIiB8ICJpbmhlcml0IiB8IHVuZGVmaW5lZDsKICAgICAgICBmaWx0ZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZmlsdGVyUmVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZpbHRlclVuaXRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZsb29kQ29sb3I/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZmxvb2RPcGFjaXR5PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvY3VzYWJsZT86IEJvb2xlYW5pc2ggfCAiYXV0byIgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9udEZhbWlseT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U2l6ZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U2l6ZUFkanVzdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U3RyZXRjaD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb250U3R5bGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9udFZhcmlhbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9udFdlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmb3JtYXQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZnI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZnJvbT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBmeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnMT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnMj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnbHlwaE5hbWU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGdseXBoUmVmPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGdyYWRpZW50VW5pdHM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaGFuZ2luZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBob3JpekFkdlg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaG9yaXpPcmlnaW5YPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaWRlb2dyYXBoaWM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VSZW5kZXJpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW4yPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGluPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGludGVyY2VwdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrMT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrMj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrMz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrND86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtlcm5lbE1hdHJpeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBrZXJuZWxVbml0TGVuZ3RoPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtlcm5pbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAga2V5UG9pbnRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGtleVNwbGluZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAga2V5VGltZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGVuZ3RoQWRqdXN0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGxldHRlclNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlnaHRpbmdDb2xvcj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBsb2NhbD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJFbmQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFya2VySGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1hcmtlck1pZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJTdGFydD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJVbml0cz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXJrZXJXaWR0aD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtYXNrPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1hc2tDb250ZW50VW5pdHM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWFza1VuaXRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1hdGhlbWF0aWNhbD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG51bU9jdGF2ZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb2Zmc2V0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9wYWNpdHk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3BlcmF0b3I/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3JkZXI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3JpZW50PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9yaWVudGF0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9yaWdpbj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBvdmVyZmxvdz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBvdmVybGluZVBvc2l0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG92ZXJsaW5lVGhpY2tuZXNzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBhaW50T3JkZXI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGFub3NlMT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBhdGhMZW5ndGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0dGVybkNvbnRlbnRVbml0cz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBhdHRlcm5Vbml0cz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb2ludGVyRXZlbnRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBvaW50cz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb2ludHNBdFg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcG9pbnRzQXRZPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBvaW50c0F0Wj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVzZXJ2ZUFscGhhPzogQm9vbGVhbmlzaCB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHByaW1pdGl2ZVVuaXRzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmFkaXVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlZlg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVmWT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZW5kZXJpbmdJbnRlbnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVwZWF0Q291bnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVwZWF0RHVyPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlcXVpcmVkRXh0ZW5zaW9ucz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZEZlYXR1cmVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlc3RhcnQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVzdWx0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJvdGF0ZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByeD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByeT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzY2FsZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzZWVkPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNoYXBlUmVuZGVyaW5nPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNsb3BlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwYWNpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3BlY3VsYXJDb25zdGFudD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcGVjdWxhckV4cG9uZW50PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwZWVkPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHNwcmVhZE1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdGFydE9mZnNldD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdGREZXZpYXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RlbWg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RlbXY/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RpdGNoVGlsZXM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3RvcENvbG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0b3BPcGFjaXR5PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cmlrZXRocm91Z2hQb3NpdGlvbj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cmluZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJva2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Ryb2tlRGFzaGFycmF5Pzogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cm9rZURhc2hvZmZzZXQ/OiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Ryb2tlTGluZWNhcD86ICJidXR0IiB8ICJyb3VuZCIgfCAic3F1YXJlIiB8ICJpbmhlcml0IiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJva2VMaW5lam9pbj86ICJtaXRlciIgfCAicm91bmQiIHwgImJldmVsIiB8ICJpbmhlcml0IiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHJva2VNaXRlcmxpbWl0PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0cm9rZU9wYWNpdHk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Ryb2tlV2lkdGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3VyZmFjZVNjYWxlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN5c3RlbUxhbmd1YWdlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYmxlVmFsdWVzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRhcmdldFg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdGFyZ2V0WT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0ZXh0QW5jaG9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRleHREZWNvcmF0aW9uPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRleHRMZW5ndGg/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdGV4dFJlbmRlcmluZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0bz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0cmFuc2Zvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdTE/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdTI/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5kZXJsaW5lUG9zaXRpb24/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVuaWNvZGU/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5pY29kZUJpZGk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5pY29kZVJhbmdlPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVuaXRzUGVyRW0/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdkFscGhhYmV0aWM/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsdWVzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlY3RvckVmZmVjdD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2ZXJzaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRBZHZZPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRPcmlnaW5YPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRPcmlnaW5ZPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZIYW5naW5nPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZJZGVvZ3JhcGhpYz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2aWV3Qm94Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZpZXdUYXJnZXQ/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmlzaWJpbGl0eT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2TWF0aGVtYXRpY2FsPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdpZHRocz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3b3JkU3BhY2luZz86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB3cml0aW5nTW9kZT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4MT86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4Mj86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhDaGFubmVsU2VsZWN0b3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeEhlaWdodD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bGlua0FjdHVhdGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeGxpbmtBcmNyb2xlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhsaW5rSHJlZj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bGlua1JvbGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeGxpbmtTaG93Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhsaW5rVGl0bGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeGxpbmtUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhtbEJhc2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeG1sTGFuZz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bWxucz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB4bWxuc1hsaW5rPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHhtbFNwYWNlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHkxPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHkyPzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHk/OiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgeUNoYW5uZWxTZWxlY3Rvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB6PzogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHpvb21BbmRQYW4/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFdlYlZpZXdIVE1MQXR0cmlidXRlczxUPiBleHRlbmRzIEhUTUxBdHRyaWJ1dGVzPFQ+IHsKICAgICAgICBhbGxvd0Z1bGxTY3JlZW4/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGFsbG93cG9wdXBzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhdXRvc2l6ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYmxpbmtmZWF0dXJlcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlYmxpbmtmZWF0dXJlcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZ3Vlc3RyZXNpemU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGV3ZWJzZWN1cml0eT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZ3Vlc3RpbnN0YW5jZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBodHRwcmVmZXJyZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbm9kZWludGVncmF0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBwYXJ0aXRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGx1Z2lucz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcHJlbG9hZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcmM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdXNlcmFnZW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHdlYnByZWZlcmVuY2VzPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfQoKICAgIC8vCiAgICAvLyBSZWFjdC5ET00KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBpbnRlcmZhY2UgUmVhY3RIVE1MIHsKICAgICAgICBhOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEFuY2hvckhUTUxBdHRyaWJ1dGVzPEhUTUxBbmNob3JFbGVtZW50PiwgSFRNTEFuY2hvckVsZW1lbnQ+OwogICAgICAgIGFiYnI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYWRkcmVzczogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBhcmVhOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEFyZWFIVE1MQXR0cmlidXRlczxIVE1MQXJlYUVsZW1lbnQ+LCBIVE1MQXJlYUVsZW1lbnQ+OwogICAgICAgIGFydGljbGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYXNpZGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYXVkaW86IERldGFpbGVkSFRNTEZhY3Rvcnk8QXVkaW9IVE1MQXR0cmlidXRlczxIVE1MQXVkaW9FbGVtZW50PiwgSFRNTEF1ZGlvRWxlbWVudD47CiAgICAgICAgYjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBiYXNlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEJhc2VIVE1MQXR0cmlidXRlczxIVE1MQmFzZUVsZW1lbnQ+LCBIVE1MQmFzZUVsZW1lbnQ+OwogICAgICAgIGJkaTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBiZG86IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgYmlnOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGJsb2NrcXVvdGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8QmxvY2txdW90ZUhUTUxBdHRyaWJ1dGVzPEhUTUxRdW90ZUVsZW1lbnQ+LCBIVE1MUXVvdGVFbGVtZW50PjsKICAgICAgICBib2R5OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxCb2R5RWxlbWVudD4sIEhUTUxCb2R5RWxlbWVudD47CiAgICAgICAgYnI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEJSRWxlbWVudD4sIEhUTUxCUkVsZW1lbnQ+OwogICAgICAgIGJ1dHRvbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxCdXR0b25IVE1MQXR0cmlidXRlczxIVE1MQnV0dG9uRWxlbWVudD4sIEhUTUxCdXR0b25FbGVtZW50PjsKICAgICAgICBjYW52YXM6IERldGFpbGVkSFRNTEZhY3Rvcnk8Q2FudmFzSFRNTEF0dHJpYnV0ZXM8SFRNTENhbnZhc0VsZW1lbnQ+LCBIVE1MQ2FudmFzRWxlbWVudD47CiAgICAgICAgY2FwdGlvbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBjZW50ZXI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgY2l0ZTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBjb2RlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGNvbDogRGV0YWlsZWRIVE1MRmFjdG9yeTxDb2xIVE1MQXR0cmlidXRlczxIVE1MVGFibGVDb2xFbGVtZW50PiwgSFRNTFRhYmxlQ29sRWxlbWVudD47CiAgICAgICAgY29sZ3JvdXA6IERldGFpbGVkSFRNTEZhY3Rvcnk8Q29sZ3JvdXBIVE1MQXR0cmlidXRlczxIVE1MVGFibGVDb2xFbGVtZW50PiwgSFRNTFRhYmxlQ29sRWxlbWVudD47CiAgICAgICAgZGF0YTogRGV0YWlsZWRIVE1MRmFjdG9yeTxEYXRhSFRNTEF0dHJpYnV0ZXM8SFRNTERhdGFFbGVtZW50PiwgSFRNTERhdGFFbGVtZW50PjsKICAgICAgICBkYXRhbGlzdDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRGF0YUxpc3RFbGVtZW50PiwgSFRNTERhdGFMaXN0RWxlbWVudD47CiAgICAgICAgZGQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgZGVsOiBEZXRhaWxlZEhUTUxGYWN0b3J5PERlbEhUTUxBdHRyaWJ1dGVzPEhUTUxNb2RFbGVtZW50PiwgSFRNTE1vZEVsZW1lbnQ+OwogICAgICAgIGRldGFpbHM6IERldGFpbGVkSFRNTEZhY3Rvcnk8RGV0YWlsc0hUTUxBdHRyaWJ1dGVzPEhUTUxEZXRhaWxzRWxlbWVudD4sIEhUTUxEZXRhaWxzRWxlbWVudD47CiAgICAgICAgZGZuOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGRpYWxvZzogRGV0YWlsZWRIVE1MRmFjdG9yeTxEaWFsb2dIVE1MQXR0cmlidXRlczxIVE1MRGlhbG9nRWxlbWVudD4sIEhUTUxEaWFsb2dFbGVtZW50PjsKICAgICAgICBkaXY6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+LCBIVE1MRGl2RWxlbWVudD47CiAgICAgICAgZGw6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTERMaXN0RWxlbWVudD4sIEhUTUxETGlzdEVsZW1lbnQ+OwogICAgICAgIGR0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGVtOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGVtYmVkOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEVtYmVkSFRNTEF0dHJpYnV0ZXM8SFRNTEVtYmVkRWxlbWVudD4sIEhUTUxFbWJlZEVsZW1lbnQ+OwogICAgICAgIGZpZWxkc2V0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEZpZWxkc2V0SFRNTEF0dHJpYnV0ZXM8SFRNTEZpZWxkU2V0RWxlbWVudD4sIEhUTUxGaWVsZFNldEVsZW1lbnQ+OwogICAgICAgIGZpZ2NhcHRpb246IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgZmlndXJlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGZvb3RlcjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBmb3JtOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEZvcm1IVE1MQXR0cmlidXRlczxIVE1MRm9ybUVsZW1lbnQ+LCBIVE1MRm9ybUVsZW1lbnQ+OwogICAgICAgIGgxOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgaDI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICBoMzogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgIGg0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgaDU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICBoNjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgIGhlYWQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MSGVhZEVsZW1lbnQ+OwogICAgICAgIGhlYWRlcjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBoZ3JvdXA6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgaHI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEhSRWxlbWVudD4sIEhUTUxIUkVsZW1lbnQ+OwogICAgICAgIGh0bWw6IERldGFpbGVkSFRNTEZhY3Rvcnk8SHRtbEhUTUxBdHRyaWJ1dGVzPEhUTUxIdG1sRWxlbWVudD4sIEhUTUxIdG1sRWxlbWVudD47CiAgICAgICAgaTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBpZnJhbWU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SWZyYW1lSFRNTEF0dHJpYnV0ZXM8SFRNTElGcmFtZUVsZW1lbnQ+LCBIVE1MSUZyYW1lRWxlbWVudD47CiAgICAgICAgaW1nOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEltZ0hUTUxBdHRyaWJ1dGVzPEhUTUxJbWFnZUVsZW1lbnQ+LCBIVE1MSW1hZ2VFbGVtZW50PjsKICAgICAgICBpbnB1dDogRGV0YWlsZWRIVE1MRmFjdG9yeTxJbnB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+LCBIVE1MSW5wdXRFbGVtZW50PjsKICAgICAgICBpbnM6IERldGFpbGVkSFRNTEZhY3Rvcnk8SW5zSFRNTEF0dHJpYnV0ZXM8SFRNTE1vZEVsZW1lbnQ+LCBIVE1MTW9kRWxlbWVudD47CiAgICAgICAga2JkOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIGtleWdlbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxLZXlnZW5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBsYWJlbDogRGV0YWlsZWRIVE1MRmFjdG9yeTxMYWJlbEhUTUxBdHRyaWJ1dGVzPEhUTUxMYWJlbEVsZW1lbnQ+LCBIVE1MTGFiZWxFbGVtZW50PjsKICAgICAgICBsZWdlbmQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTExlZ2VuZEVsZW1lbnQ+LCBIVE1MTGVnZW5kRWxlbWVudD47CiAgICAgICAgbGk6IERldGFpbGVkSFRNTEZhY3Rvcnk8TGlIVE1MQXR0cmlidXRlczxIVE1MTElFbGVtZW50PiwgSFRNTExJRWxlbWVudD47CiAgICAgICAgbGluazogRGV0YWlsZWRIVE1MRmFjdG9yeTxMaW5rSFRNTEF0dHJpYnV0ZXM8SFRNTExpbmtFbGVtZW50PiwgSFRNTExpbmtFbGVtZW50PjsKICAgICAgICBtYWluOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1hcDogRGV0YWlsZWRIVE1MRmFjdG9yeTxNYXBIVE1MQXR0cmlidXRlczxIVE1MTWFwRWxlbWVudD4sIEhUTUxNYXBFbGVtZW50PjsKICAgICAgICBtYXJrOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1lbnU6IERldGFpbGVkSFRNTEZhY3Rvcnk8TWVudUhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1lbnVpdGVtOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG1ldGE6IERldGFpbGVkSFRNTEZhY3Rvcnk8TWV0YUhUTUxBdHRyaWJ1dGVzPEhUTUxNZXRhRWxlbWVudD4sIEhUTUxNZXRhRWxlbWVudD47CiAgICAgICAgbWV0ZXI6IERldGFpbGVkSFRNTEZhY3Rvcnk8TWV0ZXJIVE1MQXR0cmlidXRlczxIVE1MTWV0ZXJFbGVtZW50PiwgSFRNTE1ldGVyRWxlbWVudD47CiAgICAgICAgbmF2OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG5vc2NyaXB0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIG9iamVjdDogRGV0YWlsZWRIVE1MRmFjdG9yeTxPYmplY3RIVE1MQXR0cmlidXRlczxIVE1MT2JqZWN0RWxlbWVudD4sIEhUTUxPYmplY3RFbGVtZW50PjsKICAgICAgICBvbDogRGV0YWlsZWRIVE1MRmFjdG9yeTxPbEhUTUxBdHRyaWJ1dGVzPEhUTUxPTGlzdEVsZW1lbnQ+LCBIVE1MT0xpc3RFbGVtZW50PjsKICAgICAgICBvcHRncm91cDogRGV0YWlsZWRIVE1MRmFjdG9yeTxPcHRncm91cEhUTUxBdHRyaWJ1dGVzPEhUTUxPcHRHcm91cEVsZW1lbnQ+LCBIVE1MT3B0R3JvdXBFbGVtZW50PjsKICAgICAgICBvcHRpb246IERldGFpbGVkSFRNTEZhY3Rvcnk8T3B0aW9uSFRNTEF0dHJpYnV0ZXM8SFRNTE9wdGlvbkVsZW1lbnQ+LCBIVE1MT3B0aW9uRWxlbWVudD47CiAgICAgICAgb3V0cHV0OiBEZXRhaWxlZEhUTUxGYWN0b3J5PE91dHB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxPdXRwdXRFbGVtZW50PiwgSFRNTE91dHB1dEVsZW1lbnQ+OwogICAgICAgIHA6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFBhcmFncmFwaEVsZW1lbnQ+LCBIVE1MUGFyYWdyYXBoRWxlbWVudD47CiAgICAgICAgcGFyYW06IERldGFpbGVkSFRNTEZhY3Rvcnk8UGFyYW1IVE1MQXR0cmlidXRlczxIVE1MUGFyYW1FbGVtZW50PiwgSFRNTFBhcmFtRWxlbWVudD47CiAgICAgICAgcGljdHVyZTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBwcmU6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFByZUVsZW1lbnQ+LCBIVE1MUHJlRWxlbWVudD47CiAgICAgICAgcHJvZ3Jlc3M6IERldGFpbGVkSFRNTEZhY3Rvcnk8UHJvZ3Jlc3NIVE1MQXR0cmlidXRlczxIVE1MUHJvZ3Jlc3NFbGVtZW50PiwgSFRNTFByb2dyZXNzRWxlbWVudD47CiAgICAgICAgcTogRGV0YWlsZWRIVE1MRmFjdG9yeTxRdW90ZUhUTUxBdHRyaWJ1dGVzPEhUTUxRdW90ZUVsZW1lbnQ+LCBIVE1MUXVvdGVFbGVtZW50PjsKICAgICAgICBycDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBydDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBydWJ5OiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHM6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc2FtcDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBzZWFyY2g6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc2xvdDogRGV0YWlsZWRIVE1MRmFjdG9yeTxTbG90SFRNTEF0dHJpYnV0ZXM8SFRNTFNsb3RFbGVtZW50PiwgSFRNTFNsb3RFbGVtZW50PjsKICAgICAgICBzY3JpcHQ6IERldGFpbGVkSFRNTEZhY3Rvcnk8U2NyaXB0SFRNTEF0dHJpYnV0ZXM8SFRNTFNjcmlwdEVsZW1lbnQ+LCBIVE1MU2NyaXB0RWxlbWVudD47CiAgICAgICAgc2VjdGlvbjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICBzZWxlY3Q6IERldGFpbGVkSFRNTEZhY3Rvcnk8U2VsZWN0SFRNTEF0dHJpYnV0ZXM8SFRNTFNlbGVjdEVsZW1lbnQ+LCBIVE1MU2VsZWN0RWxlbWVudD47CiAgICAgICAgc21hbGw6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc291cmNlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PFNvdXJjZUhUTUxBdHRyaWJ1dGVzPEhUTUxTb3VyY2VFbGVtZW50PiwgSFRNTFNvdXJjZUVsZW1lbnQ+OwogICAgICAgIHNwYW46IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFNwYW5FbGVtZW50PiwgSFRNTFNwYW5FbGVtZW50PjsKICAgICAgICBzdHJvbmc6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc3R5bGU6IERldGFpbGVkSFRNTEZhY3Rvcnk8U3R5bGVIVE1MQXR0cmlidXRlczxIVE1MU3R5bGVFbGVtZW50PiwgSFRNTFN0eWxlRWxlbWVudD47CiAgICAgICAgc3ViOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHN1bW1hcnk6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgc3VwOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHRhYmxlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PFRhYmxlSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlRWxlbWVudD4sIEhUTUxUYWJsZUVsZW1lbnQ+OwogICAgICAgIHRlbXBsYXRlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxUZW1wbGF0ZUVsZW1lbnQ+LCBIVE1MVGVtcGxhdGVFbGVtZW50PjsKICAgICAgICB0Ym9keTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4sIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PjsKICAgICAgICB0ZDogRGV0YWlsZWRIVE1MRmFjdG9yeTxUZEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD4sIEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD47CiAgICAgICAgdGV4dGFyZWE6IERldGFpbGVkSFRNTEZhY3Rvcnk8VGV4dGFyZWFIVE1MQXR0cmlidXRlczxIVE1MVGV4dEFyZWFFbGVtZW50PiwgSFRNTFRleHRBcmVhRWxlbWVudD47CiAgICAgICAgdGZvb3Q6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+LCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudD47CiAgICAgICAgdGg6IERldGFpbGVkSFRNTEZhY3Rvcnk8VGhIVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4sIEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PjsKICAgICAgICB0aGVhZDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4sIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PjsKICAgICAgICB0aW1lOiBEZXRhaWxlZEhUTUxGYWN0b3J5PFRpbWVIVE1MQXR0cmlidXRlczxIVE1MVGltZUVsZW1lbnQ+LCBIVE1MVGltZUVsZW1lbnQ+OwogICAgICAgIHRpdGxlOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxUaXRsZUVsZW1lbnQ+LCBIVE1MVGl0bGVFbGVtZW50PjsKICAgICAgICB0cjogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVGFibGVSb3dFbGVtZW50PiwgSFRNTFRhYmxlUm93RWxlbWVudD47CiAgICAgICAgdHJhY2s6IERldGFpbGVkSFRNTEZhY3Rvcnk8VHJhY2tIVE1MQXR0cmlidXRlczxIVE1MVHJhY2tFbGVtZW50PiwgSFRNTFRyYWNrRWxlbWVudD47CiAgICAgICAgdTogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICB1bDogRGV0YWlsZWRIVE1MRmFjdG9yeTxIVE1MQXR0cmlidXRlczxIVE1MVUxpc3RFbGVtZW50PiwgSFRNTFVMaXN0RWxlbWVudD47CiAgICAgICAgInZhciI6IERldGFpbGVkSFRNTEZhY3Rvcnk8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgdmlkZW86IERldGFpbGVkSFRNTEZhY3Rvcnk8VmlkZW9IVE1MQXR0cmlidXRlczxIVE1MVmlkZW9FbGVtZW50PiwgSFRNTFZpZGVvRWxlbWVudD47CiAgICAgICAgd2JyOiBEZXRhaWxlZEhUTUxGYWN0b3J5PEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgIHdlYnZpZXc6IERldGFpbGVkSFRNTEZhY3Rvcnk8V2ViVmlld0hUTUxBdHRyaWJ1dGVzPEhUTUxXZWJWaWV3RWxlbWVudD4sIEhUTUxXZWJWaWV3RWxlbWVudD47CiAgICB9CgogICAgaW50ZXJmYWNlIFJlYWN0U1ZHIHsKICAgICAgICBhbmltYXRlOiBTVkdGYWN0b3J5OwogICAgICAgIGNpcmNsZTogU1ZHRmFjdG9yeTsKICAgICAgICBjbGlwUGF0aDogU1ZHRmFjdG9yeTsKICAgICAgICBkZWZzOiBTVkdGYWN0b3J5OwogICAgICAgIGRlc2M6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZWxsaXBzZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZUJsZW5kOiBTVkdGYWN0b3J5OwogICAgICAgIGZlQ29sb3JNYXRyaXg6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVDb21wb25lbnRUcmFuc2ZlcjogU1ZHRmFjdG9yeTsKICAgICAgICBmZUNvbXBvc2l0ZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZUNvbnZvbHZlTWF0cml4OiBTVkdGYWN0b3J5OwogICAgICAgIGZlRGlmZnVzZUxpZ2h0aW5nOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRGlzcGxhY2VtZW50TWFwOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRGlzdGFudExpZ2h0OiBTVkdGYWN0b3J5OwogICAgICAgIGZlRHJvcFNoYWRvdzogU1ZHRmFjdG9yeTsKICAgICAgICBmZUZsb29kOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRnVuY0E6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVGdW5jQjogU1ZHRmFjdG9yeTsKICAgICAgICBmZUZ1bmNHOiBTVkdGYWN0b3J5OwogICAgICAgIGZlRnVuY1I6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVHYXVzc2lhbkJsdXI6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVJbWFnZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZU1lcmdlOiBTVkdGYWN0b3J5OwogICAgICAgIGZlTWVyZ2VOb2RlOiBTVkdGYWN0b3J5OwogICAgICAgIGZlTW9ycGhvbG9neTogU1ZHRmFjdG9yeTsKICAgICAgICBmZU9mZnNldDogU1ZHRmFjdG9yeTsKICAgICAgICBmZVBvaW50TGlnaHQ6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmVTcGVjdWxhckxpZ2h0aW5nOiBTVkdGYWN0b3J5OwogICAgICAgIGZlU3BvdExpZ2h0OiBTVkdGYWN0b3J5OwogICAgICAgIGZlVGlsZTogU1ZHRmFjdG9yeTsKICAgICAgICBmZVR1cmJ1bGVuY2U6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZmlsdGVyOiBTVkdGYWN0b3J5OwogICAgICAgIGZvcmVpZ25PYmplY3Q6IFNWR0ZhY3Rvcnk7CiAgICAgICAgZzogU1ZHRmFjdG9yeTsKICAgICAgICBpbWFnZTogU1ZHRmFjdG9yeTsKICAgICAgICBsaW5lOiBTVkdGYWN0b3J5OwogICAgICAgIGxpbmVhckdyYWRpZW50OiBTVkdGYWN0b3J5OwogICAgICAgIG1hcmtlcjogU1ZHRmFjdG9yeTsKICAgICAgICBtYXNrOiBTVkdGYWN0b3J5OwogICAgICAgIG1ldGFkYXRhOiBTVkdGYWN0b3J5OwogICAgICAgIHBhdGg6IFNWR0ZhY3Rvcnk7CiAgICAgICAgcGF0dGVybjogU1ZHRmFjdG9yeTsKICAgICAgICBwb2x5Z29uOiBTVkdGYWN0b3J5OwogICAgICAgIHBvbHlsaW5lOiBTVkdGYWN0b3J5OwogICAgICAgIHJhZGlhbEdyYWRpZW50OiBTVkdGYWN0b3J5OwogICAgICAgIHJlY3Q6IFNWR0ZhY3Rvcnk7CiAgICAgICAgc3RvcDogU1ZHRmFjdG9yeTsKICAgICAgICBzdmc6IFNWR0ZhY3Rvcnk7CiAgICAgICAgc3dpdGNoOiBTVkdGYWN0b3J5OwogICAgICAgIHN5bWJvbDogU1ZHRmFjdG9yeTsKICAgICAgICB0ZXh0OiBTVkdGYWN0b3J5OwogICAgICAgIHRleHRQYXRoOiBTVkdGYWN0b3J5OwogICAgICAgIHRzcGFuOiBTVkdGYWN0b3J5OwogICAgICAgIHVzZTogU1ZHRmFjdG9yeTsKICAgICAgICB2aWV3OiBTVkdGYWN0b3J5OwogICAgfQoKICAgIGludGVyZmFjZSBSZWFjdERPTSBleHRlbmRzIFJlYWN0SFRNTCwgUmVhY3RTVkcgeyB9CgogICAgLy8KICAgIC8vIFJlYWN0LlByb3BUeXBlcwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIHR5cGUgVmFsaWRhdG9yPFQ+ID0gUHJvcFR5cGVzLlZhbGlkYXRvcjxUPjsKCiAgICB0eXBlIFJlcXVpcmVhYmxlPFQ+ID0gUHJvcFR5cGVzLlJlcXVpcmVhYmxlPFQ+OwoKICAgIHR5cGUgVmFsaWRhdGlvbk1hcDxUPiA9IFByb3BUeXBlcy5WYWxpZGF0aW9uTWFwPFQ+OwoKICAgIHR5cGUgV2Vha1ZhbGlkYXRpb25NYXA8VD4gPSB7CiAgICAgICAgW0sgaW4ga2V5b2YgVF0/OiBudWxsIGV4dGVuZHMgVFtLXQogICAgICAgICAgICA/IFZhbGlkYXRvcjxUW0tdIHwgbnVsbCB8IHVuZGVmaW5lZD4KICAgICAgICAgICAgOiB1bmRlZmluZWQgZXh0ZW5kcyBUW0tdCiAgICAgICAgICAgID8gVmFsaWRhdG9yPFRbS10gfCBudWxsIHwgdW5kZWZpbmVkPgogICAgICAgICAgICA6IFZhbGlkYXRvcjxUW0tdPgogICAgfTsKCiAgICBpbnRlcmZhY2UgUmVhY3RQcm9wVHlwZXMgewogICAgICAgIGFueTogdHlwZW9mIFByb3BUeXBlcy5hbnk7CiAgICAgICAgYXJyYXk6IHR5cGVvZiBQcm9wVHlwZXMuYXJyYXk7CiAgICAgICAgYm9vbDogdHlwZW9mIFByb3BUeXBlcy5ib29sOwogICAgICAgIGZ1bmM6IHR5cGVvZiBQcm9wVHlwZXMuZnVuYzsKICAgICAgICBudW1iZXI6IHR5cGVvZiBQcm9wVHlwZXMubnVtYmVyOwogICAgICAgIG9iamVjdDogdHlwZW9mIFByb3BUeXBlcy5vYmplY3Q7CiAgICAgICAgc3RyaW5nOiB0eXBlb2YgUHJvcFR5cGVzLnN0cmluZzsKICAgICAgICBub2RlOiB0eXBlb2YgUHJvcFR5cGVzLm5vZGU7CiAgICAgICAgZWxlbWVudDogdHlwZW9mIFByb3BUeXBlcy5lbGVtZW50OwogICAgICAgIGluc3RhbmNlT2Y6IHR5cGVvZiBQcm9wVHlwZXMuaW5zdGFuY2VPZjsKICAgICAgICBvbmVPZjogdHlwZW9mIFByb3BUeXBlcy5vbmVPZjsKICAgICAgICBvbmVPZlR5cGU6IHR5cGVvZiBQcm9wVHlwZXMub25lT2ZUeXBlOwogICAgICAgIGFycmF5T2Y6IHR5cGVvZiBQcm9wVHlwZXMuYXJyYXlPZjsKICAgICAgICBvYmplY3RPZjogdHlwZW9mIFByb3BUeXBlcy5vYmplY3RPZjsKICAgICAgICBzaGFwZTogdHlwZW9mIFByb3BUeXBlcy5zaGFwZTsKICAgICAgICBleGFjdDogdHlwZW9mIFByb3BUeXBlcy5leGFjdDsKICAgIH0KCiAgICAvLwogICAgLy8gUmVhY3QuQ2hpbGRyZW4KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIC0gVXNlIGB0eXBlb2YgUmVhY3QuQ2hpbGRyZW5gIGluc3RlYWQuCiAgICAgKi8KICAgIC8vIFN5bmMgd2l0aCB0eXBlIG9mIGBjb25zdCBDaGlsZHJlbmAuCiAgICBpbnRlcmZhY2UgUmVhY3RDaGlsZHJlbiB7CiAgICAgICAgbWFwPFQsIEM+KGNoaWxkcmVuOiBDIHwgUmVhZG9ubHlBcnJheTxDPiwgZm46IChjaGlsZDogQywgaW5kZXg6IG51bWJlcikgPT4gVCk6CiAgICAgICAgICAgIEMgZXh0ZW5kcyBudWxsIHwgdW5kZWZpbmVkID8gQyA6IEFycmF5PEV4Y2x1ZGU8VCwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ+PjsKICAgICAgICBmb3JFYWNoPEM+KGNoaWxkcmVuOiBDIHwgUmVhZG9ubHlBcnJheTxDPiwgZm46IChjaGlsZDogQywgaW5kZXg6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQ7CiAgICAgICAgY291bnQoY2hpbGRyZW46IGFueSk6IG51bWJlcjsKICAgICAgICBvbmx5PEM+KGNoaWxkcmVuOiBDKTogQyBleHRlbmRzIGFueVtdID8gbmV2ZXIgOiBDOwogICAgICAgIHRvQXJyYXkoY2hpbGRyZW46IFJlYWN0Tm9kZSB8IFJlYWN0Tm9kZVtdKTogQXJyYXk8RXhjbHVkZTxSZWFjdE5vZGUsIGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkPj47CiAgICB9CgogICAgLy8KICAgIC8vIEJyb3dzZXIgSW50ZXJmYWNlcwogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25pa2VlZS8yMDQ4LXR5cGVzY3JpcHQvYmxvYi9tYXN0ZXIvMjA0OC9qcy90b3VjaC5kLnRzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgaW50ZXJmYWNlIEFic3RyYWN0VmlldyB7CiAgICAgICAgc3R5bGVNZWRpYTogU3R5bGVNZWRpYTsKICAgICAgICBkb2N1bWVudDogRG9jdW1lbnQ7CiAgICB9CgogICAgaW50ZXJmYWNlIFRvdWNoIHsKICAgICAgICBpZGVudGlmaWVyOiBudW1iZXI7CiAgICAgICAgdGFyZ2V0OiBFdmVudFRhcmdldDsKICAgICAgICBzY3JlZW5YOiBudW1iZXI7CiAgICAgICAgc2NyZWVuWTogbnVtYmVyOwogICAgICAgIGNsaWVudFg6IG51bWJlcjsKICAgICAgICBjbGllbnRZOiBudW1iZXI7CiAgICAgICAgcGFnZVg6IG51bWJlcjsKICAgICAgICBwYWdlWTogbnVtYmVyOwogICAgfQoKICAgIGludGVyZmFjZSBUb3VjaExpc3QgewogICAgICAgIFtpbmRleDogbnVtYmVyXTogVG91Y2g7CiAgICAgICAgbGVuZ3RoOiBudW1iZXI7CiAgICAgICAgaXRlbShpbmRleDogbnVtYmVyKTogVG91Y2g7CiAgICAgICAgaWRlbnRpZmllZFRvdWNoKGlkZW50aWZpZXI6IG51bWJlcik6IFRvdWNoOwogICAgfQoKICAgIC8vCiAgICAvLyBFcnJvciBJbnRlcmZhY2VzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBpbnRlcmZhY2UgRXJyb3JJbmZvIHsKICAgICAgICAvKioKICAgICAgICAgKiBDYXB0dXJlcyB3aGljaCBjb21wb25lbnQgY29udGFpbmVkIHRoZSBleGNlcHRpb24sIGFuZCBpdHMgYW5jZXN0b3JzLgogICAgICAgICAqLwogICAgICAgIGNvbXBvbmVudFN0YWNrOiBzdHJpbmc7CiAgICB9CgogICAgLy8gS2VlcCBpbiBzeW5jIHdpdGggSlNYIG5hbWVzcGFjZSBpbiAuL2pzeC1ydW50aW1lLmQudHMgYW5kIC4vanN4LWRldi1ydW50aW1lLmQudHMKICAgIG5hbWVzcGFjZSBKU1ggewogICAgICAgIHR5cGUgRWxlbWVudFR5cGUgPSBHbG9iYWxKU1hFbGVtZW50VHlwZTsKICAgICAgICBpbnRlcmZhY2UgRWxlbWVudCBleHRlbmRzIEdsb2JhbEpTWEVsZW1lbnQge30KICAgICAgICBpbnRlcmZhY2UgRWxlbWVudENsYXNzIGV4dGVuZHMgR2xvYmFsSlNYRWxlbWVudENsYXNzIHt9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRBdHRyaWJ1dGVzUHJvcGVydHkgZXh0ZW5kcyBHbG9iYWxKU1hFbGVtZW50QXR0cmlidXRlc1Byb3BlcnR5IHt9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRDaGlsZHJlbkF0dHJpYnV0ZSBleHRlbmRzIEdsb2JhbEpTWEVsZW1lbnRDaGlsZHJlbkF0dHJpYnV0ZSB7fQoKICAgICAgICB0eXBlIExpYnJhcnlNYW5hZ2VkQXR0cmlidXRlczxDLCBQPiA9IEdsb2JhbEpTWExpYnJhcnlNYW5hZ2VkQXR0cmlidXRlczxDLCBQPjsKCiAgICAgICAgaW50ZXJmYWNlIEludHJpbnNpY0F0dHJpYnV0ZXMgZXh0ZW5kcyBHbG9iYWxKU1hJbnRyaW5zaWNBdHRyaWJ1dGVzIHt9CiAgICAgICAgaW50ZXJmYWNlIEludHJpbnNpY0NsYXNzQXR0cmlidXRlczxUPiBleHRlbmRzIEdsb2JhbEpTWEludHJpbnNpY0NsYXNzQXR0cmlidXRlczxUPiB7fQogICAgICAgIGludGVyZmFjZSBJbnRyaW5zaWNFbGVtZW50cyBleHRlbmRzIEdsb2JhbEpTWEludHJpbnNpY0VsZW1lbnRzIHt9CiAgICB9Cn0KCi8vIG5ha2VkICdhbnknIHR5cGUgaW4gYSBjb25kaXRpb25hbCB0eXBlIHdpbGwgc2hvcnQgY2lyY3VpdCBhbmQgdW5pb24gYm90aCB0aGUgdGhlbi9lbHNlIGJyYW5jaGVzCi8vIHNvIGJvb2xlYW4gaXMgb25seSByZXNvbHZlZCBmb3IgVCA9IGFueQp0eXBlIElzRXhhY3RseUFueTxUPiA9IGJvb2xlYW4gZXh0ZW5kcyAoVCBleHRlbmRzIG5ldmVyID8gdHJ1ZSA6IGZhbHNlKSA/IHRydWUgOiBmYWxzZTsKCnR5cGUgRXhhY3RseUFueVByb3BlcnR5S2V5czxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IElzRXhhY3RseUFueTxUW0tdPiBleHRlbmRzIHRydWUgPyBLIDogbmV2ZXIgfVtrZXlvZiBUXTsKdHlwZSBOb3RFeGFjdGx5QW55UHJvcGVydHlLZXlzPFQ+ID0gRXhjbHVkZTxrZXlvZiBULCBFeGFjdGx5QW55UHJvcGVydHlLZXlzPFQ+PjsKCi8vIFRyeSB0byByZXNvbHZlIGlsbC1kZWZpbmVkIHByb3BzIGxpa2UgZm9yIEpTIHVzZXJzOiBwcm9wcyBjYW4gYmUgYW55LCBvciBzb21ldGltZXMgb2JqZWN0cyB3aXRoIHByb3BlcnRpZXMgb2YgdHlwZSBhbnkKdHlwZSBNZXJnZVByb3BUeXBlczxQLCBUPiA9CiAgICAvLyBEaXN0cmlidXRlIG92ZXIgUCBpbiBjYXNlIGl0IGlzIGEgdW5pb24gdHlwZQogICAgUCBleHRlbmRzIGFueQogICAgICAgIC8vIElmIHByb3BzIGlzIHR5cGUgYW55LCB1c2UgcHJvcFR5cGVzIGRlZmluaXRpb25zCiAgICAgICAgPyBJc0V4YWN0bHlBbnk8UD4gZXh0ZW5kcyB0cnVlID8gVCA6CiAgICAgICAgICAgIC8vIElmIGRlY2xhcmVkIHByb3BzIGhhdmUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBpZ25vcmUgaW5mZXJyZWQgcHJvcHMgZW50aXJlbHkgYXMga2V5b2YgZ2V0cyB3aWRlbmVkCiAgICAgICAgICAgIHN0cmluZyBleHRlbmRzIGtleW9mIFAgPyBQIDoKICAgICAgICAgICAgICAgIC8vIFByZWZlciBkZWNsYXJlZCB0eXBlcyB3aGljaCBhcmUgbm90IGV4YWN0bHkgYW55CiAgICAgICAgICAgICAgICAmIFBpY2s8UCwgTm90RXhhY3RseUFueVByb3BlcnR5S2V5czxQPj4KICAgICAgICAgICAgICAgIC8vIEZvciBwcm9wcyB3aGljaCBhcmUgZXhhY3RseSBhbnksIHVzZSB0aGUgdHlwZSBpbmZlcnJlZCBmcm9tIHByb3BUeXBlcyBpZiBwcmVzZW50CiAgICAgICAgICAgICAgICAmIFBpY2s8VCwgRXhjbHVkZTxrZXlvZiBULCBOb3RFeGFjdGx5QW55UHJvcGVydHlLZXlzPFA+Pj4KICAgICAgICAgICAgICAgIC8vIEtlZXAgbGVmdG92ZXIgcHJvcHMgbm90IHNwZWNpZmllZCBpbiBwcm9wVHlwZXMKICAgICAgICAgICAgICAgICYgUGljazxQLCBFeGNsdWRlPGtleW9mIFAsIGtleW9mIFQ+PgogICAgICAgIDogbmV2ZXI7Cgp0eXBlIEluZXhhY3RQYXJ0aWFsPFQ+ID0geyBbSyBpbiBrZXlvZiBUXT86IFRbS10gfCB1bmRlZmluZWQgfTsKCi8vIEFueSBwcm9wIHRoYXQgaGFzIGEgZGVmYXVsdCBwcm9wIGJlY29tZXMgb3B0aW9uYWwsIGJ1dCBpdHMgdHlwZSBpcyB1bmNoYW5nZWQKLy8gVW5kZWNsYXJlZCBkZWZhdWx0IHByb3BzIGFyZSBhdWdtZW50ZWQgaW50byB0aGUgcmVzdWx0aW5nIGFsbG93YWJsZSBhdHRyaWJ1dGVzCi8vIElmIGRlY2xhcmVkIHByb3BzIGhhdmUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBpZ25vcmUgZGVmYXVsdCBwcm9wcyBlbnRpcmVseSBhcyBrZXlvZiBnZXRzIHdpZGVuZWQKLy8gV3JhcCBpbiBhbiBvdXRlci1sZXZlbCBjb25kaXRpb25hbCB0eXBlIHRvIGFsbG93IGRpc3RyaWJ1dGlvbiBvdmVyIHByb3BzIHRoYXQgYXJlIHVuaW9ucwp0eXBlIERlZmF1bHRpemU8UCwgRD4gPSBQIGV4dGVuZHMgYW55CiAgICA/IHN0cmluZyBleHRlbmRzIGtleW9mIFAgPyBQIDoKICAgICAgICAmIFBpY2s8UCwgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBEPj4KICAgICAgICAmIEluZXhhY3RQYXJ0aWFsPFBpY2s8UCwgRXh0cmFjdDxrZXlvZiBQLCBrZXlvZiBEPj4+CiAgICAgICAgJiBJbmV4YWN0UGFydGlhbDxQaWNrPEQsIEV4Y2x1ZGU8a2V5b2YgRCwga2V5b2YgUD4+PgogICAgOiBuZXZlcjsKCnR5cGUgUmVhY3RNYW5hZ2VkQXR0cmlidXRlczxDLCBQPiA9IEMgZXh0ZW5kcyB7IHByb3BUeXBlczogaW5mZXIgVDsgZGVmYXVsdFByb3BzOiBpbmZlciBEOyB9CiAgICA/IERlZmF1bHRpemU8TWVyZ2VQcm9wVHlwZXM8UCwgUHJvcFR5cGVzLkluZmVyUHJvcHM8VD4+LCBEPgogICAgOiBDIGV4dGVuZHMgeyBwcm9wVHlwZXM6IGluZmVyIFQ7IH0KICAgICAgICA/IE1lcmdlUHJvcFR5cGVzPFAsIFByb3BUeXBlcy5JbmZlclByb3BzPFQ+PgogICAgICAgIDogQyBleHRlbmRzIHsgZGVmYXVsdFByb3BzOiBpbmZlciBEOyB9CiAgICAgICAgICAgID8gRGVmYXVsdGl6ZTxQLCBEPgogICAgICAgICAgICA6IFA7CgpkZWNsYXJlIGdsb2JhbCB7CiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIFVzZSBgUmVhY3QuSlNYYCBpbnN0ZWFkIG9mIHRoZSBnbG9iYWwgYEpTWGAgbmFtZXNwYWNlLgogICAgICovCiAgICBuYW1lc3BhY2UgSlNYIHsKICAgICAgICAvLyBXZSBkb24ndCBqdXN0IGFsaWFzIFJlYWN0LkVsZW1lbnRUeXBlIGJlY2F1c2UgUmVhY3QuRWxlbWVudFR5cGUKICAgICAgICAvLyBoaXN0b3JpY2FsbHkgZG9lcyBtb3JlIHRoYW4gd2UgbmVlZCBpdCB0by4KICAgICAgICAvLyBFLmcuIGl0IGFsc28gY29udGFpbnMgLnByb3BUeXBlcyBhbmQgc28gVFMgYWxzbyB2ZXJpZmllcyB0aGUgZGVjbGFyZWQKICAgICAgICAvLyBwcm9wcyB0eXBlIGRvZXMgbWF0Y2ggdGhlIGRlY2xhcmVkIC5wcm9wVHlwZXMuCiAgICAgICAgLy8gQnV0IGlmIGxpYnJhcmllcyBkZWNsYXJlZCB0aGVpciAucHJvcFR5cGVzIGJ1dCBub3QgcHJvcHMgdHlwZSwKICAgICAgICAvLyBvciB0aGV5IG1pc21hdGNoLCB5b3Ugd29uJ3QgYmUgYWJsZSB0byB1c2UgdGhlIGNsYXNzIGNvbXBvbmVudAogICAgICAgIC8vIGFzIGEgSlNYLkVsZW1lbnRUeXBlLgogICAgICAgIC8vIFdlIGNvdWxkIGZpeCB0aGlzIGV2ZXJ5d2hlcmUgYnV0IHdlJ3JlIHVsdGltYXRlbHkgbm90IGludGVyZXN0ZWQgaW4KICAgICAgICAvLyAucHJvcFR5cGVzIGFzc2lnbmFiaWxpdHkgc28gd2UgbWlnaHQgYXMgd2VsbCBkcm9wIGl0IGVudGlyZWx5IGhlcmUgdG8KICAgICAgICAvLyAgcmVkdWNlIHRoZSB3b3JrIG9mIHRoZSB0eXBlLWNoZWNrZXIuCiAgICAgICAgLy8gVE9ETzogQ2hlY2sgaW1wYWN0IG9mIG1ha2luZyBSZWFjdC5FbGVtZW50VHlwZTxQID0gYW55PiA9IFJlYWN0LkpTWEVsZW1lbnRDb25zdHJ1Y3RvcjxQPgogICAgICAgIHR5cGUgRWxlbWVudFR5cGUgPSBzdHJpbmcgfCBSZWFjdC5KU1hFbGVtZW50Q29uc3RydWN0b3I8YW55PjsKICAgICAgICBpbnRlcmZhY2UgRWxlbWVudCBleHRlbmRzIFJlYWN0LlJlYWN0RWxlbWVudDxhbnksIGFueT4geyB9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRDbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnk+IHsKICAgICAgICAgICAgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICB9CiAgICAgICAgaW50ZXJmYWNlIEVsZW1lbnRBdHRyaWJ1dGVzUHJvcGVydHkgeyBwcm9wczoge307IH0KICAgICAgICBpbnRlcmZhY2UgRWxlbWVudENoaWxkcmVuQXR0cmlidXRlIHsgY2hpbGRyZW46IHt9OyB9CgogICAgICAgIC8vIFdlIGNhbid0IHJlY3Vyc2UgZm9yZXZlciBiZWNhdXNlIGB0eXBlYCBjYW4ndCBiZSBzZWxmLXJlZmVyZW50aWFsOwogICAgICAgIC8vIGxldCdzIGFzc3VtZSBpdCdzIHJlYXNvbmFibGUgdG8gZG8gYSBzaW5nbGUgUmVhY3QubGF6eSgpIGFyb3VuZCBhIHNpbmdsZSBSZWFjdC5tZW1vKCkgLyB2aWNlLXZlcnNhCiAgICAgICAgdHlwZSBMaWJyYXJ5TWFuYWdlZEF0dHJpYnV0ZXM8QywgUD4gPSBDIGV4dGVuZHMgUmVhY3QuTWVtb0V4b3RpY0NvbXBvbmVudDxpbmZlciBUPiB8IFJlYWN0LkxhenlFeG90aWNDb21wb25lbnQ8aW5mZXIgVD4KICAgICAgICAgICAgPyBUIGV4dGVuZHMgUmVhY3QuTWVtb0V4b3RpY0NvbXBvbmVudDxpbmZlciBVPiB8IFJlYWN0LkxhenlFeG90aWNDb21wb25lbnQ8aW5mZXIgVT4KICAgICAgICAgICAgICAgID8gUmVhY3RNYW5hZ2VkQXR0cmlidXRlczxVLCBQPgogICAgICAgICAgICAgICAgOiBSZWFjdE1hbmFnZWRBdHRyaWJ1dGVzPFQsIFA+CiAgICAgICAgICAgIDogUmVhY3RNYW5hZ2VkQXR0cmlidXRlczxDLCBQPjsKCiAgICAgICAgaW50ZXJmYWNlIEludHJpbnNpY0F0dHJpYnV0ZXMgZXh0ZW5kcyBSZWFjdC5BdHRyaWJ1dGVzIHsgfQogICAgICAgIGludGVyZmFjZSBJbnRyaW5zaWNDbGFzc0F0dHJpYnV0ZXM8VD4gZXh0ZW5kcyBSZWFjdC5DbGFzc0F0dHJpYnV0ZXM8VD4geyB9CgogICAgICAgIGludGVyZmFjZSBJbnRyaW5zaWNFbGVtZW50cyB7CiAgICAgICAgICAgIC8vIEhUTUwKICAgICAgICAgICAgYTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuQW5jaG9ySFRNTEF0dHJpYnV0ZXM8SFRNTEFuY2hvckVsZW1lbnQ+LCBIVE1MQW5jaG9yRWxlbWVudD47CiAgICAgICAgICAgIGFiYnI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBhZGRyZXNzOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgYXJlYTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuQXJlYUhUTUxBdHRyaWJ1dGVzPEhUTUxBcmVhRWxlbWVudD4sIEhUTUxBcmVhRWxlbWVudD47CiAgICAgICAgICAgIGFydGljbGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBhc2lkZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGF1ZGlvOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5BdWRpb0hUTUxBdHRyaWJ1dGVzPEhUTUxBdWRpb0VsZW1lbnQ+LCBIVE1MQXVkaW9FbGVtZW50PjsKICAgICAgICAgICAgYjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGJhc2U6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkJhc2VIVE1MQXR0cmlidXRlczxIVE1MQmFzZUVsZW1lbnQ+LCBIVE1MQmFzZUVsZW1lbnQ+OwogICAgICAgICAgICBiZGk6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBiZG86IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBiaWc6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBibG9ja3F1b3RlOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5CbG9ja3F1b3RlSFRNTEF0dHJpYnV0ZXM8SFRNTFF1b3RlRWxlbWVudD4sIEhUTUxRdW90ZUVsZW1lbnQ+OwogICAgICAgICAgICBib2R5OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MQm9keUVsZW1lbnQ+LCBIVE1MQm9keUVsZW1lbnQ+OwogICAgICAgICAgICBicjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEJSRWxlbWVudD4sIEhUTUxCUkVsZW1lbnQ+OwogICAgICAgICAgICBidXR0b246IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkJ1dHRvbkhUTUxBdHRyaWJ1dGVzPEhUTUxCdXR0b25FbGVtZW50PiwgSFRNTEJ1dHRvbkVsZW1lbnQ+OwogICAgICAgICAgICBjYW52YXM6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkNhbnZhc0hUTUxBdHRyaWJ1dGVzPEhUTUxDYW52YXNFbGVtZW50PiwgSFRNTENhbnZhc0VsZW1lbnQ+OwogICAgICAgICAgICBjYXB0aW9uOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgY2VudGVyOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgY2l0ZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGNvZGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBjb2w6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkNvbEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZUNvbEVsZW1lbnQ+LCBIVE1MVGFibGVDb2xFbGVtZW50PjsKICAgICAgICAgICAgY29sZ3JvdXA6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkNvbGdyb3VwSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlQ29sRWxlbWVudD4sIEhUTUxUYWJsZUNvbEVsZW1lbnQ+OwogICAgICAgICAgICBkYXRhOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5EYXRhSFRNTEF0dHJpYnV0ZXM8SFRNTERhdGFFbGVtZW50PiwgSFRNTERhdGFFbGVtZW50PjsKICAgICAgICAgICAgZGF0YWxpc3Q6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxEYXRhTGlzdEVsZW1lbnQ+LCBIVE1MRGF0YUxpc3RFbGVtZW50PjsKICAgICAgICAgICAgZGQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBkZWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkRlbEhUTUxBdHRyaWJ1dGVzPEhUTUxNb2RFbGVtZW50PiwgSFRNTE1vZEVsZW1lbnQ+OwogICAgICAgICAgICBkZXRhaWxzOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5EZXRhaWxzSFRNTEF0dHJpYnV0ZXM8SFRNTERldGFpbHNFbGVtZW50PiwgSFRNTERldGFpbHNFbGVtZW50PjsKICAgICAgICAgICAgZGZuOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZGlhbG9nOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5EaWFsb2dIVE1MQXR0cmlidXRlczxIVE1MRGlhbG9nRWxlbWVudD4sIEhUTUxEaWFsb2dFbGVtZW50PjsKICAgICAgICAgICAgZGl2OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4sIEhUTUxEaXZFbGVtZW50PjsKICAgICAgICAgICAgZGw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxETGlzdEVsZW1lbnQ+LCBIVE1MRExpc3RFbGVtZW50PjsKICAgICAgICAgICAgZHQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBlbTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGVtYmVkOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5FbWJlZEhUTUxBdHRyaWJ1dGVzPEhUTUxFbWJlZEVsZW1lbnQ+LCBIVE1MRW1iZWRFbGVtZW50PjsKICAgICAgICAgICAgZmllbGRzZXQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkZpZWxkc2V0SFRNTEF0dHJpYnV0ZXM8SFRNTEZpZWxkU2V0RWxlbWVudD4sIEhUTUxGaWVsZFNldEVsZW1lbnQ+OwogICAgICAgICAgICBmaWdjYXB0aW9uOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZmlndXJlOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZm9vdGVyOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgZm9ybTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuRm9ybUhUTUxBdHRyaWJ1dGVzPEhUTUxGb3JtRWxlbWVudD4sIEhUTUxGb3JtRWxlbWVudD47CiAgICAgICAgICAgIGgxOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgICAgICBoMjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICAgICAgaDM6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgICAgIGg0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MSGVhZGluZ0VsZW1lbnQ+LCBIVE1MSGVhZGluZ0VsZW1lbnQ+OwogICAgICAgICAgICBoNTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEhlYWRpbmdFbGVtZW50PiwgSFRNTEhlYWRpbmdFbGVtZW50PjsKICAgICAgICAgICAgaDY6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkaW5nRWxlbWVudD4sIEhUTUxIZWFkaW5nRWxlbWVudD47CiAgICAgICAgICAgIGhlYWQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxIZWFkRWxlbWVudD4sIEhUTUxIZWFkRWxlbWVudD47CiAgICAgICAgICAgIGhlYWRlcjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGhncm91cDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIGhyOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MSFJFbGVtZW50PiwgSFRNTEhSRWxlbWVudD47CiAgICAgICAgICAgIGh0bWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lkh0bWxIVE1MQXR0cmlidXRlczxIVE1MSHRtbEVsZW1lbnQ+LCBIVE1MSHRtbEVsZW1lbnQ+OwogICAgICAgICAgICBpOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgaWZyYW1lOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JZnJhbWVIVE1MQXR0cmlidXRlczxIVE1MSUZyYW1lRWxlbWVudD4sIEhUTUxJRnJhbWVFbGVtZW50PjsKICAgICAgICAgICAgaW1nOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JbWdIVE1MQXR0cmlidXRlczxIVE1MSW1hZ2VFbGVtZW50PiwgSFRNTEltYWdlRWxlbWVudD47CiAgICAgICAgICAgIGlucHV0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JbnB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+LCBIVE1MSW5wdXRFbGVtZW50PjsKICAgICAgICAgICAgaW5zOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5JbnNIVE1MQXR0cmlidXRlczxIVE1MTW9kRWxlbWVudD4sIEhUTUxNb2RFbGVtZW50PjsKICAgICAgICAgICAga2JkOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAga2V5Z2VuOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5LZXlnZW5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbGFiZWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkxhYmVsSFRNTEF0dHJpYnV0ZXM8SFRNTExhYmVsRWxlbWVudD4sIEhUTUxMYWJlbEVsZW1lbnQ+OwogICAgICAgICAgICBsZWdlbmQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxMZWdlbmRFbGVtZW50PiwgSFRNTExlZ2VuZEVsZW1lbnQ+OwogICAgICAgICAgICBsaTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuTGlIVE1MQXR0cmlidXRlczxIVE1MTElFbGVtZW50PiwgSFRNTExJRWxlbWVudD47CiAgICAgICAgICAgIGxpbms6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkxpbmtIVE1MQXR0cmlidXRlczxIVE1MTGlua0VsZW1lbnQ+LCBIVE1MTGlua0VsZW1lbnQ+OwogICAgICAgICAgICBtYWluOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbWFwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5NYXBIVE1MQXR0cmlidXRlczxIVE1MTWFwRWxlbWVudD4sIEhUTUxNYXBFbGVtZW50PjsKICAgICAgICAgICAgbWFyazogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIG1lbnU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lk1lbnVIVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbWVudWl0ZW06IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBtZXRhOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5NZXRhSFRNTEF0dHJpYnV0ZXM8SFRNTE1ldGFFbGVtZW50PiwgSFRNTE1ldGFFbGVtZW50PjsKICAgICAgICAgICAgbWV0ZXI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lk1ldGVySFRNTEF0dHJpYnV0ZXM8SFRNTE1ldGVyRWxlbWVudD4sIEhUTUxNZXRlckVsZW1lbnQ+OwogICAgICAgICAgICBuYXY6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBub2luZGV4OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgbm9zY3JpcHQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBvYmplY3Q6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0Lk9iamVjdEhUTUxBdHRyaWJ1dGVzPEhUTUxPYmplY3RFbGVtZW50PiwgSFRNTE9iamVjdEVsZW1lbnQ+OwogICAgICAgICAgICBvbDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuT2xIVE1MQXR0cmlidXRlczxIVE1MT0xpc3RFbGVtZW50PiwgSFRNTE9MaXN0RWxlbWVudD47CiAgICAgICAgICAgIG9wdGdyb3VwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5PcHRncm91cEhUTUxBdHRyaWJ1dGVzPEhUTUxPcHRHcm91cEVsZW1lbnQ+LCBIVE1MT3B0R3JvdXBFbGVtZW50PjsKICAgICAgICAgICAgb3B0aW9uOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5PcHRpb25IVE1MQXR0cmlidXRlczxIVE1MT3B0aW9uRWxlbWVudD4sIEhUTUxPcHRpb25FbGVtZW50PjsKICAgICAgICAgICAgb3V0cHV0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5PdXRwdXRIVE1MQXR0cmlidXRlczxIVE1MT3V0cHV0RWxlbWVudD4sIEhUTUxPdXRwdXRFbGVtZW50PjsKICAgICAgICAgICAgcDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFBhcmFncmFwaEVsZW1lbnQ+LCBIVE1MUGFyYWdyYXBoRWxlbWVudD47CiAgICAgICAgICAgIHBhcmFtOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5QYXJhbUhUTUxBdHRyaWJ1dGVzPEhUTUxQYXJhbUVsZW1lbnQ+LCBIVE1MUGFyYW1FbGVtZW50PjsKICAgICAgICAgICAgcGljdHVyZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHByZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFByZUVsZW1lbnQ+LCBIVE1MUHJlRWxlbWVudD47CiAgICAgICAgICAgIHByb2dyZXNzOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5Qcm9ncmVzc0hUTUxBdHRyaWJ1dGVzPEhUTUxQcm9ncmVzc0VsZW1lbnQ+LCBIVE1MUHJvZ3Jlc3NFbGVtZW50PjsKICAgICAgICAgICAgcTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuUXVvdGVIVE1MQXR0cmlidXRlczxIVE1MUXVvdGVFbGVtZW50PiwgSFRNTFF1b3RlRWxlbWVudD47CiAgICAgICAgICAgIHJwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgcnQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBydWJ5OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgczogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHNhbXA6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBzZWFyY2g6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBzbG90OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5TbG90SFRNTEF0dHJpYnV0ZXM8SFRNTFNsb3RFbGVtZW50PiwgSFRNTFNsb3RFbGVtZW50PjsKICAgICAgICAgICAgc2NyaXB0OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5TY3JpcHRIVE1MQXR0cmlidXRlczxIVE1MU2NyaXB0RWxlbWVudD4sIEhUTUxTY3JpcHRFbGVtZW50PjsKICAgICAgICAgICAgc2VjdGlvbjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHNlbGVjdDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuU2VsZWN0SFRNTEF0dHJpYnV0ZXM8SFRNTFNlbGVjdEVsZW1lbnQ+LCBIVE1MU2VsZWN0RWxlbWVudD47CiAgICAgICAgICAgIHNtYWxsOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgc291cmNlOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5Tb3VyY2VIVE1MQXR0cmlidXRlczxIVE1MU291cmNlRWxlbWVudD4sIEhUTUxTb3VyY2VFbGVtZW50PjsKICAgICAgICAgICAgc3BhbjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFNwYW5FbGVtZW50PiwgSFRNTFNwYW5FbGVtZW50PjsKICAgICAgICAgICAgc3Ryb25nOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgc3R5bGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LlN0eWxlSFRNTEF0dHJpYnV0ZXM8SFRNTFN0eWxlRWxlbWVudD4sIEhUTUxTdHlsZUVsZW1lbnQ+OwogICAgICAgICAgICBzdWI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICBzdW1tYXJ5OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgc3VwOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgdGFibGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LlRhYmxlSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlRWxlbWVudD4sIEhUTUxUYWJsZUVsZW1lbnQ+OwogICAgICAgICAgICB0ZW1wbGF0ZTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRlbXBsYXRlRWxlbWVudD4sIEhUTUxUZW1wbGF0ZUVsZW1lbnQ+OwogICAgICAgICAgICB0Ym9keTogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+LCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudD47CiAgICAgICAgICAgIHRkOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5UZEhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD4sIEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudD47CiAgICAgICAgICAgIHRleHRhcmVhOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5UZXh0YXJlYUhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+LCBIVE1MVGV4dEFyZWFFbGVtZW50PjsKICAgICAgICAgICAgdGZvb3Q6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PiwgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+OwogICAgICAgICAgICB0aDogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuVGhIVE1MQXR0cmlidXRlczxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4sIEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50PjsKICAgICAgICAgICAgdGhlYWQ6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PiwgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+OwogICAgICAgICAgICB0aW1lOiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5UaW1lSFRNTEF0dHJpYnV0ZXM8SFRNTFRpbWVFbGVtZW50PiwgSFRNTFRpbWVFbGVtZW50PjsKICAgICAgICAgICAgdGl0bGU6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUaXRsZUVsZW1lbnQ+LCBIVE1MVGl0bGVFbGVtZW50PjsKICAgICAgICAgICAgdHI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxUYWJsZVJvd0VsZW1lbnQ+LCBIVE1MVGFibGVSb3dFbGVtZW50PjsKICAgICAgICAgICAgdHJhY2s6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LlRyYWNrSFRNTEF0dHJpYnV0ZXM8SFRNTFRyYWNrRWxlbWVudD4sIEhUTUxUcmFja0VsZW1lbnQ+OwogICAgICAgICAgICB1OiBSZWFjdC5EZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRWxlbWVudD4sIEhUTUxFbGVtZW50PjsKICAgICAgICAgICAgdWw6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxVTGlzdEVsZW1lbnQ+LCBIVE1MVUxpc3RFbGVtZW50PjsKICAgICAgICAgICAgInZhciI6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50PiwgSFRNTEVsZW1lbnQ+OwogICAgICAgICAgICB2aWRlbzogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuVmlkZW9IVE1MQXR0cmlidXRlczxIVE1MVmlkZW9FbGVtZW50PiwgSFRNTFZpZGVvRWxlbWVudD47CiAgICAgICAgICAgIHdicjogUmVhY3QuRGV0YWlsZWRIVE1MUHJvcHM8UmVhY3QuSFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCBIVE1MRWxlbWVudD47CiAgICAgICAgICAgIHdlYnZpZXc6IFJlYWN0LkRldGFpbGVkSFRNTFByb3BzPFJlYWN0LldlYlZpZXdIVE1MQXR0cmlidXRlczxIVE1MV2ViVmlld0VsZW1lbnQ+LCBIVE1MV2ViVmlld0VsZW1lbnQ+OwoKICAgICAgICAgICAgLy8gU1ZHCiAgICAgICAgICAgIHN2ZzogUmVhY3QuU1ZHUHJvcHM8U1ZHU1ZHRWxlbWVudD47CgogICAgICAgICAgICBhbmltYXRlOiBSZWFjdC5TVkdQcm9wczxTVkdFbGVtZW50PjsgLy8gVE9ETzogSXQgaXMgU1ZHQW5pbWF0ZUVsZW1lbnQgYnV0IGlzIG5vdCBpbiBUeXBlU2NyaXB0J3MgbGliLmRvbS5kLnRzIGZvciBub3cuCiAgICAgICAgICAgIGFuaW1hdGVNb3Rpb246IFJlYWN0LlNWR1Byb3BzPFNWR0VsZW1lbnQ+OwogICAgICAgICAgICBhbmltYXRlVHJhbnNmb3JtOiBSZWFjdC5TVkdQcm9wczxTVkdFbGVtZW50PjsgLy8gVE9ETzogSXQgaXMgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQgYnV0IGlzIG5vdCBpbiBUeXBlU2NyaXB0J3MgbGliLmRvbS5kLnRzIGZvciBub3cuCiAgICAgICAgICAgIGNpcmNsZTogUmVhY3QuU1ZHUHJvcHM8U1ZHQ2lyY2xlRWxlbWVudD47CiAgICAgICAgICAgIGNsaXBQYXRoOiBSZWFjdC5TVkdQcm9wczxTVkdDbGlwUGF0aEVsZW1lbnQ+OwogICAgICAgICAgICBkZWZzOiBSZWFjdC5TVkdQcm9wczxTVkdEZWZzRWxlbWVudD47CiAgICAgICAgICAgIGRlc2M6IFJlYWN0LlNWR1Byb3BzPFNWR0Rlc2NFbGVtZW50PjsKICAgICAgICAgICAgZWxsaXBzZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRWxsaXBzZUVsZW1lbnQ+OwogICAgICAgICAgICBmZUJsZW5kOiBSZWFjdC5TVkdQcm9wczxTVkdGRUJsZW5kRWxlbWVudD47CiAgICAgICAgICAgIGZlQ29sb3JNYXRyaXg6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50PjsKICAgICAgICAgICAgZmVDb21wb25lbnRUcmFuc2ZlcjogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ+OwogICAgICAgICAgICBmZUNvbXBvc2l0ZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVDb21wb3NpdGVFbGVtZW50PjsKICAgICAgICAgICAgZmVDb252b2x2ZU1hdHJpeDogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ+OwogICAgICAgICAgICBmZURpZmZ1c2VMaWdodGluZzogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50PjsKICAgICAgICAgICAgZmVEaXNwbGFjZW1lbnRNYXA6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudD47CiAgICAgICAgICAgIGZlRGlzdGFudExpZ2h0OiBSZWFjdC5TVkdQcm9wczxTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ+OwogICAgICAgICAgICBmZURyb3BTaGFkb3c6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ+OwogICAgICAgICAgICBmZUZsb29kOiBSZWFjdC5TVkdQcm9wczxTVkdGRUZsb29kRWxlbWVudD47CiAgICAgICAgICAgIGZlRnVuY0E6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRnVuY0FFbGVtZW50PjsKICAgICAgICAgICAgZmVGdW5jQjogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVGdW5jQkVsZW1lbnQ+OwogICAgICAgICAgICBmZUZ1bmNHOiBSZWFjdC5TVkdQcm9wczxTVkdGRUZ1bmNHRWxlbWVudD47CiAgICAgICAgICAgIGZlRnVuY1I6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFRnVuY1JFbGVtZW50PjsKICAgICAgICAgICAgZmVHYXVzc2lhbkJsdXI6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudD47CiAgICAgICAgICAgIGZlSW1hZ2U6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFSW1hZ2VFbGVtZW50PjsKICAgICAgICAgICAgZmVNZXJnZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVNZXJnZUVsZW1lbnQ+OwogICAgICAgICAgICBmZU1lcmdlTm9kZTogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVNZXJnZU5vZGVFbGVtZW50PjsKICAgICAgICAgICAgZmVNb3JwaG9sb2d5OiBSZWFjdC5TVkdQcm9wczxTVkdGRU1vcnBob2xvZ3lFbGVtZW50PjsKICAgICAgICAgICAgZmVPZmZzZXQ6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFT2Zmc2V0RWxlbWVudD47CiAgICAgICAgICAgIGZlUG9pbnRMaWdodDogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVQb2ludExpZ2h0RWxlbWVudD47CiAgICAgICAgICAgIGZlU3BlY3VsYXJMaWdodGluZzogUmVhY3QuU1ZHUHJvcHM8U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudD47CiAgICAgICAgICAgIGZlU3BvdExpZ2h0OiBSZWFjdC5TVkdQcm9wczxTVkdGRVNwb3RMaWdodEVsZW1lbnQ+OwogICAgICAgICAgICBmZVRpbGU6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFVGlsZUVsZW1lbnQ+OwogICAgICAgICAgICBmZVR1cmJ1bGVuY2U6IFJlYWN0LlNWR1Byb3BzPFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ+OwogICAgICAgICAgICBmaWx0ZXI6IFJlYWN0LlNWR1Byb3BzPFNWR0ZpbHRlckVsZW1lbnQ+OwogICAgICAgICAgICBmb3JlaWduT2JqZWN0OiBSZWFjdC5TVkdQcm9wczxTVkdGb3JlaWduT2JqZWN0RWxlbWVudD47CiAgICAgICAgICAgIGc6IFJlYWN0LlNWR1Byb3BzPFNWR0dFbGVtZW50PjsKICAgICAgICAgICAgaW1hZ2U6IFJlYWN0LlNWR1Byb3BzPFNWR0ltYWdlRWxlbWVudD47CiAgICAgICAgICAgIGxpbmU6IFJlYWN0LlNWR0xpbmVFbGVtZW50QXR0cmlidXRlczxTVkdMaW5lRWxlbWVudD47CiAgICAgICAgICAgIGxpbmVhckdyYWRpZW50OiBSZWFjdC5TVkdQcm9wczxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ+OwogICAgICAgICAgICBtYXJrZXI6IFJlYWN0LlNWR1Byb3BzPFNWR01hcmtlckVsZW1lbnQ+OwogICAgICAgICAgICBtYXNrOiBSZWFjdC5TVkdQcm9wczxTVkdNYXNrRWxlbWVudD47CiAgICAgICAgICAgIG1ldGFkYXRhOiBSZWFjdC5TVkdQcm9wczxTVkdNZXRhZGF0YUVsZW1lbnQ+OwogICAgICAgICAgICBtcGF0aDogUmVhY3QuU1ZHUHJvcHM8U1ZHRWxlbWVudD47CiAgICAgICAgICAgIHBhdGg6IFJlYWN0LlNWR1Byb3BzPFNWR1BhdGhFbGVtZW50PjsKICAgICAgICAgICAgcGF0dGVybjogUmVhY3QuU1ZHUHJvcHM8U1ZHUGF0dGVybkVsZW1lbnQ+OwogICAgICAgICAgICBwb2x5Z29uOiBSZWFjdC5TVkdQcm9wczxTVkdQb2x5Z29uRWxlbWVudD47CiAgICAgICAgICAgIHBvbHlsaW5lOiBSZWFjdC5TVkdQcm9wczxTVkdQb2x5bGluZUVsZW1lbnQ+OwogICAgICAgICAgICByYWRpYWxHcmFkaWVudDogUmVhY3QuU1ZHUHJvcHM8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50PjsKICAgICAgICAgICAgcmVjdDogUmVhY3QuU1ZHUHJvcHM8U1ZHUmVjdEVsZW1lbnQ+OwogICAgICAgICAgICBzdG9wOiBSZWFjdC5TVkdQcm9wczxTVkdTdG9wRWxlbWVudD47CiAgICAgICAgICAgIHN3aXRjaDogUmVhY3QuU1ZHUHJvcHM8U1ZHU3dpdGNoRWxlbWVudD47CiAgICAgICAgICAgIHN5bWJvbDogUmVhY3QuU1ZHUHJvcHM8U1ZHU3ltYm9sRWxlbWVudD47CiAgICAgICAgICAgIHRleHQ6IFJlYWN0LlNWR1RleHRFbGVtZW50QXR0cmlidXRlczxTVkdUZXh0RWxlbWVudD47CiAgICAgICAgICAgIHRleHRQYXRoOiBSZWFjdC5TVkdQcm9wczxTVkdUZXh0UGF0aEVsZW1lbnQ+OwogICAgICAgICAgICB0c3BhbjogUmVhY3QuU1ZHUHJvcHM8U1ZHVFNwYW5FbGVtZW50PjsKICAgICAgICAgICAgdXNlOiBSZWFjdC5TVkdQcm9wczxTVkdVc2VFbGVtZW50PjsKICAgICAgICAgICAgdmlldzogUmVhY3QuU1ZHUHJvcHM8U1ZHVmlld0VsZW1lbnQ+OwogICAgICAgIH0KICAgIH0KfQoKLy8gUmVhY3QuSlNYIG5lZWRzIHRvIHBvaW50IHRvIGdsb2JhbC5KU1ggdG8ga2VlcCBnbG9iYWwgbW9kdWxlIGF1Z21lbnRhdGlvbnMgaW50YWN0LgovLyBCdXQgd2UgY2FuJ3QgYWNjZXNzIGdsb2JhbC5KU1ggc28gd2UgbmVlZCB0byBjcmVhdGUgdGhlc2UgYWxpYXNlcyBpbnN0ZWFkLgovLyBPbmNlIHRoZSBnbG9iYWwgSlNYIG5hbWVzcGFjZSB3aWxsIGJlIHJlbW92ZWQgd2UgcmVwbGFjZSBSZWFjdC5KU1ggd2l0aCB0aGUgY29udGVudHMgb2YgZ2xvYmFsLkpTWAp0eXBlIEdsb2JhbEpTWEVsZW1lbnRUeXBlID0gSlNYLkVsZW1lbnRUeXBlOwppbnRlcmZhY2UgR2xvYmFsSlNYRWxlbWVudCBleHRlbmRzIEpTWC5FbGVtZW50IHt9CmludGVyZmFjZSBHbG9iYWxKU1hFbGVtZW50Q2xhc3MgZXh0ZW5kcyBKU1guRWxlbWVudENsYXNzIHt9CmludGVyZmFjZSBHbG9iYWxKU1hFbGVtZW50QXR0cmlidXRlc1Byb3BlcnR5IGV4dGVuZHMgSlNYLkVsZW1lbnRBdHRyaWJ1dGVzUHJvcGVydHkge30KaW50ZXJmYWNlIEdsb2JhbEpTWEVsZW1lbnRDaGlsZHJlbkF0dHJpYnV0ZSBleHRlbmRzIEpTWC5FbGVtZW50Q2hpbGRyZW5BdHRyaWJ1dGUge30KCnR5cGUgR2xvYmFsSlNYTGlicmFyeU1hbmFnZWRBdHRyaWJ1dGVzPEMsIFA+ID0gSlNYLkxpYnJhcnlNYW5hZ2VkQXR0cmlidXRlczxDLCBQPjsKCmludGVyZmFjZSBHbG9iYWxKU1hJbnRyaW5zaWNBdHRyaWJ1dGVzIGV4dGVuZHMgSlNYLkludHJpbnNpY0F0dHJpYnV0ZXMge30KaW50ZXJmYWNlIEdsb2JhbEpTWEludHJpbnNpY0NsYXNzQXR0cmlidXRlczxUPiBleHRlbmRzIEpTWC5JbnRyaW5zaWNDbGFzc0F0dHJpYnV0ZXM8VD4ge30KCmludGVyZmFjZSBHbG9iYWxKU1hJbnRyaW5zaWNFbGVtZW50cyBleHRlbmRzIEpTWC5JbnRyaW5zaWNFbGVtZW50cyB7fQo=","base64").toString("utf8")},elements:{url:"https://tlkfrontprodpublic.blob.core.windows.net/template-builder-production/tb-jsx.editor/elements.d.ts",sha256:"e3981b97a14159fcb236b232a765795765872a18ebdf2c7708c7fe9606a94e4b",source:Buffer.from("Cgp0eXBlIFByaW1pdGl2ZSA9IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCB8IGJpZ2ludCB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkOwoKZGVjbGFyZSBuYW1lc3BhY2UgdXRpbCB7CiAgICB0eXBlIEFzc2VydEVxdWFsPFQsIFU+ID0gKDxWPigpID0+IFYgZXh0ZW5kcyBUID8gMSA6IDIpIGV4dGVuZHMgPFY+KCkgPT4gViBleHRlbmRzIFUgPyAxIDogMiA/IHRydWUgOiBmYWxzZTsKICAgIGV4cG9ydCB0eXBlIGlzQW55PFQ+ID0gMCBleHRlbmRzIDEgJiBUID8gdHJ1ZSA6IGZhbHNlOwogICAgZXhwb3J0IGNvbnN0IGFzc2VydEVxdWFsOiA8QSwgQj4odmFsOiBBc3NlcnRFcXVhbDxBLCBCPikgPT4gQXNzZXJ0RXF1YWw8QSwgQj47CiAgICBleHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4oX2FyZzogVCk6IHZvaWQ7CiAgICBleHBvcnQgZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoX3g6IG5ldmVyKTogbmV2ZXI7CiAgICBleHBvcnQgdHlwZSBPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IFBpY2s8VCwgRXhjbHVkZTxrZXlvZiBULCBLPj47CiAgICBleHBvcnQgdHlwZSBPbWl0S2V5czxULCBLIGV4dGVuZHMgc3RyaW5nPiA9IFBpY2s8VCwgRXhjbHVkZTxrZXlvZiBULCBLPj47CiAgICBleHBvcnQgdHlwZSBNYWtlUGFydGlhbDxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBPbWl0PFQsIEs+ICYgUGFydGlhbDxQaWNrPFQsIEs+PjsKICAgIGV4cG9ydCB0eXBlIEV4YWN0bHk8VCwgWD4gPSBUICYgUmVjb3JkPEV4Y2x1ZGU8a2V5b2YgWCwga2V5b2YgVD4sIG5ldmVyPjsKICAgIGV4cG9ydCBjb25zdCBhcnJheVRvRW51bTogPFQgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBbVCwgLi4uVFtdXT4oaXRlbXM6IFUpID0+IHsgW2sgaW4gVVtudW1iZXJdXTogazsgfTsKICAgIGV4cG9ydCBjb25zdCBnZXRWYWxpZEVudW1WYWx1ZXM6IChvYmo6IGFueSkgPT4gYW55W107CiAgICBleHBvcnQgY29uc3Qgb2JqZWN0VmFsdWVzOiAob2JqOiBhbnkpID0+IGFueVtdOwogICAgZXhwb3J0IGNvbnN0IG9iamVjdEtleXM6IE9iamVjdENvbnN0cnVjdG9yWyJrZXlzIl07CiAgICBleHBvcnQgY29uc3QgZmluZDogPFQ+KGFycjogVFtdLCBjaGVja2VyOiAoYXJnOiBUKSA9PiBhbnkpID0+IFQgfCB1bmRlZmluZWQ7CiAgICBleHBvcnQgdHlwZSBpZGVudGl0eTxUPiA9IG9iamVjdFV0aWwuaWRlbnRpdHk8VD47CiAgICBleHBvcnQgdHlwZSBmbGF0dGVuPFQ+ID0gb2JqZWN0VXRpbC5mbGF0dGVuPFQ+OwogICAgZXhwb3J0IHR5cGUgbm9VbmRlZmluZWQ8VD4gPSBUIGV4dGVuZHMgdW5kZWZpbmVkID8gbmV2ZXIgOiBUOwogICAgZXhwb3J0IGNvbnN0IGlzSW50ZWdlcjogTnVtYmVyQ29uc3RydWN0b3JbImlzSW50ZWdlciJdOwogICAgZXhwb3J0IGZ1bmN0aW9uIGpvaW5WYWx1ZXM8VCBleHRlbmRzIGFueVtdPihhcnJheTogVCwgc2VwYXJhdG9yPzogc3RyaW5nKTogc3RyaW5nOwogICAgZXhwb3J0IGNvbnN0IGpzb25TdHJpbmdpZnlSZXBsYWNlcjogKF86IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55OwogICAgZXhwb3J0IHt9Owp9CmRlY2xhcmUgbmFtZXNwYWNlIG9iamVjdFV0aWwgewogICAgZXhwb3J0IHR5cGUgTWVyZ2VTaGFwZXM8VSwgVj4gPSB7CiAgICAgICAgW2sgaW4gRXhjbHVkZTxrZXlvZiBVLCBrZXlvZiBWPl06IFVba107CiAgICB9ICYgVjsKICAgIHR5cGUgb3B0aW9uYWxLZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0gewogICAgICAgIFtrIGluIGtleW9mIFRdOiB1bmRlZmluZWQgZXh0ZW5kcyBUW2tdID8gayA6IG5ldmVyOwogICAgfVtrZXlvZiBUXTsKICAgIHR5cGUgcmVxdWlyZWRLZXlzPFQgZXh0ZW5kcyBvYmplY3Q+ID0gewogICAgICAgIFtrIGluIGtleW9mIFRdOiB1bmRlZmluZWQgZXh0ZW5kcyBUW2tdID8gbmV2ZXIgOiBrOwogICAgfVtrZXlvZiBUXTsKICAgIGV4cG9ydCB0eXBlIGFkZFF1ZXN0aW9uTWFya3M8VCBleHRlbmRzIG9iamVjdCwgX08gPSBhbnk+ID0gewogICAgICAgIFtLIGluIHJlcXVpcmVkS2V5czxUPl06IFRbS107CiAgICB9ICYgewogICAgICAgIFtLIGluIG9wdGlvbmFsS2V5czxUPl0/OiBUW0tdOwogICAgfSAmIHsKICAgICAgICBbayBpbiBrZXlvZiBUXT86IHVua25vd247CiAgICB9OwogICAgZXhwb3J0IHR5cGUgaWRlbnRpdHk8VD4gPSBUOwogICAgZXhwb3J0IHR5cGUgZmxhdHRlbjxUPiA9IGlkZW50aXR5PHsKICAgICAgICBbayBpbiBrZXlvZiBUXTogVFtrXTsKICAgIH0+OwogICAgZXhwb3J0IHR5cGUgbm9OZXZlcktleXM8VD4gPSB7CiAgICAgICAgW2sgaW4ga2V5b2YgVF06IFtUW2tdXSBleHRlbmRzIFtuZXZlcl0gPyBuZXZlciA6IGs7CiAgICB9W2tleW9mIFRdOwogICAgZXhwb3J0IHR5cGUgbm9OZXZlcjxUPiA9IGlkZW50aXR5PHsKICAgICAgICBbayBpbiBub05ldmVyS2V5czxUPl06IGsgZXh0ZW5kcyBrZXlvZiBUID8gVFtrXSA6IG5ldmVyOwogICAgfT47CiAgICBleHBvcnQgY29uc3QgbWVyZ2VTaGFwZXM6IDxVLCBUPihmaXJzdDogVSwgc2Vjb25kOiBUKSA9PiBUICYgVTsKICAgIGV4cG9ydCB0eXBlIGV4dGVuZFNoYXBlPEEgZXh0ZW5kcyBvYmplY3QsIEIgZXh0ZW5kcyBvYmplY3Q+ID0gewogICAgICAgIFtLIGluIGtleW9mIEEgYXMgSyBleHRlbmRzIGtleW9mIEIgPyBuZXZlciA6IEtdOiBBW0tdOwogICAgfSAmIHsKICAgICAgICBbSyBpbiBrZXlvZiBCXTogQltLXTsKICAgIH07CiAgICBleHBvcnQge307Cn0KZGVjbGFyZSBjb25zdCBab2RQYXJzZWRUeXBlOiB7CiAgICBzdHJpbmc6ICJzdHJpbmciOwogICAgbnVtYmVyOiAibnVtYmVyIjsKICAgIGJpZ2ludDogImJpZ2ludCI7CiAgICBib29sZWFuOiAiYm9vbGVhbiI7CiAgICBzeW1ib2w6ICJzeW1ib2wiOwogICAgdW5kZWZpbmVkOiAidW5kZWZpbmVkIjsKICAgIG9iamVjdDogIm9iamVjdCI7CiAgICBmdW5jdGlvbjogImZ1bmN0aW9uIjsKICAgIG1hcDogIm1hcCI7CiAgICBuYW46ICJuYW4iOwogICAgaW50ZWdlcjogImludGVnZXIiOwogICAgZmxvYXQ6ICJmbG9hdCI7CiAgICBkYXRlOiAiZGF0ZSI7CiAgICBudWxsOiAibnVsbCI7CiAgICBhcnJheTogImFycmF5IjsKICAgIHVua25vd246ICJ1bmtub3duIjsKICAgIHByb21pc2U6ICJwcm9taXNlIjsKICAgIHZvaWQ6ICJ2b2lkIjsKICAgIG5ldmVyOiAibmV2ZXIiOwogICAgc2V0OiAic2V0IjsKfTsKdHlwZSBab2RQYXJzZWRUeXBlID0ga2V5b2YgdHlwZW9mIFpvZFBhcnNlZFR5cGU7Cgp0eXBlIGFsbEtleXM8VD4gPSBUIGV4dGVuZHMgYW55ID8ga2V5b2YgVCA6IG5ldmVyOwp0eXBlIHR5cGVUb0ZsYXR0ZW5lZEVycm9yPFQsIFUgPSBzdHJpbmc+ID0gewogICAgZm9ybUVycm9yczogVVtdOwogICAgZmllbGRFcnJvcnM6IHsKICAgICAgICBbUCBpbiBhbGxLZXlzPFQ+XT86IFVbXTsKICAgIH07Cn07CmRlY2xhcmUgY29uc3QgWm9kSXNzdWVDb2RlOiB7CiAgICBpbnZhbGlkX3R5cGU6ICJpbnZhbGlkX3R5cGUiOwogICAgaW52YWxpZF9saXRlcmFsOiAiaW52YWxpZF9saXRlcmFsIjsKICAgIGN1c3RvbTogImN1c3RvbSI7CiAgICBpbnZhbGlkX3VuaW9uOiAiaW52YWxpZF91bmlvbiI7CiAgICBpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3I6ICJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3IiOwogICAgaW52YWxpZF9lbnVtX3ZhbHVlOiAiaW52YWxpZF9lbnVtX3ZhbHVlIjsKICAgIHVucmVjb2duaXplZF9rZXlzOiAidW5yZWNvZ25pemVkX2tleXMiOwogICAgaW52YWxpZF9hcmd1bWVudHM6ICJpbnZhbGlkX2FyZ3VtZW50cyI7CiAgICBpbnZhbGlkX3JldHVybl90eXBlOiAiaW52YWxpZF9yZXR1cm5fdHlwZSI7CiAgICBpbnZhbGlkX2RhdGU6ICJpbnZhbGlkX2RhdGUiOwogICAgaW52YWxpZF9zdHJpbmc6ICJpbnZhbGlkX3N0cmluZyI7CiAgICB0b29fc21hbGw6ICJ0b29fc21hbGwiOwogICAgdG9vX2JpZzogInRvb19iaWciOwogICAgaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXM6ICJpbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlcyI7CiAgICBub3RfbXVsdGlwbGVfb2Y6ICJub3RfbXVsdGlwbGVfb2YiOwogICAgbm90X2Zpbml0ZTogIm5vdF9maW5pdGUiOwp9Owp0eXBlIFpvZElzc3VlQ29kZSA9IGtleW9mIHR5cGVvZiBab2RJc3N1ZUNvZGU7CnR5cGUgWm9kSXNzdWVCYXNlID0gewogICAgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXTsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn07CmludGVyZmFjZSBab2RJbnZhbGlkVHlwZUlzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlOwogICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGU7CiAgICByZWNlaXZlZDogWm9kUGFyc2VkVHlwZTsKfQppbnRlcmZhY2UgWm9kSW52YWxpZExpdGVyYWxJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmludmFsaWRfbGl0ZXJhbDsKICAgIGV4cGVjdGVkOiB1bmtub3duOwogICAgcmVjZWl2ZWQ6IHVua25vd247Cn0KaW50ZXJmYWNlIFpvZFVucmVjb2duaXplZEtleXNJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLnVucmVjb2duaXplZF9rZXlzOwogICAga2V5czogc3RyaW5nW107Cn0KaW50ZXJmYWNlIFpvZEludmFsaWRVbmlvbklzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbjsKICAgIHVuaW9uRXJyb3JzOiBab2RFcnJvcltdOwp9CmludGVyZmFjZSBab2RJbnZhbGlkVW5pb25EaXNjcmltaW5hdG9ySXNzdWUgZXh0ZW5kcyBab2RJc3N1ZUJhc2UgewogICAgY29kZTogdHlwZW9mIFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3I7CiAgICBvcHRpb25zOiBQcmltaXRpdmVbXTsKfQppbnRlcmZhY2UgWm9kSW52YWxpZEVudW1WYWx1ZUlzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIHJlY2VpdmVkOiBzdHJpbmcgfCBudW1iZXI7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZTsKICAgIG9wdGlvbnM6IChzdHJpbmcgfCBudW1iZXIpW107Cn0KaW50ZXJmYWNlIFpvZEludmFsaWRBcmd1bWVudHNJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmludmFsaWRfYXJndW1lbnRzOwogICAgYXJndW1lbnRzRXJyb3I6IFpvZEVycm9yOwp9CmludGVyZmFjZSBab2RJbnZhbGlkUmV0dXJuVHlwZUlzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZTsKICAgIHJldHVyblR5cGVFcnJvcjogWm9kRXJyb3I7Cn0KaW50ZXJmYWNlIFpvZEludmFsaWREYXRlSXNzdWUgZXh0ZW5kcyBab2RJc3N1ZUJhc2UgewogICAgY29kZTogdHlwZW9mIFpvZElzc3VlQ29kZS5pbnZhbGlkX2RhdGU7Cn0KdHlwZSBTdHJpbmdWYWxpZGF0aW9uID0gImVtYWlsIiB8ICJ1cmwiIHwgImVtb2ppIiB8ICJ1dWlkIiB8ICJuYW5vaWQiIHwgInJlZ2V4IiB8ICJjdWlkIiB8ICJjdWlkMiIgfCAidWxpZCIgfCAiZGF0ZXRpbWUiIHwgImRhdGUiIHwgInRpbWUiIHwgImR1cmF0aW9uIiB8ICJpcCIgfCAiY2lkciIgfCAiYmFzZTY0IiB8ICJqd3QiIHwgImJhc2U2NHVybCIgfCB7CiAgICBpbmNsdWRlczogc3RyaW5nOwogICAgcG9zaXRpb24/OiBudW1iZXI7Cn0gfCB7CiAgICBzdGFydHNXaXRoOiBzdHJpbmc7Cn0gfCB7CiAgICBlbmRzV2l0aDogc3RyaW5nOwp9OwppbnRlcmZhY2UgWm9kSW52YWxpZFN0cmluZ0lzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmc7CiAgICB2YWxpZGF0aW9uOiBTdHJpbmdWYWxpZGF0aW9uOwp9CmludGVyZmFjZSBab2RUb29TbWFsbElzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsOwogICAgbWluaW11bTogbnVtYmVyIHwgYmlnaW50OwogICAgaW5jbHVzaXZlOiBib29sZWFuOwogICAgZXhhY3Q/OiBib29sZWFuOwogICAgdHlwZTogImFycmF5IiB8ICJzdHJpbmciIHwgIm51bWJlciIgfCAic2V0IiB8ICJkYXRlIiB8ICJiaWdpbnQiOwp9CmludGVyZmFjZSBab2RUb29CaWdJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLnRvb19iaWc7CiAgICBtYXhpbXVtOiBudW1iZXIgfCBiaWdpbnQ7CiAgICBpbmNsdXNpdmU6IGJvb2xlYW47CiAgICBleGFjdD86IGJvb2xlYW47CiAgICB0eXBlOiAiYXJyYXkiIHwgInN0cmluZyIgfCAibnVtYmVyIiB8ICJzZXQiIHwgImRhdGUiIHwgImJpZ2ludCI7Cn0KaW50ZXJmYWNlIFpvZEludmFsaWRJbnRlcnNlY3Rpb25UeXBlc0lzc3VlIGV4dGVuZHMgWm9kSXNzdWVCYXNlIHsKICAgIGNvZGU6IHR5cGVvZiBab2RJc3N1ZUNvZGUuaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXM7Cn0KaW50ZXJmYWNlIFpvZE5vdE11bHRpcGxlT2ZJc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZjsKICAgIG11bHRpcGxlT2Y6IG51bWJlciB8IGJpZ2ludDsKfQppbnRlcmZhY2UgWm9kTm90RmluaXRlSXNzdWUgZXh0ZW5kcyBab2RJc3N1ZUJhc2UgewogICAgY29kZTogdHlwZW9mIFpvZElzc3VlQ29kZS5ub3RfZmluaXRlOwp9CmludGVyZmFjZSBab2RDdXN0b21Jc3N1ZSBleHRlbmRzIFpvZElzc3VlQmFzZSB7CiAgICBjb2RlOiB0eXBlb2YgWm9kSXNzdWVDb2RlLmN1c3RvbTsKICAgIHBhcmFtcz86IHsKICAgICAgICBbazogc3RyaW5nXTogYW55OwogICAgfTsKfQp0eXBlIFpvZElzc3VlT3B0aW9uYWxNZXNzYWdlID0gWm9kSW52YWxpZFR5cGVJc3N1ZSB8IFpvZEludmFsaWRMaXRlcmFsSXNzdWUgfCBab2RVbnJlY29nbml6ZWRLZXlzSXNzdWUgfCBab2RJbnZhbGlkVW5pb25Jc3N1ZSB8IFpvZEludmFsaWRVbmlvbkRpc2NyaW1pbmF0b3JJc3N1ZSB8IFpvZEludmFsaWRFbnVtVmFsdWVJc3N1ZSB8IFpvZEludmFsaWRBcmd1bWVudHNJc3N1ZSB8IFpvZEludmFsaWRSZXR1cm5UeXBlSXNzdWUgfCBab2RJbnZhbGlkRGF0ZUlzc3VlIHwgWm9kSW52YWxpZFN0cmluZ0lzc3VlIHwgWm9kVG9vU21hbGxJc3N1ZSB8IFpvZFRvb0JpZ0lzc3VlIHwgWm9kSW52YWxpZEludGVyc2VjdGlvblR5cGVzSXNzdWUgfCBab2ROb3RNdWx0aXBsZU9mSXNzdWUgfCBab2ROb3RGaW5pdGVJc3N1ZSB8IFpvZEN1c3RvbUlzc3VlOwp0eXBlIFpvZElzc3VlID0gWm9kSXNzdWVPcHRpb25hbE1lc3NhZ2UgJiB7CiAgICBmYXRhbD86IGJvb2xlYW47CiAgICBtZXNzYWdlOiBzdHJpbmc7Cn07CnR5cGUgcmVjdXJzaXZlWm9kRm9ybWF0dGVkRXJyb3I8VD4gPSBUIGV4dGVuZHMgW2FueSwgLi4uYW55W11dID8gewogICAgW0sgaW4ga2V5b2YgVF0/OiBab2RGb3JtYXR0ZWRFcnJvcjxUW0tdPjsKfSA6IFQgZXh0ZW5kcyBhbnlbXSA/IHsKICAgIFtrOiBudW1iZXJdOiBab2RGb3JtYXR0ZWRFcnJvcjxUW251bWJlcl0+Owp9IDogVCBleHRlbmRzIG9iamVjdCA/IHsKICAgIFtLIGluIGtleW9mIFRdPzogWm9kRm9ybWF0dGVkRXJyb3I8VFtLXT47Cn0gOiB1bmtub3duOwp0eXBlIFpvZEZvcm1hdHRlZEVycm9yPFQsIFUgPSBzdHJpbmc+ID0gewogICAgX2Vycm9yczogVVtdOwp9ICYgcmVjdXJzaXZlWm9kRm9ybWF0dGVkRXJyb3I8Tm9uTnVsbGFibGU8VD4+OwpkZWNsYXJlIGNsYXNzIFpvZEVycm9yPFQgPSBhbnk+IGV4dGVuZHMgRXJyb3IgewogICAgaXNzdWVzOiBab2RJc3N1ZVtdOwogICAgZ2V0IGVycm9ycygpOiBab2RJc3N1ZVtdOwogICAgY29uc3RydWN0b3IoaXNzdWVzOiBab2RJc3N1ZVtdKTsKICAgIGZvcm1hdCgpOiBab2RGb3JtYXR0ZWRFcnJvcjxUPjsKICAgIGZvcm1hdDxVPihtYXBwZXI6IChpc3N1ZTogWm9kSXNzdWUpID0+IFUpOiBab2RGb3JtYXR0ZWRFcnJvcjxULCBVPjsKICAgIHN0YXRpYyBjcmVhdGU6IChpc3N1ZXM6IFpvZElzc3VlW10pID0+IFpvZEVycm9yPGFueT47CiAgICBzdGF0aWMgYXNzZXJ0KHZhbHVlOiB1bmtub3duKTogYXNzZXJ0cyB2YWx1ZSBpcyBab2RFcnJvcjsKICAgIHRvU3RyaW5nKCk6IHN0cmluZzsKICAgIGdldCBtZXNzYWdlKCk6IHN0cmluZzsKICAgIGdldCBpc0VtcHR5KCk6IGJvb2xlYW47CiAgICBhZGRJc3N1ZTogKHN1YjogWm9kSXNzdWUpID0+IHZvaWQ7CiAgICBhZGRJc3N1ZXM6IChzdWJzPzogWm9kSXNzdWVbXSkgPT4gdm9pZDsKICAgIGZsYXR0ZW4oKTogdHlwZVRvRmxhdHRlbmVkRXJyb3I8VD47CiAgICBmbGF0dGVuPFU+KG1hcHBlcj86IChpc3N1ZTogWm9kSXNzdWUpID0+IFUpOiB0eXBlVG9GbGF0dGVuZWRFcnJvcjxULCBVPjsKICAgIGdldCBmb3JtRXJyb3JzKCk6IHR5cGVUb0ZsYXR0ZW5lZEVycm9yPFQsIHN0cmluZz47Cn0KdHlwZSBzdHJpcFBhdGg8VCBleHRlbmRzIG9iamVjdD4gPSBUIGV4dGVuZHMgYW55ID8gdXRpbC5PbWl0S2V5czxULCAicGF0aCI+IDogbmV2ZXI7CnR5cGUgSXNzdWVEYXRhID0gc3RyaXBQYXRoPFpvZElzc3VlT3B0aW9uYWxNZXNzYWdlPiAmIHsKICAgIHBhdGg/OiAoc3RyaW5nIHwgbnVtYmVyKVtdOwogICAgZmF0YWw/OiBib29sZWFuOwp9Owp0eXBlIEVycm9yTWFwQ3R4ID0gewogICAgZGVmYXVsdEVycm9yOiBzdHJpbmc7CiAgICBkYXRhOiBhbnk7Cn07CnR5cGUgWm9kRXJyb3JNYXAgPSAoaXNzdWU6IFpvZElzc3VlT3B0aW9uYWxNZXNzYWdlLCBfY3R4OiBFcnJvck1hcEN0eCkgPT4gewogICAgbWVzc2FnZTogc3RyaW5nOwp9OwoKdHlwZSBQYXJzZVBhcmFtcyA9IHsKICAgIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW107CiAgICBlcnJvck1hcDogWm9kRXJyb3JNYXA7CiAgICBhc3luYzogYm9vbGVhbjsKfTsKdHlwZSBQYXJzZVBhdGhDb21wb25lbnQgPSBzdHJpbmcgfCBudW1iZXI7CnR5cGUgUGFyc2VQYXRoID0gUGFyc2VQYXRoQ29tcG9uZW50W107CmludGVyZmFjZSBQYXJzZUNvbnRleHQgewogICAgcmVhZG9ubHkgY29tbW9uOiB7CiAgICAgICAgcmVhZG9ubHkgaXNzdWVzOiBab2RJc3N1ZVtdOwogICAgICAgIHJlYWRvbmx5IGNvbnRleHR1YWxFcnJvck1hcD86IFpvZEVycm9yTWFwOwogICAgICAgIHJlYWRvbmx5IGFzeW5jOiBib29sZWFuOwogICAgfTsKICAgIHJlYWRvbmx5IHBhdGg6IFBhcnNlUGF0aDsKICAgIHJlYWRvbmx5IHNjaGVtYUVycm9yTWFwPzogWm9kRXJyb3JNYXA7CiAgICByZWFkb25seSBwYXJlbnQ6IFBhcnNlQ29udGV4dCB8IG51bGw7CiAgICByZWFkb25seSBkYXRhOiBhbnk7CiAgICByZWFkb25seSBwYXJzZWRUeXBlOiBab2RQYXJzZWRUeXBlOwp9CnR5cGUgUGFyc2VJbnB1dCA9IHsKICAgIGRhdGE6IGFueTsKICAgIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW107CiAgICBwYXJlbnQ6IFBhcnNlQ29udGV4dDsKfTsKZGVjbGFyZSBjbGFzcyBQYXJzZVN0YXR1cyB7CiAgICB2YWx1ZTogImFib3J0ZWQiIHwgImRpcnR5IiB8ICJ2YWxpZCI7CiAgICBkaXJ0eSgpOiB2b2lkOwogICAgYWJvcnQoKTogdm9pZDsKICAgIHN0YXRpYyBtZXJnZUFycmF5KHN0YXR1czogUGFyc2VTdGF0dXMsIHJlc3VsdHM6IFN5bmNQYXJzZVJldHVyblR5cGU8YW55PltdKTogU3luY1BhcnNlUmV0dXJuVHlwZTsKICAgIHN0YXRpYyBtZXJnZU9iamVjdEFzeW5jKHN0YXR1czogUGFyc2VTdGF0dXMsIHBhaXJzOiB7CiAgICAgICAga2V5OiBQYXJzZVJldHVyblR5cGU8YW55PjsKICAgICAgICB2YWx1ZTogUGFyc2VSZXR1cm5UeXBlPGFueT47CiAgICB9W10pOiBQcm9taXNlPFN5bmNQYXJzZVJldHVyblR5cGU8YW55Pj47CiAgICBzdGF0aWMgbWVyZ2VPYmplY3RTeW5jKHN0YXR1czogUGFyc2VTdGF0dXMsIHBhaXJzOiB7CiAgICAgICAga2V5OiBTeW5jUGFyc2VSZXR1cm5UeXBlPGFueT47CiAgICAgICAgdmFsdWU6IFN5bmNQYXJzZVJldHVyblR5cGU8YW55PjsKICAgICAgICBhbHdheXNTZXQ/OiBib29sZWFuOwogICAgfVtdKTogU3luY1BhcnNlUmV0dXJuVHlwZTsKfQp0eXBlIElOVkFMSUQgPSB7CiAgICBzdGF0dXM6ICJhYm9ydGVkIjsKfTsKZGVjbGFyZSBjb25zdCBJTlZBTElEOiBJTlZBTElEOwp0eXBlIERJUlRZPFQ+ID0gewogICAgc3RhdHVzOiAiZGlydHkiOwogICAgdmFsdWU6IFQ7Cn07CmRlY2xhcmUgY29uc3QgRElSVFk6IDxUPih2YWx1ZTogVCkgPT4gRElSVFk8VD47CnR5cGUgT0s8VD4gPSB7CiAgICBzdGF0dXM6ICJ2YWxpZCI7CiAgICB2YWx1ZTogVDsKfTsKZGVjbGFyZSBjb25zdCBPSzogPFQ+KHZhbHVlOiBUKSA9PiBPSzxUPjsKdHlwZSBTeW5jUGFyc2VSZXR1cm5UeXBlPFQgPSBhbnk+ID0gT0s8VD4gfCBESVJUWTxUPiB8IElOVkFMSUQ7CnR5cGUgQXN5bmNQYXJzZVJldHVyblR5cGU8VD4gPSBQcm9taXNlPFN5bmNQYXJzZVJldHVyblR5cGU8VD4+Owp0eXBlIFBhcnNlUmV0dXJuVHlwZTxUPiA9IFN5bmNQYXJzZVJldHVyblR5cGU8VD4gfCBBc3luY1BhcnNlUmV0dXJuVHlwZTxUPjsKCmRlY2xhcmUgbmFtZXNwYWNlIGVycm9yVXRpbCB7CiAgICB0eXBlIEVyck1lc3NhZ2UgPSBzdHJpbmcgfCB7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH07CiAgICBjb25zdCBlcnJUb09iajogKG1lc3NhZ2U/OiBFcnJNZXNzYWdlKSA9PiB7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH07CiAgICBjb25zdCB0b1N0cmluZzogKG1lc3NhZ2U/OiBFcnJNZXNzYWdlKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7Cn0KCi8qKgogKiBUaGUgU3RhbmRhcmQgU2NoZW1hIGludGVyZmFjZS4KICovCnR5cGUgU3RhbmRhcmRTY2hlbWFWMTxJbnB1dCA9IHVua25vd24sIE91dHB1dCA9IElucHV0PiA9IHsKICAgIC8qKgogICAgICogVGhlIFN0YW5kYXJkIFNjaGVtYSBwcm9wZXJ0aWVzLgogICAgICovCiAgICByZWFkb25seSAifnN0YW5kYXJkIjogU3RhbmRhcmRTY2hlbWFWMS5Qcm9wczxJbnB1dCwgT3V0cHV0PjsKfTsKZGVjbGFyZSBuYW1lc3BhY2UgU3RhbmRhcmRTY2hlbWFWMSB7CiAgICAvKioKICAgICAqIFRoZSBTdGFuZGFyZCBTY2hlbWEgcHJvcGVydGllcyBpbnRlcmZhY2UuCiAgICAgKi8KICAgIGV4cG9ydCBpbnRlcmZhY2UgUHJvcHM8SW5wdXQgPSB1bmtub3duLCBPdXRwdXQgPSBJbnB1dD4gewogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgc3RhbmRhcmQuCiAgICAgICAgICovCiAgICAgICAgcmVhZG9ubHkgdmVyc2lvbjogMTsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgdmVuZG9yIG5hbWUgb2YgdGhlIHNjaGVtYSBsaWJyYXJ5LgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IHZlbmRvcjogc3RyaW5nOwogICAgICAgIC8qKgogICAgICAgICAqIFZhbGlkYXRlcyB1bmtub3duIGlucHV0IHZhbHVlcy4KICAgICAgICAgKi8KICAgICAgICByZWFkb25seSB2YWxpZGF0ZTogKHZhbHVlOiB1bmtub3duKSA9PiBSZXN1bHQ8T3V0cHV0PiB8IFByb21pc2U8UmVzdWx0PE91dHB1dD4+OwogICAgICAgIC8qKgogICAgICAgICAqIEluZmVycmVkIHR5cGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NoZW1hLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IHR5cGVzPzogVHlwZXM8SW5wdXQsIE91dHB1dD4gfCB1bmRlZmluZWQ7CiAgICB9CiAgICAvKioKICAgICAqIFRoZSByZXN1bHQgaW50ZXJmYWNlIG9mIHRoZSB2YWxpZGF0ZSBmdW5jdGlvbi4KICAgICAqLwogICAgZXhwb3J0IHR5cGUgUmVzdWx0PE91dHB1dD4gPSBTdWNjZXNzUmVzdWx0PE91dHB1dD4gfCBGYWlsdXJlUmVzdWx0OwogICAgLyoqCiAgICAgKiBUaGUgcmVzdWx0IGludGVyZmFjZSBpZiB2YWxpZGF0aW9uIHN1Y2NlZWRzLgogICAgICovCiAgICBleHBvcnQgaW50ZXJmYWNlIFN1Y2Nlc3NSZXN1bHQ8T3V0cHV0PiB7CiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIHR5cGVkIG91dHB1dCB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICByZWFkb25seSB2YWx1ZTogT3V0cHV0OwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBub24tZXhpc3RlbnQgaXNzdWVzLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGlzc3Vlcz86IHVuZGVmaW5lZDsKICAgIH0KICAgIC8qKgogICAgICogVGhlIHJlc3VsdCBpbnRlcmZhY2UgaWYgdmFsaWRhdGlvbiBmYWlscy4KICAgICAqLwogICAgZXhwb3J0IGludGVyZmFjZSBGYWlsdXJlUmVzdWx0IHsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgaXNzdWVzIG9mIGZhaWxlZCB2YWxpZGF0aW9uLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGlzc3VlczogUmVhZG9ubHlBcnJheTxJc3N1ZT47CiAgICB9CiAgICAvKioKICAgICAqIFRoZSBpc3N1ZSBpbnRlcmZhY2Ugb2YgdGhlIGZhaWx1cmUgb3V0cHV0LgogICAgICovCiAgICBleHBvcnQgaW50ZXJmYWNlIElzc3VlIHsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgZXJyb3IgbWVzc2FnZSBvZiB0aGUgaXNzdWUuCiAgICAgICAgICovCiAgICAgICAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nOwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBwYXRoIG9mIHRoZSBpc3N1ZSwgaWYgYW55LgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IHBhdGg/OiBSZWFkb25seUFycmF5PFByb3BlcnR5S2V5IHwgUGF0aFNlZ21lbnQ+IHwgdW5kZWZpbmVkOwogICAgfQogICAgLyoqCiAgICAgKiBUaGUgcGF0aCBzZWdtZW50IGludGVyZmFjZSBvZiB0aGUgaXNzdWUuCiAgICAgKi8KICAgIGV4cG9ydCBpbnRlcmZhY2UgUGF0aFNlZ21lbnQgewogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBrZXkgcmVwcmVzZW50aW5nIGEgcGF0aCBzZWdtZW50LgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGtleTogUHJvcGVydHlLZXk7CiAgICB9CiAgICAvKioKICAgICAqIFRoZSBTdGFuZGFyZCBTY2hlbWEgdHlwZXMgaW50ZXJmYWNlLgogICAgICovCiAgICBleHBvcnQgaW50ZXJmYWNlIFR5cGVzPElucHV0ID0gdW5rbm93biwgT3V0cHV0ID0gSW5wdXQ+IHsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgaW5wdXQgdHlwZSBvZiB0aGUgc2NoZW1hLgogICAgICAgICAqLwogICAgICAgIHJlYWRvbmx5IGlucHV0OiBJbnB1dDsKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgb3V0cHV0IHR5cGUgb2YgdGhlIHNjaGVtYS4KICAgICAgICAgKi8KICAgICAgICByZWFkb25seSBvdXRwdXQ6IE91dHB1dDsKICAgIH0KICAgIC8qKgogICAgICogSW5mZXJzIHRoZSBpbnB1dCB0eXBlIG9mIGEgU3RhbmRhcmQgU2NoZW1hLgogICAgICovCiAgICBleHBvcnQgdHlwZSBJbmZlcklucHV0PFNjaGVtYSBleHRlbmRzIFN0YW5kYXJkU2NoZW1hVjE+ID0gTm9uTnVsbGFibGU8U2NoZW1hWyJ+c3RhbmRhcmQiXVsidHlwZXMiXT5bImlucHV0Il07CiAgICAvKioKICAgICAqIEluZmVycyB0aGUgb3V0cHV0IHR5cGUgb2YgYSBTdGFuZGFyZCBTY2hlbWEuCiAgICAgKi8KICAgIGV4cG9ydCB0eXBlIEluZmVyT3V0cHV0PFNjaGVtYSBleHRlbmRzIFN0YW5kYXJkU2NoZW1hVjE+ID0gTm9uTnVsbGFibGU8U2NoZW1hWyJ+c3RhbmRhcmQiXVsidHlwZXMiXT5bIm91dHB1dCJdOwogICAgZXhwb3J0IHt9Owp9CgppbnRlcmZhY2UgUmVmaW5lbWVudEN0eCB7CiAgICBhZGRJc3N1ZTogKGFyZzogSXNzdWVEYXRhKSA9PiB2b2lkOwogICAgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXTsKfQp0eXBlIFpvZFJhd1NoYXBlID0gewogICAgW2s6IHN0cmluZ106IFpvZFR5cGVBbnk7Cn07CnR5cGUgWm9kVHlwZUFueSA9IFpvZFR5cGU8YW55LCBhbnksIGFueT47CnR5cGUgaW5wdXQ8VCBleHRlbmRzIFpvZFR5cGU8YW55LCBhbnksIGFueT4+ID0gVFsiX2lucHV0Il07CnR5cGUgb3V0cHV0PFQgZXh0ZW5kcyBab2RUeXBlPGFueSwgYW55LCBhbnk+PiA9IFRbIl9vdXRwdXQiXTsKCnR5cGUgQ3VzdG9tRXJyb3JQYXJhbXMgPSBQYXJ0aWFsPHV0aWwuT21pdDxab2RDdXN0b21Jc3N1ZSwgImNvZGUiPj47CmludGVyZmFjZSBab2RUeXBlRGVmIHsKICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXA7CiAgICBkZXNjcmlwdGlvbj86IHN0cmluZzsKfQp0eXBlIFJhd0NyZWF0ZVBhcmFtcyA9IHsKICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXA7CiAgICBpbnZhbGlkX3R5cGVfZXJyb3I/OiBzdHJpbmc7CiAgICByZXF1aXJlZF9lcnJvcj86IHN0cmluZzsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7CiAgICBkZXNjcmlwdGlvbj86IHN0cmluZzsKfSB8IHVuZGVmaW5lZDsKdHlwZSBTYWZlUGFyc2VTdWNjZXNzPE91dHB1dD4gPSB7CiAgICBzdWNjZXNzOiB0cnVlOwogICAgZGF0YTogT3V0cHV0OwogICAgZXJyb3I/OiBuZXZlcjsKfTsKdHlwZSBTYWZlUGFyc2VFcnJvcjxJbnB1dD4gPSB7CiAgICBzdWNjZXNzOiBmYWxzZTsKICAgIGVycm9yOiBab2RFcnJvcjxJbnB1dD47CiAgICBkYXRhPzogbmV2ZXI7Cn07CnR5cGUgU2FmZVBhcnNlUmV0dXJuVHlwZTxJbnB1dCwgT3V0cHV0PiA9IFNhZmVQYXJzZVN1Y2Nlc3M8T3V0cHV0PiB8IFNhZmVQYXJzZUVycm9yPElucHV0PjsKZGVjbGFyZSBhYnN0cmFjdCBjbGFzcyBab2RUeXBlPE91dHB1dCA9IGFueSwgRGVmIGV4dGVuZHMgWm9kVHlwZURlZiA9IFpvZFR5cGVEZWYsIElucHV0ID0gT3V0cHV0PiB7CiAgICByZWFkb25seSBfdHlwZTogT3V0cHV0OwogICAgcmVhZG9ubHkgX291dHB1dDogT3V0cHV0OwogICAgcmVhZG9ubHkgX2lucHV0OiBJbnB1dDsKICAgIHJlYWRvbmx5IF9kZWY6IERlZjsKICAgIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAifnN0YW5kYXJkIjogU3RhbmRhcmRTY2hlbWFWMS5Qcm9wczxJbnB1dCwgT3V0cHV0PjsKICAgIGFic3RyYWN0IF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTxPdXRwdXQ+OwogICAgX2dldFR5cGUoaW5wdXQ6IFBhcnNlSW5wdXQpOiBzdHJpbmc7CiAgICBfZ2V0T3JSZXR1cm5DdHgoaW5wdXQ6IFBhcnNlSW5wdXQsIGN0eD86IFBhcnNlQ29udGV4dCB8IHVuZGVmaW5lZCk6IFBhcnNlQ29udGV4dDsKICAgIF9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQ6IFBhcnNlSW5wdXQpOiB7CiAgICAgICAgc3RhdHVzOiBQYXJzZVN0YXR1czsKICAgICAgICBjdHg6IFBhcnNlQ29udGV4dDsKICAgIH07CiAgICBfcGFyc2VTeW5jKGlucHV0OiBQYXJzZUlucHV0KTogU3luY1BhcnNlUmV0dXJuVHlwZTxPdXRwdXQ+OwogICAgX3BhcnNlQXN5bmMoaW5wdXQ6IFBhcnNlSW5wdXQpOiBBc3luY1BhcnNlUmV0dXJuVHlwZTxPdXRwdXQ+OwogICAgcGFyc2UoZGF0YTogdW5rbm93biwgcGFyYW1zPzogUGFydGlhbDxQYXJzZVBhcmFtcz4pOiBPdXRwdXQ7CiAgICBzYWZlUGFyc2UoZGF0YTogdW5rbm93biwgcGFyYW1zPzogUGFydGlhbDxQYXJzZVBhcmFtcz4pOiBTYWZlUGFyc2VSZXR1cm5UeXBlPElucHV0LCBPdXRwdXQ+OwogICAgIn52YWxpZGF0ZSIoZGF0YTogdW5rbm93bik6IFN0YW5kYXJkU2NoZW1hVjEuUmVzdWx0PE91dHB1dD4gfCBQcm9taXNlPFN0YW5kYXJkU2NoZW1hVjEuUmVzdWx0PE91dHB1dD4+OwogICAgcGFyc2VBc3luYyhkYXRhOiB1bmtub3duLCBwYXJhbXM/OiBQYXJ0aWFsPFBhcnNlUGFyYW1zPik6IFByb21pc2U8T3V0cHV0PjsKICAgIHNhZmVQYXJzZUFzeW5jKGRhdGE6IHVua25vd24sIHBhcmFtcz86IFBhcnRpYWw8UGFyc2VQYXJhbXM+KTogUHJvbWlzZTxTYWZlUGFyc2VSZXR1cm5UeXBlPElucHV0LCBPdXRwdXQ+PjsKICAgIC8qKiBBbGlhcyBvZiBzYWZlUGFyc2VBc3luYyAqLwogICAgc3BhOiAoZGF0YTogdW5rbm93biwgcGFyYW1zPzogUGFydGlhbDxQYXJzZVBhcmFtcz4pID0+IFByb21pc2U8U2FmZVBhcnNlUmV0dXJuVHlwZTxJbnB1dCwgT3V0cHV0Pj47CiAgICByZWZpbmU8UmVmaW5lZE91dHB1dCBleHRlbmRzIE91dHB1dD4oY2hlY2s6IChhcmc6IE91dHB1dCkgPT4gYXJnIGlzIFJlZmluZWRPdXRwdXQsIG1lc3NhZ2U/OiBzdHJpbmcgfCBDdXN0b21FcnJvclBhcmFtcyB8ICgoYXJnOiBPdXRwdXQpID0+IEN1c3RvbUVycm9yUGFyYW1zKSk6IFpvZEVmZmVjdHM8dGhpcywgUmVmaW5lZE91dHB1dCwgSW5wdXQ+OwogICAgcmVmaW5lKGNoZWNrOiAoYXJnOiBPdXRwdXQpID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+LCBtZXNzYWdlPzogc3RyaW5nIHwgQ3VzdG9tRXJyb3JQYXJhbXMgfCAoKGFyZzogT3V0cHV0KSA9PiBDdXN0b21FcnJvclBhcmFtcykpOiBab2RFZmZlY3RzPHRoaXMsIE91dHB1dCwgSW5wdXQ+OwogICAgcmVmaW5lbWVudDxSZWZpbmVkT3V0cHV0IGV4dGVuZHMgT3V0cHV0PihjaGVjazogKGFyZzogT3V0cHV0KSA9PiBhcmcgaXMgUmVmaW5lZE91dHB1dCwgcmVmaW5lbWVudERhdGE6IElzc3VlRGF0YSB8ICgoYXJnOiBPdXRwdXQsIGN0eDogUmVmaW5lbWVudEN0eCkgPT4gSXNzdWVEYXRhKSk6IFpvZEVmZmVjdHM8dGhpcywgUmVmaW5lZE91dHB1dCwgSW5wdXQ+OwogICAgcmVmaW5lbWVudChjaGVjazogKGFyZzogT3V0cHV0KSA9PiBib29sZWFuLCByZWZpbmVtZW50RGF0YTogSXNzdWVEYXRhIHwgKChhcmc6IE91dHB1dCwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiBJc3N1ZURhdGEpKTogWm9kRWZmZWN0czx0aGlzLCBPdXRwdXQsIElucHV0PjsKICAgIF9yZWZpbmVtZW50KHJlZmluZW1lbnQ6IFJlZmluZW1lbnRFZmZlY3Q8T3V0cHV0PlsicmVmaW5lbWVudCJdKTogWm9kRWZmZWN0czx0aGlzLCBPdXRwdXQsIElucHV0PjsKICAgIHN1cGVyUmVmaW5lPFJlZmluZWRPdXRwdXQgZXh0ZW5kcyBPdXRwdXQ+KHJlZmluZW1lbnQ6IChhcmc6IE91dHB1dCwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiBhcmcgaXMgUmVmaW5lZE91dHB1dCk6IFpvZEVmZmVjdHM8dGhpcywgUmVmaW5lZE91dHB1dCwgSW5wdXQ+OwogICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudDogKGFyZzogT3V0cHV0LCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IHZvaWQpOiBab2RFZmZlY3RzPHRoaXMsIE91dHB1dCwgSW5wdXQ+OwogICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudDogKGFyZzogT3V0cHV0LCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IFByb21pc2U8dm9pZD4pOiBab2RFZmZlY3RzPHRoaXMsIE91dHB1dCwgSW5wdXQ+OwogICAgY29uc3RydWN0b3IoZGVmOiBEZWYpOwogICAgb3B0aW9uYWwoKTogWm9kT3B0aW9uYWw8dGhpcz47CiAgICBudWxsYWJsZSgpOiBab2ROdWxsYWJsZTx0aGlzPjsKICAgIG51bGxpc2goKTogWm9kT3B0aW9uYWw8Wm9kTnVsbGFibGU8dGhpcz4+OwogICAgYXJyYXkoKTogWm9kQXJyYXk8dGhpcz47CiAgICBwcm9taXNlKCk6IFpvZFByb21pc2U8dGhpcz47CiAgICBvcjxUIGV4dGVuZHMgWm9kVHlwZUFueT4ob3B0aW9uOiBUKTogWm9kVW5pb248W3RoaXMsIFRdPjsKICAgIGFuZDxUIGV4dGVuZHMgWm9kVHlwZUFueT4oaW5jb21pbmc6IFQpOiBab2RJbnRlcnNlY3Rpb248dGhpcywgVD47CiAgICB0cmFuc2Zvcm08TmV3T3V0Pih0cmFuc2Zvcm06IChhcmc6IE91dHB1dCwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiBOZXdPdXQgfCBQcm9taXNlPE5ld091dD4pOiBab2RFZmZlY3RzPHRoaXMsIE5ld091dD47CiAgICBkZWZhdWx0KGRlZjogdXRpbC5ub1VuZGVmaW5lZDxJbnB1dD4pOiBab2REZWZhdWx0PHRoaXM+OwogICAgZGVmYXVsdChkZWY6ICgpID0+IHV0aWwubm9VbmRlZmluZWQ8SW5wdXQ+KTogWm9kRGVmYXVsdDx0aGlzPjsKICAgIGJyYW5kPEIgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w+KGJyYW5kPzogQik6IFpvZEJyYW5kZWQ8dGhpcywgQj47CiAgICBjYXRjaChkZWY6IE91dHB1dCk6IFpvZENhdGNoPHRoaXM+OwogICAgY2F0Y2goZGVmOiAoY3R4OiB7CiAgICAgICAgZXJyb3I6IFpvZEVycm9yOwogICAgICAgIGlucHV0OiBJbnB1dDsKICAgIH0pID0+IE91dHB1dCk6IFpvZENhdGNoPHRoaXM+OwogICAgZGVzY3JpYmUoZGVzY3JpcHRpb246IHN0cmluZyk6IHRoaXM7CiAgICBwaXBlPFQgZXh0ZW5kcyBab2RUeXBlQW55Pih0YXJnZXQ6IFQpOiBab2RQaXBlbGluZTx0aGlzLCBUPjsKICAgIHJlYWRvbmx5KCk6IFpvZFJlYWRvbmx5PHRoaXM+OwogICAgaXNPcHRpb25hbCgpOiBib29sZWFuOwogICAgaXNOdWxsYWJsZSgpOiBib29sZWFuOwp9CnR5cGUgSXBWZXJzaW9uID0gInY0IiB8ICJ2NiI7CnR5cGUgWm9kU3RyaW5nQ2hlY2sgPSB7CiAgICBraW5kOiAibWluIjsKICAgIHZhbHVlOiBudW1iZXI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogIm1heCI7CiAgICB2YWx1ZTogbnVtYmVyOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJsZW5ndGgiOwogICAgdmFsdWU6IG51bWJlcjsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiZW1haWwiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJ1cmwiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJlbW9qaSI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInV1aWQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJuYW5vaWQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJjdWlkIjsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiaW5jbHVkZXMiOwogICAgdmFsdWU6IHN0cmluZzsKICAgIHBvc2l0aW9uPzogbnVtYmVyOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJjdWlkMiI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInVsaWQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJzdGFydHNXaXRoIjsKICAgIHZhbHVlOiBzdHJpbmc7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImVuZHNXaXRoIjsKICAgIHZhbHVlOiBzdHJpbmc7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInJlZ2V4IjsKICAgIHJlZ2V4OiBSZWdFeHA7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInRyaW0iOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJ0b0xvd2VyQ2FzZSI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogInRvVXBwZXJDYXNlIjsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiand0IjsKICAgIGFsZz86IHN0cmluZzsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiZGF0ZXRpbWUiOwogICAgb2Zmc2V0OiBib29sZWFuOwogICAgbG9jYWw6IGJvb2xlYW47CiAgICBwcmVjaXNpb246IG51bWJlciB8IG51bGw7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImRhdGUiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJ0aW1lIjsKICAgIHByZWNpc2lvbjogbnVtYmVyIHwgbnVsbDsKICAgIG1lc3NhZ2U/OiBzdHJpbmc7Cn0gfCB7CiAgICBraW5kOiAiZHVyYXRpb24iOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJpcCI7CiAgICB2ZXJzaW9uPzogSXBWZXJzaW9uOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJjaWRyIjsKICAgIHZlcnNpb24/OiBJcFZlcnNpb247CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImJhc2U2NCI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImJhc2U2NHVybCI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9OwppbnRlcmZhY2UgWm9kU3RyaW5nRGVmIGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICBjaGVja3M6IFpvZFN0cmluZ0NoZWNrW107CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFN0cmluZzsKICAgIGNvZXJjZTogYm9vbGVhbjsKfQpkZWNsYXJlIGNsYXNzIFpvZFN0cmluZyBleHRlbmRzIFpvZFR5cGU8c3RyaW5nLCBab2RTdHJpbmdEZWYsIHN0cmluZz4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHN0cmluZz47CiAgICBwcm90ZWN0ZWQgX3JlZ2V4KHJlZ2V4OiBSZWdFeHAsIHZhbGlkYXRpb246IFN0cmluZ1ZhbGlkYXRpb24sIG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZEVmZmVjdHM8dGhpcywgc3RyaW5nLCBzdHJpbmc+OwogICAgX2FkZENoZWNrKGNoZWNrOiBab2RTdHJpbmdDaGVjayk6IFpvZFN0cmluZzsKICAgIGVtYWlsKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIHVybChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBlbW9qaShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICB1dWlkKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIG5hbm9pZChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBjdWlkKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIGN1aWQyKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIHVsaWQobWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgYmFzZTY0KG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIGJhc2U2NHVybChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBqd3Qob3B0aW9ucz86IHsKICAgICAgICBhbGc/OiBzdHJpbmc7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH0pOiBab2RTdHJpbmc7CiAgICBpcChvcHRpb25zPzogc3RyaW5nIHwgewogICAgICAgIHZlcnNpb24/OiBJcFZlcnNpb247CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH0pOiBab2RTdHJpbmc7CiAgICBjaWRyKG9wdGlvbnM/OiBzdHJpbmcgfCB7CiAgICAgICAgdmVyc2lvbj86IElwVmVyc2lvbjsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nOwogICAgfSk6IFpvZFN0cmluZzsKICAgIGRhdGV0aW1lKG9wdGlvbnM/OiBzdHJpbmcgfCB7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVjaXNpb24/OiBudW1iZXIgfCBudWxsOwogICAgICAgIG9mZnNldD86IGJvb2xlYW47CiAgICAgICAgbG9jYWw/OiBib29sZWFuOwogICAgfSk6IFpvZFN0cmluZzsKICAgIGRhdGUobWVzc2FnZT86IHN0cmluZyk6IFpvZFN0cmluZzsKICAgIHRpbWUob3B0aW9ucz86IHN0cmluZyB8IHsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHByZWNpc2lvbj86IG51bWJlciB8IG51bGw7CiAgICB9KTogWm9kU3RyaW5nOwogICAgZHVyYXRpb24obWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgcmVnZXgocmVnZXg6IFJlZ0V4cCwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgaW5jbHVkZXModmFsdWU6IHN0cmluZywgb3B0aW9ucz86IHsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nOwogICAgICAgIHBvc2l0aW9uPzogbnVtYmVyOwogICAgfSk6IFpvZFN0cmluZzsKICAgIHN0YXJ0c1dpdGgodmFsdWU6IHN0cmluZywgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgZW5kc1dpdGgodmFsdWU6IHN0cmluZywgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgbWluKG1pbkxlbmd0aDogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICBtYXgobWF4TGVuZ3RoOiBudW1iZXIsIG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZFN0cmluZzsKICAgIGxlbmd0aChsZW46IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kU3RyaW5nOwogICAgLyoqCiAgICAgKiBFcXVpdmFsZW50IHRvIGAubWluKDEpYAogICAgICovCiAgICBub25lbXB0eShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2RTdHJpbmc7CiAgICB0cmltKCk6IFpvZFN0cmluZzsKICAgIHRvTG93ZXJDYXNlKCk6IFpvZFN0cmluZzsKICAgIHRvVXBwZXJDYXNlKCk6IFpvZFN0cmluZzsKICAgIGdldCBpc0RhdGV0aW1lKCk6IGJvb2xlYW47CiAgICBnZXQgaXNEYXRlKCk6IGJvb2xlYW47CiAgICBnZXQgaXNUaW1lKCk6IGJvb2xlYW47CiAgICBnZXQgaXNEdXJhdGlvbigpOiBib29sZWFuOwogICAgZ2V0IGlzRW1haWwoKTogYm9vbGVhbjsKICAgIGdldCBpc1VSTCgpOiBib29sZWFuOwogICAgZ2V0IGlzRW1vamkoKTogYm9vbGVhbjsKICAgIGdldCBpc1VVSUQoKTogYm9vbGVhbjsKICAgIGdldCBpc05BTk9JRCgpOiBib29sZWFuOwogICAgZ2V0IGlzQ1VJRCgpOiBib29sZWFuOwogICAgZ2V0IGlzQ1VJRDIoKTogYm9vbGVhbjsKICAgIGdldCBpc1VMSUQoKTogYm9vbGVhbjsKICAgIGdldCBpc0lQKCk6IGJvb2xlYW47CiAgICBnZXQgaXNDSURSKCk6IGJvb2xlYW47CiAgICBnZXQgaXNCYXNlNjQoKTogYm9vbGVhbjsKICAgIGdldCBpc0Jhc2U2NHVybCgpOiBib29sZWFuOwogICAgZ2V0IG1pbkxlbmd0aCgpOiBudW1iZXIgfCBudWxsOwogICAgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIgfCBudWxsOwogICAgc3RhdGljIGNyZWF0ZTogKHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcyAmIHsKICAgICAgICBjb2VyY2U/OiB0cnVlOwogICAgfSkgPT4gWm9kU3RyaW5nOwp9CnR5cGUgWm9kTnVtYmVyQ2hlY2sgPSB7CiAgICBraW5kOiAibWluIjsKICAgIHZhbHVlOiBudW1iZXI7CiAgICBpbmNsdXNpdmU6IGJvb2xlYW47CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogIm1heCI7CiAgICB2YWx1ZTogbnVtYmVyOwogICAgaW5jbHVzaXZlOiBib29sZWFuOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJpbnQiOwogICAgbWVzc2FnZT86IHN0cmluZzsKfSB8IHsKICAgIGtpbmQ6ICJtdWx0aXBsZU9mIjsKICAgIHZhbHVlOiBudW1iZXI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9IHwgewogICAga2luZDogImZpbml0ZSI7CiAgICBtZXNzYWdlPzogc3RyaW5nOwp9OwppbnRlcmZhY2UgWm9kTnVtYmVyRGVmIGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICBjaGVja3M6IFpvZE51bWJlckNoZWNrW107CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE51bWJlcjsKICAgIGNvZXJjZTogYm9vbGVhbjsKfQpkZWNsYXJlIGNsYXNzIFpvZE51bWJlciBleHRlbmRzIFpvZFR5cGU8bnVtYmVyLCBab2ROdW1iZXJEZWYsIG51bWJlcj4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPG51bWJlcj47CiAgICBzdGF0aWMgY3JlYXRlOiAocGFyYW1zPzogUmF3Q3JlYXRlUGFyYW1zICYgewogICAgICAgIGNvZXJjZT86IGJvb2xlYW47CiAgICB9KSA9PiBab2ROdW1iZXI7CiAgICBndGUodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kTnVtYmVyOwogICAgbWluOiAodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKSA9PiBab2ROdW1iZXI7CiAgICBndCh2YWx1ZTogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBsdGUodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogWm9kTnVtYmVyOwogICAgbWF4OiAodmFsdWU6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKSA9PiBab2ROdW1iZXI7CiAgICBsdCh2YWx1ZTogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBwcm90ZWN0ZWQgc2V0TGltaXQoa2luZDogIm1pbiIgfCAibWF4IiwgdmFsdWU6IG51bWJlciwgaW5jbHVzaXZlOiBib29sZWFuLCBtZXNzYWdlPzogc3RyaW5nKTogWm9kTnVtYmVyOwogICAgX2FkZENoZWNrKGNoZWNrOiBab2ROdW1iZXJDaGVjayk6IFpvZE51bWJlcjsKICAgIGludChtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBwb3NpdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBuZWdhdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBub25wb3NpdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBub25uZWdhdGl2ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBtdWx0aXBsZU9mKHZhbHVlOiBudW1iZXIsIG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZE51bWJlcjsKICAgIHN0ZXA6ICh2YWx1ZTogbnVtYmVyLCBtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpID0+IFpvZE51bWJlcjsKICAgIGZpbml0ZShtZXNzYWdlPzogZXJyb3JVdGlsLkVyck1lc3NhZ2UpOiBab2ROdW1iZXI7CiAgICBzYWZlKG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZE51bWJlcjsKICAgIGdldCBtaW5WYWx1ZSgpOiBudW1iZXIgfCBudWxsOwogICAgZ2V0IG1heFZhbHVlKCk6IG51bWJlciB8IG51bGw7CiAgICBnZXQgaXNJbnQoKTogYm9vbGVhbjsKICAgIGdldCBpc0Zpbml0ZSgpOiBib29sZWFuOwp9CmludGVyZmFjZSBab2RVbmtub3duRGVmIGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVua25vd247Cn0KZGVjbGFyZSBjbGFzcyBab2RVbmtub3duIGV4dGVuZHMgWm9kVHlwZTx1bmtub3duLCBab2RVbmtub3duRGVmLCB1bmtub3duPiB7CiAgICBfdW5rbm93bjogdHJ1ZTsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgc3RhdGljIGNyZWF0ZTogKHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kVW5rbm93bjsKfQppbnRlcmZhY2UgWm9kQXJyYXlEZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgdHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQXJyYXk7CiAgICBleGFjdExlbmd0aDogewogICAgICAgIHZhbHVlOiBudW1iZXI7CiAgICAgICAgbWVzc2FnZT86IHN0cmluZzsKICAgIH0gfCBudWxsOwogICAgbWluTGVuZ3RoOiB7CiAgICAgICAgdmFsdWU6IG51bWJlcjsKICAgICAgICBtZXNzYWdlPzogc3RyaW5nOwogICAgfSB8IG51bGw7CiAgICBtYXhMZW5ndGg6IHsKICAgICAgICB2YWx1ZTogbnVtYmVyOwogICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7CiAgICB9IHwgbnVsbDsKfQp0eXBlIEFycmF5Q2FyZGluYWxpdHkgPSAibWFueSIgfCAiYXRsZWFzdG9uZSI7CnR5cGUgYXJyYXlPdXRwdXRUeXBlPFQgZXh0ZW5kcyBab2RUeXBlQW55LCBDYXJkaW5hbGl0eSBleHRlbmRzIEFycmF5Q2FyZGluYWxpdHkgPSAibWFueSI+ID0gQ2FyZGluYWxpdHkgZXh0ZW5kcyAiYXRsZWFzdG9uZSIgPyBbVFsiX291dHB1dCJdLCAuLi5UWyJfb3V0cHV0Il1bXV0gOiBUWyJfb3V0cHV0Il1bXTsKZGVjbGFyZSBjbGFzcyBab2RBcnJheTxUIGV4dGVuZHMgWm9kVHlwZUFueSwgQ2FyZGluYWxpdHkgZXh0ZW5kcyBBcnJheUNhcmRpbmFsaXR5ID0gIm1hbnkiPiBleHRlbmRzIFpvZFR5cGU8YXJyYXlPdXRwdXRUeXBlPFQsIENhcmRpbmFsaXR5PiwgWm9kQXJyYXlEZWY8VD4sIENhcmRpbmFsaXR5IGV4dGVuZHMgImF0bGVhc3RvbmUiID8gW1RbIl9pbnB1dCJdLCAuLi5UWyJfaW5wdXQiXVtdXSA6IFRbIl9pbnB1dCJdW10+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgZ2V0IGVsZW1lbnQoKTogVDsKICAgIG1pbihtaW5MZW5ndGg6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogdGhpczsKICAgIG1heChtYXhMZW5ndGg6IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogdGhpczsKICAgIGxlbmd0aChsZW46IG51bWJlciwgbWVzc2FnZT86IGVycm9yVXRpbC5FcnJNZXNzYWdlKTogdGhpczsKICAgIG5vbmVtcHR5KG1lc3NhZ2U/OiBlcnJvclV0aWwuRXJyTWVzc2FnZSk6IFpvZEFycmF5PFQsICJhdGxlYXN0b25lIj47CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4oc2NoZW1hOiBUXzEsIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kQXJyYXk8VF8xLCAibWFueSI+Owp9CnR5cGUgVW5rbm93bktleXNQYXJhbSA9ICJwYXNzdGhyb3VnaCIgfCAic3RyaWN0IiB8ICJzdHJpcCI7CnR5cGUgb2JqZWN0T3V0cHV0VHlwZTxTaGFwZSBleHRlbmRzIFpvZFJhd1NoYXBlLCBDYXRjaGFsbCBleHRlbmRzIFpvZFR5cGVBbnksIFVua25vd25LZXlzIGV4dGVuZHMgVW5rbm93bktleXNQYXJhbSA9IFVua25vd25LZXlzUGFyYW0+ID0gb2JqZWN0VXRpbC5mbGF0dGVuPG9iamVjdFV0aWwuYWRkUXVlc3Rpb25NYXJrczxiYXNlT2JqZWN0T3V0cHV0VHlwZTxTaGFwZT4+PiAmIENhdGNoYWxsT3V0cHV0PENhdGNoYWxsPiAmIFBhc3N0aHJvdWdoVHlwZTxVbmtub3duS2V5cz47CnR5cGUgYmFzZU9iamVjdE91dHB1dFR5cGU8U2hhcGUgZXh0ZW5kcyBab2RSYXdTaGFwZT4gPSB7CiAgICBbayBpbiBrZXlvZiBTaGFwZV06IFNoYXBlW2tdWyJfb3V0cHV0Il07Cn07CnR5cGUgb2JqZWN0SW5wdXRUeXBlPFNoYXBlIGV4dGVuZHMgWm9kUmF3U2hhcGUsIENhdGNoYWxsIGV4dGVuZHMgWm9kVHlwZUFueSwgVW5rbm93bktleXMgZXh0ZW5kcyBVbmtub3duS2V5c1BhcmFtID0gVW5rbm93bktleXNQYXJhbT4gPSBvYmplY3RVdGlsLmZsYXR0ZW48YmFzZU9iamVjdElucHV0VHlwZTxTaGFwZT4+ICYgQ2F0Y2hhbGxJbnB1dDxDYXRjaGFsbD4gJiBQYXNzdGhyb3VnaFR5cGU8VW5rbm93bktleXM+Owp0eXBlIGJhc2VPYmplY3RJbnB1dFR5cGU8U2hhcGUgZXh0ZW5kcyBab2RSYXdTaGFwZT4gPSBvYmplY3RVdGlsLmFkZFF1ZXN0aW9uTWFya3M8ewogICAgW2sgaW4ga2V5b2YgU2hhcGVdOiBTaGFwZVtrXVsiX2lucHV0Il07Cn0+Owp0eXBlIENhdGNoYWxsT3V0cHV0PFQgZXh0ZW5kcyBab2RUeXBlPiA9IFpvZFR5cGUgZXh0ZW5kcyBUID8gdW5rbm93biA6IHsKICAgIFtrOiBzdHJpbmddOiBUWyJfb3V0cHV0Il07Cn07CnR5cGUgQ2F0Y2hhbGxJbnB1dDxUIGV4dGVuZHMgWm9kVHlwZT4gPSBab2RUeXBlIGV4dGVuZHMgVCA/IHVua25vd24gOiB7CiAgICBbazogc3RyaW5nXTogVFsiX2lucHV0Il07Cn07CnR5cGUgUGFzc3Rocm91Z2hUeXBlPFQgZXh0ZW5kcyBVbmtub3duS2V5c1BhcmFtPiA9IFQgZXh0ZW5kcyAicGFzc3Rocm91Z2giID8gewogICAgW2s6IHN0cmluZ106IHVua25vd247Cn0gOiB1bmtub3duOwp0eXBlIFpvZFVuaW9uT3B0aW9ucyA9IFJlYWRvbmx5PFtab2RUeXBlQW55LCAuLi5ab2RUeXBlQW55W11dPjsKaW50ZXJmYWNlIFpvZFVuaW9uRGVmPFQgZXh0ZW5kcyBab2RVbmlvbk9wdGlvbnMgPSBSZWFkb25seTxbCiAgICBab2RUeXBlQW55LAogICAgWm9kVHlwZUFueSwKICAgIC4uLlpvZFR5cGVBbnlbXQpdPj4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIG9wdGlvbnM6IFQ7CiAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVuaW9uOwp9CmRlY2xhcmUgY2xhc3MgWm9kVW5pb248VCBleHRlbmRzIFpvZFVuaW9uT3B0aW9ucz4gZXh0ZW5kcyBab2RUeXBlPFRbbnVtYmVyXVsiX291dHB1dCJdLCBab2RVbmlvbkRlZjxUPiwgVFtudW1iZXJdWyJfaW5wdXQiXT4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBnZXQgb3B0aW9ucygpOiBUOwogICAgc3RhdGljIGNyZWF0ZTogPFRfMSBleHRlbmRzIHJlYWRvbmx5IFtab2RUeXBlQW55LCBab2RUeXBlQW55LCAuLi5ab2RUeXBlQW55W11dPih0eXBlczogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZFVuaW9uPFRfMT47Cn0KaW50ZXJmYWNlIFpvZEludGVyc2VjdGlvbkRlZjxUIGV4dGVuZHMgWm9kVHlwZUFueSA9IFpvZFR5cGVBbnksIFUgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGxlZnQ6IFQ7CiAgICByaWdodDogVTsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kSW50ZXJzZWN0aW9uOwp9CmRlY2xhcmUgY2xhc3MgWm9kSW50ZXJzZWN0aW9uPFQgZXh0ZW5kcyBab2RUeXBlQW55LCBVIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFRbIl9vdXRwdXQiXSAmIFVbIl9vdXRwdXQiXSwgWm9kSW50ZXJzZWN0aW9uRGVmPFQsIFU+LCBUWyJfaW5wdXQiXSAmIFVbIl9pbnB1dCJdPiB7CiAgICBfcGFyc2UoaW5wdXQ6IFBhcnNlSW5wdXQpOiBQYXJzZVJldHVyblR5cGU8dGhpc1siX291dHB1dCJdPjsKICAgIHN0YXRpYyBjcmVhdGU6IDxUXzEgZXh0ZW5kcyBab2RUeXBlQW55LCBVXzEgZXh0ZW5kcyBab2RUeXBlQW55PihsZWZ0OiBUXzEsIHJpZ2h0OiBVXzEsIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kSW50ZXJzZWN0aW9uPFRfMSwgVV8xPjsKfQppbnRlcmZhY2UgWm9kUHJvbWlzZURlZjxUIGV4dGVuZHMgWm9kVHlwZUFueSA9IFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICB0eXBlOiBUOwogICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RQcm9taXNlOwp9CmRlY2xhcmUgY2xhc3MgWm9kUHJvbWlzZTxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFByb21pc2U8VFsiX291dHB1dCJdPiwgWm9kUHJvbWlzZURlZjxUPiwgUHJvbWlzZTxUWyJfaW5wdXQiXT4+IHsKICAgIHVud3JhcCgpOiBUOwogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4oc2NoZW1hOiBUXzEsIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kUHJvbWlzZTxUXzE+Owp9CnR5cGUgUmVmaW5lbWVudEVmZmVjdDxUPiA9IHsKICAgIHR5cGU6ICJyZWZpbmVtZW50IjsKICAgIHJlZmluZW1lbnQ6IChhcmc6IFQsIGN0eDogUmVmaW5lbWVudEN0eCkgPT4gYW55Owp9Owp0eXBlIFRyYW5zZm9ybUVmZmVjdDxUPiA9IHsKICAgIHR5cGU6ICJ0cmFuc2Zvcm0iOwogICAgdHJhbnNmb3JtOiAoYXJnOiBULCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IGFueTsKfTsKdHlwZSBQcmVwcm9jZXNzRWZmZWN0PFQ+ID0gewogICAgdHlwZTogInByZXByb2Nlc3MiOwogICAgdHJhbnNmb3JtOiAoYXJnOiBULCBjdHg6IFJlZmluZW1lbnRDdHgpID0+IGFueTsKfTsKdHlwZSBFZmZlY3Q8VD4gPSBSZWZpbmVtZW50RWZmZWN0PFQ+IHwgVHJhbnNmb3JtRWZmZWN0PFQ+IHwgUHJlcHJvY2Vzc0VmZmVjdDxUPjsKaW50ZXJmYWNlIFpvZEVmZmVjdHNEZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgc2NoZW1hOiBUOwogICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzOwogICAgZWZmZWN0OiBFZmZlY3Q8YW55PjsKfQpkZWNsYXJlIGNsYXNzIFpvZEVmZmVjdHM8VCBleHRlbmRzIFpvZFR5cGVBbnksIE91dHB1dCA9IG91dHB1dDxUPiwgSW5wdXQgPSBpbnB1dDxUPj4gZXh0ZW5kcyBab2RUeXBlPE91dHB1dCwgWm9kRWZmZWN0c0RlZjxUPiwgSW5wdXQ+IHsKICAgIGlubmVyVHlwZSgpOiBUOwogICAgc291cmNlVHlwZSgpOiBUOwogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlOiA8SSBleHRlbmRzIFpvZFR5cGVBbnk+KHNjaGVtYTogSSwgZWZmZWN0OiBFZmZlY3Q8SVsiX291dHB1dCJdPiwgcGFyYW1zPzogUmF3Q3JlYXRlUGFyYW1zKSA9PiBab2RFZmZlY3RzPEksIElbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlV2l0aFByZXByb2Nlc3M6IDxJIGV4dGVuZHMgWm9kVHlwZUFueT4ocHJlcHJvY2VzczogKGFyZzogdW5rbm93biwgY3R4OiBSZWZpbmVtZW50Q3R4KSA9PiB1bmtub3duLCBzY2hlbWE6IEksIHBhcmFtcz86IFJhd0NyZWF0ZVBhcmFtcykgPT4gWm9kRWZmZWN0czxJLCBJWyJfb3V0cHV0Il0sIHVua25vd24+Owp9CgppbnRlcmZhY2UgWm9kT3B0aW9uYWxEZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgaW5uZXJUeXBlOiBUOwogICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPcHRpb25hbDsKfQpkZWNsYXJlIGNsYXNzIFpvZE9wdGlvbmFsPFQgZXh0ZW5kcyBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGU8VFsiX291dHB1dCJdIHwgdW5kZWZpbmVkLCBab2RPcHRpb25hbERlZjxUPiwgVFsiX2lucHV0Il0gfCB1bmRlZmluZWQ+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgdW53cmFwKCk6IFQ7CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4odHlwZTogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZE9wdGlvbmFsPFRfMT47Cn0KaW50ZXJmYWNlIFpvZE51bGxhYmxlRGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGlubmVyVHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVsbGFibGU7Cn0KZGVjbGFyZSBjbGFzcyBab2ROdWxsYWJsZTxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFRbIl9vdXRwdXQiXSB8IG51bGwsIFpvZE51bGxhYmxlRGVmPFQ+LCBUWyJfaW5wdXQiXSB8IG51bGw+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgdW53cmFwKCk6IFQ7CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4odHlwZTogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZE51bGxhYmxlPFRfMT47Cn0KaW50ZXJmYWNlIFpvZERlZmF1bHREZWY8VCBleHRlbmRzIFpvZFR5cGVBbnkgPSBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgaW5uZXJUeXBlOiBUOwogICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1dGlsLm5vVW5kZWZpbmVkPFRbIl9pbnB1dCJdPjsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdDsKfQpkZWNsYXJlIGNsYXNzIFpvZERlZmF1bHQ8VCBleHRlbmRzIFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZTx1dGlsLm5vVW5kZWZpbmVkPFRbIl9vdXRwdXQiXT4sIFpvZERlZmF1bHREZWY8VD4sIFRbIl9pbnB1dCJdIHwgdW5kZWZpbmVkPiB7CiAgICBfcGFyc2UoaW5wdXQ6IFBhcnNlSW5wdXQpOiBQYXJzZVJldHVyblR5cGU8dGhpc1siX291dHB1dCJdPjsKICAgIHJlbW92ZURlZmF1bHQoKTogVDsKICAgIHN0YXRpYyBjcmVhdGU6IDxUXzEgZXh0ZW5kcyBab2RUeXBlQW55Pih0eXBlOiBUXzEsIHBhcmFtczogewogICAgICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXAgfCB1bmRlZmluZWQ7CiAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlcXVpcmVkX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGRlZmF1bHQ6IFRfMVsiX2lucHV0Il0gfCAoKCkgPT4gdXRpbC5ub1VuZGVmaW5lZDxUXzFbIl9pbnB1dCJdPik7CiAgICB9KSA9PiBab2REZWZhdWx0PFRfMT47Cn0KaW50ZXJmYWNlIFpvZENhdGNoRGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGlubmVyVHlwZTogVDsKICAgIGNhdGNoVmFsdWU6IChjdHg6IHsKICAgICAgICBlcnJvcjogWm9kRXJyb3I7CiAgICAgICAgaW5wdXQ6IHVua25vd247CiAgICB9KSA9PiBUWyJfaW5wdXQiXTsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQ2F0Y2g7Cn0KZGVjbGFyZSBjbGFzcyBab2RDYXRjaDxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPFRbIl9vdXRwdXQiXSwgWm9kQ2F0Y2hEZWY8VD4sIHVua25vd24+IHsKICAgIF9wYXJzZShpbnB1dDogUGFyc2VJbnB1dCk6IFBhcnNlUmV0dXJuVHlwZTx0aGlzWyJfb3V0cHV0Il0+OwogICAgcmVtb3ZlQ2F0Y2goKTogVDsKICAgIHN0YXRpYyBjcmVhdGU6IDxUXzEgZXh0ZW5kcyBab2RUeXBlQW55Pih0eXBlOiBUXzEsIHBhcmFtczogewogICAgICAgIGVycm9yTWFwPzogWm9kRXJyb3JNYXAgfCB1bmRlZmluZWQ7CiAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlcXVpcmVkX2Vycm9yPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNhdGNoOiBUXzFbIl9vdXRwdXQiXSB8ICgoKSA9PiBUXzFbIl9vdXRwdXQiXSk7CiAgICB9KSA9PiBab2RDYXRjaDxUXzE+Owp9CmludGVyZmFjZSBab2RCcmFuZGVkRGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55PiBleHRlbmRzIFpvZFR5cGVEZWYgewogICAgdHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQnJhbmRlZDsKfQpkZWNsYXJlIGNvbnN0IEJSQU5EOiB1bmlxdWUgc3ltYm9sOwp0eXBlIEJSQU5EPFQgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w+ID0gewogICAgW0JSQU5EXTogewogICAgICAgIFtrIGluIFRdOiB0cnVlOwogICAgfTsKfTsKZGVjbGFyZSBjbGFzcyBab2RCcmFuZGVkPFQgZXh0ZW5kcyBab2RUeXBlQW55LCBCIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sPiBleHRlbmRzIFpvZFR5cGU8VFsiX291dHB1dCJdICYgQlJBTkQ8Qj4sIFpvZEJyYW5kZWREZWY8VD4sIFRbIl9pbnB1dCJdPiB7CiAgICBfcGFyc2UoaW5wdXQ6IFBhcnNlSW5wdXQpOiBQYXJzZVJldHVyblR5cGU8YW55PjsKICAgIHVud3JhcCgpOiBUOwp9CmludGVyZmFjZSBab2RQaXBlbGluZURlZjxBIGV4dGVuZHMgWm9kVHlwZUFueSwgQiBleHRlbmRzIFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZURlZiB7CiAgICBpbjogQTsKICAgIG91dDogQjsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUGlwZWxpbmU7Cn0KZGVjbGFyZSBjbGFzcyBab2RQaXBlbGluZTxBIGV4dGVuZHMgWm9kVHlwZUFueSwgQiBleHRlbmRzIFpvZFR5cGVBbnk+IGV4dGVuZHMgWm9kVHlwZTxCWyJfb3V0cHV0Il0sIFpvZFBpcGVsaW5lRGVmPEEsIEI+LCBBWyJfaW5wdXQiXT4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPGFueT47CiAgICBzdGF0aWMgY3JlYXRlPEEgZXh0ZW5kcyBab2RUeXBlQW55LCBCIGV4dGVuZHMgWm9kVHlwZUFueT4oYTogQSwgYjogQik6IFpvZFBpcGVsaW5lPEEsIEI+Owp9CnR5cGUgQnVpbHRJbiA9ICgoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHwgKG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueSkpIHwgewogICAgcmVhZG9ubHkgW1N5bWJvbC50b1N0cmluZ1RhZ106IHN0cmluZzsKfSB8IERhdGUgfCBFcnJvciB8IEdlbmVyYXRvciB8IFByb21pc2U8dW5rbm93bj4gfCBSZWdFeHA7CnR5cGUgTWFrZVJlYWRvbmx5PFQ+ID0gVCBleHRlbmRzIE1hcDxpbmZlciBLLCBpbmZlciBWPiA/IFJlYWRvbmx5TWFwPEssIFY+IDogVCBleHRlbmRzIFNldDxpbmZlciBWPiA/IFJlYWRvbmx5U2V0PFY+IDogVCBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXSA/IHJlYWRvbmx5IFtIZWFkLCAuLi5UYWlsXSA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBWPiA/IFJlYWRvbmx5QXJyYXk8Vj4gOiBUIGV4dGVuZHMgQnVpbHRJbiA/IFQgOiBSZWFkb25seTxUPjsKaW50ZXJmYWNlIFpvZFJlYWRvbmx5RGVmPFQgZXh0ZW5kcyBab2RUeXBlQW55ID0gWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlRGVmIHsKICAgIGlubmVyVHlwZTogVDsKICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVhZG9ubHk7Cn0KZGVjbGFyZSBjbGFzcyBab2RSZWFkb25seTxUIGV4dGVuZHMgWm9kVHlwZUFueT4gZXh0ZW5kcyBab2RUeXBlPE1ha2VSZWFkb25seTxUWyJfb3V0cHV0Il0+LCBab2RSZWFkb25seURlZjxUPiwgTWFrZVJlYWRvbmx5PFRbIl9pbnB1dCJdPj4gewogICAgX3BhcnNlKGlucHV0OiBQYXJzZUlucHV0KTogUGFyc2VSZXR1cm5UeXBlPHRoaXNbIl9vdXRwdXQiXT47CiAgICBzdGF0aWMgY3JlYXRlOiA8VF8xIGV4dGVuZHMgWm9kVHlwZUFueT4odHlwZTogVF8xLCBwYXJhbXM/OiBSYXdDcmVhdGVQYXJhbXMpID0+IFpvZFJlYWRvbmx5PFRfMT47CiAgICB1bndyYXAoKTogVDsKfQpkZWNsYXJlIGVudW0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kIHsKICAgIFpvZFN0cmluZyA9ICJab2RTdHJpbmciLAogICAgWm9kTnVtYmVyID0gIlpvZE51bWJlciIsCiAgICBab2ROYU4gPSAiWm9kTmFOIiwKICAgIFpvZEJpZ0ludCA9ICJab2RCaWdJbnQiLAogICAgWm9kQm9vbGVhbiA9ICJab2RCb29sZWFuIiwKICAgIFpvZERhdGUgPSAiWm9kRGF0ZSIsCiAgICBab2RTeW1ib2wgPSAiWm9kU3ltYm9sIiwKICAgIFpvZFVuZGVmaW5lZCA9ICJab2RVbmRlZmluZWQiLAogICAgWm9kTnVsbCA9ICJab2ROdWxsIiwKICAgIFpvZEFueSA9ICJab2RBbnkiLAogICAgWm9kVW5rbm93biA9ICJab2RVbmtub3duIiwKICAgIFpvZE5ldmVyID0gIlpvZE5ldmVyIiwKICAgIFpvZFZvaWQgPSAiWm9kVm9pZCIsCiAgICBab2RBcnJheSA9ICJab2RBcnJheSIsCiAgICBab2RPYmplY3QgPSAiWm9kT2JqZWN0IiwKICAgIFpvZFVuaW9uID0gIlpvZFVuaW9uIiwKICAgIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiA9ICJab2REaXNjcmltaW5hdGVkVW5pb24iLAogICAgWm9kSW50ZXJzZWN0aW9uID0gIlpvZEludGVyc2VjdGlvbiIsCiAgICBab2RUdXBsZSA9ICJab2RUdXBsZSIsCiAgICBab2RSZWNvcmQgPSAiWm9kUmVjb3JkIiwKICAgIFpvZE1hcCA9ICJab2RNYXAiLAogICAgWm9kU2V0ID0gIlpvZFNldCIsCiAgICBab2RGdW5jdGlvbiA9ICJab2RGdW5jdGlvbiIsCiAgICBab2RMYXp5ID0gIlpvZExhenkiLAogICAgWm9kTGl0ZXJhbCA9ICJab2RMaXRlcmFsIiwKICAgIFpvZEVudW0gPSAiWm9kRW51bSIsCiAgICBab2RFZmZlY3RzID0gIlpvZEVmZmVjdHMiLAogICAgWm9kTmF0aXZlRW51bSA9ICJab2ROYXRpdmVFbnVtIiwKICAgIFpvZE9wdGlvbmFsID0gIlpvZE9wdGlvbmFsIiwKICAgIFpvZE51bGxhYmxlID0gIlpvZE51bGxhYmxlIiwKICAgIFpvZERlZmF1bHQgPSAiWm9kRGVmYXVsdCIsCiAgICBab2RDYXRjaCA9ICJab2RDYXRjaCIsCiAgICBab2RQcm9taXNlID0gIlpvZFByb21pc2UiLAogICAgWm9kQnJhbmRlZCA9ICJab2RCcmFuZGVkIiwKICAgIFpvZFBpcGVsaW5lID0gIlpvZFBpcGVsaW5lIiwKICAgIFpvZFJlYWRvbmx5ID0gIlpvZFJlYWRvbmx5Igp9Cgp0eXBlIExvZ1ZhbHVlT2JqZWN0ID0gewogICAgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCBMb2dWYWx1ZU9iamVjdCB8IExvZ1ZhbHVlT2JqZWN0W107Cn07CgppbnRlcmZhY2UgR2l0SHViV29ya2Zsb3dSZXN1bHQgewogICAgam9iX2lkOiBzdHJpbmc7CiAgICBzdGF0dXM6ICdwZW5kaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAndGltZW91dCc7CiAgICByZXN1bHQ/OiB7CiAgICAgICAgb3V0cHV0PzogYW55OwogICAgICAgIHdvcmtmbG93X3J1bl9pZD86IG51bWJlcjsKICAgICAgICB3b3JrZmxvd19jb25jbHVzaW9uPzogc3RyaW5nOwogICAgICAgIGV4ZWN1dGlvbl90aW1lPzogbnVtYmVyOwogICAgfTsKICAgIGFydGlmYWN0cz86IEFycmF5PHsKICAgICAgICBpZDogbnVtYmVyOwogICAgICAgIG5hbWU6IHN0cmluZzsKICAgICAgICBzaXplX2J5dGVzOiBudW1iZXI7CiAgICAgICAgY29udGVudD86IGFueTsKICAgICAgICBjb250ZW50X3R5cGU/OiBzdHJpbmc7CiAgICB9PjsKICAgIHN0YXJ0ZWRfYXQ/OiBzdHJpbmc7CiAgICBjb21wbGV0ZWRfYXQ/OiBzdHJpbmc7CiAgICBnaXRodWJfdXJsPzogc3RyaW5nOwogICAgZXJyb3I/OiBzdHJpbmc7Cn0KCmludGVyZmFjZSBUcmFpbmluZ0V4YW1wbGVSZW5kZXJDb250ZXh0IHsKICAgIC8qKiBTY29wZWQgYWN0aW9uczogYGdldGAvYHNldGAgcmVhZCBhbmQgd3JpdGUgdGhlIGV4YW1wbGUgc2FuZGJveCBpbnN0ZWFkIG9mIHRoZSB0YXNrIGRhdGEgcm9vdC4gKi8KICAgIGFjdGlvbnM6IHR5cGVvZiBhY3Rpb25zOwogICAgLyoqCiAgICAgKiBUaGUgY3VycmVudCBleGFtcGxlIGlucHV0IEFGVEVSIHRoZSBub2RlIHByZXByb2Nlc3MgcnVucyAoaWRlbnRpdHkgd2hlbgogICAgICogdGhlIGJsb2NrIGhhcyBubyBwcmVwcm9jZXNzKSwgc28gdGhlIGludGVyZmFjZSBzZWVzIHRoZSBzYW1lIGRhdGEgYXMKICAgICAqIHByb2R1Y3Rpb24uIEFsc28gcmVhZGFibGUgdmlhIGBhY3Rpb25zLmdldCgnPG5hbWU+JylgLgogICAgICovCiAgICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47CiAgICBleGFtcGxlSWQ6IHN0cmluZzsKfQoKZGVjbGFyZSBjb25zdCBTdXNwZW5zZVBlbmRpbmdNYXJrZXI6IFJlYWN0LkZDOwpkZWNsYXJlIGNvbnN0IEZpZWxkOiB7CiAgICByZWFkb25seSBBaUVkaXRvcjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbW1lbnRzPzogewogICAgICAgICAgICB1c2VyVHlwZTogc3RyaW5nOwogICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRlbnRFZGl0YWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWlDaGVja3M/OiB7CiAgICAgICAgICAgIGNvZGU/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgdmFsaWRhdGU6IGJvb2xlYW47CiAgICAgICAgICAgICAgICBjaGVja1R5cGVzPzogKCJDT0RFQkxPQ0tfRVhJU1RTIiB8ICJJTlRST19DT01NRU5UX0VYSVNUUyIgfCAiTEFOR19TUEVDSUZJRUQiIHwgIkNPREVfQ09NTUVOVFNfRVhJU1RTIilbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgaW50ZW50PzogewogICAgICAgICAgICAgICAgZW5hYmxlZDogYm9vbGVhbjsKICAgICAgICAgICAgICAgIHZhbGlkYXRlOiBib29sZWFuOwogICAgICAgICAgICAgICAgcHJvbXB0OiBzdHJpbmc7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZhY3RzPzogewogICAgICAgICAgICAgICAgZW5hYmxlZDogYm9vbGVhbjsKICAgICAgICAgICAgICAgIHNvdXJjZVRleHRzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBzb3VyY2VMaW5rcz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgbWF4U2VsZWN0ZWRTeW1ib2xzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgc3VnZ2VzdGVkRmFjdHM/OiB7CiAgICAgICAgICAgICAgICAgICAgY29udGVudDogc3RyaW5nOwogICAgICAgICAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBncmFtbWFyU2NvcmU/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgbWluU2NvcmU6IG51bWJlcjsKICAgICAgICAgICAgICAgIHZhbGlkYXRlOiBib29sZWFuOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3b3JkQ291bnQ/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgdmFsaWRhdGU6IGJvb2xlYW47CiAgICAgICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRva2VuQ291bnQ/OiB7CiAgICAgICAgICAgICAgICBlbmFibGVkOiBib29sZWFuOwogICAgICAgICAgICAgICAgdmFsaWRhdGU6IGJvb2xlYW47CiAgICAgICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBpZ25vcmVNYXJrZG93bj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB0b2tlbml6ZXJJZD86ICJ1bmlncmFtXzAycGN0X2NjX3YxLjBfaGZfY29udmVydGVkX2NsZWFuZWQiIHwgImNsYXVkZS0zLTUtc29ubmV0LTIwMjQwNjIwLWFudGhyb3BpYy1haS1jb3VudC10b2tlbnMiIHwgImNsYXVkZS0zLTUtc29ubmV0LTIwMjQxMDIyLWFudGhyb3BpYy1haS1jb3VudC10b2tlbnMiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBhaUdlbmVyYXRlZD86IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47CiAgICAgICAgICAgICAgICB2YWxpZGF0ZTogYm9vbGVhbjsKICAgICAgICAgICAgICAgIG9yaWdpbmFsVGhyZXNob2xkOiBudW1iZXI7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0TW9kZT86ICJtYXJrZG93biIgfCAicmljaC10ZXh0IiB8IHVuZGVmaW5lZDsKICAgICAgICBpbWFnZVR5cGU/OiAidXJsIiB8ICJiYXNlNjQiIHwgImJsb2IiIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZVNpbmdsZURvbGxhck1hdGg/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRlZmF1bHRBaVBhbmVsQ29udGVudD86ICJjb2RlIiB8ICJjb21tZW50cyIgfCAiaW50ZW50IiB8ICJncmFtbWFyU2NvcmUiIHwgImFpR2VuZXJhdGVkIiB8ICJmYWN0IiB8IHVuZGVmaW5lZDsKICAgICAgICByZXF1aXJlZENvbnRlbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlQ29udGVudD86ICgoYXJnc18wOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgQ2hlY2tib3g6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmVzZXJ2ZUZhbHNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgQ2hhdEFzc2lzdGFudDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBvcHRpb25zPzogewogICAgICAgICAgICB0aGlua2luZz86IHsKICAgICAgICAgICAgICAgIHR5cGU6ICJlbmFibGVkIjsKICAgICAgICAgICAgICAgIGJ1ZGdldF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRvcF9wPzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdG9wX2s/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXhfdG9rZW5zPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0b29scz86IGFueVtdIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGluaXRpYWxNZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IENvZGU6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgbGFuZ3VhZ2U6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZm9ybWF0aW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgQ29kZUV4ZWN1dGlvbjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBsYW5ndWFnZTogInB5dGhvbkAzLjEwLjAiIHwgImphdmFzY3JpcHRAMjAuMTEuMSI7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGZvcm1hdGluZz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IERpYWxvZ1JldmlldzogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBhbGxvd2VkTWV0YU1vZGVsczogUGFydGlhbDxSZWNvcmQ8ImNoYXRncHQiIHwgImNsYXVkZSIgfCAiZ2VtaW5pIiB8ICJtZXRhIiB8ICJtZXRhXzEiIHwgIm1ldGFfMiIsIHN0cmluZz4+OwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRvcGljPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHFhPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbHM/OiAoImNoYXRncHQiIHwgImNsYXVkZSIgfCAiZ2VtaW5pIiB8ICJtZXRhIiB8ICJtZXRhXzEiIHwgIm1ldGFfMiIpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgZGltZW5zaW9ucz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBFeHRlcm5hbDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB1cmw6IHN0cmluZzsKICAgICAgICBjb25maWc6IHt9OwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBGYWNlQ29sbGVjdGlvbjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBxYT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9iaWxlT25seT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWF0aW9uPzogIkEiIHwgIkIiIHwgdW5kZWZpbmVkOwogICAgICAgIHBhZ2U/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVidWc/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHNhbWVQZXJzb25UaHJlc2hvbGQ/OiB7CiAgICAgICAgICAgIHNlbGZpZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcG9zZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgaGlzdG9yaWNhbD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBGaWxlVXBsb2FkOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG11bHRpcGxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhY2NlcHQ/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDsKICAgICAgICBsaW5rVHlwZT86ICJzYXNMaW5rIiB8ICJkb3dubG9hZExpbmsiIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbmltdW1GaWxlcz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgSW1hZ2VBbm5vdGF0aW9uOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIGltYWdlOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRvb2xzPzogKCJyZWN0YW5nbGUiIHwgInBvbHlnb24iKVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVscz86IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgY29sb3I6ICJyZWQiIHwgIm9yYW5nZSIgfCAiYW1iZXIiIHwgInllbGxvdyIgfCAibGltZSIgfCAiZ3JlZW4iIHwgImVtZXJhbGQiIHwgInRlYWwiIHwgImN5YW4iIHwgInNreSIgfCAiYmx1ZSIgfCAiaW5kaWdvIiB8ICJ2aW9sZXQiIHwgInB1cnBsZSIgfCAiZnVjaHNpYSIgfCAicGluayIgfCAicm9zZSIgfCAid2hpdGUiOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBxdWVzdGlvbnM/OiAoewogICAgICAgICAgICB0eXBlOiAidGV4dCI7CiAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgewogICAgICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgfVtdOwogICAgICAgICAgICB0eXBlOiAidG9nZ2xlLWdyb3VwIjsKICAgICAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgICAgICB9W107CiAgICAgICAgICAgIHR5cGU6ICJzZWxlY3QiOwogICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdHlwZTogIm51bWJlciI7CiAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGRlY2ltYWxTY2FsZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB9KVtdIHwgdW5kZWZpbmVkOwogICAgICAgIGFubm90YXRpb25TaXplPzogewogICAgICAgICAgICBtaW5IZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbldpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzcGxheUxhYmVscz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbmF2aWdhdG9yPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0QW5ub3RhdGlvbkNvbG9yPzogInJlZCIgfCAib3JhbmdlIiB8ICJhbWJlciIgfCAieWVsbG93IiB8ICJsaW1lIiB8ICJncmVlbiIgfCAiZW1lcmFsZCIgfCAidGVhbCIgfCAiY3lhbiIgfCAic2t5IiB8ICJibHVlIiB8ICJpbmRpZ28iIHwgInZpb2xldCIgfCAicHVycGxlIiB8ICJmdWNoc2lhIiB8ICJwaW5rIiB8ICJyb3NlIiB8ICJ3aGl0ZSIgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IEltYWdlU2tlbGV0b25Bbm5vdGF0aW9uOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHRvb2xzOiB7CiAgICAgICAgICAgIHR5cGU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgY29sb3I6ICJyZWQiIHwgIm9yYW5nZSIgfCAiYW1iZXIiIHwgInllbGxvdyIgfCAibGltZSIgfCAiZ3JlZW4iIHwgImVtZXJhbGQiIHwgInRlYWwiIHwgImN5YW4iIHwgInNreSIgfCAiYmx1ZSIgfCAiaW5kaWdvIiB8ICJ2aW9sZXQiIHwgInB1cnBsZSIgfCAiZnVjaHNpYSIgfCAicGluayIgfCAicm9zZSIgfCAid2hpdGUiOwogICAgICAgICAgICB0ZW1wbGF0ZTogUmVjb3JkPHN0cmluZywgW251bWJlciwgbnVtYmVyXT47CiAgICAgICAgICAgIGNvbm5lY3Rpb25zOiBbc3RyaW5nLCBzdHJpbmddW107CiAgICAgICAgICAgIHBvaW50c0NvbG9yPzogUmVjb3JkPHN0cmluZywgInJlZCIgfCAib3JhbmdlIiB8ICJhbWJlciIgfCAieWVsbG93IiB8ICJsaW1lIiB8ICJncmVlbiIgfCAiZW1lcmFsZCIgfCAidGVhbCIgfCAiY3lhbiIgfCAic2t5IiB8ICJibHVlIiB8ICJpbmRpZ28iIHwgInZpb2xldCIgfCAicHVycGxlIiB8ICJmdWNoc2lhIiB8ICJwaW5rIiB8ICJyb3NlIiB8ICJ3aGl0ZSI+IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBzaG93UG9pbnRMYWJlbD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHNjYWxlPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICBpbWFnZTogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgaGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgSnNvblNjaGVtYUZvcm06IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc2NoZW1hPzogYW55OwogICAgfT47CiAgICByZWFkb25seSBMaXN0OiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHJlbmRlckl0ZW06IChhcmdzXzA6IHN0cmluZywgYXJnc18xOiBhbnksIGFyZ3NfMjogbnVtYmVyKSA9PiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBmbGF0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4TGVuZ3RoPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGl0ZW1XaXRoQm9yZGVyPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhZGRCdXR0b25MYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBhZGRCdXR0b25WYXJpYW50PzogImRlZmF1bHQiIHwgInNlY29uZGFyeSIgfCAiZ2hvc3QiIHwgIm91dGxpbmUiIHwgdW5kZWZpbmVkOwogICAgICAgIGdhcD86IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICByZW9yZGVyYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE1lZGlhVGFza1JldmlldzogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgTWxFbmRwb2ludDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIGVuZHBvaW50OiBzdHJpbmc7CiAgICAgICAgZGF0YToge30gfCAoKCkgPT4ge30pOwogICAgICAgIGZ1bmN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB1c2VfY2FjaGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHBvc3RQcm9jZXNzaW5nRm4/OiAoKGVuZHBvaW50UmVzdWx0OiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWFudD86ICJkZWZhdWx0IiB8ICJzZWNvbmRhcnkiIHwgImdob3N0IiB8ICJvdXRsaW5lIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb21wbGFpbj86IHsKICAgICAgICAgICAgdHlwZT86ICJidXR0b24iIHwgImNoZWNrYm94IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGRlZmF1bHRDb21tZW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBvblN1Y2Nlc3M/OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGluc3RydWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE1sRW5kcG9pbnRNdWx0aXBsZTogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIHJlcXVlc3RzOiB7CiAgICAgICAgICAgIGVuZHBvaW50OiBzdHJpbmc7CiAgICAgICAgICAgIGRhdGE6IHt9IHwgKCgpID0+IHt9KTsKICAgICAgICAgICAgZnVuY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1vbmRheVN1Yml0ZW1JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdXNlX2NhY2hlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcG9zdFByb2Nlc3NpbmdGbj86ICgoZW5kcG9pbnRSZXN1bHQ6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWFudD86ICJkZWZhdWx0IiB8ICJzZWNvbmRhcnkiIHwgImdob3N0IiB8ICJvdXRsaW5lIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb21wbGFpbj86IHsKICAgICAgICAgICAgdHlwZT86ICJidXR0b24iIHwgImNoZWNrYm94IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGRlZmF1bHRDb21tZW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBvblN1Y2Nlc3M/OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGluc3RydWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE11bHRpU2VsZWN0OiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IE51bWJlcjogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRlY2ltYWxTY2FsZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgUG9ydGFsQ2hhdEFzc2lzdGFudDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICBvcHRpb25zPzogewogICAgICAgICAgICB0aGlua2luZz86IHsKICAgICAgICAgICAgICAgIHR5cGU6ICJlbmFibGVkIjsKICAgICAgICAgICAgICAgIGJ1ZGdldF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRvcF9wPzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdG9wX2s/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXhfdG9rZW5zPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0b29scz86IGFueVtdIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGluaXRpYWxNZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGNvbnRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFJhZGlvR3JvdXA6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgICAgICBoaW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgU2VsZWN0OiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFNob3BpZnlPbmVEY2c6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgc2hvcEFwcEVtYWlsOiBzdHJpbmc7CiAgICAgICAgY291bnRyeTogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcWE/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHF1ZXJ5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHF1ZXJ5U2hhcGU/OiAia2V5d29yZCIgfCAiY29tcGxleCIgfCAiY29udmVyc2F0aW9uYWwiIHwgdW5kZWZpbmVkOwogICAgICAgIHBlcnNvbmE/OiB7CiAgICAgICAgICAgIHV1aWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlbGF0aW9uc2hpcD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgc3VtbWFyeT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgc25hcHNob3Q/OiB1bmtub3duOwogICAgICAgICAgICBsb29rdXBfc291cmNlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgcGFpcnNUYXJnZXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgaXNUZXN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByZWFzb25pbmdGYWN0b3JzPzogewogICAgICAgICAgICBpZDogc3RyaW5nOwogICAgICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgU2hvcGlmeVN0b3JlZnJvbnQ6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAganVkZ2VzOiB7CiAgICAgICAgICAgIHNob3BfYXBwX2VtYWlsOiBzdHJpbmc7CiAgICAgICAgICAgIGNvdW50cnk6IHN0cmluZzsKICAgICAgICAgICAgcGVyc29uYTogewogICAgICAgICAgICAgICAgdXVpZDogc3RyaW5nOwogICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwOiBzdHJpbmc7CiAgICAgICAgICAgICAgICBzdW1tYXJ5OiBzdHJpbmc7CiAgICAgICAgICAgICAgICBsb29rdXBfc291cmNlOiBzdHJpbmc7CiAgICAgICAgICAgICAgICBzbmFwc2hvdD86IHVua25vd247CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHN0b3JlczogewogICAgICAgICAgICAgICAgc2hvcF9naWQ6IHN0cmluZzsKICAgICAgICAgICAgICAgIG1lcmNoYW50X25hbWU6IHN0cmluZzsKICAgICAgICAgICAgICAgIGRvbWFpbjogc3RyaW5nOwogICAgICAgICAgICAgICAgbWVyY2hhbnRfY2F0ZWdvcnk6IHN0cmluZzsKICAgICAgICAgICAgICAgIHNhbXBsZV9wcm9kdWN0czogc3RyaW5nW107CiAgICAgICAgICAgICAgICB2aXNpdGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJhbms/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH1bXTsKICAgICAgICAgICAgbGF0ZXN0X3F1ZXJ5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGlzVGVzdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFNwZWVjaFRvVGV4dDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG1vbmRheVN1Yml0ZW1JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9kZWxJZD86ICJncHQtNG8tdHJhbnNjcmliZSIgfCAiZ3B0LTRvLW1pbmktdHJhbnNjcmliZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFNwZWVjaFRvVGV4dFYyOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtb2RlbElkPzogImdwdC00by10cmFuc2NyaWJlIiB8ICJncHQtNG8tbWluaS10cmFuc2NyaWJlIiB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVGV4dDogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzcGVsbENoZWNrPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZENvcHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkUGFzdGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBUZXh0QW5ub3RhdGlvbjogUmVhY3QuRkM8ewogICAgICAgIGNvbnRlbnQ6IHN0cmluZzsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgbGFiZWxzOiB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgIGNvbG9yOiAicmVkIiB8ICJvcmFuZ2UiIHwgImFtYmVyIiB8ICJ5ZWxsb3ciIHwgImxpbWUiIHwgImdyZWVuIiB8ICJlbWVyYWxkIiB8ICJ0ZWFsIiB8ICJjeWFuIiB8ICJza3kiIHwgImJsdWUiIHwgImluZGlnbyIgfCAidmlvbGV0IiB8ICJwdXJwbGUiIHwgImZ1Y2hzaWEiIHwgInBpbmsiIHwgInJvc2UiIHwgIndoaXRlIjsKICAgICAgICB9W107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9kZT86ICJjbGFzc2lmeWluZyIgfCAiY2xhc3NpZnlpbmctY29tbWVudGluZyIgfCB1bmRlZmluZWQ7CiAgICAgICAgYWRqdXN0PzogInN5bWJvbHMiIHwgIndvcmRzIiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVGV4dGFyZWE6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3BlbGxDaGVjaz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWRDb3B5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZFBhc3RlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICByZXNpemFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJvd3M/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFRvZ2dsZUdyb3VwOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIHR5cGU/OiAibXVsdGlwbGUiIHwgInNpbmdsZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICByZWFkb25seSBWaWRlb1RpbWVsaW5lU2VnbWVudGF0aW9uOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIHZpZGVvOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcXVlc3Rpb25zPzogewogICAgICAgICAgICBrZXlmcmFtZXM/OiAoewogICAgICAgICAgICAgICAgdHlwZTogInRleHQiOwogICAgICAgICAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgewogICAgICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHN0cmluZzsKICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9W107CiAgICAgICAgICAgICAgICB0eXBlOiAidG9nZ2xlLWdyb3VwIjsKICAgICAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0pW10gfCAoKGFyZ3NfMDogb2JqZWN0SW5wdXRUeXBlPHsKICAgICAgICAgICAgICAgIHRpbWU6IFpvZE51bWJlcjsKICAgICAgICAgICAgfSwgWm9kVW5rbm93biwgInN0cmlwIj4pID0+ICh7CiAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCI7CiAgICAgICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIH0gfCB7CiAgICAgICAgICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH1bXTsKICAgICAgICAgICAgICAgIHR5cGU6ICJ0b2dnbGUtZ3JvdXAiOwogICAgICAgICAgICAgICAga2V5OiBzdHJpbmc7CiAgICAgICAgICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSlbXSkgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHNlZ21lbnRzPzogKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IjsKICAgICAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfVtdOwogICAgICAgICAgICAgICAgdHlwZTogInRvZ2dsZS1ncm91cCI7CiAgICAgICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9KVtdIHwgKChhcmdzXzA6IG9iamVjdElucHV0VHlwZTx7CiAgICAgICAgICAgICAgICBmcm9tOiBab2ROdW1iZXI7CiAgICAgICAgICAgICAgICB0bzogWm9kTnVtYmVyOwogICAgICAgICAgICB9LCBab2RVbmtub3duLCAic3RyaXAiPikgPT4gKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IjsKICAgICAgICAgICAgICAgIGtleTogc3RyaW5nOwogICAgICAgICAgICAgICAgbGFiZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgfVtdOwogICAgICAgICAgICAgICAgdHlwZTogInRvZ2dsZS1ncm91cCI7CiAgICAgICAgICAgICAgICBrZXk6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9KVtdKSB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgIG1vZGU/OiAia2V5ZnJhbWVzIiB8ICJzZWdtZW50cyIgfCAia2V5ZnJhbWVzLXNlZ21lbnRzIiB8IHVuZGVmaW5lZDsKICAgICAgICB2aWRlb0hlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0UGxheWJhY2tSYXRlPzogMSB8IDIgfCAwLjI1IHwgMC41IHwgMC43NSB8IDEuMjUgfCAxLjUgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFZpZGVvRnJhbWluZzogUmVhY3QuRkM8ewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICB2aWRlbzogc3RyaW5nOwogICAgICAgIHZhbGlkYXRpb24/OiB7CiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHR5cGU/OiAic3RyaW5nIiB8ICJudW1iZXIiIHwgImJvb2xlYW4iIHwgIm9iamVjdCIgfCAiaW50ZWdlciIgfCAiZmxvYXQiIHwgImRhdGUiIHwgImFycmF5IiB8ICJ1cmwiIHwgImVudW0iIHwgImhleCIgfCAiZW1haWwiIHwgImFueSIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1pbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWF4PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGVudW0/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxlbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgd2hpdGVzcGFjZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGZpZWxkcz86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICB2YWxpZGF0b3I/OiAoKGZpZWxkVmFsdWU6IGFueSkgPT4gdHJ1ZSB8IEVycm9yKSB8IHVuZGVmaW5lZDsKICAgICAgICB9W10gfCB1bmRlZmluZWQ7CiAgICAgICAgb25DaGFuZ2U/OiAoKGNoYW5nZWRWYWx1ZTogdW5rbm93bikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGxhYmVsPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGhpbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZpZGVvSGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGRlZmF1bHRQbGF5YmFja1JhdGU/OiAxIHwgMiB8IDAuMjUgfCAwLjUgfCAwLjc1IHwgMS4yNSB8IDEuNSB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVmlkZW9SZWNvcmQ6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgZnBzVG9sZXJhbmNlRnJhY3Rpb246IG51bWJlcjsKICAgICAgICByZXNvbHV0aW9uVG9sZXJhbmNlRnJhY3Rpb246IG51bWJlcjsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0eXBlPzogInN0cmluZyIgfCAibnVtYmVyIiB8ICJib29sZWFuIiB8ICJvYmplY3QiIHwgImludGVnZXIiIHwgImZsb2F0IiB8ICJkYXRlIiB8ICJhcnJheSIgfCAidXJsIiB8ICJlbnVtIiB8ICJoZXgiIHwgImVtYWlsIiB8ICJhbnkiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtaW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVxdWlyZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBlbnVtPzogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsZW4/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHAgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHdoaXRlc3BhY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBmaWVsZHM/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdmFsaWRhdG9yPzogKChmaWVsZFZhbHVlOiBhbnkpID0+IHRydWUgfCBFcnJvcikgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgICAgIG9uQ2hhbmdlPzogKChjaGFuZ2VkVmFsdWU6IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBtb2JpbGVPbmx5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBsaW5rVHlwZT86ICJzYXNMaW5rIiB8ICJkb3dubG9hZExpbmsiIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtaW5XaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvcmllbnRhdGlvbj86ICJsYW5kc2NhcGUiIHwgInBvcnRyYWl0IiB8IHVuZGVmaW5lZDsKICAgICAgICBsb2NrU2NyZWVuT3JpZW50YXRpb24/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkR1cmF0aW9uU2VjPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1heER1cmF0aW9uU2VjPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGNhbWVyYUZhY2luZz86ICJ1c2VyIiB8ICJlbnZpcm9ubWVudCIgfCB1bmRlZmluZWQ7CiAgICAgICAgYXVkaW8/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHJlY29yZGluZ1F1YWxpdHk/OiAiaGlnaCIgfCAibG93IiB8ICJiYWxhbmNlZCIgfCB1bmRlZmluZWQ7CiAgICAgICAgdW5zdXBwb3J0ZWRNZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG5hdGl2ZUNhbWVyYT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhdGZvcm0/OiAiaW9zIiB8ICJhbmRyb2lkIiB8ICJib3RoIiB8IHVuZGVmaW5lZDsKICAgICAgICBsZW5zPzogImRlZmF1bHQiIHwgIndpZGUiIHwgInVsdHJhV2lkZSIgfCAidGVsZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluRm92RGVnPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1pbkZwcz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBtaW5CaXRyYXRlPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIGhkck1vZGU/OiAib2ZmIiB8ICJoZHIxMCIgfCAiYXV0byIgfCB1bmRlZmluZWQ7CiAgICAgICAgbGlnaHRpbmdUaHJlc2hvbGQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgcmVjb3JkSW11PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgcmVhZG9ubHkgVmlkZW9VcGxvYWQ6IFJlYWN0LkZDPHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbXVsdGlwbGU/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGFjY2VwdD86IHN0cmluZ1tdIHwgdW5kZWZpbmVkOwogICAgICAgIGxpbmtUeXBlPzogInNhc0xpbmsiIHwgImRvd25sb2FkTGluayIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluaW11bUZpbGVzPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG9yaWVudGF0aW9uPzogImxhbmRzY2FwZSIgfCAicG9ydHJhaXQiIHwgInNxdWFyZSIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWluRHVyYXRpb25TZWM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgbWF4RHVyYXRpb25TZWM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIHJlYWRvbmx5IFdvcmxkU2VhcmNoOiBSZWFjdC5GQzx7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIGF2YWlsYWJsZVdvcmxkczogc3RyaW5nW107CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHlwZT86ICJzdHJpbmciIHwgIm51bWJlciIgfCAiYm9vbGVhbiIgfCAib2JqZWN0IiB8ICJpbnRlZ2VyIiB8ICJmbG9hdCIgfCAiZGF0ZSIgfCAiYXJyYXkiIHwgInVybCIgfCAiZW51bSIgfCAiaGV4IiB8ICJlbWFpbCIgfCAiYW55IiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbWluPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtYXg/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJlcXVpcmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZW51bT86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGVuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB3aGl0ZXNwYWNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZmllbGRzPzoge30gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHZhbGlkYXRvcj86ICgoZmllbGRWYWx1ZTogYW55KSA9PiB0cnVlIHwgRXJyb3IpIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXSB8IHVuZGVmaW5lZDsKICAgICAgICBvbkNoYW5nZT86ICgoY2hhbmdlZFZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbGFiZWw/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgaGludD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICByZXF1aXJlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGVyUGFnZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzZWxlY3REb2N1bWVudHM/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47Cn07CmRlY2xhcmUgY29uc3QgTGF5b3V0OiB7CiAgICBTdGlja3lIZWFkZXI6IFJlYWN0LkZDPHsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBoZWFkZXI/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKfTsKZGVjbGFyZSBjb25zdCBWaWV3OiB7CiAgICBBY3Rpb25CdXR0b246IFJlYWN0LkZDPHsKICAgICAgICBsYWJlbDogc3RyaW5nOwogICAgICAgIGFjdGlvbjogKCkgPT4gYW55OwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YXJpYW50PzogImRlZmF1bHQiIHwgInNlY29uZGFyeSIgfCAiZ2hvc3QiIHwgIm91dGxpbmUiIHwgdW5kZWZpbmVkOwogICAgICAgIGxvYWRpbmdMYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgQWxlcnQ6IFJlYWN0LkZDPHsKICAgICAgICB0aXRsZT86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBkZXNjcmlwdGlvbj86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YXJpYW50PzogImVycm9yIiB8ICJkZWZhdWx0IiB8ICJpbmZvIiB8ICJzdWNjZXNzIiB8ICJ3YXJuaW5nIiB8IHVuZGVmaW5lZDsKICAgICAgICBwYWRkaW5nPzogInNtIiB8ICJtZCIgfCB1bmRlZmluZWQ7CiAgICAgICAgaWNvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIEF1ZGlvOiBSZWFjdC5GQzx7CiAgICAgICAgdXJsOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgcGxheWVkRnVsbHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIENhcmQ6IFJlYWN0LkZDPHsKICAgICAgICBmbGF0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBkZXNjcmlwdGlvbj86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB2YXJpYW50PzogImVycm9yIiB8ICJkZWZhdWx0IiB8ICJpbmZvIiB8ICJzdWNjZXNzIiB8ICJ3YXJuaW5nIiB8IHVuZGVmaW5lZDsKICAgICAgICB2aWV3PzogImZpbGwiIHwgIm91dGxpbmUiIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBDb2RlRGlmZjogUmVhY3QuRkM8ewogICAgICAgIG9yaWdpbmFsOiBzdHJpbmc7CiAgICAgICAgbGFuZ3VhZ2U6IHN0cmluZzsKICAgICAgICBtb2RpZmllZDogc3RyaW5nOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzaWRlQnlTaWRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgQ29sOiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgc3Bhbj86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBvZmZzZXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2V0UGFyYW1zPzogKChhcmdzXzA6IG51bWJlcikgPT4gewogICAgICAgICAgICBzcGFuPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgfSkgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIENvbGxhcHNpYmxlOiBSZWFjdC5GQzx7CiAgICAgICAgZmxhdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdGl0bGU/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHZhcmlhbnQ/OiAiZGVmYXVsdCIgfCAiaW5mbyIgfCB1bmRlZmluZWQ7CiAgICAgICAgZGVmYXVsdE9wZW4/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBEaXZpZGVyOiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgb3JpZW50YXRpb24/OiAiaG9yaXpvbnRhbCIgfCAidmVydGljYWwiIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBGbGV4OiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZ2FwPzogc3RyaW5nIHwgbnVtYmVyIHwgW3N0cmluZyB8IG51bWJlciwgc3RyaW5nIHwgbnVtYmVyXSB8IHVuZGVmaW5lZDsKICAgICAgICBqdXN0aWZ5PzogInN0YXJ0IiB8ICJlbmQiIHwgImNlbnRlciIgfCAibm9ybWFsIiB8ICJzcGFjZS1hcm91bmQiIHwgInNwYWNlLWJldHdlZW4iIHwgdW5kZWZpbmVkOwogICAgICAgIHZlcnRpY2FsPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB3cmFwPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICBhbGlnbj86ICJzdGFydCIgfCAiZW5kIiB8ICJtaWRkbGUiIHwgInN0cmV0Y2giIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBJbWFnZTogUmVhY3QuRkM8ewogICAgICAgIHNyYzogc3RyaW5nOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHByZXZpZXc/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBJbWFnZUdhbGxlcnk6IFJlYWN0LkZDPHsKICAgICAgICBpbWFnZXM6IHN0cmluZ1tdOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwcmV2aWV3PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgTGFiZWw6IFJlYWN0LkZDPHsKICAgICAgICBsYWJlbD86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBoaW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBMYWJlbHM6IFJlYWN0LkZDPHsKICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgdGl0bGU6IHN0cmluZzsKICAgICAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aGVtZT86ICJkZWZhdWx0IiB8ICJhbGVydCIgfCAic3VjY2VzcyIgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBMZWFmbGV0TWFwOiBSZWFjdC5GQzx7CiAgICAgICAgY2VudGVyOiBbbnVtYmVyLCBudW1iZXJdOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB6b29tPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIG1hcmtlcnM/OiB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBbbnVtYmVyLCBudW1iZXJdOwogICAgICAgICAgICBjb2xvcj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcG9wdXA/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBMaW5rOiBSZWFjdC5GQzx7CiAgICAgICAgdXJsOiBzdHJpbmc7CiAgICAgICAgdmFsaWRhdGlvbj86IHsKICAgICAgICAgICAgb3BlbmVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfSAmIHsKICAgICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwogICAgfT47CiAgICBNYXJrZG93bjogUmVhY3QuRkM8ewogICAgICAgIGNvbnRlbnQ6IHN0cmluZzsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZENvcHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGh0bWw/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBSb3c6IFJlYWN0LkZDPHsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnYXA/OiBzdHJpbmcgfCBudW1iZXIgfCBbc3RyaW5nIHwgbnVtYmVyLCBzdHJpbmcgfCBudW1iZXJdIHwgdW5kZWZpbmVkOwogICAgICAgIGp1c3RpZnk/OiAic3RhcnQiIHwgImVuZCIgfCAiY2VudGVyIiB8ICJzcGFjZS1hcm91bmQiIHwgInNwYWNlLWJldHdlZW4iIHwgdW5kZWZpbmVkOwogICAgICAgIGFsaWduPzogInN0YXJ0IiB8ICJlbmQiIHwgIm1pZGRsZSIgfCAic3RyZXRjaCIgfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIFRhYnM6IFJlYWN0LkZDPHsKICAgICAgICB0YWJzOiB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIGNvbnRlbnQ/OiBSZWFjdC5SZWFjdE5vZGU7CiAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICBmbGF0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBkZXNjcmlwdGlvbj86IFJlYWN0LlJlYWN0Tm9kZTsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0VGFiPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYnNWaWV3S2V5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUZXh0OiBSZWFjdC5GQzx7CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgY29sb3I/OiAiZXJyb3IiIHwgInNlY29uZGFyeSIgfCAicHJpbWFyeSIgfCB1bmRlZmluZWQ7CiAgICAgICAgdmFyaWFudD86ICJjb2RlIiB8ICJibG9ja3F1b3RlIiB8ICJoMSIgfCAiaDIiIHwgImgzIiB8ICJoNCIgfCAicCIgfCAic21hbGwiIHwgImxhcmdlIiB8IHVuZGVmaW5lZDsKICAgIH0gJiB7CiAgICAgICAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTsKICAgIH0+OwogICAgVGV4dERpZmY6IFJlYWN0LkZDPHsKICAgICAgICBzb3VyY2U6IHN0cmluZzsKICAgICAgICB0YXJnZXQ6IHN0cmluZzsKICAgICAgICBsYWJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkZWZhdWx0T3Blbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWxnb3JpdGhtPzogInN5bWJvbHMiIHwgIndvcmRzIiB8IHVuZGVmaW5lZDsKICAgICAgICBjb250ZW50SGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgIHRhYnNMYWJlbHM/OiB7CiAgICAgICAgICAgIHNvdXJjZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdGFyZ2V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBkaWZmPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIFR1dG9yaWFsOiBSZWFjdC5GQzx7CiAgICAgICAgdW5pcXVlSWQ6IHN0cmluZzsKICAgICAgICBzdGVwczogewogICAgICAgICAgICB0aXRsZTogc3RyaW5nOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgZGlzYWJsZUFjdGl2ZUludGVyYWN0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgICAgICB9W107CiAgICAgICAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkOwogICAgICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZW50aXR5Q3VzdG9tSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW5zdGFudD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgd2l0aEJ1dHRvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgYWxsb3dDbG9zZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9ICYgewogICAgICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIFBkZjogUmVhY3QuRkM8ewogICAgICAgIHVybDogc3RyaW5nOwogICAgICAgIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgVmlkZW86IFJlYWN0LkZDPHsKICAgICAgICB1cmw6IHN0cmluZzsKICAgICAgICB2YWxpZGF0aW9uPzogewogICAgICAgICAgICBwbGF5ZWRGdWxseT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCB1bmRlZmluZWQ7CiAgICAgICAgdHV0b3JpYWxJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICByYXRpbz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgT25ib2FyZGluZzogUmVhY3QuRkM8ewogICAgICAgIG1vZHVsZXM6IHsKICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgcm9sZTogc3RyaW5nOwogICAgICAgICAgICBzdGVwczogewogICAgICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgICAgIHZhbGlkYXRvcnM6IHsKICAgICAgICAgICAgICAgICAgICBpZDogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGJvb2xlYW47CiAgICAgICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIGNyaXRlcmlhOiBzdHJpbmc7CiAgICAgICAgICAgICAgICB9W107CiAgICAgICAgICAgICAgICBjb250ZW50PzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgICAgICB9W107CiAgICAgICAgICAgIHNjZW5hcmlvOiBzdHJpbmc7CiAgICAgICAgICAgIGdvYWw6IHN0cmluZzsKICAgICAgICAgICAgc3VjY2Vzc0NyaXRlcmlhOiBzdHJpbmc7CiAgICAgICAgfVtdOwogICAgICAgIGZsYXQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHRpdGxlPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIGRlc2NyaXB0aW9uPzogUmVhY3QuUmVhY3ROb2RlOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUcmFpbmluZzogUmVhY3QuRkM8ewogICAgICAgIHN0ZXBzOiB7CiAgICAgICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgICAgIGJsb2NrczogYW55W107CiAgICAgICAgfVtdOwogICAgICAgIHRpdGxlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgICAgICB0dXRvcmlhbElkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGVudGl0eUN1c3RvbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUcmFpbmluZ1RoZW9yeTogUmVhY3QuRkM8ewogICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgY29udGVudD86ICh7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJtYXJrZG93biI7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogImltYWdlIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGFsdD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAidmlkZW8iOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAiY29kZSI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBsYW5ndWFnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9KVtdIHwgdW5kZWZpbmVkOwogICAgICAgIHRpdGxlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgfT47CiAgICBUcmFpbmluZ0NvbnNlbnQ6IFJlYWN0LkZDPHsKICAgICAgICBpZDogc3RyaW5nOwogICAgICAgIGNvbnNlbnRMYWJlbDogc3RyaW5nOwogICAgICAgIGNvbnRlbnQ/OiAoewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAibWFya2Rvd24iOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJpbWFnZSI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBhbHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogInZpZGVvIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogImNvZGUiOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgbGFuZ3VhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgfSlbXSB8IHVuZGVmaW5lZDsKICAgICAgICBwYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRpdGxlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIGRpc2FibGVkPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgVHJhaW5pbmdRdWl6OiBSZWFjdC5GQzx7CiAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICBxdWVzdGlvbnM6IHsKICAgICAgICAgICAgb3B0aW9uczogewogICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7CiAgICAgICAgICAgIH1bXTsKICAgICAgICAgICAgdHlwZTogInNpbmdsZS1jaG9pY2UiIHwgIm11bHRpcGxlLWNob2ljZSI7CiAgICAgICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgICAgIHF1ZXN0aW9uOiBzdHJpbmc7CiAgICAgICAgICAgIGNvcnJlY3RBbnN3ZXI6IHN0cmluZyB8IHN0cmluZ1tdOwogICAgICAgICAgICBoaW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBjb3JyZWN0QW5zd2VyRmVlZGJhY2s/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGluY29ycmVjdEFuc3dlckZlZWRiYWNrPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH1bXTsKICAgICAgICBjb250ZW50PzogKHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogIm1hcmtkb3duIjsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAiaW1hZ2UiOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgYWx0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJ2aWRlbyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJjb2RlIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxhbmd1YWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0pW10gfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIFRyYWluaW5nUHJhY3RpY2U6IFJlYWN0LkZDPHsKICAgICAgICBpZDogc3RyaW5nOwogICAgICAgIHZhbGlkYXRvcnM6IHsKICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZzsKICAgICAgICAgICAgcmVxdWlyZWQ6IGJvb2xlYW47CiAgICAgICAgICAgIG5hbWU6IHN0cmluZzsKICAgICAgICAgICAgY3JpdGVyaWE6IHN0cmluZzsKICAgICAgICB9W107CiAgICAgICAgZWRpdG9yVHlwZTogIlRFWFQiIHwgIk1BUktET1dOIiB8ICJDT0RFIjsKICAgICAgICBjb250ZW50PzogKHsKICAgICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgICAgdHlwZTogIm1hcmtkb3duIjsKICAgICAgICB9IHwgewogICAgICAgICAgICB2YWx1ZTogc3RyaW5nOwogICAgICAgICAgICB0eXBlOiAiaW1hZ2UiOwogICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgYWx0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJ2aWRlbyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0gfCB7CiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmc7CiAgICAgICAgICAgIHR5cGU6ICJjb2RlIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGxhbmd1YWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0pW10gfCB1bmRlZmluZWQ7CiAgICAgICAgcGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VVcmw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgZWRpdG9yQ29uZmlnPzogewogICAgICAgICAgICBsYW5ndWFnZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJvd3M/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgIH0+OwogICAgVHJhaW5pbmdFeGFtcGxlczogUmVhY3QuRkM8ewogICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgZXhhbXBsZXM6IHsKICAgICAgICAgICAgaWQ6IHN0cmluZzsKICAgICAgICAgICAgY2hlY2tzOiAoewogICAgICAgICAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgICAgICAgICAgdHlwZTogImV4YWN0IjsKICAgICAgICAgICAgICAgIGhpbnQ6IHN0cmluZzsKICAgICAgICAgICAgICAgIGdvbGRlbjogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVua25vd25bXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIGNvZGU6IHN0cmluZzsKICAgICAgICAgICAgICAgIHR5cGU6ICJjb2RlIjsKICAgICAgICAgICAgICAgIGhpbnQ6IHN0cmluZzsKICAgICAgICAgICAgfSB8IHsKICAgICAgICAgICAgICAgIHR5cGU6ICJsbG0iOwogICAgICAgICAgICAgICAgY3JpdGVyaWE6IHN0cmluZzsKICAgICAgICAgICAgICAgIHBhdGhzOiBzdHJpbmdbXTsKICAgICAgICAgICAgICAgIGhpbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBpbWFnZVVybD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHJlZmVyZW5jZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSlbXTsKICAgICAgICAgICAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+OwogICAgICAgICAgICBleHBsYW5hdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9W107CiAgICAgICAgcGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB0aXRsZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBkaXNhYmxlZD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcHJlcHJvY2Vzcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb3N0cHJvY2Vzcz86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0gJiB7CiAgICAgICAgY2hpbGRyZW46IChjb250ZXh0OiBUcmFpbmluZ0V4YW1wbGVSZW5kZXJDb250ZXh0KSA9PiBSZWFjdC5SZWFjdE5vZGU7CiAgICB9PjsKICAgIFRyYWluaW5nSW5mbzogUmVhY3QuRkM8ewogICAgICAgIGlkOiBzdHJpbmc7CiAgICAgICAgcm9sZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBnb2FsPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHN1Y2Nlc3NDcml0ZXJpYT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBjb21wbGV0aW9uVGltZT86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0+Owp9OwpkZWNsYXJlIGNvbnN0IFZhbGlkYXRpb246IFJlYWN0LkZDPHsKICAgIG1lc3NhZ2U6IHN0cmluZzsKICAgIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDsKICAgIHR1dG9yaWFsSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICBlbnRpdHlDdXN0b21JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIGlzVmFsaWQ/OiBhbnk7Cn0gJiB7CiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlOwp9PjsKZGVjbGFyZSBjb25zdCBhY3Rpb25zOiB7CiAgICBsbG06IChwYXJhbXM6IHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgcHJvbXB0OiBzdHJpbmcgfCB7CiAgICAgICAgICAgIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZzsKICAgICAgICAgICAgfVtdOwogICAgICAgICAgICByb2xlOiBzdHJpbmc7CiAgICAgICAgfVtdIHwgKCgpID0+IHN0cmluZyB8IHsKICAgICAgICAgICAgY29udGVudDogewogICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nOwogICAgICAgICAgICB9W107CiAgICAgICAgICAgIHJvbGU6IHN0cmluZzsKICAgICAgICB9W10pOwogICAgICAgIG9wdGlvbnM/OiB7CiAgICAgICAgICAgIHRoaW5raW5nPzogewogICAgICAgICAgICAgICAgdHlwZTogImVuYWJsZWQiOwogICAgICAgICAgICAgICAgYnVkZ2V0X3Rva2Vucz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgdG9wX3A/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0b3Bfaz86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIG1heF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRvb2xzPzogYW55W10gfCB1bmRlZmluZWQ7CiAgICAgICAgfSB8IHVuZGVmaW5lZDsKICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICBzeXN0ZW1fcHJvbXB0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1vZGVsX2lkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHJlc3BvbnNlX2Zvcm1hdF90eXBlPzogImpzb25fb2JqZWN0IiB8IHVuZGVmaW5lZDsKICAgICAgICBpbWFnZV91cmw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgaW1hZ2VfZGV0YWlsPzogImhpZ2giIHwgImxvdyIgfCB1bmRlZmluZWQ7CiAgICAgICAganNvbl9zY2hlbWE/OiB7fSB8IHVuZGVmaW5lZDsKICAgICAgICBwbHVnaW5zPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7CiAgICAgICAgcmV0dXJuX2Z1bGxfYm9keT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgdXNlX2xpdGVsbG0/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIHBhcnNlSnNvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5X3N1Yml0ZW1faWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgcGxhdGZvcm1fcHJvamVjdF9pZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbD47CiAgICBsbG1NdWx0aXBsZTogKHBhcmFtczogewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICByZXF1ZXN0czogewogICAgICAgICAgICBwcm9tcHQ6IHN0cmluZyB8IHsKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmc7CiAgICAgICAgICAgICAgICB9W107CiAgICAgICAgICAgICAgICByb2xlOiBzdHJpbmc7CiAgICAgICAgICAgIH1bXSB8ICgoKSA9PiBzdHJpbmcgfCB7CiAgICAgICAgICAgICAgICBjb250ZW50OiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nOwogICAgICAgICAgICAgICAgfVtdOwogICAgICAgICAgICAgICAgcm9sZTogc3RyaW5nOwogICAgICAgICAgICB9W10pOwogICAgICAgICAgICBvcHRpb25zPzogewogICAgICAgICAgICAgICAgdGhpbmtpbmc/OiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogImVuYWJsZWQiOwogICAgICAgICAgICAgICAgICAgIGJ1ZGdldF90b2tlbnM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgdG9wX3A/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgdG9wX2s/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgbWF4X3Rva2Vucz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICB0b29scz86IGFueVtdIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtb25kYXlTdWJpdGVtSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHRlbXBlcmF0dXJlPzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBzeXN0ZW1fcHJvbXB0Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtb2RlbF9pZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgcmVzcG9uc2VfZm9ybWF0X3R5cGU/OiAianNvbl9vYmplY3QiIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBpbWFnZV91cmw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGltYWdlX2RldGFpbD86ICJoaWdoIiB8ICJsb3ciIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBqc29uX3NjaGVtYT86IHt9IHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwbHVnaW5zPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHJldHVybl9mdWxsX2JvZHk/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB1c2VfbGl0ZWxsbT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBhcnNlSnNvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdOwogICAgfSkgPT4gUHJvbWlzZTwoc3RyaW5nIHwgbnVsbClbXT47CiAgICBsbG1RYTogKHBhcmFtczogewogICAgICAgIGNvbmZpZ0lkOiBudW1iZXI7CiAgICAgICAgaW5wdXRQYXRoOiBzdHJpbmc7CiAgICAgICAgb3V0cHV0UGF0aDogc3RyaW5nOwogICAgICAgIHN0YXRlUGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlciB8IHVuZGVmaW5lZDsKICAgICAgICB0aW1lb3V0TXM/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICB9KSA9PiBQcm9taXNlPHsKICAgICAgICBzdGF0dXM6IHN0cmluZzsKICAgICAgICBydW5fa2V5Pzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIG1ldHJpY3M/OiB1bmtub3duW10gfCB1bmRlZmluZWQ7CiAgICB9PjsKICAgIG1sRW5kcG9pbnQ6IChwYXJhbXM6IHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgZW5kcG9pbnQ6IHN0cmluZzsKICAgICAgICBkYXRhOiB7fSB8ICgoKSA9PiB7fSk7CiAgICAgICAgZnVuY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHVzZV9jYWNoZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgcG9zdFByb2Nlc3NpbmdGbj86ICgoZW5kcG9pbnRSZXN1bHQ6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8YW55PjsKICAgIG1sRW5kcG9pbnRNdWx0aXBsZTogKHBhcmFtczogewogICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICByZXF1ZXN0czogewogICAgICAgICAgICBlbmRwb2ludDogc3RyaW5nOwogICAgICAgICAgICBkYXRhOiB7fSB8ICgoKSA9PiB7fSk7CiAgICAgICAgICAgIGZ1bmN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBtb25kYXlTdWJpdGVtSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHVzZV9jYWNoZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIHBvc3RQcm9jZXNzaW5nRm4/OiAoKGVuZHBvaW50UmVzdWx0OiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQ7CiAgICAgICAgfVtdOwogICAgfSkgPT4gUHJvbWlzZTxhbnlbXT47CiAgICBnaXRodWJXb3JrZmxvdzogKChwYXJhbXM6IHsKICAgICAgICBwYXRoOiBzdHJpbmc7CiAgICAgICAgcmVmOiBzdHJpbmc7CiAgICAgICAgb3duZXI6IHN0cmluZzsKICAgICAgICByZXBvOiBzdHJpbmc7CiAgICAgICAgd29ya2Zsb3c6IHN0cmluZzsKICAgICAgICBpbnB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCAoKCkgPT4gUmVjb3JkPHN0cmluZywgYW55Pik7CiAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7CiAgICAgICAgcG9zdFByb2Nlc3NpbmdGbj86ICgoZW5kcG9pbnRSZXN1bHQ6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8YW55PikgJiB7CiAgICAgICAgc3RhcnQ6IChwYXJhbXM6IHsKICAgICAgICAgICAgcmVmOiBzdHJpbmc7CiAgICAgICAgICAgIG93bmVyOiBzdHJpbmc7CiAgICAgICAgICAgIHJlcG86IHN0cmluZzsKICAgICAgICAgICAgd29ya2Zsb3c6IHN0cmluZzsKICAgICAgICAgICAgaW5wdXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgKCgpID0+IFJlY29yZDxzdHJpbmcsIGFueT4pOwogICAgICAgICAgICBtb25kYXlTdWJpdGVtSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGpvYlN0b3JlUGF0aD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9KSA9PiBQcm9taXNlPEdpdEh1YldvcmtmbG93UmVzdWx0PjsKICAgICAgICBwb2xsOiAocGFyYW1zOiB7CiAgICAgICAgICAgIG1vbmRheVN1Yml0ZW1JZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgICAgam9iU3RvcmVQYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBqb2JJZD86IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICB9KSA9PiBQcm9taXNlPEdpdEh1YldvcmtmbG93UmVzdWx0PjsKICAgICAgICBnZXRSZXN1bHRzOiAocGFyYW1zOiB7CiAgICAgICAgICAgIHBhdGg6IHN0cmluZzsKICAgICAgICAgICAgbW9uZGF5U3ViaXRlbUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgICAgICB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBwb3N0UHJvY2Vzc2luZ0ZuPzogKChlbmRwb2ludFJlc3VsdDogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkOwogICAgICAgICAgICBqb2JTdG9yZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICAgIGpvYklkPzogc3RyaW5nIHwgdW5kZWZpbmVkOwogICAgICAgIH0pID0+IFByb21pc2U8dW5rbm93bj47CiAgICB9OwogICAgZ2V0OiAocGF0aDogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnkpID0+IGFueTsKICAgIHNldDogKHBhdGg6IHN0cmluZywgcGF5bG9hZDogYW55KSA9PiB2b2lkOwogICAgc2V0VGFiOiAocGFyYW1zOiB7CiAgICAgICAgdGFic1ZpZXdLZXk6IHN0cmluZzsKICAgICAgICB0YWJWYWx1ZTogc3RyaW5nOwogICAgICAgIHNjcm9sbFRvVGFiU3RhcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgfSkgPT4gdm9pZDsKICAgIG5leHRUYWI6IChwYXJhbXM6IHsKICAgICAgICB0YWJzVmlld0tleTogc3RyaW5nOwogICAgICAgIHNjcm9sbFRvVGFiU3RhcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkOwogICAgICAgIGN5Y2xlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0pID0+IHZvaWQ7CiAgICBjb252ZXJ0TWFya2Rvd25Ub0xsbVByb21wdDogKHBhcmFtczogewogICAgICAgIG1hcmtkb3duOiBzdHJpbmc7CiAgICAgICAgbW9kZWw/OiAiY2xhdWRlIiB8ICJncHQiIHwgdW5kZWZpbmVkOwogICAgfSkgPT4gewogICAgICAgIGNvbnRlbnQ6IG9iamVjdE91dHB1dFR5cGU8ewogICAgICAgICAgICB0eXBlOiBab2RTdHJpbmc7CiAgICAgICAgfSwgWm9kVW5rbm93biwgInN0cmlwIj5bXTsKICAgICAgICByb2xlOiBzdHJpbmc7CiAgICB9W107CiAgICBnZXRUZXh0RGlmZjogKHBhcmFtczogewogICAgICAgIHNvdXJjZTogc3RyaW5nOwogICAgICAgIHRhcmdldDogc3RyaW5nOwogICAgICAgIGFsZ29yaXRobT86ICJzeW1ib2xzIiB8ICJ3b3JkcyIgfCB1bmRlZmluZWQ7CiAgICB9KSA9PiBQcm9taXNlPG51bWJlcj47CiAgICBub3RpZnk6IChwYXJhbXM6IHsKICAgICAgICBtZXNzYWdlOiBzdHJpbmc7CiAgICAgICAgdmFyaWFudDogImVycm9yIiB8ICJpbmZvIiB8ICJzdWNjZXNzIiB8ICJ3YXJuaW5nIjsKICAgIH0pID0+IHZvaWQ7CiAgICBleGVjdXRlQ29kZTogKHBhcmFtczogewogICAgICAgIGNvZGU6IHN0cmluZzsKICAgICAgICBsYW5ndWFnZTogInB5dGhvbkAzLjEwLjAiIHwgImphdmFzY3JpcHRAMjAuMTEuMSI7CiAgICB9KSA9PiBQcm9taXNlPHsKICAgICAgICBvdXRwdXQ6IHN0cmluZzsKICAgICAgICBpc0Vycm9yOiBib29sZWFuOwogICAgfT47CiAgICBzdGFydEVkaXRpbmc6IChwYXJhbXM6IHVuZGVmaW5lZCkgPT4gUHJvbWlzZTx7CiAgICAgICAgc3VjY2VzczogYm9vbGVhbjsKICAgIH0+OwogICAgc3VibWl0VGFzazogKHBhcmFtczogewogICAgICAgIHBhdGNoVmFsdWVzPzogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDsKICAgICAgICByZXNldFZhbHVlcz86IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7CiAgICB9KSA9PiBQcm9taXNlPHsKICAgICAgICBzdWNjZXNzOiBib29sZWFuOwogICAgfT47CiAgICBpbnZhbGlkYXRlVGFzazogKHBhcmFtczogdW5kZWZpbmVkKSA9PiBQcm9taXNlPHsKICAgICAgICBzdWNjZXNzOiBib29sZWFuOwogICAgfT47CiAgICB1bmFzc2lnbkFuZEV4aXQ6IChwYXJhbXM6IHsKICAgICAgICB3aXRob3V0Q29uZmlybWF0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsKICAgIH0pID0+IFByb21pc2U8ewogICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47CiAgICB9PjsKICAgIHNlbmRVc2VyTG9nOiAocGFyYW1zOiB7CiAgICAgICAgdmFsdWU6IExvZ1ZhbHVlT2JqZWN0OwogICAgICAgIHR5cGU6IHN0cmluZzsKICAgIH0pID0+IFByb21pc2U8dW5rbm93bj47CiAgICBzaWduV2l0aEdlb0lwOiAocGFyYW1zOiB7CiAgICAgICAgcGF0aDogc3RyaW5nOwogICAgICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47CiAgICB9KSA9PiBQcm9taXNlPHN0cmluZz47Cn07CgpleHBvcnQgeyBGaWVsZCwgTGF5b3V0LCBTdXNwZW5zZVBlbmRpbmdNYXJrZXIsIFZhbGlkYXRpb24sIFZpZXcsIGFjdGlvbnMgfTsK","base64").toString("utf8")}};var Zt=require("@typescript/vfs");var UH=im.default.dirname(Ge.default.getDefaultLibFilePath({target:Ge.default.ScriptTarget.Latest})),it={data:"DATA_INJECTION",constants:"CONST_INJECTION",preprocess:"PREPROCESS_INJECTION",postprocess:"POSTPROCESS_INJECTION",code:"CODE_INJECTION"},Xi="index.tsx",OH=[["data",it.data],["constants",it.constants],["preprocess",it.preprocess],["postprocess",it.postprocess],["code",it.code]],TH=()=>({data:[],constants:[],preprocess:[],postprocess:[],code:[]}),$u=(e)=>`
43
43
  import * as React from 'react';
44
44
  import { View, Field, Layout, SuspensePendingMarker, Validation, actions } from 'elements';
45
45
 
@@ -77,7 +77,7 @@ ${e.code}
77
77
  )
78
78
  /* CODE_INJECTION_END */
79
79
 
80
- export {}`,Mu=(e)=>`
80
+ export {}`,qu=(e)=>`
81
81
  const data = (
82
82
  /* DATA_INJECTION_START */
83
83
  ${e.data}
@@ -107,105 +107,105 @@ const code = (
107
107
  ${e.code}
108
108
  /* CODE_INJECTION_END */
109
109
  );
110
- `,TH=["preprocess","postprocess","code"],$u=(e,t,i)=>{let n={...e};for(let o of TH){let s=new Set(t[o].map((a)=>a.text)),r=e[o].filter((a)=>!s.has(a.text)&&!/TS(?:7006|7031)\b/u.test(a.text)),g=i[o].length>0?i[o]:t[o];n[o]=[...r,...g]}return n},qu=(e,t)=>{let i=(n)=>{let o=e.indexOf(`/* ${n}_START */`)+`/* ${n}_START */`.length+1,s=e.indexOf(`/* ${n}_END */`)-1;return t.filter((r)=>{if(!r.file||r.start==null)return!1;return r.start>=o&&r.start<=s}).map((r)=>{let g=De.default.flattenDiagnosticMessageText(r.messageText,`
111
- `),a=r.category===De.default.DiagnosticCategory.Error?"error":"warning";b(r.file&&r.start!=null,"Diagnostic location is missing");let{line:l,character:I}=r.file.getLineAndCharacterOfPosition(o),{line:d,character:u}=r.file.getLineAndCharacterOfPosition(r.start),c=d-l,C=d===l?u-I:u,A=r.file.text.split(/\r?\n/gu)[d]??"",m=" ".repeat(u)+"^".repeat(r.length&&r.length>0?r.length:1);return{severity:a,text:[`${c}:${C+1} - [${De.default.DiagnosticCategory[r.category]}] TS${r.code}`,g,"",A,m].join(`
112
- `)}})};return{data:i(it.data),constants:i(it.constants),preprocess:i(it.preprocess),postprocess:i(it.postprocess),code:i(it.code)}},Ua=(e,t)=>{let i=[0];for(let a=0;a<e.length;a+=1)if(e[a]===`
113
- `)i.push(a+1);let n=(a)=>{let l=0;while(l+1<i.length&&i[l+1]<=a)l+=1;return{line:l,character:a-i[l]}},o=e.split(/\r?\n/gu),s=UH.map(([a,l])=>({key:a,start:e.indexOf(`/* ${l}_START */`)+`/* ${l}_START */`.length+1,end:e.indexOf(`/* ${l}_END */`)-1})),r=(a)=>{let l=s.find((u)=>a>=u.start&&a<=u.end);if(l)return l;let d=s.filter((u)=>u.start<=a).at(-1)??s[0];return b(d,"Task UI diagnostic block is missing"),d},g=OH();for(let a of t){let l=a.labels[0],I=l?.start??e.length,d=r(I),u=a.severity==="Error"?"error":"warning",{line:c,character:C}=n(d.start),{line:A,character:m}=n(I),p=A-c,Z=A===c?m-C:m,W=o[A]??"",h=l?l.end-l.start:0,f=" ".repeat(m)+"^".repeat(h>0?h:1);g[d.key].push({severity:u,text:[`${p}:${Z+1} - [${a.severity}]`,a.message,"",W,f].join(`
114
- `)})}return g},im=({reactDeclaration:e,elementsDeclaration:t})=>({performTypeCheck:async(i)=>{let n=Lu(i),o=Zt.createDefaultMapFromNodeModules({target:De.default.ScriptTarget.Latest},De.default,EH);o.set("node_modules/@types/react/index.d.ts",e),o.set("node_modules/elements/index.d.ts",t),o.set(Ni,n);let s=Zt.createSystem(o),{languageService:r}=Zt.createVirtualTypeScriptEnvironment(s,[Ni],De.default,{target:De.default.ScriptTarget.Latest,allowNonTsExtensions:!0,ignoreDeprecations:"6.0",module:De.default.ModuleKind.CommonJS,moduleResolution:De.default.ModuleResolutionKind.Node10,noEmit:!0,typeRoots:["node_modules/@types"],jsx:De.default.JsxEmit.React,jsxFactory:"React.createElement",noErrorTruncation:!0}),g=[],a=[];try{g=r.getSyntacticDiagnostics(Ni),a=[...r.getSemanticDiagnostics(Ni),...r.getSuggestionDiagnostics(Ni),...r.getCompilerOptionsDiagnostics()]}finally{r.dispose()}let l=qu(n,g),I=qu(n,[...g,...a]),d=Mu(i),u=Ua(d,ms.parseSync("runtime.jsx",d).errors);return $u(I,l,u)},performSyntaxCheck:(i)=>{let n=Lu(i),o=Ua(n,ms.parseSync(Ni,n).errors),s=Mu(i),r=Ua(s,ms.parseSync("runtime.jsx",s).errors);return $u(o,o,r)}}),Oa=()=>im({reactDeclaration:zn.react.source,elementsDeclaration:zn.elements.source});var za=require("crypto"),Xi=require("fs/promises"),om=require("path");var sm="TOLOKA_CHECK_EVIDENCE_DIR",ja="TOLOKA_CHECK_PIPELINE_FINGERPRINT",Da="TOLOKA_CHECK_NODE_ID",Qa="TOLOKA_CHECK_TYPED_ONLY",zH=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e),jH=(e)=>Array.isArray(e)&&e.every((t)=>typeof t==="string"),Ta=(e)=>{if(Array.isArray(e))return e.map(Ta);if(typeof e!=="object"||e===null)return e;return Object.fromEntries(Object.entries(e).toSorted(([t],[i])=>t.localeCompare(i)).map(([t,i])=>[t,Ta(i)]))},_a=(e)=>za.createHash("sha256").update(JSON.stringify(Ta(e))).digest("hex"),DH=(e,t)=>`[toloka:${e}:${t??"pipeline"}]`,nm=(e)=>e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),rm=(e,t)=>t===void 0?nm(`[toloka:${e}:`):nm(DH(e,t));var QH=(e)=>e==="code"||e==="ui"||e==="pipeline",_H=(e)=>e==="passed"||e==="failed"||e==="infrastructure_error",KH=(e,t)=>{b(zH(e),`Invalid test evidence ${t}`);let i=e;b(i.version===1,`Unsupported test evidence version in ${t}`),b(typeof i.pipelineFingerprint==="string",`Missing pipeline fingerprint in ${t}`),b(QH(i.kind),`Invalid test evidence kind in ${t}`),b(_H(i.status),`Invalid test evidence status in ${t}`),b(typeof i.testName==="string",`Missing test name in ${t}`),b(i.nodeId===void 0||typeof i.nodeId==="string",`Invalid node id in ${t}`),b(i.diagnostic===void 0||typeof i.diagnostic==="string",`Invalid diagnostic in ${t}`),b(i.partial===void 0||typeof i.partial==="boolean",`Invalid partial coverage in ${t}`),b(i.untestedHardwareFields===void 0||jH(i.untestedHardwareFields),`Invalid hardware fields in ${t}`);let n=i.untestedHardwareFields;return{version:1,pipelineFingerprint:i.pipelineFingerprint,kind:i.kind,status:i.status,testName:i.testName,...i.nodeId===void 0?{}:{nodeId:i.nodeId},...i.diagnostic===void 0?{}:{diagnostic:i.diagnostic},...i.partial===void 0?{}:{partial:i.partial},...n===void 0?{}:{untestedHardwareFields:n}}};var gm=async(e)=>{let i=(await Xi.readdir(e,{withFileTypes:!0})).filter((n)=>n.isFile()&&n.name.endsWith(".json")).map((n)=>n.name).toSorted();return Promise.all(i.map(async(n)=>{let o=om.join(e,n),s;try{s=JSON.parse(await Xi.readFile(o,"utf8"))}catch(r){throw Error(`Invalid test evidence ${o}`,{cause:r})}return KH(s,o)}))};var _n=require("fs/promises"),pe=require("path"),Xm=require("url");var wm=be(Xa(),1),Fm=be(Bm(),1);var Rm={$schema:"https://json-schema.org/draft/2020-12/schema",type:"object",properties:{version:{type:"number",const:1},fields:{maxItems:500,type:"array",items:{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},name:{type:"string"},jsonSchema:{type:"object",properties:{type:{anyOf:[{type:"string",enum:["string","number","integer","boolean","object","array","null"]},{minItems:1,type:"array",items:{type:"string",enum:["string","number","integer","boolean","object","array","null"]}}]},properties:{$ref:"#/$defs/__schema0"},required:{type:"array",items:{type:"string"}},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#/$defs/__schema1"}]},items:{$ref:"#/$defs/__schema1"},minItems:{type:"integer",minimum:0,maximum:9007199254740991},maxItems:{type:"integer",minimum:0,maximum:9007199254740991},uniqueItems:{type:"boolean"},enum:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema2"}},const:{$ref:"#/$defs/__schema2"},minimum:{type:"number"},maximum:{type:"number"},exclusiveMinimum:{type:"number"},exclusiveMaximum:{type:"number"},minLength:{type:"integer",minimum:0,maximum:9007199254740991},maxLength:{type:"integer",minimum:0,maximum:9007199254740991},pattern:{type:"string"},format:{type:"string"},title:{type:"string"},description:{type:"string"},default:{$ref:"#/$defs/__schema2"},examples:{type:"array",items:{$ref:"#/$defs/__schema2"}},anyOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}},oneOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}},allOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}}},additionalProperties:!1,ref:"JsonSchema"}},required:["id","name","jsonSchema"],additionalProperties:!1}},nodes:{maxItems:500,type:"array",items:{oneOf:[{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},type:{type:"string",const:"root"},settings:{type:"object",properties:{datasetId:{type:"string",pattern:"^ds\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},itemFilter:{type:"object",properties:{fieldValues:{default:[],type:"array",items:{type:"object",properties:{jsonPath:{type:"string",minLength:1},operator:{type:"string",enum:["text_eq","text_neq"]},value:{anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]},fieldId:{type:"string",pattern:"^df\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},latestOnly:{default:!0,type:"boolean"},sources:{default:[],type:"array",items:{oneOf:[{type:"object",properties:{type:{type:"string",const:"user"},userId:{type:"string",minLength:1}},required:["type","userId"],additionalProperties:!1},{type:"object",properties:{type:{type:"string",const:"system"},source:{type:"string",minLength:1}},required:["type","source"],additionalProperties:!1}]}}},required:["jsonPath","operator","value","fieldId"],additionalProperties:!1}},fieldSources:{default:[],type:"array",items:{type:"object",properties:{fieldId:{type:"string",pattern:"^df\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},sources:{minItems:1,type:"array",items:{oneOf:[{type:"object",properties:{type:{type:"string",const:"user"},userId:{type:"string",minLength:1}},required:["type","userId"],additionalProperties:!1},{type:"object",properties:{type:{type:"string",const:"system"},source:{type:"string",minLength:1}},required:["type","source"],additionalProperties:!1}]}}},required:["fieldId","sources"],additionalProperties:!1}},missingRevisionFields:{default:[],type:"array",items:{type:"string",pattern:"^df\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}},createdBefore:{type:"string",format:"date-time",pattern:"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},additionalProperties:!1},itemLimit:{type:"integer",exclusiveMinimum:0,maximum:9007199254740991},startedFieldProxies:{type:"object",properties:{output:{type:"array",items:{type:"object",properties:{id:{type:"string"},optional:{type:"boolean"}},required:["id","optional"],additionalProperties:!1}}},required:["output"]},completedFieldProxies:{type:"object",properties:{input:{type:"array",items:{type:"object",properties:{id:{type:"string"},optional:{type:"boolean"}},required:["id","optional"],additionalProperties:!1}}},required:["input"]}},required:["startedFieldProxies","completedFieldProxies"],additionalProperties:!1}},required:["id","type","settings"],additionalProperties:!1},{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},type:{type:"string",const:"code"},settings:{type:"object",properties:{about:{type:"object",properties:{name:{type:"string"},description:{type:"string"},projectType:{type:"string",enum:["general","data_collection"]}},required:["name"],additionalProperties:!1},fieldProxies:{type:"object",properties:{input:{type:"array",items:{type:"object",properties:{id:{type:"string"},optional:{type:"boolean"}},required:["id","optional"],additionalProperties:!1}},output:{type:"array",items:{type:"object",properties:{id:{type:"string"},optional:{type:"boolean"}},required:["id","optional"],additionalProperties:!1}}},required:["input","output"]},code:{type:"object",properties:{code:{type:"string"}},required:["code"],additionalProperties:!1},envVars:{default:[],type:"array",items:{oneOf:[{type:"object",properties:{type:{type:"string",const:"static"},name:{type:"string"},value:{type:"string"}},required:["type","name","value"],additionalProperties:!1},{type:"object",properties:{type:{type:"string",const:"secret"},name:{type:"string"},secretName:{type:"string"}},required:["type","name","secretName"],additionalProperties:!1}]}},checks:{type:"object",propertyNames:{type:"string",enum:["code"]},additionalProperties:{type:"array",items:{type:"object",properties:{id:{type:"string"},name:{type:"string"},input:{type:"string"}},required:["id","name","input"]}},required:["code"]}},required:["about","fieldProxies","code"],additionalProperties:!1}},required:["id","type","settings"],additionalProperties:!1},{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},type:{type:"string",const:"generation"},settings:{type:"object",properties:{about:{type:"object",properties:{name:{type:"string"},description:{type:"string"},projectType:{type:"string",enum:["general","data_collection"]}},required:["name"],additionalProperties:!1},publicName:{type:"string"},entities:{type:"object",properties:{input:{type:"array",items:{oneOf:[{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!1},maxEntities:{type:"null"}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1},{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!0},maxEntities:{anyOf:[{type:"number"},{type:"null"}]}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1}]}},output:{type:"array",items:{oneOf:[{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!1},maxEntities:{type:"null"}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1},{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!0},maxEntities:{anyOf:[{type:"number"},{type:"null"}]}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1}]}}},required:["input","output"],additionalProperties:!1},qualityCriteria:{type:"array",items:{type:"object",properties:{id:{type:"string",format:"uuid",pattern:"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},qualityElement:{type:"string"},thresholds:{type:"object",properties:{pass:{type:"string"},fail:{type:"string"}},required:["pass","fail"]},targetEntity:{type:"string"},llmQaInstruction:{type:"string",maxLength:5000}},required:["id","qualityElement","thresholds","targetEntity"]}},instruction:{type:"string"},ui:{type:"object",properties:{code:{type:"string"},data:{type:"string"},preprocess:{type:"string"},postprocess:{default:"return {};",type:"string"},constants:{type:"string"}},required:["code","data","preprocess","constants"]},qualityAssurance:{default:{qaMode:"llm_only",llmQaModelId:"gpt-5.4"},oneOf:[{type:"object",properties:{qaMode:{type:"string",const:"llm_only"},llmQaModelId:{default:"gpt-5.4",type:"string",enum:["gpt-5.4","gpt-5.4-mini","gpt-5","gpt-5-mini","claude-sonnet-4-6"]}},required:["qaMode"]},{type:"object",properties:{qaMode:{type:"string",const:"human_only"},smartSamplingPercent:{default:100,type:"number",minimum:10,maximum:100},humanQaTimeForTask:{type:"number",exclusiveMinimum:0}},required:["qaMode"]},{type:"object",properties:{qaMode:{type:"string",const:"hybrid"},smartSamplingPercent:{default:30,type:"number",minimum:10,maximum:100},humanQaTimeForTask:{type:"number",exclusiveMinimum:0},llmQaModelId:{default:"gpt-5.4",type:"string",enum:["gpt-5.4","gpt-5.4-mini","gpt-5","gpt-5-mini","claude-sonnet-4-6"]}},required:["qaMode"]}]},audienceAndPricing:{default:{audienceType:"human",verifiedExperts:!0,audience:{languages:{type:"and",values:[]},specializations:{type:"and",values:[]},countries:{type:"or",values:[]}},pricePerTask:1,timeForTask:1800,perExpertCapEnabled:!1,perExpertCapValue:1},oneOf:[{type:"object",properties:{verifiedExperts:{type:"boolean"},audience:{type:"object",properties:{languages:{type:"object",properties:{type:{type:"string",enum:["or","and"]},values:{type:"array",items:{type:"object",properties:{value:{type:"string"}},required:["value"]}}},required:["type","values"],additionalProperties:!1},specializations:{type:"object",properties:{type:{type:"string",enum:["or","and"]},values:{type:"array",items:{type:"object",properties:{value:{type:"string"},qualificationId:{type:"string"}},required:["value","qualificationId"],additionalProperties:!1}}},required:["type","values"],additionalProperties:!1},countries:{type:"object",properties:{type:{type:"string",enum:["or"]},values:{type:"array",items:{type:"string"}}},required:["type","values"],additionalProperties:!1}},required:["languages","specializations","countries"],additionalProperties:!1},pricePerTask:{type:"number"},timeForTask:{type:"number"},perExpertCapEnabled:{default:!1,type:"boolean"},perExpertCapValue:{default:1,type:"integer",exclusiveMinimum:0,maximum:50},audienceType:{type:"string",const:"human"}},required:["verifiedExperts","audience","pricePerTask","timeForTask","audienceType"],additionalProperties:!1},{type:"object",properties:{audienceType:{type:"string",const:"synthetic"},generationModelId:{default:"gpt-5.6-terra",type:"string",enum:["gpt-5.4","gpt-5.4-mini","claude-sonnet-4-6","gemini-3.1-pro-preview","gemini-3.5-flash","claude-sonnet-5","gpt-5.6-terra","gpt-5.6-luna"]},reasoningEffort:{type:"string",enum:["low","medium","high"]},llmInstruction:{default:"",type:"string"},maxCostPerAttempt:{type:"number"}},required:["audienceType","maxCostPerAttempt"],additionalProperties:!1}]},onboarding:{type:"object",properties:{enabled:{type:"boolean"},steps:{type:"array",items:{type:"object",properties:{id:{type:"string"},blocks:{type:"array",items:{oneOf:[{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"info"},estimatedTime:{type:"string"},role:{type:"string"},goal:{type:"string"},successCriteria:{type:"string"}},required:["id","type","estimatedTime","role","goal","successCriteria"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"text"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}}},required:["id","type"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"quiz"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},questions:{type:"array",items:{type:"object",properties:{id:{type:"string"},type:{type:"string",enum:["single-choice","multiple-choice"]},title:{type:"string"},question:{type:"string"},hint:{type:"string"},correctAnswerFeedback:{type:"string"},incorrectAnswerFeedback:{type:"string"},options:{type:"array",items:{type:"object",properties:{value:{type:"string"},label:{type:"string"}},required:["value","label"]}},correctAnswer:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["id","type","question","options","correctAnswer"]}}},required:["id","type","questions"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"practice"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},imageUrl:{type:"string"},editorType:{type:"string"},editorConfig:{type:"object",properties:{rows:{type:"number"},language:{type:"string"},placeholder:{type:"string"}}},validators:{type:"array",items:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string"},criteria:{type:"string"}},required:["id","name","description","criteria"]}}},required:["id","type"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"examples"},title:{type:"string"},examples:{maxItems:10,type:"array",items:{type:"object",properties:{id:{type:"string"},input:{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema3"}},checks:{maxItems:10,type:"array",items:{oneOf:[{type:"object",properties:{type:{type:"string",const:"exact"},path:{type:"string"},golden:{$ref:"#/$defs/__schema4"},hint:{type:"string"}},required:["type","path","golden","hint"]},{type:"object",properties:{type:{type:"string",const:"code"},code:{type:"string"},hint:{type:"string"}},required:["type","code","hint"]},{type:"object",properties:{type:{type:"string",const:"llm"},paths:{type:"array",items:{type:"string"}},criteria:{type:"string"},reference:{type:"string"},hint:{type:"string"},imageUrl:{type:"string"}},required:["type","paths","criteria"]}]}},explanation:{type:"string"},sourceItemId:{type:"string"}},required:["id","input","checks"]}}},required:["id","type","examples"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"consent"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},consentLabel:{type:"string"}},required:["id","type","consentLabel"]}]}}},required:["id"]}},info:{type:"object",properties:{estimatedTime:{type:"string"},role:{type:"string"},goal:{type:"string"},successCriteria:{type:"string"}},required:["estimatedTime","role","goal","successCriteria"]}},required:["enabled","steps","info"]},exam:{default:{enabled:!1,gradedEntities:[],tasksPerExpert:1,passThreshold:1},type:"object",properties:{enabled:{type:"boolean"},gradedEntities:{type:"array",items:{type:"object",properties:{targetEntity:{type:"string"},mode:{type:"string",enum:["ground_truth","quality_criteria","not_graded"]},groundTruthType:{type:"string",enum:["direct","custom"]},customInstruction:{type:"string"},disabledCriterionIds:{type:"array",items:{type:"string",format:"uuid",pattern:"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},required:["targetEntity","mode","groundTruthType","customInstruction","disabledCriterionIds"],additionalProperties:!1}},goldenDatasetId:{type:"string",pattern:"^ds\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},tasksPerExpert:{type:"integer",minimum:1,maximum:9007199254740991},passThreshold:{type:"integer",minimum:0,maximum:9007199254740991}},required:["enabled","gradedEntities","tasksPerExpert","passThreshold"],additionalProperties:!1},reuseAudienceWithNodeId:{default:null,anyOf:[{type:"object",properties:{pipelineId:{type:"string",pattern:"^pl\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},nodeId:{type:"string"}},required:["pipelineId","nodeId"],additionalProperties:!1},{type:"null"}]},smartSearch:{default:null,anyOf:[{type:"object",properties:{briefDescription:{type:"string"},projectDescription:{anyOf:[{type:"string"},{type:"null"}]},extraHardRequirements:{type:"array",items:{type:"string"}},relevanceCriteria:{type:"array",items:{type:"string"}},typicalJobTitles:{type:"array",items:{type:"string"}},idealCandidateProfile:{type:"string"},whoIsNotAFit:{type:"array",items:{type:"string"}},sourceFingerprint:{type:"string"}},required:["briefDescription","projectDescription","extraHardRequirements","relevanceCriteria","typicalJobTitles","idealCandidateProfile","whoIsNotAFit"],additionalProperties:!1},{type:"null"}]},checks:{type:"object",propertyNames:{type:"string",enum:["ui","llmqa","qc_lint","ui_types_lint","exam_dataset","synthgen"]},additionalProperties:{type:"array",items:{type:"object",properties:{id:{type:"string"},name:{type:"string"},input:{type:"string"}},required:["id","name","input"]}},required:["ui","llmqa","qc_lint","ui_types_lint","exam_dataset","synthgen"]}},required:["about","publicName","entities","qualityCriteria","instruction","ui","onboarding"],additionalProperties:!1}},required:["id","type","settings"],additionalProperties:!1},{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},type:{type:"string",const:"match"},settings:{type:"object",properties:{about:{type:"object",properties:{name:{type:"string"},description:{type:"string"},projectType:{type:"string",enum:["general","data_collection"]}},required:["name"],additionalProperties:!1},conditions:{type:"array",items:{type:"object",properties:{name:{type:"string"},logic:{default:"and",type:"string",enum:["and","or"]},predicates:{type:"array",items:{type:"object",properties:{fieldProxyId:{type:"string"},jsonPath:{type:"string"},operator:{type:"string",enum:["text_eq","text_neq"]},value:{anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]}},required:["fieldProxyId","jsonPath","operator","value"],additionalProperties:!1}}},required:["name","predicates"],additionalProperties:!1}},fieldProxies:{type:"object",properties:{input:{type:"array",items:{type:"object",properties:{id:{type:"string"},optional:{type:"boolean"}},required:["id","optional"],additionalProperties:!1}}},required:["input"]}},required:["about","conditions","fieldProxies"],additionalProperties:!1}},required:["id","type","settings"],additionalProperties:!1},{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},type:{type:"string",const:"quorum"},settings:{type:"object",properties:{about:{type:"object",properties:{name:{type:"string"},description:{type:"string"},projectType:{type:"string",enum:["general","data_collection"]}},required:["name"],additionalProperties:!1},publicName:{type:"string"},audienceAndPricing:{default:{audienceType:"human",verifiedExperts:!0,audience:{languages:{type:"and",values:[]},specializations:{type:"and",values:[]},countries:{type:"or",values:[]}},pricePerTask:1,timeForTask:1800,perExpertCapEnabled:!1,perExpertCapValue:1},type:"object",properties:{verifiedExperts:{type:"boolean"},audience:{type:"object",properties:{languages:{type:"object",properties:{type:{type:"string",enum:["or","and"]},values:{type:"array",items:{type:"object",properties:{value:{type:"string"}},required:["value"]}}},required:["type","values"],additionalProperties:!1},specializations:{type:"object",properties:{type:{type:"string",enum:["or","and"]},values:{type:"array",items:{type:"object",properties:{value:{type:"string"},qualificationId:{type:"string"}},required:["value","qualificationId"],additionalProperties:!1}}},required:["type","values"],additionalProperties:!1},countries:{type:"object",properties:{type:{type:"string",enum:["or"]},values:{type:"array",items:{type:"string"}}},required:["type","values"],additionalProperties:!1}},required:["languages","specializations","countries"],additionalProperties:!1},pricePerTask:{type:"number"},timeForTask:{type:"number"},perExpertCapEnabled:{default:!1,type:"boolean"},perExpertCapValue:{default:1,type:"integer",exclusiveMinimum:0,maximum:50},audienceType:{type:"string",const:"human"}},required:["verifiedExperts","audience","pricePerTask","timeForTask","audienceType"],additionalProperties:!1},entities:{type:"object",properties:{input:{type:"array",items:{oneOf:[{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!1},maxEntities:{type:"null"}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1},{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!0},maxEntities:{anyOf:[{type:"number"},{type:"null"}]}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1}]}},output:{type:"array",items:{oneOf:[{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!1},maxEntities:{type:"null"}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1},{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!0},maxEntities:{anyOf:[{type:"number"},{type:"null"}]}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1}]}}},required:["input","output"],additionalProperties:!1},qualityCriteria:{type:"array",items:{type:"object",properties:{id:{type:"string",format:"uuid",pattern:"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},qualityElement:{type:"string"},thresholds:{type:"object",properties:{pass:{type:"string"},fail:{type:"string"}},required:["pass","fail"]},targetEntity:{type:"string"},llmQaInstruction:{type:"string",maxLength:5000}},required:["id","qualityElement","thresholds","targetEntity"]}},offboardingRules:{default:[],type:"array",items:{type:"object",properties:{id:{type:"string",format:"uuid",pattern:"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},type:{type:"string",enum:["mv_agreement"]},agreementScale:{type:"string"}},required:["id"],additionalProperties:!1}},instruction:{type:"string"},ui:{type:"object",properties:{code:{type:"string"},data:{type:"string"},preprocess:{type:"string"},postprocess:{default:"return {};",type:"string"},constants:{type:"string"}},required:["code","data","preprocess","constants"]},qualityAssurance:{default:{qaMode:"llm_only",llmQaModelId:"gpt-5.4"},oneOf:[{type:"object",properties:{qaMode:{type:"string",const:"llm_only"},llmQaModelId:{default:"gpt-5.4",type:"string",enum:["gpt-5.4","gpt-5.4-mini","gpt-5","gpt-5-mini","claude-sonnet-4-6"]}},required:["qaMode"]},{type:"object",properties:{qaMode:{type:"string",const:"none"}},required:["qaMode"]}]},overlap:{type:"integer",minimum:1,maximum:100},onboarding:{type:"object",properties:{enabled:{type:"boolean"},steps:{type:"array",items:{type:"object",properties:{id:{type:"string"},blocks:{type:"array",items:{oneOf:[{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"info"},estimatedTime:{type:"string"},role:{type:"string"},goal:{type:"string"},successCriteria:{type:"string"}},required:["id","type","estimatedTime","role","goal","successCriteria"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"text"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}}},required:["id","type"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"quiz"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},questions:{type:"array",items:{type:"object",properties:{id:{type:"string"},type:{type:"string",enum:["single-choice","multiple-choice"]},title:{type:"string"},question:{type:"string"},hint:{type:"string"},correctAnswerFeedback:{type:"string"},incorrectAnswerFeedback:{type:"string"},options:{type:"array",items:{type:"object",properties:{value:{type:"string"},label:{type:"string"}},required:["value","label"]}},correctAnswer:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["id","type","question","options","correctAnswer"]}}},required:["id","type","questions"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"practice"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},imageUrl:{type:"string"},editorType:{type:"string"},editorConfig:{type:"object",properties:{rows:{type:"number"},language:{type:"string"},placeholder:{type:"string"}}},validators:{type:"array",items:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string"},criteria:{type:"string"}},required:["id","name","description","criteria"]}}},required:["id","type"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"examples"},title:{type:"string"},examples:{maxItems:10,type:"array",items:{type:"object",properties:{id:{type:"string"},input:{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema3"}},checks:{maxItems:10,type:"array",items:{oneOf:[{type:"object",properties:{type:{type:"string",const:"exact"},path:{type:"string"},golden:{$ref:"#/$defs/__schema4"},hint:{type:"string"}},required:["type","path","golden","hint"]},{type:"object",properties:{type:{type:"string",const:"code"},code:{type:"string"},hint:{type:"string"}},required:["type","code","hint"]},{type:"object",properties:{type:{type:"string",const:"llm"},paths:{type:"array",items:{type:"string"}},criteria:{type:"string"},reference:{type:"string"},hint:{type:"string"},imageUrl:{type:"string"}},required:["type","paths","criteria"]}]}},explanation:{type:"string"},sourceItemId:{type:"string"}},required:["id","input","checks"]}}},required:["id","type","examples"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"consent"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},consentLabel:{type:"string"}},required:["id","type","consentLabel"]}]}}},required:["id"]}},info:{type:"object",properties:{estimatedTime:{type:"string"},role:{type:"string"},goal:{type:"string"},successCriteria:{type:"string"}},required:["estimatedTime","role","goal","successCriteria"]}},required:["enabled","steps","info"]},exam:{default:{enabled:!1,gradedEntities:[],tasksPerExpert:1,passThreshold:1},type:"object",properties:{enabled:{type:"boolean"},gradedEntities:{type:"array",items:{type:"object",properties:{targetEntity:{type:"string"},mode:{type:"string",enum:["ground_truth","quality_criteria","not_graded"]},groundTruthType:{type:"string",enum:["direct","custom"]},customInstruction:{type:"string"},disabledCriterionIds:{type:"array",items:{type:"string",format:"uuid",pattern:"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},required:["targetEntity","mode","groundTruthType","customInstruction","disabledCriterionIds"],additionalProperties:!1}},goldenDatasetId:{type:"string",pattern:"^ds\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},tasksPerExpert:{type:"integer",minimum:1,maximum:9007199254740991},passThreshold:{type:"integer",minimum:0,maximum:9007199254740991}},required:["enabled","gradedEntities","tasksPerExpert","passThreshold"],additionalProperties:!1},reuseAudienceWithNodeId:{default:null,anyOf:[{type:"object",properties:{pipelineId:{type:"string",pattern:"^pl\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},nodeId:{type:"string"}},required:["pipelineId","nodeId"],additionalProperties:!1},{type:"null"}]},smartSearch:{default:null,anyOf:[{type:"object",properties:{briefDescription:{type:"string"},projectDescription:{anyOf:[{type:"string"},{type:"null"}]},extraHardRequirements:{type:"array",items:{type:"string"}},relevanceCriteria:{type:"array",items:{type:"string"}},typicalJobTitles:{type:"array",items:{type:"string"}},idealCandidateProfile:{type:"string"},whoIsNotAFit:{type:"array",items:{type:"string"}},sourceFingerprint:{type:"string"}},required:["briefDescription","projectDescription","extraHardRequirements","relevanceCriteria","typicalJobTitles","idealCandidateProfile","whoIsNotAFit"],additionalProperties:!1},{type:"null"}]},checks:{type:"object",propertyNames:{type:"string",enum:["ui","llmqa","qc_lint","ui_types_lint","exam_dataset"]},additionalProperties:{type:"array",items:{type:"object",properties:{id:{type:"string"},name:{type:"string"},input:{type:"string"}},required:["id","name","input"]}},required:["ui","llmqa","qc_lint","ui_types_lint","exam_dataset"]}},required:["about","publicName","entities","qualityCriteria","instruction","ui","overlap","onboarding"],additionalProperties:!1}},required:["id","type","settings"],additionalProperties:!1}]}},connections:{maxItems:2000,type:"array",items:{type:"object",properties:{from:{type:"object",properties:{node:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},handle:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"}},required:["node","handle"],additionalProperties:!1},to:{type:"object",properties:{node:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},handle:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"}},required:["node","handle"],additionalProperties:!1},settings:{type:"object",properties:{},additionalProperties:{}}},required:["from","to","settings"],additionalProperties:!1}},layout:{type:"object",propertyNames:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},additionalProperties:{type:"object",propertyNames:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},additionalProperties:{type:"array",prefixItems:[{type:"number",description:"X"},{type:"number",description:"Y"}]},maxProperties:2},maxProperties:500}},required:["version","fields","nodes","connections"],additionalProperties:!1,$defs:{__schema0:{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema1"}},__schema1:{type:"object",properties:{type:{anyOf:[{type:"string",enum:["string","number","integer","boolean","object","array","null"]},{minItems:1,type:"array",items:{type:"string",enum:["string","number","integer","boolean","object","array","null"]}}]},properties:{$ref:"#/$defs/__schema0"},required:{type:"array",items:{type:"string"}},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#/$defs/__schema1"}]},items:{$ref:"#/$defs/__schema1"},minItems:{type:"integer",minimum:0,maximum:9007199254740991},maxItems:{type:"integer",minimum:0,maximum:9007199254740991},uniqueItems:{type:"boolean"},enum:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema2"}},const:{$ref:"#/$defs/__schema2"},minimum:{type:"number"},maximum:{type:"number"},exclusiveMinimum:{type:"number"},exclusiveMaximum:{type:"number"},minLength:{type:"integer",minimum:0,maximum:9007199254740991},maxLength:{type:"integer",minimum:0,maximum:9007199254740991},pattern:{type:"string"},format:{type:"string"},title:{type:"string"},description:{type:"string"},default:{$ref:"#/$defs/__schema2"},examples:{type:"array",items:{$ref:"#/$defs/__schema2"}},anyOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}},oneOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}},allOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}}},additionalProperties:!1},__schema2:{anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"},{type:"array",items:{$ref:"#/$defs/__schema2"}},{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema2"}}]},__schema3:{anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"},{type:"array",items:{$ref:"#/$defs/__schema3"}},{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema3"}}]},__schema4:{anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"},{type:"array",items:{$ref:"#/$defs/__schema4"}},{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema4"}}]}}};var Hm=new wm.default({strict:!1});Fm.default(Hm);var Gm=Hm.compile(Rm),wv=(e)=>{let t=e.keyword==="required"?e.params.missingProperty:e.keyword==="additionalProperties"?e.params.additionalProperty:void 0;return{path:typeof t==="string"?`${e.instancePath}/${t.replaceAll("~","~0").replaceAll("/","~1")}`:e.instancePath||"/",reason:e.message??`failed ${e.keyword} validation`}};function ol(e){if(Gm(e))return;let t=Gm.errors;b(t,"Pipeline graph validation failed without errors");let i=new Set,n=[];for(let o of t){let s=wv(o),r=`${s.path}
115
- ${s.reason}`;if(i.has(r))continue;i.add(r),n.push(s)}throw Zi.fromIssues(n)}var Fv=Symbol("fieldDefinition"),Hv=Symbol.for("@toloka-platform/sdk/pipeline-definition"),km=Symbol("portDefinition"),vv=Symbol("nodeFieldReferences");function Pm(e,t){return{node:e,handle:t,direction:"input",[km]:"input"}}function Ym(e,t){return{node:e,handle:t,direction:"output",[km]:"output"}}function Nm(e){return typeof e==="object"&&e!==null&&Fv in e}function sl(e,t){if(Nm(e)){t.push(e);return}if(Array.isArray(e)){for(let i of e)sl(i,t);return}if(typeof e==="object"&&e!==null)for(let i of Object.values(e))sl(i,t)}function kv(e){let t=[];return sl(e,t),t}function vm(e){return Nm(e)?{id:e.id,optional:!1}:{id:e.field.id,optional:e.optional??!1}}function Pv(e,t={}){let i=t.id??"root",{started:n,completed:o,...s}=e;return{id:i,type:"root",settings:{...s,startedFieldProxies:{output:n.map(vm)},completedFieldProxies:{input:o.map(vm)}},started:Ym(i,"started"),completed:Pm(i,"completed"),[vv]:kv(e)}}var B2=Object.assign(Pv,{started:Ym("root","started"),completed:Pm("root","completed")});function Yv(e){return typeof e==="object"&&e!==null&&Hv in e}function Zs(e){b(Yv(e),"Invalid pipeline definition: expected a value returned by definePipeline"),b(e.dataset.length>0,"Dataset name must not be empty");for(let t of e.graph.nodes){if(t.type!=="root")continue;b(!("datasetId"in t.settings),"An unresolved pipeline definition cannot contain a dataset id"),b(!("itemFilter"in t.settings),"An unresolved pipeline definition cannot contain a dataset item filter")}ol(e.graph)}function Qn(e,t){let i={version:e.graph.version,fields:e.graph.fields.map((n)=>({...n})),nodes:e.graph.nodes.map((n)=>n.type==="root"?{...n,settings:{...n.settings,datasetId:t.datasetId}}:n),connections:e.graph.connections.map((n)=>({from:{...n.from},to:{...n.to},settings:{...n.settings}}))};return ol(i),i}var Sm=async(e)=>{let t;try{t=await _n.readdir(e,{withFileTypes:!0})}catch(n){if(n instanceof Error&&Reflect.get(n,"code")==="ENOENT")return[];throw n}let i=[];for(let n of t.toSorted((o,s)=>o.name.localeCompare(s.name))){let o=pe.join(e,n.name);if(n.isDirectory())i.push(...await Sm(o));else if(n.isFile()&&n.name==="pipeline.ts")i.push(o)}return i},Nv="toloka.json",Xv=async(e)=>{try{return(await _n.stat(pe.join(e,Nv))).isFile()}catch{return!1}};async function xm(e){let t=pe.resolve(e);for(;;){if(await Xv(t))return t;let i=pe.dirname(t);if(i===t)return;t=i}}async function Ei(e){let t=await Sm(pe.join(e,"pipelines"));return{pipelines:(await Promise.all(t.map(async(n)=>{let o=await _n.stat(n),s=Xm.pathToFileURL(n);s.searchParams.set("version",`${o.mtimeMs}-${o.size}`);let r=await import(s.href);b(typeof r==="object"&&r!==null,`Invalid ${n}: expected a module`);let g=Reflect.get(r,"default");Zs(g);let a=pe.relative(e,pe.dirname(n)).split(pe.sep).join("/");return{sourceDirectory:a,name:pe.basename(a),definition:g}}))).toSorted((n,o)=>n.sourceDirectory.localeCompare(o.sourceDirectory))}}var Jm=5000,Sv=65536,$t="TOLOKA_INTERNAL_CHECK_RESULT_FILE",xv=(e)=>e.message.length<=Jm?e:{...e,message:`${e.message.slice(0,Jm)}
116
- \u2026output truncated`},rl=20,Em=async(e)=>{let t=[],i=0,n=!1;for await(let s of e){let r=Buffer.isBuffer(s)?s:Buffer.from(s),g=Sv-i;if(g>0){let a=r.subarray(0,g);t.push(a),i+=a.length}if(r.length>g)n=!0}let o=Buffer.concat(t).toString("utf8");return n?`${o}
117
- \u2026output truncated`:o},Il=async(e,t,i,n=process.env,o,s=process.execPath)=>{o?.throwIfAborted();let r=jm.spawn(s,[t,...i],{cwd:e,env:n,stdio:["ignore","pipe","pipe"]}),g=()=>r.kill("SIGTERM");if(o?.addEventListener("abort",g,{once:!0}),o?.aborted===!0)g();try{let[a,l,I]=await Promise.all([Qm.once(r,"close"),Em(r.stdout),Em(r.stderr)]),d=a[0];return typeof d==="number"?{exitCode:d,stdout:l,stderr:I}:{exitCode:2,stdout:l,stderr:[I,`Process terminated by ${String(a[1])}`].filter(Boolean).join(`
118
- `),infrastructureError:!0}}finally{o?.removeEventListener("abort",g)}},_m=(e,t,i)=>{let n=Dm.createRequire(Xt.join(e,"package.json"));return Xt.join(Xt.dirname(n.resolve(`${t}/package.json`)),i)},Jv=async(e,t,i)=>{try{return await Il(e,_m(e,"typescript","bin/tsc"),["--noEmit"],t,i)}catch(n){return{exitCode:2,stdout:"",stderr:`Unable to run project TypeScript: ${n instanceof Error?n.message:String(n)}. Install it with \`bun add --dev typescript\`.`,infrastructureError:!0}}},Ev=(e)=>{if(e.exitCode===0)return e;let t=`${e.stderr}
119
- ${e.stdout}`;return/Local Task UI testing requires Playwright and Chromium|Unable to load the Task UI launcher|Cannot find (?:package|module).*playwright/iu.test(t)?{...e,infrastructureError:!0}:e},Uv=async({sourceRoot:e,environment:t,signal:i})=>{try{let n=t[ja],o=t[Qa]==="1"&&n!==void 0?rm(n,t[Da]):void 0;return Ev(await Il(e,_m(e,"vitest","vitest.mjs"),["run",...o===void 0?[]:["--testNamePattern",o]],t,i))}catch(n){return{exitCode:2,stdout:"",stderr:`Unable to run project Vitest: ${n instanceof Error?n.message:String(n)}. Install it with \`bun add --dev vitest playwright\`.`,infrastructureError:!0}}},Ov=Oa(),Tv=async(e,t)=>{let i=new Map([[process.env,process.env.POTATO_API_KEY],[t,t.POTATO_API_KEY]]);for(let n of i.keys())delete n.POTATO_API_KEY;try{return await Ei(e)}finally{for(let[n,o]of i)if(o===void 0)delete n.POTATO_API_KEY;else n.POTATO_API_KEY=o}},al={loadSource:Tv,runTypeScript:Jv,runVitest:Uv,typecheckUi:(e)=>Ov.performTypeCheck(e)},zv=(e)=>{if(typeof e!=="object"||e===null)return;let t=Reflect.get(e,"code"),i=Reflect.get(e,"data"),n=Reflect.get(e,"constants"),o=Reflect.get(e,"preprocess"),s=Reflect.get(e,"postprocess");if(typeof t!=="string"||typeof i!=="string"||typeof n!=="string"||typeof o!=="string"||s!==void 0&&typeof s!=="string")return;return{code:t,data:i,constants:n,preprocess:o,postprocess:s??"return {};"}},jv=(e)=>{let t=Reflect.get(e.settings,"about"),i=typeof t==="object"&&t!==null?Reflect.get(t,"name"):void 0;return typeof i==="string"&&i.length>0?i:e.id},Dv=(e)=>e.pipelines.map((t)=>({sourceDirectory:t.sourceDirectory,name:t.name,pipelineFingerprint:_a(t.definition),nodes:t.definition.graph.nodes.filter((i)=>i.type==="code"||i.type==="generation"||i.type==="quorum").map((i)=>({id:i.id,name:jv(i),kind:i.type==="code"?"code":"ui"})).toSorted((i,n)=>i.id.localeCompare(n.id))})),Qv=(e,t,i)=>{let n=t===void 0?[...e]:e.filter((s)=>s.sourceDirectory===t||s.name===t||s.sourceDirectory.split("/").at(-1)===t);if(t!==void 0)b(n.length>0,`Unknown pipeline ${JSON.stringify(t)}. Available: ${e.map((s)=>s.sourceDirectory).join(", ")}`),b(n.length===1,`Pipeline selector ${JSON.stringify(t)} is ambiguous: ${n.map((s)=>s.sourceDirectory).join(", ")}`);if(i===void 0)return{pipelines:n};let o=n.flatMap((s)=>s.nodes.filter((r)=>r.id===i||r.name===i).map((r)=>({pipeline:s,node:r})));return b(o.length===1,o.length===0?`Unknown checkable node ${JSON.stringify(i)}.`:`Node selector ${JSON.stringify(i)} is ambiguous across pipelines.`),{pipelines:[o[0].pipeline],nodeId:o[0].node.id}},Um=(e,t={})=>{let i=/^(\d+):(\d+) - \[[^\]]+\](?: (TS\d+))?/u.exec(e);return{message:e,...t,...i===null?{}:{line:Number(i[1]),column:Number(i[2]),...i[3]===void 0?{}:{code:i[3]}}}},bs=(e)=>({diagnostics:e.slice(0,rl).map(xv),...e.length<=rl?{}:{truncatedDiagnosticCount:e.length-rl}}),Om=(e,t)=>{let i=t.infrastructureError===!0?"infrastructure_error":t.exitCode===0?"passed":"failed",n=[t.stderr.trim(),t.stdout.trim()].filter(Boolean).join(`
120
- `);return{scope:"project",kind:e,status:i,...bs(i==="passed"||n.length===0?[]:[{message:n}])}},_v=async(e,t,i,n)=>{let o=new Set(t.map((r)=>r.sourceDirectory)),s=[];for(let r of e.pipelines){let g=_a(r.definition);if(!o.has(r.sourceDirectory))continue;for(let a of r.definition.graph.nodes){if(a.type!=="generation"&&a.type!=="quorum")continue;if(i!==void 0&&a.id!==i)continue;let l=zv(Reflect.get(a.settings,"ui"));if(l===void 0){s.push({scope:"node",kind:"ui-types",status:"failed",sourceDirectory:r.sourceDirectory,pipelineFingerprint:g,nodeId:a.id,diagnostics:[{message:"No labeling interface is configured on this node"}]});continue}let I;try{I=await n(l)}catch(u){s.push({scope:"node",kind:"ui-types",status:"infrastructure_error",sourceDirectory:r.sourceDirectory,pipelineFingerprint:g,nodeId:a.id,diagnostics:[{message:u instanceof Error?u.message:String(u)}]});continue}let d=Object.entries(I).flatMap(([u,c])=>c.map((C)=>Um(C.text,{severity:C.severity,setting:u})));d.push(...Ea(l).map((u)=>Um(u.text,{severity:u.severity,setting:"postprocess"}))),s.push({scope:"node",kind:"ui-types",status:d.some((u)=>u.severity==="error")?"failed":"passed",sourceDirectory:r.sourceDirectory,pipelineFingerprint:g,nodeId:a.id,...bs(d)})}}return s},Tm=(e)=>{if(e.some((i)=>i.status==="infrastructure_error"))return{status:"infrastructure_error",...bs(e.filter((i)=>i.status==="infrastructure_error").map((i)=>({message:i.diagnostic??`Infrastructure error in ${i.testName}`})))};if(e.some((i)=>i.status==="failed"))return{status:"failed",...bs(e.filter((i)=>i.status==="failed").map((i)=>({message:i.diagnostic??`Failed test ${i.testName}`})))};let t=e.filter((i)=>i.status==="passed");if(t.length===0)return{status:"missing",diagnostics:[]};if(t.every((i)=>i.partial===!0))return{status:"partial",diagnostics:[{message:`Hardware-backed fields not fully covered: ${[...new Set(t.flatMap((i)=>i.untestedHardwareFields??[]))].join(", ")}`}]};return{status:"passed",diagnostics:[]}},zm=(e,t,i,n)=>e.filter((o)=>o.pipelineFingerprint===t.pipelineFingerprint&&o.kind===i&&(n===void 0||o.nodeId===n)),Kv=(e,t,i)=>e.flatMap((n)=>{let o=[];for(let s of n.nodes){if(i!==void 0&&s.id!==i)continue;let r=s.kind==="code"?"code-test":"ui-test",g=s.kind==="code"?"code":"ui";o.push({scope:"node",kind:r,sourceDirectory:n.sourceDirectory,pipelineFingerprint:n.pipelineFingerprint,nodeId:s.id,...Tm(zm(t,n,g,s.id))})}if(i===void 0)o.push({scope:"pipeline",kind:"pipeline-flow",sourceDirectory:n.sourceDirectory,pipelineFingerprint:n.pipelineFingerprint,...Tm(zm(t,n,"pipeline"))});return o}),Lv={passed:"PASS",failed:"FAIL",missing:"MISSING",partial:"PARTIAL",infrastructure_error:"ERROR"},Mv=(e)=>[e.sourceDirectory,e.nodeId,e.kind].filter(Boolean).join("/"),$v=(e)=>{let t={project:0,pipeline:1,node:2};return[...e].toSorted((i,n)=>t[i.scope]-t[n.scope]||(i.sourceDirectory??"").localeCompare(n.sourceDirectory??"")||(i.nodeId??"").localeCompare(n.nodeId??"")||i.kind.localeCompare(n.kind))},qv=(e)=>e.message.split(`
121
- `).map((t)=>` ${t}`),Kn=(e)=>e.flatMap((t)=>[`${Lv[t.status]} ${Mv(t)}`,...t.diagnostics.flatMap(qv),...t.truncatedDiagnosticCount===void 0?[]:[` ${t.truncatedDiagnosticCount} more diagnostics not shown`]]).join(`
122
- `),e5=(e)=>{if(e.some((t)=>t.status==="infrastructure_error"))return 2;if(e.some((t)=>t.status==="failed"||t.status==="missing"||t.status==="partial"))return 1;return 0};async function dl(e,t=al){let i;try{e.signal?.throwIfAborted(),i=await t.loadSource(e.sourceRoot,e.environment??process.env),e.signal?.throwIfAborted()}catch(s){let r=[{scope:"project",kind:"source",status:"failed",diagnostics:[{message:s instanceof Error?s.message:String(s)}]}];return{exitCode:1,results:r,output:e.json===!0?JSON.stringify({exitCode:1,results:r}):Kn(r)}}if(i.pipelines.length===0){let s=[{scope:"project",kind:"source",status:"failed",diagnostics:[{message:`No pipeline source found under ${e.sourceRoot}/pipelines`}]}];return{exitCode:1,results:s,output:e.json===!0?JSON.stringify({exitCode:1,results:s}):Kn(s)}}let n=Qv(Dv(i),e.pipeline,e.node),o=await St.mkdtemp(Xt.join(ll.tmpdir(),"toloka-check-"));try{let s=n.pipelines.length===1?n.pipelines[0]:void 0,r={...e.environment??process.env};delete r.POTATO_API_KEY;let g={...r,[sm]:o,...s===void 0?{}:{[ja]:s.pipelineFingerprint},...n.nodeId===void 0?{}:{[Da]:n.nodeId},...e.pipeline===void 0&&e.node===void 0?{}:{[Qa]:"1"}},[a,l,I]=await Promise.all([t.runTypeScript(e.sourceRoot,r,e.signal),_v(i,n.pipelines,n.nodeId,t.typecheckUi),t.runVitest({sourceRoot:e.sourceRoot,evidenceDirectory:o,environment:g,inventory:n.pipelines,signal:e.signal})]),d=await gm(o),u=$v([{scope:"project",kind:"source",status:"passed",diagnostics:[]},Om("project-types",a),...l,Om("test-runner",I),...Kv(n.pipelines,d,n.nodeId)]),c=e5(u);return{exitCode:c,results:u,source:i,output:e.json===!0?JSON.stringify({exitCode:c,results:u}):Kn(u)}}catch(s){let r=[{scope:"project",kind:"test-runner",status:"infrastructure_error",diagnostics:[{message:s instanceof Error?s.message:String(s)}]}];return{exitCode:2,results:r,source:i,output:e.json===!0?JSON.stringify({exitCode:2,results:r}):Kn(r)}}finally{await St.rm(o,{recursive:!0,force:!0})}}var t5=(e)=>{if(e===null)return!0;let t=e.toString();if(t.includes("node_modules/")||t.includes(".git/")||t.includes("test-results/")||t.includes("coverage/")||t.includes("dist/")||t.includes(".cache/")||t.includes(".toloka-check-project-")||t.includes(".toloka-project-")||t.includes(".pipeline-source-"))return!1;return/(?:^|\/)(?:package\.json|tsconfig[^/]*\.json)$/u.test(t)||/\.(?:ts|tsx|mts|cts|js|jsx|mjs|cjs|json|jsonl|csv)$/u.test(t)},i5=(e)=>e==="project"||e==="pipeline"||e==="node",n5=(e)=>e==="source"||e==="project-types"||e==="ui-types"||e==="code-test"||e==="ui-test"||e==="pipeline-flow"||e==="test-runner",o5=(e)=>e==="passed"||e==="failed"||e==="missing"||e==="partial"||e==="infrastructure_error",s5=(e)=>{b(typeof e==="object"&&e!==null,"Fresh check returned invalid diagnostics");let t=Reflect.get(e,"message"),i=Reflect.get(e,"severity"),n=Reflect.get(e,"setting"),o=Reflect.get(e,"line"),s=Reflect.get(e,"column"),r=Reflect.get(e,"code");return b(typeof t==="string","Fresh check diagnostic has no message"),b(i===void 0||i==="error"||i==="warning","Fresh check diagnostic has invalid severity"),b(n===void 0||typeof n==="string","Fresh check diagnostic has invalid setting"),b(o===void 0||Number.isInteger(o),"Fresh check diagnostic has invalid line"),b(s===void 0||Number.isInteger(s),"Fresh check diagnostic has invalid column"),b(r===void 0||typeof r==="string","Fresh check diagnostic has invalid code"),{message:t,...i===void 0?{}:{severity:i},...n===void 0?{}:{setting:n},...o===void 0?{}:{line:Number(o)},...s===void 0?{}:{column:Number(s)},...r===void 0?{}:{code:r}}},r5=(e)=>{b(typeof e==="object"&&e!==null,"Fresh check returned an invalid result");let t=Reflect.get(e,"scope"),i=Reflect.get(e,"kind"),n=Reflect.get(e,"status"),o=Reflect.get(e,"diagnostics"),s=Reflect.get(e,"sourceDirectory"),r=Reflect.get(e,"pipelineFingerprint"),g=Reflect.get(e,"nodeId"),a=Reflect.get(e,"truncatedDiagnosticCount");return b(i5(t),"Fresh check returned an invalid scope"),b(n5(i),"Fresh check returned an invalid kind"),b(o5(n),"Fresh check returned an invalid status"),b(Array.isArray(o),"Fresh check returned invalid diagnostics"),b(s===void 0||typeof s==="string","Fresh check returned an invalid source directory"),b(r===void 0||typeof r==="string","Fresh check returned an invalid pipeline fingerprint"),b(g===void 0||typeof g==="string","Fresh check returned an invalid node id"),b(a===void 0||Number.isInteger(a)&&Number(a)>=0,"Fresh check returned an invalid truncated count"),{scope:t,kind:i,status:n,diagnostics:o.map(s5),...s===void 0?{}:{sourceDirectory:s},...r===void 0?{}:{pipelineFingerprint:r},...g===void 0?{}:{nodeId:g},...a===void 0?{}:{truncatedDiagnosticCount:Number(a)}}},g5=(e,t)=>{b(typeof e==="object"&&e!==null,"Fresh check returned invalid JSON");let i=Reflect.get(e,"exitCode"),n=Reflect.get(e,"results");b(i===0||i===1||i===2,"Fresh check returned an invalid exit code"),b(Array.isArray(n),"Fresh check returned no results");let o=n.map(r5);return{exitCode:i,results:o,output:t?JSON.stringify({exitCode:i,results:o}):Kn(o)}},cl=async(e)=>{let t=gl.fileURLToPath(new URL("./bin.ts","file:///Users/gzarip/code/potato-5/packages/sdk/src/cli/check.ts")),i=Ws.existsSync(t)?t:gl.fileURLToPath("file:///Users/gzarip/code/potato-5/packages/sdk/src/cli/check.ts"),n=await St.mkdtemp(Xt.join(ll.tmpdir(),"toloka-check-watch-result-")),o=Xt.join(n,"result.json"),s;try{return s=await Il(e.sourceRoot,i,["--source-root",e.sourceRoot,"check",...e.pipeline===void 0?[]:[e.pipeline],...e.node===void 0?[]:["--node",e.node],"--json"],{...process.env.PATH===void 0?{}:{PATH:process.env.PATH},...e.environment??process.env,[$t]:o},e.signal,"bun"),g5(JSON.parse(await St.readFile(o,"utf8")),e.json===!0)}catch(r){let g=[s?.stderr,s?.stdout,r instanceof Error?r.message:String(r)].filter(Boolean).join(`
123
- `);throw Error(`Fresh check process returned unreadable output: ${g}`,{cause:r})}finally{await St.rm(n,{recursive:!0,force:!0})}};async function Km(e,t,i=al,n){let{promise:o,resolve:s,reject:r}=Promise.withResolvers(),g=!1,a=!1,l=!1,I,d=()=>{if(l=!0,a=!1,clearTimeout(I),C.close(),!g)s()},u=(A)=>{clearTimeout(I),C.close(),r(A)},c=async()=>{if(g){a=!0;return}g=!0;try{do{a=!1;let A=i===al?await cl({...e,signal:n}):await dl({...e,signal:n},i);if(!l)await t(A)}while(a&&n?.aborted!==!0)}catch(A){if(!l)u(A)}finally{if(g=!1,l)s()}},C=Ws.watch(e.sourceRoot,{recursive:!0},(A,m)=>{if(!t5(m))return;if(a=!0,g)return;clearTimeout(I),I=setTimeout(()=>void c(),100)});if(C.once("error",u),n?.aborted===!0)d();else n?.addEventListener("abort",d,{once:!0}),c();try{await o}finally{n?.removeEventListener("abort",d)}}var Ae=require("fs/promises"),$m=require("os"),qt=require("path");class Ln extends Error{constructor(e,t){super(e,t);this.name="CredentialsError"}}var qm=(e)=>e.HOME??$m.homedir(),a5=(e)=>e.XDG_CONFIG_HOME??qt.join(qm(e),".config"),Ne=(e=process.env)=>e.TOLOKA_CREDENTIALS_FILE??qt.join(a5(e),"toloka","credentials.json"),ep=(e=process.env)=>qt.join(qm(e),".toloka","credentials.json"),ys=(e=process.env)=>qt.dirname(Ne(e)),Lm=(e)=>{let t=e.length;while(t>0&&e.charCodeAt(t-1)===47)t-=1;return t===e.length?e:e.slice(0,t)},bt=(e)=>{let t=Lm(e.trim());try{let i=new URL(t);return i.hash="",i.search="",Lm(i.toString())}catch{return t}},hs=(e,t)=>typeof e==="object"&&e!==null?Reflect.get(e,t):void 0,l5=(e)=>{if(typeof e!=="object"||e===null)return;let t=Reflect.get(e,"id");if(typeof t!=="string"||t.length===0)return;let i=Reflect.get(e,"name");if(i!==void 0&&typeof i!=="string")return;return i===void 0?{id:t}:{id:t,name:i}},I5=(e)=>{if(e===void 0||typeof e!=="object"||e===null||Array.isArray(e))return;let t=Object.create(null);for(let[i,n]of Object.entries(e)){if(i.length===0)return;let o=l5(n);if(o===void 0)return;Object.defineProperty(t,i,{value:o,writable:!0,enumerable:!0,configurable:!0})}return t},d5=(e,t)=>{let i=I5(e);if(i===void 0)return;if(typeof t==="string"){if(t.length===0||!Object.hasOwn(i,t))return;return{current:t,projects:i}}if(t!==void 0)return;return Object.keys(i).length===0?{}:{projects:i}},c5=(e)=>{let t=hs(e,"baseUrl"),i=hs(e,"apiKey");if(typeof t!=="string"||t.length===0)return;if(typeof i!=="string"||i.length===0)return;let n=hs(e,"current"),o=hs(e,"projects");if(n===void 0&&o===void 0)return{baseUrl:t,apiKey:i};let s=d5(o,n);if(s===void 0)return;return{baseUrl:t,apiKey:i,...s}};async function fs(e){let t;try{t=await Ae.readFile(e,"utf8")}catch(i){if(i instanceof Error&&"code"in i&&i.code==="ENOENT")return"missing";return"invalid"}try{let i=c5(JSON.parse(t));return i===void 0?"invalid":{credentials:i}}catch{return"invalid"}}async function Cl(e=process.env){let t=Ne(e),i=await fs(t);if(i!=="missing"){if(i==="invalid")throw new Ln(`Invalid credentials file at ${t}. Run toloka logout, then toloka login.`);return{credentials:i.credentials,path:t,legacy:!1}}if(e.TOLOKA_CREDENTIALS_FILE!==void 0)return;let n=ep(e),o=await fs(n);if(o==="missing")return;if(o==="invalid")throw new Ln(`Invalid credentials file at ${n}. Run toloka logout, then toloka login.`);return{credentials:o.credentials,path:n,legacy:!0}}async function Mn(e,t){try{return{found:await Cl(e)}}catch(i){if(!(i instanceof Ln)||t===void 0)throw i;return{found:void 0,warning:i.message}}}async function tp(e=process.env){return(await Cl(e))?.credentials}async function xt(e=process.env){let t=await Cl(e);if(t!==void 0)return t;throw new Ln(`No stored credentials found at ${Ne(e)}. Run toloka login.`)}var C5=(e)=>{let t=e.projects,i=t!==void 0&&Object.keys(t).length>0;return{baseUrl:e.baseUrl,apiKey:e.apiKey,...e.current===void 0?{}:{current:e.current},...i?{projects:t}:{}}},Mm=async(e)=>{try{let t=await Ae.lstat(e);b(!t.isSymbolicLink(),`Refusing to write through symbolic link ${e}.`)}catch(t){if(t instanceof Error&&"code"in t&&t.code==="ENOENT")return;throw t}};async function ei(e){let t=qt.dirname(e);await Mm(t),await Mm(e),await Ae.mkdir(t,{recursive:!0,mode:448}),await Ae.chmod(t,448)}async function Vs(e,t=process.env){let i=Ne(t);return await ei(i),await Ae.writeFile(i,`${JSON.stringify(C5(e),null,2)}
124
- `,{mode:384}),await Ae.chmod(i,384),i}var u5=async(e)=>{try{return await Ae.stat(e),!0}catch(t){if(t instanceof Error&&"code"in t&&t.code==="ENOENT")return!1;throw t}};async function ip(e=process.env){let t=[],i=[Ne(e),...e.TOLOKA_CREDENTIALS_FILE===void 0?[ep(e)]:[]];for(let n of i){if(!await u5(n))continue;await Ae.rm(n,{force:!0}),t.push(n)}return t}var m5=16,np=(e)=>e.length>m5?`${e.slice(0,4)}${"*".repeat(e.length-8)}${e.slice(-4)}`:"*".repeat(e.length);var M="Missing project ID. Pass --project-id, set TOLOKA_PROJECT_ID, set projectId in toloka.json, or run toloka project add.",p5="No project selected. Run toloka project add, or cd into a checkout.",op="project add writes the machine registry; unset --api-key / --base-url / POTATO_API_KEY / POTATO_BASE_URL, or run login against that platform first.",A5=/^[^/\s]+$/u,Bs=(e)=>{let t=e.trim();return b(t.length>0&&A5.test(t),"Project alias must be non-empty and contain no / or whitespace."),t},Ze=(e)=>{if(e===void 0)return;let t=e.trim();return t.length===0?void 0:t},Z5=(e,t,i)=>Ze(e?.baseUrl)??Ze(t?.POTATO_BASE_URL)??Wt(t??{})??Ze(i?.baseUrl),$n=(e,t)=>e!==void 0&&Object.hasOwn(e,t)?e[t]:void 0,b5=(e,t,i)=>{if(!i||t?.projects===void 0)return{};if(t.current!==void 0){let n=$n(t.projects,t.current);if(n?.id===e)return n.name===void 0?{alias:t.current}:{alias:t.current,name:n.name}}for(let n of Object.keys(t.projects).toSorted()){let o=$n(t.projects,n);if(o?.id!==e)continue;return o.name===void 0?{alias:n}:{alias:n,name:o.name}}return{}};function Ui(e={}){let t=e.flags??{},i=e.environment??{},n=e.stored,o=e.effectiveBaseUrl??Z5(t,i,n),s=n!==void 0&&o!==void 0&&bt(o)===bt(n.baseUrl),g=[{id:Ze(t.projectId),source:"flag"},{id:Ze(i.TOLOKA_PROJECT_ID),source:"toloka-project-id"},{id:Ze(i.POTATO_PROJECT_ID),source:"potato-project-id"},{id:Ze(e.state?.projectId),source:"toloka.json"},{id:s&&n.current!==void 0?Ze(n.projects?.[n.current]?.id):void 0,source:"registry"}].find((a)=>a.id!==void 0);if(g?.id===void 0)return;return{id:g.id,source:g.source,...b5(g.id,n,s)}}var ml=(e,t)=>{if(e===void 0)return"Project: (none). Run toloka project add.";let i=e.alias===void 0?"":`alias ${e.alias}, `,n=e.source!=="registry"&&t?.current!==void 0?`; registry current is ${t.current}`:"";return`Project: ${e.id} (${i}from ${e.source}${n})`},Rs=(e,t,i)=>{let n=Ze(e.apiKey)??Ze(t.POTATO_API_KEY),o=Ze(e.baseUrl)??Ze(t.POTATO_BASE_URL)??Wt(t);b(n===void 0||n===i.apiKey,op),b(o===void 0||bt(o)===bt(i.baseUrl),op)},Gs=async(e,t)=>{await Vs(e,t)},sp=(e,t,i)=>{let n=Object.assign(Object.create(null),e.projects??{},{[t]:i.name===void 0?{id:i.id}:i});return{...e,current:t,projects:n}},ul=async(e,t,i)=>{b(e?.prompt,i);let n=(await e.prompt(t)).trim();return b(n.length>0,i),n};async function rp(e){let t=e.limit??20,i=await e.client.projects.listPage({limit:t}),n=i.projects.map((s)=>{let r=e.context?.id===s.id?"*":" ",g=e.context?.id===s.id&&e.context.alias!==void 0?` ${e.context.alias}`:"";return`${r} ${s.id} ${s.name}${g}`});if(i.pagination.hasMore)n.push(`Showing ${i.projects.length} of ${i.pagination.total} projects. Raise --limit to see more.`);let o=n.length===0?"No projects visible.":n.join(`
125
- `);return e.io.stdout(o),{output:o}}async function gp(e){let t=await xt(e.environment);Rs(e.flags??{},e.environment,t.credentials);let i=Bs(e.alias??await ul(e.io,"Alias: ","Missing project alias. Pass an alias or run this in a terminal.")),n=Ze(e.projectId)??await ul(e.io,"Project id: ","Missing project ID. Pass a project id or run this in a terminal."),o=$n(t.credentials.projects,i);b(o===void 0||o.id===n,`Alias ${i} already points at ${o?.id}. Run toloka project remove ${i} first.`),await e.afterPreflight?.();let s=await e.client.projects.get({projectId:n});await Gs(sp(t.credentials,i,{id:s.id,name:s.name}),e.environment);let r=`Using project ${s.id} as ${i}.`;return e.io?.stdout(r),{output:r,alias:i,projectId:s.id}}async function ap(e){let t=await xt(e.environment);Rs(e.flags??{},e.environment,t.credentials);let i=Bs(e.alias),n=$n(t.credentials.projects,i);b(n,`Unknown project alias ${i}.`),await Gs({...t.credentials,current:i},e.environment);let o=`Using project ${n.id} as ${i}.`;return e.io?.stdout(o),{output:o}}async function lp(e){let t=await xt(e.environment);Rs(e.flags??{},e.environment,t.credentials);let i=Bs(e.alias),n=Object.assign(Object.create(null),t.credentials.projects??{});b($n(n,i),`Unknown project alias ${i}.`),delete n[i];let o=t.credentials.current===i?void 0:t.credentials.current;await Gs({baseUrl:t.credentials.baseUrl,apiKey:t.credentials.apiKey,...o===void 0?{}:{current:o},...Object.keys(n).length===0?{}:{projects:n}},e.environment);let s=`Removed local alias ${i}.`;return e.io?.stdout(s),{output:s}}function Ip(e){let t=Ui(e),i=t===void 0?p5:ml(t,e.stored);return e.io?.stdout(i),t===void 0?{output:i}:{output:i,project:t}}var W5=(e)=>{let t=[...new Set(e.map((i)=>i.teamId))];return t.length===1?t[0]:void 0},h5=async(e,t)=>{let i=Ze(t);if(i!==void 0)return i;let n=[];for await(let s of e.projects.listAll())n.push(s);let o=W5(n);return b(o,"Missing team id. Pass --team-id. Visible projects do not share a single team, or none are visible."),o},f5=async(e,t,i,n)=>{if(t===void 0){try{await Lt(e,{projectId:i.id,pipelines:{},datasets:{}})}catch(o){let s=o instanceof Error?o.message:String(o);throw Error([`Created project ${i.id} as ${n}.`,`Failed to write toloka.json: ${s}`].join(`
126
- `),{cause:o})}return}if(t.projectId===i.id)return;return`Checkout still uses ${t.projectId}; it overrides the new registry current.`};async function dp(e){let t=await xt(e.environment);Rs(e.flags??{},e.environment,t.credentials);let i=Bs(e.alias??await ul(e.io,"Alias: ","Missing project alias. Pass an alias or run this in a terminal."));b(t.credentials.projects?.[i]===void 0,`Alias ${i} already exists. Run toloka project remove ${i} first.`);let n=e.sourceRoot===void 0?void 0:await Re(e.sourceRoot);await e.afterPreflight?.();let o=await h5(e.client,e.teamId),s=await e.client.projects.create({teamId:o,name:Ze(e.name)??i});try{await Gs(sp(t.credentials,i,{id:s.id,name:s.name}),e.environment)}catch(a){let l=a instanceof Error?a.message:String(a);throw Error([`Created ${s.id} but failed to update the local registry: ${l}`,`Run: toloka project add ${i} ${s.id}`].join(`
127
- `),{cause:a})}let r=[`Created project ${s.id} as ${i}.`];if(e.sourceRoot!==void 0){let a=await f5(e.sourceRoot,n,s,i);if(a!==void 0)r.push(a)}let g=r.join(`
128
- `);return e.io?.stdout(g),{output:g,projectId:s.id,alias:i}}var ti="https://platform.toloka.ai",y5=/^(?:prestable|pr-\d+)$/u,Wt=(e)=>{let t=e.ENV?.trim();if(t===void 0||!y5.test(t))return;return`https://${t}.platform.toloka-test.ai`},V5="https://console.toloka.ai",B5="https://prestable.console.toloka-test.ai",cp=(e)=>{let t;try{t=new URL(e).host}catch{return}if(t==="platform.toloka.ai")return V5;if(t.endsWith(".platform.toloka-test.ai"))return B5;return},R5=["Missing API key. Run toloka login once to store credentials for this machine:",""," toloka login","","It explains how to generate an API key and where it is saved. To override per command,","pass --api-key or set POTATO_API_KEY. Run toloka auth-status to see what is in effect."].join(`
129
- `);function pl(e,t,i,n){let o=e.apiKey??i.POTATO_API_KEY??n?.apiKey,s=e.baseUrl??i.POTATO_BASE_URL??Wt(i)??n?.baseUrl??ti,r=Ui({flags:e,state:t,environment:i,stored:n,effectiveBaseUrl:s});return b(o,R5),{apiKey:o,baseUrl:s,...r===void 0?{}:{projectId:r.id}}}var G5=(e)=>{let t=cp(e);return[...t===void 0?[`An API key identifies you to ${e}. Generate one in the console that`,"serves this platform, under Company -> API Keys -> Generate API Key."]:[`An API key identifies you to ${e}. To generate one:`,"",` 1. open ${t}`," 2. go to Company -> API Keys"," 3. press Generate API Key and copy it"],"","The key is shown once. Treat it like a password: it is stored with owner-only","permissions and never printed back to you."].join(`
130
- `)};async function Cp(e={}){let t=e.environment??process.env,i=e.write??(()=>{return}),n=bt(e.baseUrl??t.POTATO_BASE_URL??Wt(t)??ti),o=e.apiKey;if(o===void 0)b(e.prompt,"Missing API key. Pass --api-key, or set POTATO_API_KEY, when stdin is not a terminal."),i(`
131
- ${G5(n)}
110
+ `,zH=["preprocess","postprocess","code"],em=(e,t,i)=>{let n={...e};for(let o of zH){let s=new Set(t[o].map((a)=>a.text)),r=e[o].filter((a)=>!s.has(a.text)&&!/TS(?:7006|7031)\b/u.test(a.text)),g=i[o].length>0?i[o]:t[o];n[o]=[...r,...g]}return n},tm=(e,t)=>{let i=(n)=>{let o=e.indexOf(`/* ${n}_START */`)+`/* ${n}_START */`.length+1,s=e.indexOf(`/* ${n}_END */`)-1;return t.filter((r)=>{if(!r.file||r.start==null)return!1;return r.start>=o&&r.start<=s}).map((r)=>{let g=Ge.default.flattenDiagnosticMessageText(r.messageText,`
111
+ `),a=r.category===Ge.default.DiagnosticCategory.Error?"error":"warning";b(r.file&&r.start!=null,"Diagnostic location is missing");let{line:l,character:I}=r.file.getLineAndCharacterOfPosition(o),{line:d,character:u}=r.file.getLineAndCharacterOfPosition(r.start),c=d-l,C=d===l?u-I:u,A=r.file.text.split(/\r?\n/gu)[d]??"",m=" ".repeat(u)+"^".repeat(r.length&&r.length>0?r.length:1);return{severity:a,text:[`${c}:${C+1} - [${Ge.default.DiagnosticCategory[r.category]}] TS${r.code}`,g,"",A,m].join(`
112
+ `)}})};return{data:i(it.data),constants:i(it.constants),preprocess:i(it.preprocess),postprocess:i(it.postprocess),code:i(it.code)}},Ta=(e,t)=>{let i=[0];for(let a=0;a<e.length;a+=1)if(e[a]===`
113
+ `)i.push(a+1);let n=(a)=>{let l=0;while(l+1<i.length&&i[l+1]<=a)l+=1;return{line:l,character:a-i[l]}},o=e.split(/\r?\n/gu),s=OH.map(([a,l])=>({key:a,start:e.indexOf(`/* ${l}_START */`)+`/* ${l}_START */`.length+1,end:e.indexOf(`/* ${l}_END */`)-1})),r=(a)=>{let l=s.find((u)=>a>=u.start&&a<=u.end);if(l)return l;let d=s.filter((u)=>u.start<=a).at(-1)??s[0];return b(d,"Task UI diagnostic block is missing"),d},g=TH();for(let a of t){let l=a.labels[0],I=l?.start??e.length,d=r(I),u=a.severity==="Error"?"error":"warning",{line:c,character:C}=n(d.start),{line:A,character:m}=n(I),p=A-c,Z=A===c?m-C:m,W=o[A]??"",h=l?l.end-l.start:0,f=" ".repeat(m)+"^".repeat(h>0?h:1);g[d.key].push({severity:u,text:[`${p}:${Z+1} - [${a.severity}]`,a.message,"",W,f].join(`
114
+ `)})}return g},nm=({reactDeclaration:e,elementsDeclaration:t})=>({performTypeCheck:async(i)=>{let n=$u(i),o=Zt.createDefaultMapFromNodeModules({target:Ge.default.ScriptTarget.Latest},Ge.default,UH);o.set("node_modules/@types/react/index.d.ts",e),o.set("node_modules/elements/index.d.ts",t),o.set(Xi,n);let s=Zt.createSystem(o),{languageService:r}=Zt.createVirtualTypeScriptEnvironment(s,[Xi],Ge.default,{target:Ge.default.ScriptTarget.Latest,allowNonTsExtensions:!0,ignoreDeprecations:"6.0",module:Ge.default.ModuleKind.CommonJS,moduleResolution:Ge.default.ModuleResolutionKind.Node10,noEmit:!0,typeRoots:["node_modules/@types"],jsx:Ge.default.JsxEmit.React,jsxFactory:"React.createElement",noErrorTruncation:!0}),g=[],a=[];try{g=r.getSyntacticDiagnostics(Xi),a=[...r.getSemanticDiagnostics(Xi),...r.getSuggestionDiagnostics(Xi),...r.getCompilerOptionsDiagnostics()]}finally{r.dispose()}let l=tm(n,g),I=tm(n,[...g,...a]),d=qu(i),u=Ta(d,Zs.parseSync("runtime.jsx",d).errors);return em(I,l,u)},performSyntaxCheck:(i)=>{let n=$u(i),o=Ta(n,Zs.parseSync(Xi,n).errors),s=qu(i),r=Ta(s,Zs.parseSync("runtime.jsx",s).errors);return em(o,o,r)}}),za=()=>nm({reactDeclaration:jn.react.source,elementsDeclaration:jn.elements.source});var Da=require("crypto"),Si=require("fs/promises"),sm=require("path");var rm="TOLOKA_CHECK_EVIDENCE_DIR",Qa="TOLOKA_CHECK_PIPELINE_FINGERPRINT",_a="TOLOKA_CHECK_NODE_ID",Ka="TOLOKA_CHECK_TYPED_ONLY",jH=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e),DH=(e)=>Array.isArray(e)&&e.every((t)=>typeof t==="string"),ja=(e)=>{if(Array.isArray(e))return e.map(ja);if(typeof e!=="object"||e===null)return e;return Object.fromEntries(Object.entries(e).toSorted(([t],[i])=>t.localeCompare(i)).map(([t,i])=>[t,ja(i)]))},La=(e)=>Da.createHash("sha256").update(JSON.stringify(ja(e))).digest("hex"),QH=(e,t)=>`[toloka:${e}:${t??"pipeline"}]`,om=(e)=>e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),gm=(e,t)=>t===void 0?om(`[toloka:${e}:`):om(QH(e,t));var _H=(e)=>e==="code"||e==="ui"||e==="pipeline",KH=(e)=>e==="passed"||e==="failed"||e==="infrastructure_error",LH=(e,t)=>{b(jH(e),`Invalid test evidence ${t}`);let i=e;b(i.version===1,`Unsupported test evidence version in ${t}`),b(typeof i.pipelineFingerprint==="string",`Missing pipeline fingerprint in ${t}`),b(_H(i.kind),`Invalid test evidence kind in ${t}`),b(KH(i.status),`Invalid test evidence status in ${t}`),b(typeof i.testName==="string",`Missing test name in ${t}`),b(i.nodeId===void 0||typeof i.nodeId==="string",`Invalid node id in ${t}`),b(i.diagnostic===void 0||typeof i.diagnostic==="string",`Invalid diagnostic in ${t}`),b(i.partial===void 0||typeof i.partial==="boolean",`Invalid partial coverage in ${t}`),b(i.untestedHardwareFields===void 0||DH(i.untestedHardwareFields),`Invalid hardware fields in ${t}`);let n=i.untestedHardwareFields;return{version:1,pipelineFingerprint:i.pipelineFingerprint,kind:i.kind,status:i.status,testName:i.testName,...i.nodeId===void 0?{}:{nodeId:i.nodeId},...i.diagnostic===void 0?{}:{diagnostic:i.diagnostic},...i.partial===void 0?{}:{partial:i.partial},...n===void 0?{}:{untestedHardwareFields:n}}};var am=async(e)=>{let i=(await Si.readdir(e,{withFileTypes:!0})).filter((n)=>n.isFile()&&n.name.endsWith(".json")).map((n)=>n.name).toSorted();return Promise.all(i.map(async(n)=>{let o=sm.join(e,n),s;try{s=JSON.parse(await Si.readFile(o,"utf8"))}catch(r){throw Error(`Invalid test evidence ${o}`,{cause:r})}return LH(s,o)}))};var Qn=require("fs"),$t=require("path"),lm=$t.join("bin","toloka.js"),Im=(e)=>{try{return Qn.realpathSync(e)}catch{return e}},Dn=(e)=>{let t=$t.join(e,lm);if(Qn.existsSync(t))return t;let i=$t.dirname(e);return i===e?void 0:Dn(i)},dm=(e=process.argv[1])=>(e===void 0?void 0:Dn($t.dirname(Im(e))))??Dn(process.cwd()),cm=(e=process.argv[1])=>{let t=e===void 0?void 0:Im(e);if(t!==void 0&&Qn.existsSync(t)&&Dn($t.dirname(t))!==void 0)return t;let i=Dn(process.cwd());return b(i!==void 0,`Cannot locate the toloka CLI entry point. An installed @toloka-platform/sdk ships ${lm} in a directory above its runtime entry, but none exists above ${e??"the unset process.argv[1]"} or above ${process.cwd()}. Reinstall @toloka-platform/sdk.`),i};var Mn=require("fs/promises"),me=require("path"),Um=require("url");var Pm=be(xa(),1),Ym=be(Hm(),1);var vm={$schema:"https://json-schema.org/draft/2020-12/schema",type:"object",properties:{version:{type:"number",const:1},fields:{maxItems:500,type:"array",items:{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},name:{type:"string"},jsonSchema:{type:"object",properties:{type:{anyOf:[{type:"string",enum:["string","number","integer","boolean","object","array","null"]},{minItems:1,type:"array",items:{type:"string",enum:["string","number","integer","boolean","object","array","null"]}}]},properties:{$ref:"#/$defs/__schema0"},required:{type:"array",items:{type:"string"}},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#/$defs/__schema1"}]},items:{$ref:"#/$defs/__schema1"},minItems:{type:"integer",minimum:0,maximum:9007199254740991},maxItems:{type:"integer",minimum:0,maximum:9007199254740991},uniqueItems:{type:"boolean"},enum:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema2"}},const:{$ref:"#/$defs/__schema2"},minimum:{type:"number"},maximum:{type:"number"},exclusiveMinimum:{type:"number"},exclusiveMaximum:{type:"number"},minLength:{type:"integer",minimum:0,maximum:9007199254740991},maxLength:{type:"integer",minimum:0,maximum:9007199254740991},pattern:{type:"string"},format:{type:"string"},title:{type:"string"},description:{type:"string"},default:{$ref:"#/$defs/__schema2"},examples:{type:"array",items:{$ref:"#/$defs/__schema2"}},anyOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}},oneOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}},allOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}}},additionalProperties:!1,ref:"JsonSchema"}},required:["id","name","jsonSchema"],additionalProperties:!1}},nodes:{maxItems:500,type:"array",items:{oneOf:[{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},type:{type:"string",const:"root"},settings:{type:"object",properties:{datasetId:{type:"string",pattern:"^ds\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},itemFilter:{type:"object",properties:{fieldValues:{default:[],type:"array",items:{type:"object",properties:{jsonPath:{type:"string",minLength:1},operator:{type:"string",enum:["text_eq","text_neq"]},value:{anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]},fieldId:{type:"string",pattern:"^df\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},latestOnly:{default:!0,type:"boolean"},sources:{default:[],type:"array",items:{oneOf:[{type:"object",properties:{type:{type:"string",const:"user"},userId:{type:"string",minLength:1}},required:["type","userId"],additionalProperties:!1},{type:"object",properties:{type:{type:"string",const:"system"},source:{type:"string",minLength:1}},required:["type","source"],additionalProperties:!1}]}}},required:["jsonPath","operator","value","fieldId"],additionalProperties:!1}},fieldSources:{default:[],type:"array",items:{type:"object",properties:{fieldId:{type:"string",pattern:"^df\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},sources:{minItems:1,type:"array",items:{oneOf:[{type:"object",properties:{type:{type:"string",const:"user"},userId:{type:"string",minLength:1}},required:["type","userId"],additionalProperties:!1},{type:"object",properties:{type:{type:"string",const:"system"},source:{type:"string",minLength:1}},required:["type","source"],additionalProperties:!1}]}}},required:["fieldId","sources"],additionalProperties:!1}},missingRevisionFields:{default:[],type:"array",items:{type:"string",pattern:"^df\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}},createdBefore:{type:"string",format:"date-time",pattern:"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},additionalProperties:!1},itemLimit:{type:"integer",exclusiveMinimum:0,maximum:9007199254740991},startedFieldProxies:{type:"object",properties:{output:{type:"array",items:{type:"object",properties:{id:{type:"string"},optional:{type:"boolean"}},required:["id","optional"],additionalProperties:!1}}},required:["output"]},completedFieldProxies:{type:"object",properties:{input:{type:"array",items:{type:"object",properties:{id:{type:"string"},optional:{type:"boolean"}},required:["id","optional"],additionalProperties:!1}}},required:["input"]}},required:["startedFieldProxies","completedFieldProxies"],additionalProperties:!1}},required:["id","type","settings"],additionalProperties:!1},{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},type:{type:"string",const:"code"},settings:{type:"object",properties:{about:{type:"object",properties:{name:{type:"string"},description:{type:"string"},projectType:{type:"string",enum:["general","data_collection"]}},required:["name"],additionalProperties:!1},fieldProxies:{type:"object",properties:{input:{type:"array",items:{type:"object",properties:{id:{type:"string"},optional:{type:"boolean"}},required:["id","optional"],additionalProperties:!1}},output:{type:"array",items:{type:"object",properties:{id:{type:"string"},optional:{type:"boolean"}},required:["id","optional"],additionalProperties:!1}}},required:["input","output"]},code:{type:"object",properties:{code:{type:"string"}},required:["code"],additionalProperties:!1},envVars:{default:[],type:"array",items:{oneOf:[{type:"object",properties:{type:{type:"string",const:"static"},name:{type:"string"},value:{type:"string"}},required:["type","name","value"],additionalProperties:!1},{type:"object",properties:{type:{type:"string",const:"secret"},name:{type:"string"},secretName:{type:"string"}},required:["type","name","secretName"],additionalProperties:!1}]}},checks:{type:"object",propertyNames:{type:"string",enum:["code"]},additionalProperties:{type:"array",items:{type:"object",properties:{id:{type:"string"},name:{type:"string"},input:{type:"string"}},required:["id","name","input"]}},required:["code"]}},required:["about","fieldProxies","code"],additionalProperties:!1}},required:["id","type","settings"],additionalProperties:!1},{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},type:{type:"string",const:"generation"},settings:{type:"object",properties:{about:{type:"object",properties:{name:{type:"string"},description:{type:"string"},projectType:{type:"string",enum:["general","data_collection"]}},required:["name"],additionalProperties:!1},publicName:{type:"string"},entities:{type:"object",properties:{input:{type:"array",items:{oneOf:[{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!1},maxEntities:{type:"null"}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1},{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!0},maxEntities:{anyOf:[{type:"number"},{type:"null"}]}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1}]}},output:{type:"array",items:{oneOf:[{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!1},maxEntities:{type:"null"}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1},{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!0},maxEntities:{anyOf:[{type:"number"},{type:"null"}]}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1}]}}},required:["input","output"],additionalProperties:!1},qualityCriteria:{type:"array",items:{type:"object",properties:{id:{type:"string",format:"uuid",pattern:"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},qualityElement:{type:"string"},thresholds:{type:"object",properties:{pass:{type:"string"},fail:{type:"string"}},required:["pass","fail"]},targetEntity:{type:"string"},llmQaInstruction:{type:"string",maxLength:5000}},required:["id","qualityElement","thresholds","targetEntity"]}},instruction:{type:"string"},ui:{type:"object",properties:{code:{type:"string"},data:{type:"string"},preprocess:{type:"string"},postprocess:{default:"return {};",type:"string"},constants:{type:"string"}},required:["code","data","preprocess","constants"]},qualityAssurance:{default:{qaMode:"llm_only",llmQaModelId:"gpt-5.4"},oneOf:[{type:"object",properties:{qaMode:{type:"string",const:"llm_only"},llmQaModelId:{default:"gpt-5.4",type:"string",enum:["gpt-5.4","gpt-5.4-mini","gpt-5","gpt-5-mini","claude-sonnet-4-6"]}},required:["qaMode"]},{type:"object",properties:{qaMode:{type:"string",const:"human_only"},smartSamplingPercent:{default:100,type:"number",minimum:10,maximum:100},humanQaTimeForTask:{type:"number",exclusiveMinimum:0}},required:["qaMode"]},{type:"object",properties:{qaMode:{type:"string",const:"hybrid"},smartSamplingPercent:{default:30,type:"number",minimum:10,maximum:100},humanQaTimeForTask:{type:"number",exclusiveMinimum:0},llmQaModelId:{default:"gpt-5.4",type:"string",enum:["gpt-5.4","gpt-5.4-mini","gpt-5","gpt-5-mini","claude-sonnet-4-6"]}},required:["qaMode"]}]},audienceAndPricing:{default:{audienceType:"human",verifiedExperts:!0,audience:{languages:{type:"and",values:[]},specializations:{type:"and",values:[]},countries:{type:"or",values:[]}},pricePerTask:1,timeForTask:1800,perExpertCapEnabled:!1,perExpertCapValue:1},oneOf:[{type:"object",properties:{verifiedExperts:{type:"boolean"},audience:{type:"object",properties:{languages:{type:"object",properties:{type:{type:"string",enum:["or","and"]},values:{type:"array",items:{type:"object",properties:{value:{type:"string"}},required:["value"]}}},required:["type","values"],additionalProperties:!1},specializations:{type:"object",properties:{type:{type:"string",enum:["or","and"]},values:{type:"array",items:{type:"object",properties:{value:{type:"string"},qualificationId:{type:"string"}},required:["value","qualificationId"],additionalProperties:!1}}},required:["type","values"],additionalProperties:!1},countries:{type:"object",properties:{type:{type:"string",enum:["or"]},values:{type:"array",items:{type:"string"}}},required:["type","values"],additionalProperties:!1}},required:["languages","specializations","countries"],additionalProperties:!1},pricePerTask:{type:"number"},timeForTask:{type:"number"},perExpertCapEnabled:{default:!1,type:"boolean"},perExpertCapValue:{default:1,type:"integer",exclusiveMinimum:0,maximum:50},audienceType:{type:"string",const:"human"}},required:["verifiedExperts","audience","pricePerTask","timeForTask","audienceType"],additionalProperties:!1},{type:"object",properties:{audienceType:{type:"string",const:"synthetic"},generationModelId:{default:"gpt-5.6-terra",type:"string",enum:["gpt-5.4","gpt-5.4-mini","claude-sonnet-4-6","gemini-3.1-pro-preview","gemini-3.5-flash","claude-sonnet-5","gpt-5.6-terra","gpt-5.6-luna"]},reasoningEffort:{type:"string",enum:["low","medium","high"]},llmInstruction:{default:"",type:"string"},maxCostPerAttempt:{type:"number"}},required:["audienceType","maxCostPerAttempt"],additionalProperties:!1}]},onboarding:{type:"object",properties:{enabled:{type:"boolean"},steps:{type:"array",items:{type:"object",properties:{id:{type:"string"},blocks:{type:"array",items:{oneOf:[{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"info"},estimatedTime:{type:"string"},role:{type:"string"},goal:{type:"string"},successCriteria:{type:"string"}},required:["id","type","estimatedTime","role","goal","successCriteria"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"text"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}}},required:["id","type"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"quiz"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},questions:{type:"array",items:{type:"object",properties:{id:{type:"string"},type:{type:"string",enum:["single-choice","multiple-choice"]},title:{type:"string"},question:{type:"string"},hint:{type:"string"},correctAnswerFeedback:{type:"string"},incorrectAnswerFeedback:{type:"string"},options:{type:"array",items:{type:"object",properties:{value:{type:"string"},label:{type:"string"}},required:["value","label"]}},correctAnswer:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["id","type","question","options","correctAnswer"]}}},required:["id","type","questions"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"practice"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},imageUrl:{type:"string"},editorType:{type:"string"},editorConfig:{type:"object",properties:{rows:{type:"number"},language:{type:"string"},placeholder:{type:"string"}}},validators:{type:"array",items:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string"},criteria:{type:"string"}},required:["id","name","description","criteria"]}}},required:["id","type"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"examples"},title:{type:"string"},examples:{maxItems:10,type:"array",items:{type:"object",properties:{id:{type:"string"},input:{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema3"}},checks:{maxItems:10,type:"array",items:{oneOf:[{type:"object",properties:{type:{type:"string",const:"exact"},path:{type:"string"},golden:{$ref:"#/$defs/__schema4"},hint:{type:"string"}},required:["type","path","golden","hint"]},{type:"object",properties:{type:{type:"string",const:"code"},code:{type:"string"},hint:{type:"string"}},required:["type","code","hint"]},{type:"object",properties:{type:{type:"string",const:"llm"},paths:{type:"array",items:{type:"string"}},criteria:{type:"string"},reference:{type:"string"},hint:{type:"string"},imageUrl:{type:"string"}},required:["type","paths","criteria"]}]}},explanation:{type:"string"},sourceItemId:{type:"string"}},required:["id","input","checks"]}}},required:["id","type","examples"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"consent"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},consentLabel:{type:"string"}},required:["id","type","consentLabel"]}]}}},required:["id"]}},info:{type:"object",properties:{estimatedTime:{type:"string"},role:{type:"string"},goal:{type:"string"},successCriteria:{type:"string"}},required:["estimatedTime","role","goal","successCriteria"]}},required:["enabled","steps","info"]},exam:{default:{enabled:!1,gradedEntities:[],tasksPerExpert:1,passThreshold:1},type:"object",properties:{enabled:{type:"boolean"},gradedEntities:{type:"array",items:{type:"object",properties:{targetEntity:{type:"string"},mode:{type:"string",enum:["ground_truth","quality_criteria","not_graded"]},groundTruthType:{type:"string",enum:["direct","custom"]},customInstruction:{type:"string"},disabledCriterionIds:{type:"array",items:{type:"string",format:"uuid",pattern:"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},required:["targetEntity","mode","groundTruthType","customInstruction","disabledCriterionIds"],additionalProperties:!1}},goldenDatasetId:{type:"string",pattern:"^ds\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},tasksPerExpert:{type:"integer",minimum:1,maximum:9007199254740991},passThreshold:{type:"integer",minimum:0,maximum:9007199254740991}},required:["enabled","gradedEntities","tasksPerExpert","passThreshold"],additionalProperties:!1},reuseAudienceWithNodeId:{default:null,anyOf:[{type:"object",properties:{pipelineId:{type:"string",pattern:"^pl\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},nodeId:{type:"string"}},required:["pipelineId","nodeId"],additionalProperties:!1},{type:"null"}]},smartSearch:{default:null,anyOf:[{type:"object",properties:{briefDescription:{type:"string"},projectDescription:{anyOf:[{type:"string"},{type:"null"}]},extraHardRequirements:{type:"array",items:{type:"string"}},relevanceCriteria:{type:"array",items:{type:"string"}},typicalJobTitles:{type:"array",items:{type:"string"}},idealCandidateProfile:{type:"string"},whoIsNotAFit:{type:"array",items:{type:"string"}},sourceFingerprint:{type:"string"}},required:["briefDescription","projectDescription","extraHardRequirements","relevanceCriteria","typicalJobTitles","idealCandidateProfile","whoIsNotAFit"],additionalProperties:!1},{type:"null"}]},checks:{type:"object",propertyNames:{type:"string",enum:["ui","llmqa","qc_lint","ui_types_lint","exam_dataset","synthgen"]},additionalProperties:{type:"array",items:{type:"object",properties:{id:{type:"string"},name:{type:"string"},input:{type:"string"}},required:["id","name","input"]}},required:["ui","llmqa","qc_lint","ui_types_lint","exam_dataset","synthgen"]}},required:["about","publicName","entities","qualityCriteria","instruction","ui","onboarding"],additionalProperties:!1}},required:["id","type","settings"],additionalProperties:!1},{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},type:{type:"string",const:"match"},settings:{type:"object",properties:{about:{type:"object",properties:{name:{type:"string"},description:{type:"string"},projectType:{type:"string",enum:["general","data_collection"]}},required:["name"],additionalProperties:!1},conditions:{type:"array",items:{type:"object",properties:{name:{type:"string"},logic:{default:"and",type:"string",enum:["and","or"]},predicates:{type:"array",items:{type:"object",properties:{fieldProxyId:{type:"string"},jsonPath:{type:"string"},operator:{type:"string",enum:["text_eq","text_neq"]},value:{anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"}]}},required:["fieldProxyId","jsonPath","operator","value"],additionalProperties:!1}}},required:["name","predicates"],additionalProperties:!1}},fieldProxies:{type:"object",properties:{input:{type:"array",items:{type:"object",properties:{id:{type:"string"},optional:{type:"boolean"}},required:["id","optional"],additionalProperties:!1}}},required:["input"]}},required:["about","conditions","fieldProxies"],additionalProperties:!1}},required:["id","type","settings"],additionalProperties:!1},{type:"object",properties:{id:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},type:{type:"string",const:"quorum"},settings:{type:"object",properties:{about:{type:"object",properties:{name:{type:"string"},description:{type:"string"},projectType:{type:"string",enum:["general","data_collection"]}},required:["name"],additionalProperties:!1},publicName:{type:"string"},audienceAndPricing:{default:{audienceType:"human",verifiedExperts:!0,audience:{languages:{type:"and",values:[]},specializations:{type:"and",values:[]},countries:{type:"or",values:[]}},pricePerTask:1,timeForTask:1800,perExpertCapEnabled:!1,perExpertCapValue:1},type:"object",properties:{verifiedExperts:{type:"boolean"},audience:{type:"object",properties:{languages:{type:"object",properties:{type:{type:"string",enum:["or","and"]},values:{type:"array",items:{type:"object",properties:{value:{type:"string"}},required:["value"]}}},required:["type","values"],additionalProperties:!1},specializations:{type:"object",properties:{type:{type:"string",enum:["or","and"]},values:{type:"array",items:{type:"object",properties:{value:{type:"string"},qualificationId:{type:"string"}},required:["value","qualificationId"],additionalProperties:!1}}},required:["type","values"],additionalProperties:!1},countries:{type:"object",properties:{type:{type:"string",enum:["or"]},values:{type:"array",items:{type:"string"}}},required:["type","values"],additionalProperties:!1}},required:["languages","specializations","countries"],additionalProperties:!1},pricePerTask:{type:"number"},timeForTask:{type:"number"},perExpertCapEnabled:{default:!1,type:"boolean"},perExpertCapValue:{default:1,type:"integer",exclusiveMinimum:0,maximum:50},audienceType:{type:"string",const:"human"}},required:["verifiedExperts","audience","pricePerTask","timeForTask","audienceType"],additionalProperties:!1},entities:{type:"object",properties:{input:{type:"array",items:{oneOf:[{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!1},maxEntities:{type:"null"}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1},{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!0},maxEntities:{anyOf:[{type:"number"},{type:"null"}]}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1}]}},output:{type:"array",items:{oneOf:[{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!1},maxEntities:{type:"null"}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1},{type:"object",properties:{fieldProxyId:{type:"string"},entityType:{type:"string"},optional:{type:"boolean"},jsonPath:{type:"string"},description:{type:"string"},relations:{type:"array",items:{anyOf:[{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",enum:["context","references","depends_on","evaluates"]}},required:["id","rel_type"]},{type:"object",properties:{id:{type:"string"},rel_type:{type:"string",const:"conditional"},condition:{type:"object",properties:{operator:{type:"string",enum:["EQ","NEQ","IN","NOT_IN","NOT_EMPTY"]},value:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["operator","value"]}},required:["id","rel_type","condition"]}]}},minDurationSeconds:{type:"number",exclusiveMinimum:0},maxDurationSeconds:{type:"number",exclusiveMinimum:0},allowedLabels:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{type:"string"}},required:["label","value"],additionalProperties:!1}},dynamic:{type:"boolean",const:!0},maxEntities:{anyOf:[{type:"number"},{type:"null"}]}},required:["fieldProxyId","entityType","optional","jsonPath","description","dynamic"],additionalProperties:!1}]}}},required:["input","output"],additionalProperties:!1},qualityCriteria:{type:"array",items:{type:"object",properties:{id:{type:"string",format:"uuid",pattern:"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},qualityElement:{type:"string"},thresholds:{type:"object",properties:{pass:{type:"string"},fail:{type:"string"}},required:["pass","fail"]},targetEntity:{type:"string"},llmQaInstruction:{type:"string",maxLength:5000}},required:["id","qualityElement","thresholds","targetEntity"]}},offboardingRules:{default:[],type:"array",items:{type:"object",properties:{id:{type:"string",format:"uuid",pattern:"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},type:{type:"string",enum:["mv_agreement"]},agreementScale:{type:"string"}},required:["id"],additionalProperties:!1}},instruction:{type:"string"},ui:{type:"object",properties:{code:{type:"string"},data:{type:"string"},preprocess:{type:"string"},postprocess:{default:"return {};",type:"string"},constants:{type:"string"}},required:["code","data","preprocess","constants"]},qualityAssurance:{default:{qaMode:"llm_only",llmQaModelId:"gpt-5.4"},oneOf:[{type:"object",properties:{qaMode:{type:"string",const:"llm_only"},llmQaModelId:{default:"gpt-5.4",type:"string",enum:["gpt-5.4","gpt-5.4-mini","gpt-5","gpt-5-mini","claude-sonnet-4-6"]}},required:["qaMode"]},{type:"object",properties:{qaMode:{type:"string",const:"none"}},required:["qaMode"]}]},overlap:{type:"integer",minimum:1,maximum:100},onboarding:{type:"object",properties:{enabled:{type:"boolean"},steps:{type:"array",items:{type:"object",properties:{id:{type:"string"},blocks:{type:"array",items:{oneOf:[{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"info"},estimatedTime:{type:"string"},role:{type:"string"},goal:{type:"string"},successCriteria:{type:"string"}},required:["id","type","estimatedTime","role","goal","successCriteria"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"text"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}}},required:["id","type"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"quiz"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},questions:{type:"array",items:{type:"object",properties:{id:{type:"string"},type:{type:"string",enum:["single-choice","multiple-choice"]},title:{type:"string"},question:{type:"string"},hint:{type:"string"},correctAnswerFeedback:{type:"string"},incorrectAnswerFeedback:{type:"string"},options:{type:"array",items:{type:"object",properties:{value:{type:"string"},label:{type:"string"}},required:["value","label"]}},correctAnswer:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},required:["id","type","question","options","correctAnswer"]}}},required:["id","type","questions"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"practice"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},imageUrl:{type:"string"},editorType:{type:"string"},editorConfig:{type:"object",properties:{rows:{type:"number"},language:{type:"string"},placeholder:{type:"string"}}},validators:{type:"array",items:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string"},criteria:{type:"string"}},required:["id","name","description","criteria"]}}},required:["id","type"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"examples"},title:{type:"string"},examples:{maxItems:10,type:"array",items:{type:"object",properties:{id:{type:"string"},input:{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema3"}},checks:{maxItems:10,type:"array",items:{oneOf:[{type:"object",properties:{type:{type:"string",const:"exact"},path:{type:"string"},golden:{$ref:"#/$defs/__schema4"},hint:{type:"string"}},required:["type","path","golden","hint"]},{type:"object",properties:{type:{type:"string",const:"code"},code:{type:"string"},hint:{type:"string"}},required:["type","code","hint"]},{type:"object",properties:{type:{type:"string",const:"llm"},paths:{type:"array",items:{type:"string"}},criteria:{type:"string"},reference:{type:"string"},hint:{type:"string"},imageUrl:{type:"string"}},required:["type","paths","criteria"]}]}},explanation:{type:"string"},sourceItemId:{type:"string"}},required:["id","input","checks"]}}},required:["id","type","examples"]},{type:"object",properties:{id:{type:"string"},type:{type:"string",const:"consent"},title:{type:"string"},content:{type:"array",items:{type:"object",properties:{type:{type:"string",const:"markdown"},value:{type:"string"}},required:["type","value"]}},consentLabel:{type:"string"}},required:["id","type","consentLabel"]}]}}},required:["id"]}},info:{type:"object",properties:{estimatedTime:{type:"string"},role:{type:"string"},goal:{type:"string"},successCriteria:{type:"string"}},required:["estimatedTime","role","goal","successCriteria"]}},required:["enabled","steps","info"]},exam:{default:{enabled:!1,gradedEntities:[],tasksPerExpert:1,passThreshold:1},type:"object",properties:{enabled:{type:"boolean"},gradedEntities:{type:"array",items:{type:"object",properties:{targetEntity:{type:"string"},mode:{type:"string",enum:["ground_truth","quality_criteria","not_graded"]},groundTruthType:{type:"string",enum:["direct","custom"]},customInstruction:{type:"string"},disabledCriterionIds:{type:"array",items:{type:"string",format:"uuid",pattern:"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},required:["targetEntity","mode","groundTruthType","customInstruction","disabledCriterionIds"],additionalProperties:!1}},goldenDatasetId:{type:"string",pattern:"^ds\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},tasksPerExpert:{type:"integer",minimum:1,maximum:9007199254740991},passThreshold:{type:"integer",minimum:0,maximum:9007199254740991}},required:["enabled","gradedEntities","tasksPerExpert","passThreshold"],additionalProperties:!1},reuseAudienceWithNodeId:{default:null,anyOf:[{type:"object",properties:{pipelineId:{type:"string",pattern:"^pl\\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},nodeId:{type:"string"}},required:["pipelineId","nodeId"],additionalProperties:!1},{type:"null"}]},smartSearch:{default:null,anyOf:[{type:"object",properties:{briefDescription:{type:"string"},projectDescription:{anyOf:[{type:"string"},{type:"null"}]},extraHardRequirements:{type:"array",items:{type:"string"}},relevanceCriteria:{type:"array",items:{type:"string"}},typicalJobTitles:{type:"array",items:{type:"string"}},idealCandidateProfile:{type:"string"},whoIsNotAFit:{type:"array",items:{type:"string"}},sourceFingerprint:{type:"string"}},required:["briefDescription","projectDescription","extraHardRequirements","relevanceCriteria","typicalJobTitles","idealCandidateProfile","whoIsNotAFit"],additionalProperties:!1},{type:"null"}]},checks:{type:"object",propertyNames:{type:"string",enum:["ui","llmqa","qc_lint","ui_types_lint","exam_dataset"]},additionalProperties:{type:"array",items:{type:"object",properties:{id:{type:"string"},name:{type:"string"},input:{type:"string"}},required:["id","name","input"]}},required:["ui","llmqa","qc_lint","ui_types_lint","exam_dataset"]}},required:["about","publicName","entities","qualityCriteria","instruction","ui","overlap","onboarding"],additionalProperties:!1}},required:["id","type","settings"],additionalProperties:!1}]}},connections:{maxItems:2000,type:"array",items:{type:"object",properties:{from:{type:"object",properties:{node:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},handle:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"}},required:["node","handle"],additionalProperties:!1},to:{type:"object",properties:{node:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},handle:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"}},required:["node","handle"],additionalProperties:!1},settings:{type:"object",properties:{},additionalProperties:{}}},required:["from","to","settings"],additionalProperties:!1}},layout:{type:"object",propertyNames:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},additionalProperties:{type:"object",propertyNames:{type:"string",pattern:"^(?!(?:__proto__|constructor|prototype)$).+$"},additionalProperties:{type:"array",prefixItems:[{type:"number",description:"X"},{type:"number",description:"Y"}]},maxProperties:2},maxProperties:500}},required:["version","fields","nodes","connections"],additionalProperties:!1,$defs:{__schema0:{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema1"}},__schema1:{type:"object",properties:{type:{anyOf:[{type:"string",enum:["string","number","integer","boolean","object","array","null"]},{minItems:1,type:"array",items:{type:"string",enum:["string","number","integer","boolean","object","array","null"]}}]},properties:{$ref:"#/$defs/__schema0"},required:{type:"array",items:{type:"string"}},additionalProperties:{anyOf:[{type:"boolean"},{$ref:"#/$defs/__schema1"}]},items:{$ref:"#/$defs/__schema1"},minItems:{type:"integer",minimum:0,maximum:9007199254740991},maxItems:{type:"integer",minimum:0,maximum:9007199254740991},uniqueItems:{type:"boolean"},enum:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema2"}},const:{$ref:"#/$defs/__schema2"},minimum:{type:"number"},maximum:{type:"number"},exclusiveMinimum:{type:"number"},exclusiveMaximum:{type:"number"},minLength:{type:"integer",minimum:0,maximum:9007199254740991},maxLength:{type:"integer",minimum:0,maximum:9007199254740991},pattern:{type:"string"},format:{type:"string"},title:{type:"string"},description:{type:"string"},default:{$ref:"#/$defs/__schema2"},examples:{type:"array",items:{$ref:"#/$defs/__schema2"}},anyOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}},oneOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}},allOf:{minItems:1,type:"array",items:{$ref:"#/$defs/__schema1"}}},additionalProperties:!1},__schema2:{anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"},{type:"array",items:{$ref:"#/$defs/__schema2"}},{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema2"}}]},__schema3:{anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"},{type:"array",items:{$ref:"#/$defs/__schema3"}},{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema3"}}]},__schema4:{anyOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"null"},{type:"array",items:{$ref:"#/$defs/__schema4"}},{type:"object",propertyNames:{type:"string"},additionalProperties:{$ref:"#/$defs/__schema4"}}]}}};var Nm=new Pm.default({strict:!1});Ym.default(Nm);var km=Nm.compile(vm),Fv=(e)=>{let t=e.keyword==="required"?e.params.missingProperty:e.keyword==="additionalProperties"?e.params.additionalProperty:void 0;return{path:typeof t==="string"?`${e.instancePath}/${t.replaceAll("~","~0").replaceAll("/","~1")}`:e.instancePath||"/",reason:e.message??`failed ${e.keyword} validation`}};function rl(e){if(km(e))return;let t=km.errors;b(t,"Pipeline graph validation failed without errors");let i=new Set,n=[];for(let o of t){let s=Fv(o),r=`${s.path}
115
+ ${s.reason}`;if(i.has(r))continue;i.add(r),n.push(s)}throw bi.fromIssues(n)}var Hv=Symbol("fieldDefinition"),vv=Symbol.for("@toloka-platform/sdk/pipeline-definition"),Sm=Symbol("portDefinition"),kv=Symbol("nodeFieldReferences");function xm(e,t){return{node:e,handle:t,direction:"input",[Sm]:"input"}}function Jm(e,t){return{node:e,handle:t,direction:"output",[Sm]:"output"}}function Em(e){return typeof e==="object"&&e!==null&&Hv in e}function gl(e,t){if(Em(e)){t.push(e);return}if(Array.isArray(e)){for(let i of e)gl(i,t);return}if(typeof e==="object"&&e!==null)for(let i of Object.values(e))gl(i,t)}function Pv(e){let t=[];return gl(e,t),t}function Xm(e){return Em(e)?{id:e.id,optional:!1}:{id:e.field.id,optional:e.optional??!1}}function Yv(e,t={}){let i=t.id??"root",{started:n,completed:o,...s}=e;return{id:i,type:"root",settings:{...s,startedFieldProxies:{output:n.map(Xm)},completedFieldProxies:{input:o.map(Xm)}},started:Jm(i,"started"),completed:xm(i,"completed"),[kv]:Pv(e)}}var F2=Object.assign(Yv,{started:Jm("root","started"),completed:xm("root","completed")});function Nv(e){return typeof e==="object"&&e!==null&&vv in e}function hs(e){b(Nv(e),"Invalid pipeline definition: expected a value returned by definePipeline"),b(e.dataset.length>0,"Dataset name must not be empty");for(let t of e.graph.nodes){if(t.type!=="root")continue;b(!("datasetId"in t.settings),"An unresolved pipeline definition cannot contain a dataset id"),b(!("itemFilter"in t.settings),"An unresolved pipeline definition cannot contain a dataset item filter")}rl(e.graph)}function Ln(e,t){let i={version:e.graph.version,fields:e.graph.fields.map((n)=>({...n})),nodes:e.graph.nodes.map((n)=>n.type==="root"?{...n,settings:{...n.settings,datasetId:t.datasetId}}:n),connections:e.graph.connections.map((n)=>({from:{...n.from},to:{...n.to},settings:{...n.settings}}))};return rl(i),i}var Om=async(e)=>{let t;try{t=await Mn.readdir(e,{withFileTypes:!0})}catch(n){if(n instanceof Error&&Reflect.get(n,"code")==="ENOENT")return[];throw n}let i=[];for(let n of t.toSorted((o,s)=>o.name.localeCompare(s.name))){let o=me.join(e,n.name);if(n.isDirectory())i.push(...await Om(o));else if(n.isFile()&&n.name==="pipeline.ts")i.push(o)}return i},Xv="toloka.json",Sv=async(e)=>{try{return(await Mn.stat(me.join(e,Xv))).isFile()}catch{return!1}};async function Tm(e){let t=me.resolve(e);for(;;){if(await Sv(t))return t;let i=me.dirname(t);if(i===t)return;t=i}}async function Ui(e){let t=await Om(me.join(e,"pipelines"));return{pipelines:(await Promise.all(t.map(async(n)=>{let o=await Mn.stat(n),s=Um.pathToFileURL(n);s.searchParams.set("version",`${o.mtimeMs}-${o.size}`);let r=await import(s.href);b(typeof r==="object"&&r!==null,`Invalid ${n}: expected a module`);let g=Reflect.get(r,"default");hs(g);let a=me.relative(e,me.dirname(n)).split(me.sep).join("/");return{sourceDirectory:a,name:me.basename(a),definition:g}}))).toSorted((n,o)=>n.sourceDirectory.localeCompare(o.sourceDirectory))}}var zm=5000,xv=65536,qt="TOLOKA_INTERNAL_CHECK_RESULT_FILE",Jv=(e)=>e.message.length<=zm?e:{...e,message:`${e.message.slice(0,zm)}
116
+ \u2026output truncated`},al=20,jm=async(e)=>{let t=[],i=0,n=!1;for await(let s of e){let r=Buffer.isBuffer(s)?s:Buffer.from(s),g=xv-i;if(g>0){let a=r.subarray(0,g);t.push(a),i+=a.length}if(r.length>g)n=!0}let o=Buffer.concat(t).toString("utf8");return n?`${o}
117
+ \u2026output truncated`:o},dl=async(e,t,i,n=process.env,o,s=process.execPath)=>{o?.throwIfAborted();let r=Mm.spawn(s,[t,...i],{cwd:e,env:n,stdio:["ignore","pipe","pipe"]}),g=()=>r.kill("SIGTERM");if(o?.addEventListener("abort",g,{once:!0}),o?.aborted===!0)g();try{let[a,l,I]=await Promise.all([qm.once(r,"close"),jm(r.stdout),jm(r.stderr)]),d=a[0];return typeof d==="number"?{exitCode:d,stdout:l,stderr:I}:{exitCode:2,stdout:l,stderr:[I,`Process terminated by ${String(a[1])}`].filter(Boolean).join(`
118
+ `),infrastructureError:!0}}finally{o?.removeEventListener("abort",g)}},ep=(e,t,i)=>{let n=$m.createRequire(Xt.join(e,"package.json"));return Xt.join(Xt.dirname(n.resolve(`${t}/package.json`)),i)},Ev=async(e,t,i)=>{try{return await dl(e,ep(e,"typescript","bin/tsc"),["--noEmit"],t,i)}catch(n){return{exitCode:2,stdout:"",stderr:`Unable to run project TypeScript: ${n instanceof Error?n.message:String(n)}. Install it with \`bun add --dev typescript\`.`,infrastructureError:!0}}},Uv=(e)=>{if(e.exitCode===0)return e;let t=`${e.stderr}
119
+ ${e.stdout}`;return/Local Task UI testing requires Playwright and Chromium|Unable to load the Task UI launcher|Cannot find (?:package|module).*playwright/iu.test(t)?{...e,infrastructureError:!0}:e},Ov=async({sourceRoot:e,environment:t,signal:i})=>{try{let n=t[Qa],o=t[Ka]==="1"&&n!==void 0?gm(n,t[_a]):void 0;return Uv(await dl(e,ep(e,"vitest","vitest.mjs"),["run",...o===void 0?[]:["--testNamePattern",o]],t,i))}catch(n){return{exitCode:2,stdout:"",stderr:`Unable to run project Vitest: ${n instanceof Error?n.message:String(n)}. Install it with \`bun add --dev vitest playwright\`.`,infrastructureError:!0}}},Tv=za(),zv=async(e,t)=>{let i=new Map([[process.env,process.env.POTATO_API_KEY],[t,t.POTATO_API_KEY]]);for(let n of i.keys())delete n.POTATO_API_KEY;try{return await Ui(e)}finally{for(let[n,o]of i)if(o===void 0)delete n.POTATO_API_KEY;else n.POTATO_API_KEY=o}},ll={loadSource:zv,runTypeScript:Ev,runVitest:Ov,typecheckUi:(e)=>Tv.performTypeCheck(e)},jv=(e)=>{if(typeof e!=="object"||e===null)return;let t=Reflect.get(e,"code"),i=Reflect.get(e,"data"),n=Reflect.get(e,"constants"),o=Reflect.get(e,"preprocess"),s=Reflect.get(e,"postprocess");if(typeof t!=="string"||typeof i!=="string"||typeof n!=="string"||typeof o!=="string"||s!==void 0&&typeof s!=="string")return;return{code:t,data:i,constants:n,preprocess:o,postprocess:s??"return {};"}},Dv=(e)=>{let t=Reflect.get(e.settings,"about"),i=typeof t==="object"&&t!==null?Reflect.get(t,"name"):void 0;return typeof i==="string"&&i.length>0?i:e.id},Qv=(e)=>e.pipelines.map((t)=>({sourceDirectory:t.sourceDirectory,name:t.name,pipelineFingerprint:La(t.definition),nodes:t.definition.graph.nodes.filter((i)=>i.type==="code"||i.type==="generation"||i.type==="quorum").map((i)=>({id:i.id,name:Dv(i),kind:i.type==="code"?"code":"ui"})).toSorted((i,n)=>i.id.localeCompare(n.id))})),_v=(e,t,i)=>{let n=t===void 0?[...e]:e.filter((s)=>s.sourceDirectory===t||s.name===t||s.sourceDirectory.split("/").at(-1)===t);if(t!==void 0)b(n.length>0,`Unknown pipeline ${JSON.stringify(t)}. Available: ${e.map((s)=>s.sourceDirectory).join(", ")}`),b(n.length===1,`Pipeline selector ${JSON.stringify(t)} is ambiguous: ${n.map((s)=>s.sourceDirectory).join(", ")}`);if(i===void 0)return{pipelines:n};let o=n.flatMap((s)=>s.nodes.filter((r)=>r.id===i||r.name===i).map((r)=>({pipeline:s,node:r})));return b(o.length===1,o.length===0?`Unknown checkable node ${JSON.stringify(i)}.`:`Node selector ${JSON.stringify(i)} is ambiguous across pipelines.`),{pipelines:[o[0].pipeline],nodeId:o[0].node.id}},Dm=(e,t={})=>{let i=/^(\d+):(\d+) - \[[^\]]+\](?: (TS\d+))?/u.exec(e);return{message:e,...t,...i===null?{}:{line:Number(i[1]),column:Number(i[2]),...i[3]===void 0?{}:{code:i[3]}}}},fs=(e)=>({diagnostics:e.slice(0,al).map(Jv),...e.length<=al?{}:{truncatedDiagnosticCount:e.length-al}}),Qm=(e,t)=>{let i=t.infrastructureError===!0?"infrastructure_error":t.exitCode===0?"passed":"failed",n=[t.stderr.trim(),t.stdout.trim()].filter(Boolean).join(`
120
+ `);return{scope:"project",kind:e,status:i,...fs(i==="passed"||n.length===0?[]:[{message:n}])}},Kv=async(e,t,i,n)=>{let o=new Set(t.map((r)=>r.sourceDirectory)),s=[];for(let r of e.pipelines){let g=La(r.definition);if(!o.has(r.sourceDirectory))continue;for(let a of r.definition.graph.nodes){if(a.type!=="generation"&&a.type!=="quorum")continue;if(i!==void 0&&a.id!==i)continue;let l=jv(Reflect.get(a.settings,"ui"));if(l===void 0){s.push({scope:"node",kind:"ui-types",status:"failed",sourceDirectory:r.sourceDirectory,pipelineFingerprint:g,nodeId:a.id,diagnostics:[{message:"No labeling interface is configured on this node"}]});continue}let I;try{I=await n(l)}catch(u){s.push({scope:"node",kind:"ui-types",status:"infrastructure_error",sourceDirectory:r.sourceDirectory,pipelineFingerprint:g,nodeId:a.id,diagnostics:[{message:u instanceof Error?u.message:String(u)}]});continue}let d=Object.entries(I).flatMap(([u,c])=>c.map((C)=>Dm(C.text,{severity:C.severity,setting:u})));d.push(...Oa(l).map((u)=>Dm(u.text,{severity:u.severity,setting:"postprocess"}))),s.push({scope:"node",kind:"ui-types",status:d.some((u)=>u.severity==="error")?"failed":"passed",sourceDirectory:r.sourceDirectory,pipelineFingerprint:g,nodeId:a.id,...fs(d)})}}return s},_m=(e)=>{if(e.some((i)=>i.status==="infrastructure_error"))return{status:"infrastructure_error",...fs(e.filter((i)=>i.status==="infrastructure_error").map((i)=>({message:i.diagnostic??`Infrastructure error in ${i.testName}`})))};if(e.some((i)=>i.status==="failed"))return{status:"failed",...fs(e.filter((i)=>i.status==="failed").map((i)=>({message:i.diagnostic??`Failed test ${i.testName}`})))};let t=e.filter((i)=>i.status==="passed");if(t.length===0)return{status:"missing",diagnostics:[]};if(t.every((i)=>i.partial===!0))return{status:"partial",diagnostics:[{message:`Hardware-backed fields not fully covered: ${[...new Set(t.flatMap((i)=>i.untestedHardwareFields??[]))].join(", ")}`}]};return{status:"passed",diagnostics:[]}},Km=(e,t,i,n)=>e.filter((o)=>o.pipelineFingerprint===t.pipelineFingerprint&&o.kind===i&&(n===void 0||o.nodeId===n)),Lv=(e,t,i)=>e.flatMap((n)=>{let o=[];for(let s of n.nodes){if(i!==void 0&&s.id!==i)continue;let r=s.kind==="code"?"code-test":"ui-test",g=s.kind==="code"?"code":"ui";o.push({scope:"node",kind:r,sourceDirectory:n.sourceDirectory,pipelineFingerprint:n.pipelineFingerprint,nodeId:s.id,..._m(Km(t,n,g,s.id))})}if(i===void 0)o.push({scope:"pipeline",kind:"pipeline-flow",sourceDirectory:n.sourceDirectory,pipelineFingerprint:n.pipelineFingerprint,..._m(Km(t,n,"pipeline"))});return o}),Mv={passed:"PASS",failed:"FAIL",missing:"MISSING",partial:"PARTIAL",infrastructure_error:"ERROR"},$v=(e)=>[e.sourceDirectory,e.nodeId,e.kind].filter(Boolean).join("/"),qv=(e)=>{let t={project:0,pipeline:1,node:2};return[...e].toSorted((i,n)=>t[i.scope]-t[n.scope]||(i.sourceDirectory??"").localeCompare(n.sourceDirectory??"")||(i.nodeId??"").localeCompare(n.nodeId??"")||i.kind.localeCompare(n.kind))},e5=(e)=>e.message.split(`
121
+ `).map((t)=>` ${t}`),$n=(e)=>e.flatMap((t)=>[`${Mv[t.status]} ${$v(t)}`,...t.diagnostics.flatMap(e5),...t.truncatedDiagnosticCount===void 0?[]:[` ${t.truncatedDiagnosticCount} more diagnostics not shown`]]).join(`
122
+ `),t5=(e)=>{if(e.some((t)=>t.status==="infrastructure_error"))return 2;if(e.some((t)=>t.status==="failed"||t.status==="missing"||t.status==="partial"))return 1;return 0};async function cl(e,t=ll){let i;try{e.signal?.throwIfAborted(),i=await t.loadSource(e.sourceRoot,e.environment??process.env),e.signal?.throwIfAborted()}catch(s){let r=[{scope:"project",kind:"source",status:"failed",diagnostics:[{message:s instanceof Error?s.message:String(s)}]}];return{exitCode:1,results:r,output:e.json===!0?JSON.stringify({exitCode:1,results:r}):$n(r)}}if(i.pipelines.length===0){let s=[{scope:"project",kind:"source",status:"failed",diagnostics:[{message:`No pipeline source found under ${e.sourceRoot}/pipelines`}]}];return{exitCode:1,results:s,output:e.json===!0?JSON.stringify({exitCode:1,results:s}):$n(s)}}let n=_v(Qv(i),e.pipeline,e.node),o=await St.mkdtemp(Xt.join(Il.tmpdir(),"toloka-check-"));try{let s=n.pipelines.length===1?n.pipelines[0]:void 0,r={...e.environment??process.env};delete r.POTATO_API_KEY;let g={...r,[rm]:o,...s===void 0?{}:{[Qa]:s.pipelineFingerprint},...n.nodeId===void 0?{}:{[_a]:n.nodeId},...e.pipeline===void 0&&e.node===void 0?{}:{[Ka]:"1"}},[a,l,I]=await Promise.all([t.runTypeScript(e.sourceRoot,r,e.signal),Kv(i,n.pipelines,n.nodeId,t.typecheckUi),t.runVitest({sourceRoot:e.sourceRoot,evidenceDirectory:o,environment:g,inventory:n.pipelines,signal:e.signal})]),d=await am(o),u=qv([{scope:"project",kind:"source",status:"passed",diagnostics:[]},Qm("project-types",a),...l,Qm("test-runner",I),...Lv(n.pipelines,d,n.nodeId)]),c=t5(u);return{exitCode:c,results:u,source:i,output:e.json===!0?JSON.stringify({exitCode:c,results:u}):$n(u)}}catch(s){let r=[{scope:"project",kind:"test-runner",status:"infrastructure_error",diagnostics:[{message:s instanceof Error?s.message:String(s)}]}];return{exitCode:2,results:r,source:i,output:e.json===!0?JSON.stringify({exitCode:2,results:r}):$n(r)}}finally{await St.rm(o,{recursive:!0,force:!0})}}var i5=(e)=>{if(e===null)return!0;let t=e.toString();if(t.includes("node_modules/")||t.includes(".git/")||t.includes("test-results/")||t.includes("coverage/")||t.includes("dist/")||t.includes(".cache/")||t.includes(".toloka-check-project-")||t.includes(".toloka-project-")||t.includes(".pipeline-source-"))return!1;return/(?:^|\/)(?:package\.json|tsconfig[^/]*\.json)$/u.test(t)||/\.(?:ts|tsx|mts|cts|js|jsx|mjs|cjs|json|jsonl|csv)$/u.test(t)},n5=(e)=>e==="project"||e==="pipeline"||e==="node",o5=(e)=>e==="source"||e==="project-types"||e==="ui-types"||e==="code-test"||e==="ui-test"||e==="pipeline-flow"||e==="test-runner",s5=(e)=>e==="passed"||e==="failed"||e==="missing"||e==="partial"||e==="infrastructure_error",r5=(e)=>{b(typeof e==="object"&&e!==null,"Fresh check returned invalid diagnostics");let t=Reflect.get(e,"message"),i=Reflect.get(e,"severity"),n=Reflect.get(e,"setting"),o=Reflect.get(e,"line"),s=Reflect.get(e,"column"),r=Reflect.get(e,"code");return b(typeof t==="string","Fresh check diagnostic has no message"),b(i===void 0||i==="error"||i==="warning","Fresh check diagnostic has invalid severity"),b(n===void 0||typeof n==="string","Fresh check diagnostic has invalid setting"),b(o===void 0||Number.isInteger(o),"Fresh check diagnostic has invalid line"),b(s===void 0||Number.isInteger(s),"Fresh check diagnostic has invalid column"),b(r===void 0||typeof r==="string","Fresh check diagnostic has invalid code"),{message:t,...i===void 0?{}:{severity:i},...n===void 0?{}:{setting:n},...o===void 0?{}:{line:Number(o)},...s===void 0?{}:{column:Number(s)},...r===void 0?{}:{code:r}}},g5=(e)=>{b(typeof e==="object"&&e!==null,"Fresh check returned an invalid result");let t=Reflect.get(e,"scope"),i=Reflect.get(e,"kind"),n=Reflect.get(e,"status"),o=Reflect.get(e,"diagnostics"),s=Reflect.get(e,"sourceDirectory"),r=Reflect.get(e,"pipelineFingerprint"),g=Reflect.get(e,"nodeId"),a=Reflect.get(e,"truncatedDiagnosticCount");return b(n5(t),"Fresh check returned an invalid scope"),b(o5(i),"Fresh check returned an invalid kind"),b(s5(n),"Fresh check returned an invalid status"),b(Array.isArray(o),"Fresh check returned invalid diagnostics"),b(s===void 0||typeof s==="string","Fresh check returned an invalid source directory"),b(r===void 0||typeof r==="string","Fresh check returned an invalid pipeline fingerprint"),b(g===void 0||typeof g==="string","Fresh check returned an invalid node id"),b(a===void 0||Number.isInteger(a)&&Number(a)>=0,"Fresh check returned an invalid truncated count"),{scope:t,kind:i,status:n,diagnostics:o.map(r5),...s===void 0?{}:{sourceDirectory:s},...r===void 0?{}:{pipelineFingerprint:r},...g===void 0?{}:{nodeId:g},...a===void 0?{}:{truncatedDiagnosticCount:Number(a)}}},a5=(e,t)=>{b(typeof e==="object"&&e!==null,"Fresh check returned invalid JSON");let i=Reflect.get(e,"exitCode"),n=Reflect.get(e,"results");b(i===0||i===1||i===2,"Fresh check returned an invalid exit code"),b(Array.isArray(n),"Fresh check returned no results");let o=n.map(g5);return{exitCode:i,results:o,output:t?JSON.stringify({exitCode:i,results:o}):$n(o)}},Cl=async(e)=>{let t=cm(),i=await St.mkdtemp(Xt.join(Il.tmpdir(),"toloka-check-watch-result-")),n=Xt.join(i,"result.json"),o;try{return o=await dl(e.sourceRoot,t,["--source-root",e.sourceRoot,"check",...e.pipeline===void 0?[]:[e.pipeline],...e.node===void 0?[]:["--node",e.node],"--json"],{...process.env.PATH===void 0?{}:{PATH:process.env.PATH},...e.environment??process.env,[qt]:n},e.signal,"bun"),a5(JSON.parse(await St.readFile(n,"utf8")),e.json===!0)}catch(s){let r=[o?.stderr,o?.stdout,s instanceof Error?s.message:String(s)].filter(Boolean).join(`
123
+ `);throw Error(`Fresh check process returned unreadable output: ${r}`,{cause:s})}finally{await St.rm(i,{recursive:!0,force:!0})}};async function tp(e,t,i=ll,n){let{promise:o,resolve:s,reject:r}=Promise.withResolvers(),g=!1,a=!1,l=!1,I,d=()=>{if(l=!0,a=!1,clearTimeout(I),C.close(),!g)s()},u=(A)=>{clearTimeout(I),C.close(),r(A)},c=async()=>{if(g){a=!0;return}g=!0;try{do{a=!1;let A=i===ll?await Cl({...e,signal:n}):await cl({...e,signal:n},i);if(!l)await t(A)}while(a&&n?.aborted!==!0)}catch(A){if(!l)u(A)}finally{if(g=!1,l)s()}},C=Lm.watch(e.sourceRoot,{recursive:!0},(A,m)=>{if(!i5(m))return;if(a=!0,g)return;clearTimeout(I),I=setTimeout(()=>void c(),100)});if(C.once("error",u),n?.aborted===!0)d();else n?.addEventListener("abort",d,{once:!0}),c();try{await o}finally{n?.removeEventListener("abort",d)}}var pe=require("fs/promises"),op=require("os"),ei=require("path");class qn extends Error{constructor(e,t){super(e,t);this.name="CredentialsError"}}var sp=(e)=>e.HOME??op.homedir(),l5=(e)=>e.XDG_CONFIG_HOME??ei.join(sp(e),".config"),Xe=(e=process.env)=>e.TOLOKA_CREDENTIALS_FILE??ei.join(l5(e),"toloka","credentials.json"),rp=(e=process.env)=>ei.join(sp(e),".toloka","credentials.json"),Bs=(e=process.env)=>ei.dirname(Xe(e)),ip=(e)=>{let t=e.length;while(t>0&&e.charCodeAt(t-1)===47)t-=1;return t===e.length?e:e.slice(0,t)},bt=(e)=>{let t=ip(e.trim());try{let i=new URL(t);return i.hash="",i.search="",ip(i.toString())}catch{return t}},ys=(e,t)=>typeof e==="object"&&e!==null?Reflect.get(e,t):void 0,I5=(e)=>{if(typeof e!=="object"||e===null)return;let t=Reflect.get(e,"id");if(typeof t!=="string"||t.length===0)return;let i=Reflect.get(e,"name");if(i!==void 0&&typeof i!=="string")return;return i===void 0?{id:t}:{id:t,name:i}},d5=(e)=>{if(e===void 0||typeof e!=="object"||e===null||Array.isArray(e))return;let t=Object.create(null);for(let[i,n]of Object.entries(e)){if(i.length===0)return;let o=I5(n);if(o===void 0)return;Object.defineProperty(t,i,{value:o,writable:!0,enumerable:!0,configurable:!0})}return t},c5=(e,t)=>{let i=d5(e);if(i===void 0)return;if(typeof t==="string"){if(t.length===0||!Object.hasOwn(i,t))return;return{current:t,projects:i}}if(t!==void 0)return;return Object.keys(i).length===0?{}:{projects:i}},C5=(e)=>{let t=ys(e,"baseUrl"),i=ys(e,"apiKey");if(typeof t!=="string"||t.length===0)return;if(typeof i!=="string"||i.length===0)return;let n=ys(e,"current"),o=ys(e,"projects");if(n===void 0&&o===void 0)return{baseUrl:t,apiKey:i};let s=c5(o,n);if(s===void 0)return;return{baseUrl:t,apiKey:i,...s}};async function Vs(e){let t;try{t=await pe.readFile(e,"utf8")}catch(i){if(i instanceof Error&&"code"in i&&i.code==="ENOENT")return"missing";return"invalid"}try{let i=C5(JSON.parse(t));return i===void 0?"invalid":{credentials:i}}catch{return"invalid"}}async function ul(e=process.env){let t=Xe(e),i=await Vs(t);if(i!=="missing"){if(i==="invalid")throw new qn(`Invalid credentials file at ${t}. Run toloka logout, then toloka login.`);return{credentials:i.credentials,path:t,legacy:!1}}if(e.TOLOKA_CREDENTIALS_FILE!==void 0)return;let n=rp(e),o=await Vs(n);if(o==="missing")return;if(o==="invalid")throw new qn(`Invalid credentials file at ${n}. Run toloka logout, then toloka login.`);return{credentials:o.credentials,path:n,legacy:!0}}async function eo(e,t){try{return{found:await ul(e)}}catch(i){if(!(i instanceof qn)||t===void 0)throw i;return{found:void 0,warning:i.message}}}async function gp(e=process.env){return(await ul(e))?.credentials}async function xt(e=process.env){let t=await ul(e);if(t!==void 0)return t;throw new qn(`No stored credentials found at ${Xe(e)}. Run toloka login.`)}var u5=(e)=>{let t=e.projects,i=t!==void 0&&Object.keys(t).length>0;return{baseUrl:e.baseUrl,apiKey:e.apiKey,...e.current===void 0?{}:{current:e.current},...i?{projects:t}:{}}},np=async(e)=>{try{let t=await pe.lstat(e);b(!t.isSymbolicLink(),`Refusing to write through symbolic link ${e}.`)}catch(t){if(t instanceof Error&&"code"in t&&t.code==="ENOENT")return;throw t}};async function ti(e){let t=ei.dirname(e);await np(t),await np(e),await pe.mkdir(t,{recursive:!0,mode:448}),await pe.chmod(t,448)}async function Rs(e,t=process.env){let i=Xe(t);return await ti(i),await pe.writeFile(i,`${JSON.stringify(u5(e),null,2)}
124
+ `,{mode:384}),await pe.chmod(i,384),i}var m5=async(e)=>{try{return await pe.stat(e),!0}catch(t){if(t instanceof Error&&"code"in t&&t.code==="ENOENT")return!1;throw t}};async function ap(e=process.env){let t=[],i=[Xe(e),...e.TOLOKA_CREDENTIALS_FILE===void 0?[rp(e)]:[]];for(let n of i){if(!await m5(n))continue;await pe.rm(n,{force:!0}),t.push(n)}return t}var p5=16,lp=(e)=>e.length>p5?`${e.slice(0,4)}${"*".repeat(e.length-8)}${e.slice(-4)}`:"*".repeat(e.length);var M="Missing project ID. Pass --project-id, set TOLOKA_PROJECT_ID, set projectId in toloka.json, or run toloka project add.",A5="No project selected. Run toloka project add, or cd into a checkout.",Ip="project add writes the machine registry; unset --api-key / --base-url / POTATO_API_KEY / POTATO_BASE_URL, or run login against that platform first.",Z5=/^[^/\s]+$/u,Gs=(e)=>{let t=e.trim();return b(t.length>0&&Z5.test(t),"Project alias must be non-empty and contain no / or whitespace."),t},Ae=(e)=>{if(e===void 0)return;let t=e.trim();return t.length===0?void 0:t},b5=(e,t,i)=>Ae(e?.baseUrl)??Ae(t?.POTATO_BASE_URL)??Wt(t??{})??Ae(i?.baseUrl),to=(e,t)=>e!==void 0&&Object.hasOwn(e,t)?e[t]:void 0,W5=(e,t,i)=>{if(!i||t?.projects===void 0)return{};if(t.current!==void 0){let n=to(t.projects,t.current);if(n?.id===e)return n.name===void 0?{alias:t.current}:{alias:t.current,name:n.name}}for(let n of Object.keys(t.projects).toSorted()){let o=to(t.projects,n);if(o?.id!==e)continue;return o.name===void 0?{alias:n}:{alias:n,name:o.name}}return{}};function Oi(e={}){let t=e.flags??{},i=e.environment??{},n=e.stored,o=e.effectiveBaseUrl??b5(t,i,n),s=n!==void 0&&o!==void 0&&bt(o)===bt(n.baseUrl),g=[{id:Ae(t.projectId),source:"flag"},{id:Ae(i.TOLOKA_PROJECT_ID),source:"toloka-project-id"},{id:Ae(i.POTATO_PROJECT_ID),source:"potato-project-id"},{id:Ae(e.state?.projectId),source:"toloka.json"},{id:s&&n.current!==void 0?Ae(n.projects?.[n.current]?.id):void 0,source:"registry"}].find((a)=>a.id!==void 0);if(g?.id===void 0)return;return{id:g.id,source:g.source,...W5(g.id,n,s)}}var pl=(e,t)=>{if(e===void 0)return"Project: (none). Run toloka project add.";let i=e.alias===void 0?"":`alias ${e.alias}, `,n=e.source!=="registry"&&t?.current!==void 0?`; registry current is ${t.current}`:"";return`Project: ${e.id} (${i}from ${e.source}${n})`},ws=(e,t,i)=>{let n=Ae(e.apiKey)??Ae(t.POTATO_API_KEY),o=Ae(e.baseUrl)??Ae(t.POTATO_BASE_URL)??Wt(t);b(n===void 0||n===i.apiKey,Ip),b(o===void 0||bt(o)===bt(i.baseUrl),Ip)},Fs=async(e,t)=>{await Rs(e,t)},dp=(e,t,i)=>{let n=Object.assign(Object.create(null),e.projects??{},{[t]:i.name===void 0?{id:i.id}:i});return{...e,current:t,projects:n}},ml=async(e,t,i)=>{b(e?.prompt,i);let n=(await e.prompt(t)).trim();return b(n.length>0,i),n};async function cp(e){let t=e.limit??20,i=await e.client.projects.listPage({limit:t}),n=i.projects.map((s)=>{let r=e.context?.id===s.id?"*":" ",g=e.context?.id===s.id&&e.context.alias!==void 0?` ${e.context.alias}`:"";return`${r} ${s.id} ${s.name}${g}`});if(i.pagination.hasMore)n.push(`Showing ${i.projects.length} of ${i.pagination.total} projects. Raise --limit to see more.`);let o=n.length===0?"No projects visible.":n.join(`
125
+ `);return e.io.stdout(o),{output:o}}async function Cp(e){let t=await xt(e.environment);ws(e.flags??{},e.environment,t.credentials);let i=Gs(e.alias??await ml(e.io,"Alias: ","Missing project alias. Pass an alias or run this in a terminal.")),n=Ae(e.projectId)??await ml(e.io,"Project id: ","Missing project ID. Pass a project id or run this in a terminal."),o=to(t.credentials.projects,i);b(o===void 0||o.id===n,`Alias ${i} already points at ${o?.id}. Run toloka project remove ${i} first.`),await e.afterPreflight?.();let s=await e.client.projects.get({projectId:n});await Fs(dp(t.credentials,i,{id:s.id,name:s.name}),e.environment);let r=`Using project ${s.id} as ${i}.`;return e.io?.stdout(r),{output:r,alias:i,projectId:s.id}}async function up(e){let t=await xt(e.environment);ws(e.flags??{},e.environment,t.credentials);let i=Gs(e.alias),n=to(t.credentials.projects,i);b(n,`Unknown project alias ${i}.`),await Fs({...t.credentials,current:i},e.environment);let o=`Using project ${n.id} as ${i}.`;return e.io?.stdout(o),{output:o}}async function mp(e){let t=await xt(e.environment);ws(e.flags??{},e.environment,t.credentials);let i=Gs(e.alias),n=Object.assign(Object.create(null),t.credentials.projects??{});b(to(n,i),`Unknown project alias ${i}.`),delete n[i];let o=t.credentials.current===i?void 0:t.credentials.current;await Fs({baseUrl:t.credentials.baseUrl,apiKey:t.credentials.apiKey,...o===void 0?{}:{current:o},...Object.keys(n).length===0?{}:{projects:n}},e.environment);let s=`Removed local alias ${i}.`;return e.io?.stdout(s),{output:s}}function pp(e){let t=Oi(e),i=t===void 0?A5:pl(t,e.stored);return e.io?.stdout(i),t===void 0?{output:i}:{output:i,project:t}}var h5=(e)=>{let t=[...new Set(e.map((i)=>i.teamId))];return t.length===1?t[0]:void 0},f5=async(e,t)=>{let i=Ae(t);if(i!==void 0)return i;let n=[];for await(let s of e.projects.listAll())n.push(s);let o=h5(n);return b(o,"Missing team id. Pass --team-id. Visible projects do not share a single team, or none are visible."),o},y5=async(e,t,i,n)=>{if(t===void 0){try{await Lt(e,{projectId:i.id,pipelines:{},datasets:{}})}catch(o){let s=o instanceof Error?o.message:String(o);throw Error([`Created project ${i.id} as ${n}.`,`Failed to write toloka.json: ${s}`].join(`
126
+ `),{cause:o})}return}if(t.projectId===i.id)return;return`Checkout still uses ${t.projectId}; it overrides the new registry current.`};async function Ap(e){let t=await xt(e.environment);ws(e.flags??{},e.environment,t.credentials);let i=Gs(e.alias??await ml(e.io,"Alias: ","Missing project alias. Pass an alias or run this in a terminal."));b(t.credentials.projects?.[i]===void 0,`Alias ${i} already exists. Run toloka project remove ${i} first.`);let n=e.sourceRoot===void 0?void 0:await Re(e.sourceRoot);await e.afterPreflight?.();let o=await f5(e.client,e.teamId),s=await e.client.projects.create({teamId:o,name:Ae(e.name)??i});try{await Fs(dp(t.credentials,i,{id:s.id,name:s.name}),e.environment)}catch(a){let l=a instanceof Error?a.message:String(a);throw Error([`Created ${s.id} but failed to update the local registry: ${l}`,`Run: toloka project add ${i} ${s.id}`].join(`
127
+ `),{cause:a})}let r=[`Created project ${s.id} as ${i}.`];if(e.sourceRoot!==void 0){let a=await y5(e.sourceRoot,n,s,i);if(a!==void 0)r.push(a)}let g=r.join(`
128
+ `);return e.io?.stdout(g),{output:g,projectId:s.id,alias:i}}var ii="https://platform.toloka.ai",V5=/^(?:prestable|pr-\d+)$/u,Wt=(e)=>{let t=e.ENV?.trim();if(t===void 0||!V5.test(t))return;return`https://${t}.platform.toloka-test.ai`},B5="https://console.toloka.ai",R5="https://prestable.console.toloka-test.ai",Zp=(e)=>{let t;try{t=new URL(e).host}catch{return}if(t==="platform.toloka.ai")return B5;if(t.endsWith(".platform.toloka-test.ai"))return R5;return},G5=["Missing API key. Run toloka login once to store credentials for this machine:",""," toloka login","","It explains how to generate an API key and where it is saved. To override per command,","pass --api-key or set POTATO_API_KEY. Run toloka auth-status to see what is in effect."].join(`
129
+ `);function Al(e,t,i,n){let o=e.apiKey??i.POTATO_API_KEY??n?.apiKey,s=e.baseUrl??i.POTATO_BASE_URL??Wt(i)??n?.baseUrl??ii,r=Oi({flags:e,state:t,environment:i,stored:n,effectiveBaseUrl:s});return b(o,G5),{apiKey:o,baseUrl:s,...r===void 0?{}:{projectId:r.id}}}var w5=(e)=>{let t=Zp(e);return[...t===void 0?[`An API key identifies you to ${e}. Generate one in the console that`,"serves this platform, under Company -> API Keys -> Generate API Key."]:[`An API key identifies you to ${e}. To generate one:`,"",` 1. open ${t}`," 2. go to Company -> API Keys"," 3. press Generate API Key and copy it"],"","The key is shown once. Treat it like a password: it is stored with owner-only","permissions and never printed back to you."].join(`
130
+ `)};async function bp(e={}){let t=e.environment??process.env,i=e.write??(()=>{return}),n=bt(e.baseUrl??t.POTATO_BASE_URL??Wt(t)??ii),o=e.apiKey;if(o===void 0)b(e.prompt,"Missing API key. Pass --api-key, or set POTATO_API_KEY, when stdin is not a terminal."),i(`
131
+ ${w5(n)}
132
132
  `),o=(await e.prompt("API key: ",{mask:!0})).trim();b(o.length>0,"No API key entered.");let s={baseUrl:n,apiKey:o},r=e.probe?.(s)??ut(s),g;try{let u=await r.projects.listPage({limit:1});g=`Authenticated against ${n}: ${u.pagination.total} project(s) visible.`}catch(u){let c=u instanceof Error?u.message:String(u);throw Error([`Could not authenticate against ${n}: ${c}`,"","Nothing was saved. Check that the key was copied whole and has not been revoked."].join(`
133
- `),{cause:u})}let a=Ne(t),l=await fs(a),I=typeof l==="object"&&bt(l.credentials.baseUrl)===bt(n)?{baseUrl:n,apiKey:o,...l.credentials.current===void 0?{}:{current:l.credentials.current},...l.credentials.projects===void 0?{}:{projects:l.credentials.projects}}:s,d=await Vs(I,t);return{credentialsFile:d,baseUrl:n,output:[g,`Saved credentials to ${d}.`,"","toloka reads them automatically. --api-key and POTATO_API_KEY still win when set."].join(`
134
- `)}}async function up(e=process.env){let t=await ip(e);return{removed:t,output:t.length===0?`No stored credentials found at ${Ne(e)}.`:`Removed ${t.join(", ")}.
133
+ `),{cause:u})}let a=Xe(t),l=await Vs(a),I=typeof l==="object"&&bt(l.credentials.baseUrl)===bt(n)?{baseUrl:n,apiKey:o,...l.credentials.current===void 0?{}:{current:l.credentials.current},...l.credentials.projects===void 0?{}:{projects:l.credentials.projects}}:s,d=await Rs(I,t);return{credentialsFile:d,baseUrl:n,output:[g,`Saved credentials to ${d}.`,"","toloka reads them automatically. --api-key and POTATO_API_KEY still win when set."].join(`
134
+ `)}}async function Wp(e=process.env){let t=await ap(e);return{removed:t,output:t.length===0?`No stored credentials found at ${Xe(e)}.`:`Removed ${t.join(", ")}.
135
135
 
136
- This does not revoke the key. Delete it in console.toloka.ai to do that.`}}var mp=(e)=>e.find((t)=>t!==void 0),w5=(e,t,i,n)=>mp([e.flagApiKey===void 0?void 0:{value:e.flagApiKey,source:"from --api-key"},t.POTATO_API_KEY===void 0?void 0:{value:t.POTATO_API_KEY,source:"from POTATO_API_KEY"},i===void 0?void 0:{value:i.credentials.apiKey,source:`stored in ${n}`}]),F5=(e,t,i)=>{let n=Wt(t);return mp([e.flagBaseUrl===void 0?void 0:{value:e.flagBaseUrl.replace(/\/+$/u,""),source:"from --base-url"},t.POTATO_BASE_URL===void 0?void 0:{value:t.POTATO_BASE_URL,source:"from POTATO_BASE_URL"},n===void 0?void 0:{value:n,source:`from ENV=${t.ENV}`},i===void 0?void 0:{value:i.credentials.baseUrl,source:"stored"}])??{value:ti,source:"default"}};async function pp(e={}){let t=e.environment??process.env,i=e.credentialLookup??await Mn(t,e.flagApiKey??t.POTATO_API_KEY),{found:n,warning:o}=i,s=n?.path??Ne(t),r=w5(e,t,n,s),g=F5(e,t,n),a=ml(e.project,n?.credentials),l=o===void 0?[]:[o,""];if(r===void 0)return l.push("Not logged in.","","Run toloka login to store an API key for this machine.","",a),{authenticated:!1,output:l.join(`
137
- `)};let{value:I,source:d}=g;if(l.push(`Platform: ${I} (${d})`,`API key: ${e.showToken===!0?r.value:np(r.value)} (${r.source})`,a),t.POTATO_API_KEY!==void 0&&n!==void 0)l.push("",`POTATO_API_KEY is set, so the key stored in ${n.path} is ignored.`);if(n?.legacy===!0)l.push("",`Credentials still live at the old path ${n.path}. Run toloka login to move them to ${Ne(t)}.`);let u=e.probe?.({baseUrl:I,apiKey:r.value})??ut({baseUrl:I,apiKey:r.value});try{let c=await u.projects.listPage({limit:1});return l.push("",`Reachable: ${c.pagination.total} project(s) visible.`),{authenticated:!0,output:l.join(`
136
+ This does not revoke the key. Delete it in console.toloka.ai to do that.`}}var hp=(e)=>e.find((t)=>t!==void 0),F5=(e,t,i,n)=>hp([e.flagApiKey===void 0?void 0:{value:e.flagApiKey,source:"from --api-key"},t.POTATO_API_KEY===void 0?void 0:{value:t.POTATO_API_KEY,source:"from POTATO_API_KEY"},i===void 0?void 0:{value:i.credentials.apiKey,source:`stored in ${n}`}]),H5=(e,t,i)=>{let n=Wt(t);return hp([e.flagBaseUrl===void 0?void 0:{value:e.flagBaseUrl.replace(/\/+$/u,""),source:"from --base-url"},t.POTATO_BASE_URL===void 0?void 0:{value:t.POTATO_BASE_URL,source:"from POTATO_BASE_URL"},n===void 0?void 0:{value:n,source:`from ENV=${t.ENV}`},i===void 0?void 0:{value:i.credentials.baseUrl,source:"stored"}])??{value:ii,source:"default"}};async function fp(e={}){let t=e.environment??process.env,i=e.credentialLookup??await eo(t,e.flagApiKey??t.POTATO_API_KEY),{found:n,warning:o}=i,s=n?.path??Xe(t),r=F5(e,t,n,s),g=H5(e,t,n),a=pl(e.project,n?.credentials),l=o===void 0?[]:[o,""];if(r===void 0)return l.push("Not logged in.","","Run toloka login to store an API key for this machine.","",a),{authenticated:!1,output:l.join(`
137
+ `)};let{value:I,source:d}=g;if(l.push(`Platform: ${I} (${d})`,`API key: ${e.showToken===!0?r.value:lp(r.value)} (${r.source})`,a),t.POTATO_API_KEY!==void 0&&n!==void 0)l.push("",`POTATO_API_KEY is set, so the key stored in ${n.path} is ignored.`);if(n?.legacy===!0)l.push("",`Credentials still live at the old path ${n.path}. Run toloka login to move them to ${Xe(t)}.`);let u=e.probe?.({baseUrl:I,apiKey:r.value})??ut({baseUrl:I,apiKey:r.value});try{let c=await u.projects.listPage({limit:1});return l.push("",`Reachable: ${c.pagination.total} project(s) visible.`),{authenticated:!0,output:l.join(`
138
138
  `)}}catch(c){let C=c instanceof Error?c.message:String(c);return l.push("",`Not reachable: ${C}`,"","Run toloka login to store a working key."),{authenticated:!1,output:l.join(`
139
- `)}}}var WZ=require("crypto"),li=require("fs/promises"),ir=require("path");var Oi=require("path");function Zp(){let e=H5();return async(t)=>{for(let i of t)i.module=e(i.filename);return t}}function H5(e=process.argv[1]?Oi.dirname(process.argv[1]):process.cwd(),t=Oi.sep==="\\"){let i=t?Ap(e):e;return(n)=>{if(!n)return;let o=t?Ap(n):n,{dir:s,base:r,ext:g}=Oi.posix.parse(o);if(g===".js"||g===".mjs"||g===".cjs")r=r.slice(0,-1*g.length);let a=decodeURIComponent(r);if(!s)s=".";let l=s.lastIndexOf("/node_modules");if(l>-1)return`${s.slice(l+14).replace(/\//g,".")}:${a}`;if(s.startsWith(i)){let I=s.slice(i.length+1).replace(/\//g,".");return I?`${I}:${a}`:a}return a}}function Ap(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var Al=(e)=>{if("flags"in e){let t=bp(e.flags),i=Wp(e.flags);return{...e,featureFlags:t,featureFlagPayloads:i}}{let t=e.featureFlags??{},i=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([o,s])=>[o,ws(s)])),n=Object.fromEntries(Object.entries(t).map(([o,s])=>[o,v5(o,s,i[o])]));return{...e,featureFlags:t,featureFlagPayloads:i,flags:n}}};function v5(e,t,i){return{key:e,enabled:typeof t=="string"?!0:t,variant:typeof t=="string"?t:void 0,reason:void 0,metadata:{id:void 0,version:void 0,payload:i?JSON.stringify(i):void 0,description:void 0}}}var bp=(e)=>Object.fromEntries(Object.entries(e??{}).map(([t,i])=>[t,qn(i)]).filter(([,t])=>t!==void 0)),Wp=(e)=>{let t=e??{};return Object.fromEntries(Object.keys(t).filter((i)=>{let n=t[i];return n.enabled&&n.metadata&&n.metadata.payload!==void 0}).map((i)=>{let n=t[i].metadata?.payload;return[i,n?ws(n):void 0]}))},qn=(e)=>e===void 0?void 0:e.variant??e.enabled,ws=(e)=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};var k5=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],eo=(e,t=[])=>{let i={},n=(o)=>{if(e[o]!==void 0)i[o]=e[o]};return k5.forEach(n),t.forEach(n),i};var Ge=function(e){return e.AnonymousId="anonymous_id",e.DistinctId="distinct_id",e.Props="props",e.EnablePersonProcessing="enable_person_processing",e.PersonMode="person_mode",e.FeatureFlagDetails="feature_flag_details",e.FeatureFlags="feature_flags",e.FeatureFlagPayloads="feature_flag_payloads",e.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",e.BootstrapFeatureFlags="bootstrap_feature_flags",e.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",e.OverrideFeatureFlags="override_feature_flags",e.Queue="queue",e.AiQueue="ai_queue",e.LogsQueue="logs_queue",e.OptedOut="opted_out",e.SessionId="session_id",e.SessionStartTimestamp="session_start_timestamp",e.SessionLastTimestamp="session_timestamp",e.PersonProperties="person_properties",e.GroupProperties="group_properties",e.InstalledAppBuild="installed_app_build",e.InstalledAppVersion="installed_app_version",e.SessionReplay="session_replay",e.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",e.SurveyLastSeenDate="survey_last_seen_date",e.SurveysSeen="surveys_seen",e.Surveys="surveys",e.RemoteConfig="remote_config",e.FlagsEndpointWasHit="flags_endpoint_was_hit",e.DeviceId="device_id",e}({});function Zl(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var Y5="NativeGzipValidationError",N5=31,X5=139,S5=8,x5=(e)=>e.length>=2&&e[0]===N5&&e[1]===X5;var to,J5=()=>{if(to)return to;to=[];for(let e=0;e<256;e++){let t=e;for(let i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;to[e]=t>>>0}return to},E5=(e)=>{let t=J5(),i=4294967295;for(let n=0;n<e.length;n++)i=t[(i^e[n])&255]^i>>>8;return(4294967295^i)>>>0},Fs=(e)=>{let t=Error(`Native gzip produced invalid output: ${e}`);throw t.name=Y5,t},U5=async(e,t)=>{if(e.size<18)Fs("too-short");let i=new Uint8Array(await e.slice(0,10).arrayBuffer());if(!x5(i)||i[2]!==S5)Fs("invalid-header");let n=new DataView(await e.slice(e.size-8).arrayBuffer());if(n.getUint32(0,!0)!==E5(t))Fs("invalid-crc");let o=t.length>>>0;if(n.getUint32(4,!0)!==o)Fs("invalid-size")};async function ii(e,t=!0,i){try{let n=new TextEncoder().encode(e),o=new globalThis.CompressionStream("gzip"),s=o.writable.getWriter(),r=s.write(n).then(()=>s.close()).catch(async(l)=>{try{await s.abort(l)}catch{}throw l}),g=new Response(o.readable).blob(),[a]=await Promise.all([g,r]);return await U5(a,n),a}catch(n){if(i?.rethrow)throw n;if(t)console.error("Failed to gzip compress data",n);return null}}var O5=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],hp=function(e,t=[]){if(!e)return!1;let i=e.toLowerCase();return O5.concat(t).some((n)=>{let o=n.toLowerCase();return i.indexOf(o)!==-1})};function Ti(e){let t=[];return JSON.stringify(e,function(i,n){if(typeof n=="bigint")return n.toString();if(typeof n=="function"||typeof n=="symbol")return;if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){while(t.length>0&&t[t.length-1]!==this)t.pop();if(t.includes(n))return"[Circular]";t.push(n)}return n})??"null"}var z5=Array.isArray,fp=Object.prototype,ax=fp.hasOwnProperty,Hs=fp.toString,st=z5||function(e){return Hs.call(e)==="[object Array]"};var io=(e)=>e===Object(e)&&!st(e);var ni=(e)=>e===void 0,ht=(e)=>Hs.call(e)=="[object String]",yp=(e)=>ht(e)&&e.trim().length===0,Vp=(e)=>e===null;var no=(e)=>Hs.call(e)=="[object Number]"&&e===e;var Bp=(e)=>Hs.call(e)==="[object Boolean]";var Rp=(e)=>e instanceof Error;function vs(e){return e===null||typeof e!="object"}function oi(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function Gp(e){return oi(e,"ErrorEvent")}function zi(e){return typeof Event<"u"&&j5(e,Event)}function wp(e){return oi(e,"Object")}function j5(e,t){try{return e instanceof t}catch{return!1}}function oo(e,t,i,n,o){if(t>i)n.warn("min cannot be greater than max."),t=i;if(no(e))if(e>i)return n.warn(" cannot be greater than max: "+i+". Using max value instead."),i;else{if(!(e<t))return e;return n.warn(" cannot be less than min: "+t+". Using min value instead."),t}return n.warn(" must be a number. using max or fallback. max: "+i+", fallback: "+o),oo(o||i,t,i,n)}var D5=86400000,Q5=1,_5=10;function Fp(e={}){return{refillRate:e.exceptionRateLimiterRefillRate??e.__exceptionRateLimiterRefillRate??Q5,bucketSize:e.exceptionRateLimiterBucketSize??e.__exceptionRateLimiterBucketSize??_5}}class bl{constructor(e){this._buckets={},this._onBucketRateLimited=e._onBucketRateLimited,this._bucketSize=oo(e.bucketSize,0,100,e._logger),this._refillRate=oo(e.refillRate,0,this._bucketSize,e._logger),this._refillInterval=oo(e.refillInterval,0,D5,e._logger)}_applyRefill(e,t){let i=t-e.lastAccess,n=Math.floor(i/this._refillInterval);if(n>0){let o=n*this._refillRate;e.tokens=Math.min(e.tokens+o,this._bucketSize),e.lastAccess=e.lastAccess+n*this._refillInterval}}consumeRateLimit(e){let t=Date.now(),i=String(e),n=this._buckets[i];if(n)this._applyRefill(n,t);else n={tokens:this._bucketSize,lastAccess:t},this._buckets[i]=n;if(n.tokens===0)return!0;if(n.tokens--,n.tokens===0)this._onBucketRateLimited?.(e);return n.tokens===0}stop(){this._buckets={}}}/*! For license information please see uuidv7.mjs.LICENSE.txt */class si{constructor(e){this.bytes=e}static ofInner(e){if(e.length===16)return new si(e);throw TypeError("not 128-bit length")}static fromFieldsV7(e,t,i,n){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(i)||!Number.isInteger(n)||e<0||t<0||i<0||n<0||e>281474976710655||t>4095||i>1073741823||n>4294967295)throw RangeError("invalid field value");let o=new Uint8Array(16);return o[0]=e/1099511627776,o[1]=e/4294967296,o[2]=e/16777216,o[3]=e/65536,o[4]=e/256,o[5]=e,o[6]=112|t>>>8,o[7]=t,o[8]=128|i>>>24,o[9]=i>>>16,o[10]=i>>>8,o[11]=i,o[12]=n>>>24,o[13]=n>>>16,o[14]=n>>>8,o[15]=n,new si(o)}static parse(e){let t;switch(e.length){case 32:t=/^[0-9a-f]{32}$/i.exec(e)?.[0];break;case 36:t=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;case 38:t=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(e)?.slice(1,6).join("");break;case 45:t=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;default:break}if(t){let i=new Uint8Array(16);for(let n=0;n<16;n+=4){let o=parseInt(t.substring(2*n,2*n+8),16);i[n+0]=o>>>24,i[n+1]=o>>>16,i[n+2]=o>>>8,i[n+3]=o}return new si(i)}throw SyntaxError("could not parse UUID string")}toString(){let e="";for(let t=0;t<this.bytes.length;t++)if(e+="0123456789abcdef".charAt(this.bytes[t]>>>4),e+="0123456789abcdef".charAt(15&this.bytes[t]),t===3||t===5||t===7||t===9)e+="-";return e}toHex(){let e="";for(let t=0;t<this.bytes.length;t++)e+="0123456789abcdef".charAt(this.bytes[t]>>>4),e+="0123456789abcdef".charAt(15&this.bytes[t]);return e}toJSON(){return this.toString()}getVariant(){let e=this.bytes[8]>>>4;if(e<0)throw Error("unreachable");if(e<=7)return this.bytes.every((t)=>t===0)?"NIL":"VAR_0";if(e<=11)return"VAR_10";if(e<=13)return"VAR_110";if(e<=15)return this.bytes.every((t)=>t===255)?"MAX":"VAR_RESERVED";else throw Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new si(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(let t=0;t<16;t++){let i=this.bytes[t]-e.bytes[t];if(i!==0)return Math.sign(i)}return 0}}class vp{constructor(e){this.timestamp=0,this.counter=0,this.random=e??K5()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(e,t){let i=this.generateOrAbortCore(e,t);if(i===void 0)this.timestamp=0,i=this.generateOrAbortCore(e,t);return i}generateOrAbortCore(e,t){if(!Number.isInteger(e)||e<1||e>281474976710655)throw RangeError("`unixTsMs` must be a 48-bit positive integer");if(t<0||t>281474976710655)throw RangeError("`rollbackAllowance` out of reasonable range");if(e>this.timestamp)this.timestamp=e,this.resetCounter();else{if(!(e+t>=this.timestamp))return;if(this.counter++,this.counter>4398046511103)this.timestamp++,this.resetCounter()}return si.fromFieldsV7(this.timestamp,Math.trunc(this.counter/1073741824),this.counter&1073741823,this.random.nextUint32())}resetCounter(){this.counter=1024*this.random.nextUint32()+(1023&this.random.nextUint32())}generateV4(){let e=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return e[6]=64|e[6]>>>4,e[8]=128|e[8]>>>2,si.ofInner(e)}}var K5=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),Hp,we=()=>L5().toString(),L5=()=>(Hp||(Hp=new vp)).generate();class Wl{add(e){let t=we(),i=++this.nextId;return this.promiseByIds[t]={id:i,promise:e},e.catch(()=>{}).finally(()=>{delete this.promiseByIds[t]}),e}async join(){let e=Object.values(this.promiseByIds).map((i)=>i.promise),t=e.length;while(t>0)await Promise.all(e),e=Object.values(this.promiseByIds).map((i)=>i.promise),t=e.length}getPromises(e=[],t=this.nextId){let i=new Set(e);return Object.values(this.promiseByIds).filter((n)=>n.id<=t&&!i.has(n.promise)).map((n)=>n.promise)}get maxId(){return this.nextId}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={},this.nextId=0}}function M5(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var kp=(e,t,i)=>{function n(s,...r){t(()=>{let g=i[s];g(e,...r)})}return{debug:(...s)=>{n("debug",...s)},info:(...s)=>{n("log",...s)},warn:(...s)=>{n("warn",...s)},error:(...s)=>{n("error",...s)},critical:(...s)=>{i.error(e,...s)},createLogger:(s)=>kp(`${e} ${s}`,t,i)}},$5=(e)=>e();function Pp(e,t=$5){return kp(e,t,M5())}var Di="Mobile",Ps="iOS",ji="Android",xp="Tablet",Wx=ji+" "+xp;var ek="Apple",hx=ek+" Watch",Jp="Safari",Ys="BlackBerry",Ep="Samsung",tk=Ep+"Browser",ik=Ep+" Internet",Ns="Chrome",nk=Ns+" OS",ok=Ns+" "+Ps,Up="Internet Explorer",sk=Up+" "+Di,fl="Opera",fx=fl+" Mini",Op="Edge",rk="Microsoft "+Op,yl="Firefox",gk=yl+" "+Ps,Vl="Nintendo",Bl="PlayStation",ks="Xbox",ak=ji+" "+Di,lk=Di+" "+Jp,so="Windows",Ik=so+" Phone";var Tp="Generic",yx=Tp+" "+Di.toLowerCase(),Vx=Tp+" "+xp.toLowerCase(),dk="Konqueror",ck="Oculus Browser",Yp="Vivaldi",Ck="Yandex",Np="Whale",uk="DuckDuckGo",mk="Pale Moon",Xp="Waterfox",Sp="Brave",pk="Google Search App",_="(\\d+(\\.\\d+)?)",hl=new RegExp("Version/"+_);var Bx=new RegExp(ks,"i"),Rx=new RegExp(Bl+" \\w+","i"),Gx=new RegExp(Vl+" \\w+","i"),Ak=new RegExp(Ys+"|PlayBook|BB10","i"),Zk={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000","5.1":"XP","5.2":"XP","6.0":"Vista","6.1":"7","6.2":"8","6.3":"8.1","6.4":"10","10.0":"10"};var wx={[sk]:[new RegExp("rv:"+_)],[rk]:[new RegExp(Op+"?\\/"+_)],[Ns]:[new RegExp("("+Ns+"|CrMo)\\/"+_)],[ok]:[new RegExp("CriOS\\/"+_)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+_)],[Jp]:[hl],[lk]:[hl],[fl]:[new RegExp("("+fl+"|OPR)\\/"+_)],[yl]:[new RegExp(yl+"\\/"+_)],[gk]:[new RegExp("FxiOS\\/"+_)],[dk]:[new RegExp("Konqueror[:/]?"+_,"i")],[Ys]:[new RegExp(Ys+" "+_),hl],[ak]:[new RegExp("android\\s"+_,"i")],[ik]:[new RegExp(tk+"\\/"+_)],[ck]:[new RegExp("OculusBrowser\\/"+_)],[Yp]:[new RegExp(Yp+"\\/"+_)],[Ck]:[new RegExp("YaBrowser\\/"+_)],[Np]:[new RegExp(Np+"\\/"+_)],[Sp]:[new RegExp(Sp+"\\/"+_)],[uk]:[new RegExp("(DuckDuckGo|Ddg)\\/"+_)],[mk]:[new RegExp("PaleMoon\\/"+_)],[Xp]:[new RegExp(Xp+"\\/"+_)],[pk]:[new RegExp("GSA\\/"+_)],[Up]:[new RegExp("(rv:|MSIE )"+_)],Mozilla:[new RegExp("rv:"+_)]};var Fx=[[new RegExp(ks+"; "+ks+" (.*?)[);]","i"),(e)=>[ks,e&&e[1]||""]],[new RegExp(Vl,"i"),[Vl,""]],[new RegExp(Bl,"i"),[Bl,""]],[Ak,[Ys,""]],[new RegExp(so,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[Ik,""];if(new RegExp(Di).test(t)&&!/IEMobile\b/.test(t))return[so+" "+Di,""];let i=/Windows NT ([0-9.]+)/i.exec(t);if(i&&i[1]){let n=i[1],o=Zk[n]||"";if(/arm/i.test(t))o="RT";return[so,o]}return[so,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,(e)=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[Ps,t.join(".")]}return[Ps,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,(e)=>{let t="";if(e&&e.length>=3)t=ni(e[2])?e[3]:e[2];return["watchOS",t]}],[new RegExp("("+ji+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+ji+")","i"),(e)=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[ji,t.join(".")]}return[ji,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,(e)=>{let t=["Mac OS X",""];if(e&&e[1]){let i=[e[1],e[2],e[3]||"0"];t[1]=i.join(".")}return t}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[nk,""]],[/Linux|debian/i,["Linux",""]]];var zp="utf8",bk=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Wk(e){return typeof e=="string"&&bk.test(e)}function Xs(e,t){return Wk(e)?e:t()}function jp(e){return e?.replace(/\/+$/,"")}async function Dp(e,t){let i=null;for(let n=0;n<t.retryCount+1;n++){if(n>0)await new Promise((o)=>setTimeout(o,t.retryDelay));try{return await e()}catch(o){if(i=o,!t.retryCheck(o))throw o}}throw i}function Rl(){return new Date().toISOString()}function de(e,t){let i=setTimeout(e,t);return i?.unref&&i?.unref(),i}var Qp=(e)=>e instanceof Error;function Gl(e){return Promise.all(e.map((t)=>(t??Promise.resolve()).then((i)=>({status:"fulfilled",value:i}),(i)=>({status:"rejected",reason:i}))))}var fk={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},Ux=fk.info;function wl(e){if(Bp(e))return{boolValue:e};if(typeof e=="number"){if(!Number.isFinite(e))return{stringValue:String(e)};if(Number.isInteger(e))return{intValue:e};return{doubleValue:e}}if(typeof e=="string")return{stringValue:e};if(st(e))return{arrayValue:{values:e.map((t)=>wl(t))}};try{return{stringValue:JSON.stringify(e)}}catch{return{stringValue:String(e)}}}function ro(e){let t=[];for(let i in e){let n=e[i];if(!(Vp(n)||ni(n)))t.push({key:i,value:wl(n)})}return t}var go=[0,5,10,25,50,75,100,250,500,750,1000,2500,5000,7500,1e4];function Fl(e){return String(e)+"000000"}function Hl(e,t,i,n){let o="";if(n)o=Object.keys(n).sort().map((r)=>`${JSON.stringify(r)}:${JSON.stringify(n[r])}`).join(",");return`${e}\x00${t}\x00${i??""}\x00${o}`}function _p(e,t){for(let i=0;i<t.length;i++)if(e<=t[i])return i;return t.length}function vl(e,t,i){return{...e.resourceAttributes,"service.name":e.serviceName||"unknown_service",...e.environment&&{"deployment.environment":e.environment},...e.serviceVersion&&{"service.version":e.serviceVersion},"telemetry.sdk.name":t,"telemetry.sdk.version":i}}function kl(e,t,i,n){return{resourceMetrics:[{resource:{attributes:ro(t)},scopeMetrics:[{scope:{name:i,version:n},metrics:e}]}]}}function Ss(e){let t=e?.resourceAttributes;return{serviceName:t?.["service.name"]??e?.serviceName,serviceVersion:t?.["service.version"]??e?.serviceVersion,environment:t?.["deployment.environment"]??e?.environment,resourceAttributes:t,beforeSend:e?.beforeSend,flushIntervalMs:e?.flushIntervalMs??1e4,maxSeriesPerFlush:e?.maxSeriesPerFlush??1000}}var Kp=1;class xs{constructor(e,t,i){this._instance=e,this._config=t,this._logger=i,this._series=new Map,this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._generation=0}count(e,t=1,i){this._capture({name:e,type:"count",value:t,unit:i?.unit,attributes:i?.attributes})}gauge(e,t,i){this._capture({name:e,type:"gauge",value:t,unit:i?.unit,attributes:i?.attributes})}histogram(e,t,i){this._capture({name:e,type:"histogram",value:t,unit:i?.unit,attributes:i?.attributes})}flush(){let e=this._flushPromise,i=(async()=>{if(e)await e.catch(()=>{});await this._doFlush()})().finally(()=>{if(this._flushPromise===i)this._flushPromise=null});return this._flushPromise=i,i}drainWindow(){if(this._series.size===0)return null;let e=this._series;return this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._buildPayload(e)}reset(){this._generation++,this._clearFlushTimer(),this._series=new Map,this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set}_capture(e){if(this._instance.isDisabled||this._instance.optedOut)return;let t=this._runBeforeSend(e);if(t===null)return;if(!t.name||typeof t.name!="string")return void this._logger.warn("Dropping metric with empty name");if(typeof t.value!="number"||!Number.isFinite(t.value))return void this._logger.warn(`Dropping metric '${t.name}': value must be a finite number`);if(t.type==="count"&&t.value<0)return void this._logger.warn(`Dropping count '${t.name}': counters are monotonic, value must be >= 0`);let i,n;try{i=t.attributes?{...t.attributes}:void 0,n=Hl(t.type,t.name,t.unit,i)}catch(r){this._logger.warn(`Dropping metric '${t.name}': attributes could not be serialized`,r);return}let o=this._series.get(n);if(!o){if(!this._admitNewSeries())return;o={name:t.name,type:t.type,unit:t.unit,attributes:i,windowStartMs:Date.now()},this._series.set(n,o)}let s=this._typeByName.get(t.name);if(s===void 0)this._typeByName.set(t.name,t.type);else if(s!==t.type&&!this._typeCollisionWarned.has(t.name))this._typeCollisionWarned.add(t.name),this._logger.warn(`Metric name '${t.name}' is already used as a ${s}; recording it as a ${t.type} too will blend both series in charts. Use a distinct name.`);this._fold(o,t.value),this._armFlushTimer()}_admitNewSeries(){if(this._series.size<this._config.maxSeriesPerFlush)return!0;if(!this._seriesCapWarned)this._seriesCapWarned=!0,this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`);return!1}_fold(e,t){switch(e.type){case"count":e.total=(e.total??0)+t;break;case"gauge":e.last=t;break;case"histogram":{if(!e.hist)e.hist={count:0,sum:0,min:t,max:t,bucketCounts:Array(go.length+1).fill(0)};let i=e.hist;i.count+=1,i.sum+=t,i.min=Math.min(i.min,t),i.max=Math.max(i.max,t),i.bucketCounts[_p(t,go)]+=1;break}}}_runBeforeSend(e){let t=this._config.beforeSend;if(!t)return e;let i=st(t)?t:[t],n=e;for(let o of i)try{let s=o(n);if(!s)return this._logger.info("Metric was rejected in beforeSend function"),null;n=s}catch(s){return this._logger.error("Error in beforeSend function for metric:",s),null}return n}_armFlushTimer(){if(this._flushTimer)return;this._flushTimer=de(()=>{this._flushTimer=void 0,this.flush().catch((e)=>{this._logger.error("Metrics flush failed:",e)})},this._config.flushIntervalMs)}_clearFlushTimer(){if(this._flushTimer)clearTimeout(this._flushTimer),this._flushTimer=void 0}async _doFlush(){if(this._series.size===0)return;let e=this._series;this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set;let t=this._generation,i=await this._instance._sendMetricsBatch(this._buildPayload(e));if(t!==this._generation)return;switch(i.kind){case"ok":return;case"retry-later":this._mergeWindowBack(e),this._armFlushTimer();return;case"too-large":this._logger.warn("Metrics batch exceeded the server size limit and was dropped");return;case"fatal":this._logger.error("Failed to send metrics batch:",i.error);return}}_buildPayload(e){return kl(this._buildMetrics(e),vl(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._instance.getLibraryId(),this._instance.getLibraryVersion())}_buildMetrics(e){let t=Fl(Date.now()),i=new Map;for(let n of e.values()){let o=Hl(n.type,n.name,n.unit,void 0),s=i.get(o);if(!s){if(s={name:n.name,...n.unit&&{unit:n.unit}},n.type==="count")s.sum={aggregationTemporality:Kp,isMonotonic:!0,dataPoints:[]};else if(n.type==="gauge")s.gauge={dataPoints:[]};else s.histogram={aggregationTemporality:Kp,dataPoints:[]};i.set(o,s)}let r=ro(n.attributes??{}),g=Fl(n.windowStartMs);if(n.type==="count"){let a={attributes:r,startTimeUnixNano:g,timeUnixNano:t,asDouble:n.total??0};s.sum.dataPoints.push(a)}else if(n.type==="gauge"){let a={attributes:r,timeUnixNano:t,asDouble:n.last??0};s.gauge.dataPoints.push(a)}else if(n.hist){let a={attributes:r,startTimeUnixNano:g,timeUnixNano:t,count:n.hist.count,sum:n.hist.sum,min:n.hist.min,max:n.hist.max,bucketCounts:n.hist.bucketCounts,explicitBounds:go};s.histogram.dataPoints.push(a)}}return Array.from(i.values())}_mergeWindowBack(e){for(let[t,i]of e){let n=this._series.get(t);if(!n){if(this._admitNewSeries())this._series.set(t,i);continue}switch(n.windowStartMs=Math.min(n.windowStartMs,i.windowStartMs),n.type){case"count":n.total=(n.total??0)+(i.total??0);break;case"gauge":break;case"histogram":if(i.hist)if(n.hist){n.hist.count+=i.hist.count,n.hist.sum+=i.hist.sum,n.hist.min=Math.min(n.hist.min,i.hist.min),n.hist.max=Math.max(n.hist.max,i.hist.max);for(let o=0;o<n.hist.bucketCounts.length;o++)n.hist.bucketCounts[o]+=i.hist.bucketCounts[o]}else n.hist=i.hist;break}}}}class Pl{constructor(){this.events={},this.events={}}on(e,t){if(!this.events[e])this.events[e]=[];return this.events[e].push(t),()=>{this.events[e]=this.events[e].filter((i)=>i!==t)}}emit(e,t){for(let i of this.events[e]||[])i(t);for(let i of this.events["*"]||[])i(e,t)}}var Ve={};TW(Ve,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>_s,DOMExceptionCoercer:()=>gA,EXCEPTION_STEP_INTERNAL_FIELDS:()=>ao,ErrorCoercer:()=>Ts,ErrorEventCoercer:()=>aA,ErrorPropertiesBuilder:()=>Us,EventCoercer:()=>IA,ExceptionStepsBuffer:()=>CA,ObjectCoercer:()=>Ds,PrimitiveCoercer:()=>Qs,PromiseRejectionEventCoercer:()=>dA,ReduceableCache:()=>cA,StringCoercer:()=>zs,chromeStackLineParser:()=>Yl,createDefaultStackParser:()=>Xl,createStackParser:()=>rA,geckoStackLineParser:()=>Nl,getUtf8ByteLength:()=>uA,nodeStackLineParser:()=>iA,opera10StackLineParser:()=>qp,opera11StackLineParser:()=>eA,resolveExceptionStepsConfig:()=>Sl,reverseAndStripFrames:()=>sA,stripReservedExceptionStepFields:()=>zk,winjsStackLineParser:()=>$p});var Js,Lp,Es;function Mp(e){let t=globalThis._posthogChunkIds;if(!t)return;let i=Object.keys(t);if(Es&&i.length===Lp)return Es;return Lp=i.length,Es=i.reduce((n,o)=>{if(!Js)Js={};let s=Js[o];if(s)n[s[0]]=s[1];else{let r=e(o);for(let g=r.length-1;g>=0;g--){let l=r[g]?.filename,I=t[o];if(l&&I){n[l]=I,Js[o]=[l,I];break}}}return n},{}),Es}var Rk=4;class Us{constructor(e,t,i=[]){this.coercers=e,this.stackParser=t,this.modifiers=i}buildFromUnknown(e,t={}){let n=t&&t.mechanism||{handled:!0,type:"generic"},s=this.buildCoercingContext(n,t,0).apply(e),r=this.buildParsingContext(t),g=this.parseStacktrace(s,r);return{$exception_list:this.convertToExceptionList(g,n),$exception_level:"error"}}async modifyFrames(e){for(let t of e)if(t.stacktrace&&t.stacktrace.frames&&st(t.stacktrace.frames))t.stacktrace.frames=await this.applyModifiers(t.stacktrace.frames);return e}coerceFallback(e){return{type:"Error",value:"Unknown error",stack:e.syntheticException?.stack,synthetic:!0}}parseStacktrace(e,t){let i;if(e.cause!=null)i=this.parseStacktrace(e.cause,t);let n;if(e.stack!=""&&e.stack!=null)n=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?t.skipFirstLines:0),t.chunkIdMap);return{...e,cause:i,stack:n}}applyChunkIds(e,t){return e.map((i)=>{if(i.filename&&t)i.chunk_id=t[i.filename];return i})}applyCoercers(e,t){for(let i of this.coercers)if(i.match(e))return i.coerce(e,t);return this.coerceFallback(t)}async applyModifiers(e){let t=e;for(let i of this.modifiers)t=await i(t);return t}convertToExceptionList(e,t){let i={type:e.type,value:e.value,mechanism:{type:t.type??"generic",handled:t.handled??!0,synthetic:e.synthetic??!1}};if(e.stack)i.stacktrace={type:"raw",frames:e.stack};let n=[i];if(e.cause!=null)n.push(...this.convertToExceptionList(e.cause,{...t,handled:!0}));return n}buildParsingContext(e){return{chunkIdMap:Mp(this.stackParser),skipFirstLines:e.skipFirstLines??1}}buildCoercingContext(e,t,i=0){let n=(s,r)=>{if(!(r<=Rk))return;{let g=this.buildCoercingContext(e,t,r);return this.applyCoercers(s,g)}};return{...t,syntheticException:i==0?t.syntheticException:void 0,mechanism:e,apply:(s)=>n(s,i),next:(s)=>n(s,i+1)}}}var re="?";function rt(e,t,i,n,o){let s={platform:e,filename:t,function:i==="<anonymous>"?re:i,in_app:!0};if(!ni(n))s.lineno=n;if(!ni(o))s.colno=o;return s}var Os=(e,t)=>{let i=e.indexOf("safari-extension")!==-1,n=e.indexOf("safari-web-extension")!==-1;return i||n?[e.indexOf("@")!==-1?e.split("@")[0]:re,i?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var Gk=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,wk=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Fk=/\((\S*)(?::(\d+))(?::(\d+))\)/,Yl=(e,t)=>{let i=Gk.exec(e);if(i){let[,o,s,r]=i;return rt(t,o,re,+s,+r)}let n=wk.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let g=Fk.exec(n[2]);if(g)n[2]=g[1],n[3]=g[2],n[4]=g[3]}let[s,r]=Os(n[1]||re,n[2]);return rt(t,r,s,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var Hk=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,vk=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Nl=(e,t)=>{let i=Hk.exec(e);if(i){if(i[3]&&i[3].indexOf(" > eval")>-1){let r=vk.exec(i[3]);if(r)i[1]=i[1]||"eval",i[3]=r[1],i[4]=r[2],i[5]=""}let o=i[3],s=i[1]||re;return[s,o]=Os(s,o),rt(t,o,s,i[4]?+i[4]:void 0,i[5]?+i[5]:void 0)}};var kk=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,$p=(e,t)=>{let i=kk.exec(e);return i?rt(t,i[2],i[1]||re,+i[3],i[4]?+i[4]:void 0):void 0};var Pk=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,qp=(e,t)=>{let i=Pk.exec(e);return i?rt(t,i[2],i[3]||re,+i[1]):void 0},Yk=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,eA=(e,t)=>{let i=Yk.exec(e);return i?rt(t,i[5],i[3]||i[4]||re,+i[1],+i[2]):void 0};var Nk=/^\s*[-]{4,}$/,Xk=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,Sk=/^Promise\.(?:all|any)$/,xk=/^index \d+$/,Jk="node:internal/promise",iA=(e,t)=>{let i=e.match(Xk);if(i){let n,o,s,r,g;if(i[1]){s=i[1];let I=s.lastIndexOf(".");if(s[I-1]===".")I--;if(I>0){n=s.slice(0,I),o=s.slice(I+1);let d=n.indexOf(".Module");if(d>0)s=s.slice(d+1),n=n.slice(0,d)}r=void 0}if(o)r=n,g=o;if(o==="<anonymous>")g=void 0,s=void 0;if(s===void 0)g=g||re,s=r?`${r}.${g}`:g;let a=i[2]?.startsWith("file://")?i[2].slice(7):i[2],l=i[5]==="native";if(a?.match(/\/[A-Z]:/))a=a.slice(1);if(!a&&i[5]&&!l)a=i[5];if(Sk.test(s)&&xk.test(a||""))a=Jk;return{filename:a?decodeURI(a):void 0,module:void 0,function:s,lineno:tA(i[3]),colno:tA(i[4]),in_app:Ek(a||"",l),platform:t}}if(e.match(Nk))return{filename:e,platform:t}};function Ek(e,t=!1){return!(t||e&&!e.startsWith("/")&&!e.match(/^[A-Z]:/)&&!e.startsWith(".")&&!e.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&e!==void 0&&!e.includes("node_modules/")}function tA(e){return parseInt(e||"",10)||void 0}var nA=/\(error: (.*)\)/,oA=50;function sA(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,oA).map((i)=>({...i,filename:i.filename||Uk(t).filename,function:i.function||re}))}function Uk(e){return e[e.length-1]||{}}function Xl(){return rA("web:javascript",Yl,Nl)}function rA(e,...t){return(i,n=0)=>{let o=[],s=i.split(`
140
- `);for(let r=n;r<s.length;r++){let g=s[r];if(g.length>1024)continue;let a=nA.test(g)?g.replace(nA,"$1"):g;if(!a.match(/\S*Error: /)){for(let l of t){let I=l(a,e);if(I){o.push(I);break}}if(o.length>=oA)break}}return sA(o)}}class gA{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,t){let i=ht(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:i?e.stack:void 0,cause:e.cause?t.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){let t=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?`${t}: ${e.message}`:t}isDOMException(e){return oi(e,"DOMException")}isDOMError(e){return oi(e,"DOMError")}}class Ts{match(e){return Rp(e)}coerce(e,t){return{type:this.getType(e),value:this.getMessage(e,t),stack:this.getStack(e),cause:e.cause?t.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,t){let i=e.message;if(i.error&&typeof i.error.message=="string")return String(i.error.message);return String(i)}getStack(e){return e.stacktrace||e.stack||void 0}}class aA{constructor(){}match(e){return Gp(e)&&e.error!=null}coerce(e,t){let i=t.apply(e.error);if(!i)return{type:"ErrorEvent",value:e.message,stack:t.syntheticException?.stack,synthetic:!0};return i}}var Ok=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class zs{match(e){return typeof e=="string"}coerce(e,t){let[i,n]=this.getInfos(e);return{type:i??"Error",value:n??e,stack:t.syntheticException?.stack,synthetic:!0}}getInfos(e){let t="Error",i=e,n=e.match(Ok);if(n)t=n[1],i=n[2];return[t,i]}}var lA=["fatal","error","warning","log","info","debug"];function js(e,t=40){let i=Object.keys(e);if(i.sort(),!i.length)return"[object has no keys]";for(let n=i.length;n>0;n--){let o=i.slice(0,n).join(", ");if(!(o.length>t)){if(n===i.length)return o;return o.length<=t?o:`${o.slice(0,t)}...`}}return""}class Ds{match(e){return typeof e=="object"&&e!==null}coerce(e,t){let i=this.getErrorPropertyFromObject(e);if(i)return t.apply(i);return{type:this.getType(e),value:this.getValue(e),stack:t.syntheticException?.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return zi(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){let n=`'${e.name}' captured as exception`;if("message"in e&&typeof e.message=="string")n+=` with message: '${e.message}'`;return n}if("message"in e&&typeof e.message=="string")return e.message;let t=this.getObjectClassName(e),i=js(e);return`${t&&t!=="Object"?`'${t}'`:"Object"} captured as exception with keys: ${i}`}isSeverityLevel(e){return ht(e)&&!yp(e)&&lA.indexOf(e)>=0}getErrorPropertyFromObject(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let i=e[t];if(Qp(i))return i}}getObjectClassName(e){try{let t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch(t){return}}}class IA{match(e){return zi(e)}coerce(e,t){let i=e.constructor.name;return{type:i,value:`${i} captured as exception with keys: ${js(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}}class Qs{match(e){return vs(e)}coerce(e,t){return{type:"Error",value:`Primitive value captured as exception: ${String(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}}class dA{match(e){return oi(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!zi(e))return!1;try{let t=e.detail;return t!=null&&typeof t=="object"&&"reason"in t}catch{return!1}}coerce(e,t){let i=this.getUnhandledRejectionReason(e);if(vs(i))return{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(i)}`,stack:t.syntheticException?.stack,synthetic:!0};return t.apply(i)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}class cA{constructor(e){this._maxSize=e,this._cache=new Map}get(e){let t=this._cache.get(e);if(t===void 0)return;return this._cache.delete(e),this._cache.set(e,t),t}set(e,t){this._cache.set(e,t)}reduce(){while(this._cache.size>=this._maxSize){let e=this._cache.keys().next().value;if(e)this._cache.delete(e)}}}var ao={MESSAGE:"$message",TIMESTAMP:"$timestamp"},Tk=new Set([ao.MESSAGE,ao.TIMESTAMP]),_s={enabled:!0,max_bytes:32768};function Sl(e){if(!e)return{..._s};return{enabled:e.enabled??_s.enabled,max_bytes:jk(e.max_bytes,_s.max_bytes)}}function zk(e){if(!e)return{sanitizedProperties:{},droppedKeys:[]};let t=[];return{sanitizedProperties:Object.keys(e).reduce((n,o)=>{if(Tk.has(o))return t.push(o),n;return n[o]=e[o],n},{}),droppedKeys:t}}class CA{constructor(e){this._entries=[],this._totalBytes=0,this._config=Sl(e)}setConfig(e){this._config=Sl(e),this._trimToMaxBytes()}add(e){let t=Dk(e);if(!t)return;let i=uA(t.json);if(i>this._config.max_bytes)return;this._entries.push({step:t.step,bytes:i}),this._totalBytes+=i,this._trimToMaxBytes()}getAttachable(){return this._entries.map((e)=>e.step)}clear(){this._entries=[],this._totalBytes=0}size(){return this._entries.length}_trimToMaxBytes(){while(this._totalBytes>this._config.max_bytes&&this._entries.length>0){let e=this._entries.shift();if(e)this._totalBytes-=e.bytes}}}function jk(e,t){if(!no(e)||e===1/0||e===-1/0)return t;let i=Math.floor(e);if(i<0)return t;return i}function Dk(e){let t;try{t=Ti(e)}catch{return}try{let i=JSON.parse(t);if(!io(i))return;let n=i,o=n[ao.MESSAGE],s=n[ao.TIMESTAMP];if(!ht(o)||o.trim().length===0)return;if(!ht(s)&&!no(s))return;return{step:n,json:t}}catch{return}}function uA(e){if(typeof TextEncoder<"u")return new TextEncoder().encode(e).length;let t=encodeURIComponent(e),i=0;for(let n=0;n<t.length;n++)if(t[n]==="%")i+=1,n+=2;else i+=1;return i}class Jt extends Error{constructor(e,t){super("HTTP error while fetching PostHog: status="+e.status+", reqByteLength="+t),this.response=e,this.reqByteLength=t,this.name="PostHogFetchHttpError"}get status(){return this.response.status}get text(){return this.response.text()}get json(){return this.response.json()}}class ri extends Error{constructor(e){super("Network error while fetching PostHog",e instanceof Error?{cause:e}:{}),this.error=e,this.name="PostHogFetchNetworkError"}}var AA=(e,t)=>{for(let i of Object.keys(t))if(i.startsWith("$feature/")||i==="$active_feature_flags")e[i]=t[i]};async function mA(e){if(e instanceof Jt){let t="";try{t=await e.text}catch{}console.error(`Error while flushing PostHog: message=${e.message}, response body=${t}`,e)}else console.error("Error while flushing PostHog",e);return Promise.resolve()}function Qk(e){return typeof e=="object"&&(e instanceof Jt||ZA(e))}function ZA(e){return e instanceof ri}function _k(e){if(e instanceof Jt)return e.status===502||e.status===504;if(!(e instanceof ri))return!1;let t=e.error;return(t?.code??t?.cause?.code)!=="ECONNREFUSED"}function Qi(e){return typeof e=="object"&&e instanceof Jt&&e.status===413}function lo(e){if(e instanceof Jt)return e.status===408||e.status===429||e.status>=500;return ZA(e)}function pA(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var xl="default";class Ks{getErrorPropertiesBuilder(){if(!this._errorPropertiesBuilder)this._errorPropertiesBuilder=this.createErrorPropertiesBuilder();return this._errorPropertiesBuilder}createErrorPropertiesBuilder(){return new Us([new Ts,new Ds,new zs,new Qs],Xl())}constructor(e,t={}){this.flushPromise=null,this.pendingFlushPromise=null,this.flushPromises=new Set,this._dequeuedMessagesCount=0,this.shutdownPromise=null,this.promiseQueue=new Wl,this._events=new Pl,this._isInitialized=!1;let i=typeof e=="string"?e.trim():"",n=typeof t.host=="string"?t.host.trim():"",o=!i;if(this._logger=Pp("[PostHog]",this.logMsgIfDebug.bind(this)),o)this._logger.error("You must pass your PostHog project's api key. The client will be disabled.");if(this.apiKey=i,this.host=jp(n||"https://us.i.posthog.com"),this.flushAt=t.flushAt?Math.max(t.flushAt,1):20,this.maxBatchSize=Math.max(this.flushAt,t.maxBatchSize??100),this.maxQueueSize=Math.max(this.flushAt,t.maxQueueSize??1000),this.flushInterval=t.flushInterval??1e4,this.preloadFeatureFlags=t.preloadFeatureFlags??!0,this.defaultOptIn=t.defaultOptIn??!0,this.disableSurveys=t.disableSurveys??!1,this._retryOptions={retryCount:t.fetchRetryCount??3,retryDelay:t.fetchRetryDelay??3000,retryCheck:lo},this.requestTimeout=t.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=t.featureFlagsRequestTimeoutMs??3000,this.featureFlagsRequestMaxRetries=t.featureFlagsRequestMaxRetries??1,this.remoteConfigRequestTimeoutMs=t.remoteConfigRequestTimeoutMs??3000,this.disableGeoip=t.disableGeoip??!0,this.disabled=(t.disabled??!1)||o,this.historicalMigration=t?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this.evaluationContexts=t?.evaluationContexts??t?.evaluationEnvironments,t?.evaluationEnvironments&&!t?.evaluationContexts)this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version.");this.disableCompression=!Zl()||(t?.disableCompression??!1)}logMsgIfDebug(e){if(this.isDebug)e()}wrap(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return e();this._initPromise.then(()=>e())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(Ge.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(Ge.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(Ge.OptedOut,!0)})}on(e,t){return this._events.on(e,t)}debug(e=!0){if(this.removeDebugCallback?.(),e){let t=this.on("*",(i,n)=>this._logger.info(i,n));this.removeDebugCallback=()=>{t(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(e){let t=e.properties||{},i={...t,...this.getCommonEventProperties()};if(AA(i,t),e.event==="$feature_flag_called"&&i.$feature_flag_has_experiment===!1&&this.isMinimalFlagCalledEventsEnabled())i=eo(i);return{distinct_id:e.distinct_id,event:e.event,properties:i}}isMinimalFlagCalledEventsEnabled(){return!1}addPendingPromise(e){return this.promiseQueue.add(e)}identifyStateless(e,t,i){this.wrap(()=>{let n={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};this.enqueue("identify",n,i)})}async identifyStatelessImmediate(e,t,i){let n={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};await this.sendImmediate("identify",n,i)}captureStateless(e,t,i,n){this.wrap(()=>{let o=this.buildPayload({distinct_id:e,event:t,properties:i});this.enqueue("capture",o,n)})}async captureStatelessImmediate(e,t,i,n){let o=this.buildPayload({distinct_id:e,event:t,properties:i});await this.sendImmediate("capture",o,n)}aliasStateless(e,t,i,n){this.wrap(()=>{let o=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...i||{},distinct_id:t,alias:e}});this.enqueue("alias",o,n)})}async aliasStatelessImmediate(e,t,i,n){let o=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...i||{},distinct_id:t,alias:e}});await this.sendImmediate("alias",o,n)}groupIdentifyStateless(e,t,i,n,o,s){this.wrap(()=>{let r=this.buildPayload({distinct_id:o||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:i||{},...s||{}}});this.enqueue("capture",r,n)})}async groupIdentifyStatelessImmediate(e,t,i,n,o,s){let r=this.buildPayload({distinct_id:o||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:i||{},...s||{}}});await this.sendImmediate("capture",r,n)}async getRemoteConfig(){await this._initPromise;let e=this.host;if(e==="https://us.i.posthog.com")e="https://us-assets.i.posthog.com";else if(e==="https://eu.i.posthog.com")e="https://eu-assets.i.posthog.com";let t=`${e}/array/${this.apiKey}/config`,i={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(t,i,{retryCount:0},this.remoteConfigRequestTimeoutMs).then((n)=>n.json()).catch((n)=>{this._logger.error("Remote config could not be loaded",n),this._events.emit("error",n)})}async getFlags(e,t={},i={},n={},o={},s=!1){await this._initPromise;let r=s?"&config=true":"",g=`${this.host}/flags/?v=2${r}`,a={token:this.apiKey,distinct_id:e,groups:t,person_properties:i,group_properties:n,...o};if(i.$device_id)a.$device_id=i.$device_id;if(this.evaluationContexts&&this.evaluationContexts.length>0)a.evaluation_contexts=this.evaluationContexts;let l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(a)};return this._logger.info("Flags URL",g),this.fetchWithRetry(g,l,{retryCount:this.featureFlagsRequestMaxRetries,retryCheck:_k},this.featureFlagsRequestTimeoutMs).then((I)=>I.json()).then((I)=>({success:!0,response:Al(I)})).catch((I)=>(this._events.emit("error",I),{success:!1,error:this.categorizeRequestError(I)}))}categorizeRequestError(e){if(e instanceof Jt)return{type:"api_error",statusCode:e.status};if(e instanceof ri){let t=e.error;if(t instanceof Error&&(t.name==="AbortError"||t.name==="TimeoutError"))return{type:"timeout"};return{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(e,t,i={},n={},o={},s){await this._initPromise;let r=await this.getFeatureFlagDetailStateless(e,t,i,n,o,s);if(r===void 0)return{response:void 0,requestId:void 0};let g=qn(r.response);if(g===void 0)g=!1;return{response:g,requestId:r.requestId}}async getFeatureFlagDetailStateless(e,t,i={},n={},o={},s){await this._initPromise;let r=await this.getFeatureFlagDetailsStateless(t,i,n,o,s,[e]);if(r===void 0)return;return{response:r.flags[e],requestId:r.requestId,evaluatedAt:r.evaluatedAt}}async getFeatureFlagPayloadStateless(e,t,i={},n={},o={},s){await this._initPromise;let r=await this.getFeatureFlagPayloadsStateless(t,i,n,o,s,[e]);if(!r)return;let g=r[e];if(g===void 0)return null;return g}async getFeatureFlagPayloadsStateless(e,t={},i={},n={},o,s){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(e,t,i,n,o,s)).payloads}async getFeatureFlagsStateless(e,t={},i={},n={},o,s){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(e,t,i,n,o,s)}async getFeatureFlagsAndPayloadsStateless(e,t={},i={},n={},o,s){await this._initPromise;let r=await this.getFeatureFlagDetailsStateless(e,t,i,n,o,s);if(!r)return{flags:void 0,payloads:void 0,requestId:void 0};return{flags:r.featureFlags,payloads:r.featureFlagPayloads,requestId:r.requestId}}async getFeatureFlagDetailsStateless(e,t={},i={},n={},o,s){await this._initPromise;let r={geoip_disable:o??this.disableGeoip};if(s)r.flag_keys_to_evaluate=s;let g=await this.getFlags(e,t,i,n,r);if(!g.success)return;let a=g.response;if(a.errorsWhileComputingFlags)console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices");if(a.quotaLimited?.includes("feature_flags"))return console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:a?.requestId,quotaLimited:a.quotaLimited};return a}async getSurveysStateless(){if(await this._initPromise,this.disabled)return[];if(this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let e=`${this.host}/api/surveys/?token=${this.apiKey}`,t={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},n=(await this.fetchWithRetry(e,t).then((o)=>{if(o.status!==200||!o.json){let s=`Surveys API could not be loaded: ${o.status}`,r=Error(s);this._logger.error(r),this._events.emit("error",Error(s));return}return o.json()}).catch((o)=>{this._logger.error("Surveys API could not be loaded",o),this._events.emit("error",o)}))?.surveys;if(n)this._logger.info("Surveys fetched from API: ",JSON.stringify(n));return n??[]}get props(){if(!this._props)this._props=this.getPersistedProperty(Ge.Props);return this._props||{}}set props(e){this._props=e}async register(e){this.wrap(()=>{this.props={...this.props,...e},this.setPersistedProperty(Ge.Props,this.props)})}async unregister(e){this.wrap(()=>{delete this.props[e],this.setPersistedProperty(Ge.Props,this.props)})}processBeforeEnqueue(e){return e}async flushStorage(){}getQueueRouteKey(e){return xl}persistedQueueKeyForRoute(e){return Ge.Queue}getActiveQueueRoutes(){return[xl]}getRouteQueue(e){return this.getPersistedProperty(this.persistedQueueKeyForRoute(e))||[]}enqueue(e,t,i){this.wrap(()=>{if(this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let n=this.prepareMessage(t,i);if(n=this.processBeforeEnqueue(n),n===null)return;n=this.normalizeMessage(n);let o=this.persistedQueueKeyForRoute(this.getQueueRouteKey(n)),s=this.getPersistedProperty(o)||[];if(s.length>=this.maxQueueSize)s.shift(),this._logger.warn("Queue is full, the oldest event is dropped.");if(s.push({message:n}),this.setPersistedProperty(o,s),this._events.emit(e,n),s.length>=this.flushAt)this.flushBackground();if(this.flushInterval&&!this._flushTimer)this._flushTimer=de(()=>this.flushBackground(),this.flushInterval)})}async sendImmediate(e,t,i){if(this.disabled)return void this._logger.warn("The client is disabled");if(!this._isInitialized)await this._initPromise;if(this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let n=this.prepareMessage(t,i);if(n=this.processBeforeEnqueue(n),n===null)return;n=this.normalizeMessage(n);try{await this.sendBatch([n],void 0,this.getQueueRouteKey(n))}catch(o){this._events.emit("error",o)}}normalizeMessage(e){let{type:t,library:i,library_version:n,...o}=e,s=pA(o.properties)?o.properties:void 0;if(i!==void 0&&s?.$lib===void 0)s={...s||{},$lib:i};if(n!==void 0&&s?.$lib_version===void 0)s={...s||{},$lib_version:n};if(s)o.properties=s;return o.uuid=Xs(o.uuid,we),o}prepareMessage(e,t){let i={...e,timestamp:t?.timestamp?t?.timestamp:Rl(),uuid:Xs(t?.uuid,we)};if(t?.disableGeoip??this.disableGeoip){if(!pA(i.properties))i.properties={};i.properties.$geoip_disable=!0}if(i.distinctId)i.distinct_id=i.distinctId,delete i.distinctId;return i}clearFlushTimer(){if(this._flushTimer)clearTimeout(this._flushTimer),this._flushTimer=void 0}flushBackground(){if(this.pendingFlushPromise)return;this.flush().catch(async(e)=>{await mA(e)})}async waitForPendingPromises(e,t=[]){let i=t.filter((o)=>!!o),n=0;while(!0){let o=this.promiseQueue.getPromises([...i,...this.flushPromises],e);if(o.length===0)return;if(n>0)this._logger.debug(`flush() re-checking ${o.length} pending promise(s) before flushing`);await Promise.all(o.map((s)=>s.catch(()=>{}))),n++}}flushWithPendingPromises(){return this.flushInternal(!0)}flush(){return this.flushInternal(!1)}flushInternal(e){if(this.disabled)return Promise.resolve();if(!e&&this.pendingFlushPromise)return this.pendingFlushPromise;let t=this.flushPromise,i=this.promiseQueue.maxId,n=Promise.resolve().then(()=>{if(e)return this.waitForPendingPromises(i,[t,n])}).then(()=>Gl([t])).then(()=>{if(this.pendingFlushPromise===n)this.pendingFlushPromise=null;return this._flush()});return this.pendingFlushPromise=n,this.flushPromise=n,this.flushPromises.add(n),this.addPendingPromise(n),Gl([n]).then(()=>{if(this.flushPromises.delete(n),this.pendingFlushPromise===n)this.pendingFlushPromise=null;if(this.flushPromise===n)this.flushPromise=null}),n}getCustomHeaders(){let e=this.getCustomUserAgent(),t={};if(e&&e!=="")t["User-Agent"]=e;return t}async sendBatch(e,t,i=xl){let n={api_key:this.apiKey,batch:e,sent_at:Rl()};if(this.historicalMigration)n.historical_migration=!0;let o=Ti(n),s=`${this.host}/batch/`,r=this.disableCompression?null:await ii(o,this.isDebug),g={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...r!==null&&{"Content-Encoding":"gzip"}},body:r||o};await(await this.fetchWithRetry(s,g,t)).body?.cancel()?.catch(()=>{})}async _flush(){this.clearFlushTimer(),await this._initPromise;let e=this.getActiveQueueRoutes();if(!e.some((n)=>this.getRouteQueue(n).length>0))return;let t=[],i;for(let n of e)try{await this._flushRoute(n,t)}catch(o){if(i===void 0)i=o}if(i!==void 0)throw i;this._events.emit("flush",t)}async _flushRoute(e,t){let i=this.persistedQueueKeyForRoute(e),n=this.getPersistedProperty(i)||[];if(!n.length)return;let o=n.length,s=0;while(n.length>0&&s<o){let r=n.slice(0,this.maxBatchSize),g=r.map((I)=>I.message===void 0?I.message:this.normalizeMessage(I.message)),a=async()=>{let d=(this.getPersistedProperty(i)||[]).slice(r.length);this.setPersistedProperty(i,d),n=d,this._dequeuedMessagesCount+=r.length,await this.flushStorage()},l={retryCheck:(I)=>{if(Qi(I))return!1;return lo(I)}};try{await this.sendBatch(g,l,e)}catch(I){if(Qi(I)&&g.length>1){this.maxBatchSize=Math.max(1,Math.floor(g.length/2)),this._logger.warn(`Received 413 when sending batch of size ${g.length}, reducing batch size to ${this.maxBatchSize}`);continue}if(!(I instanceof ri))await a();throw this._events.emit("error",I),I}await a(),t.push(...g),s+=g.length}}async _sendLogsBatch(e){if(this.disabled)return{kind:"fatal",error:Error("The client is disabled")};let t=JSON.stringify(e),i=`${this.host}/i/v1/logs?token=${encodeURIComponent(this.apiKey)}`,n=this.disableCompression?null:await ii(t,this.isDebug),o={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...n!==null&&{"Content-Encoding":"gzip"}},body:n||t};try{return await this.fetchWithRetry(i,o,{retryCheck:(s)=>{if(Qi(s))return!1;return lo(s)}}),{kind:"ok"}}catch(s){if(Qi(s))return{kind:"too-large"};if(s instanceof ri)return{kind:"retry-later",error:s};return{kind:"fatal",error:s}}}async _sendMetricsBatch(e){if(this.disabled)return{kind:"fatal",error:Error("The client is disabled")};let t=JSON.stringify(e),i=`${this.host}/i/v1/metrics?token=${encodeURIComponent(this.apiKey)}`,n=this.disableCompression?null:await ii(t,this.isDebug),o={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...n!==null&&{"Content-Encoding":"gzip"}},body:n||t};try{return await this.fetchWithRetry(i,o,{retryCheck:(s)=>{if(Qi(s))return!1;return lo(s)}}),{kind:"ok"}}catch(s){if(Qi(s))return{kind:"too-large"};if(lo(s))return{kind:"retry-later",error:s};return{kind:"fatal",error:s}}}async fetchWithRetry(e,t,i,n){let o=t.body?t.body:"",s=-1;try{s=o instanceof Blob?o.size:Buffer.byteLength(o,zp)}catch{if(o instanceof Blob)s=o.size;else s=new TextEncoder().encode(o).length}return await Dp(async()=>{let r=new AbortController,g=n??this.requestTimeout,a=de(()=>r.abort(),g),l=null;try{l=await this.fetch(e,{signal:r.signal,...t})}catch(d){throw new ri(d)}finally{clearTimeout(a)}if(t.mode!=="no-cors"&&(l.status<200||l.status>=400))throw new Jt(l,s);return l},{...this._retryOptions,...i})}async _shutdown(e=30000){await this._initPromise;let t=!1;if(this.clearFlushTimer(),this.disabled)return;let i=async()=>{try{await this.promiseQueue.join();while(!0){if(!this.getActiveQueueRoutes().some((r)=>this.getRouteQueue(r).length>0))break;let s=this._dequeuedMessagesCount;if(await this.flush(),t)break;if(this._dequeuedMessagesCount===s){this._logger.warn("Shutdown flush completed but did not send any queued events. Stopping drain to avoid a loop.");break}}}catch(o){if(!Qk(o))throw o;await mA(o)}},n;try{return await Promise.race([new Promise((o,s)=>{n=de(()=>{this._logger.error("Timed out while shutting down PostHog"),t=!0,s("Timeout while shutting down PostHog. Some events may not have been sent.")},e)}),i()])}finally{clearTimeout(n)}}async shutdown(e=30000){if(this.shutdownPromise)this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup");else this.shutdownPromise=this._shutdown(e).finally(()=>{this.shutdownPromise=null});return this.shutdownPromise}}var hA=require("fs"),fA=require("readline"),Ls=new Ve.ReduceableCache(25),yA=new Ve.ReduceableCache(20),Jl=7,qk=1000,eP=1e4;async function VA(e){let t={};for(let o=e.length-1;o>=0;o--){let s=e[o],r=s?.filename;if(!s||typeof r!="string"||typeof s.lineno!="number"||oP(r)||sP(s))continue;if(!t[r])t[r]=[];t[r].push(s.lineno)}let i=Object.keys(t);if(i.length==0)return e;let n=[];for(let o of i){if(yA.get(o))continue;let s=t[o];if(!s)continue;s.sort((a,l)=>a-l);let r=gP(s);if(r.every((a)=>rP(o,a)))continue;let g=aP(Ls,o,{});n.push(tP(o,r,g))}if(await Promise.all(n).catch(()=>{}),e&&e.length>0)iP(e,Ls);return Ls.reduce(),e}function tP(e,t,i){return new Promise((n)=>{let o=hA.createReadStream(e),s=fA.createInterface({input:o});function r(){o.destroy(),n()}let g=0,a=0,l=t[a];if(l===void 0)return void r();let I=l[0],d=l[1];function u(){yA.set(e,1),s.close(),s.removeAllListeners(),r()}o.on("error",u),s.on("error",u),s.on("close",r),s.on("line",(c)=>{if(g++,g<I)return;if(i[g]=lP(c,0),g>=d){if(a===t.length-1){s.close(),s.removeAllListeners();return}a++;let C=t[a];if(C===void 0){s.close(),s.removeAllListeners();return}I=C[0],d=C[1]}})})}function iP(e,t){for(let i of e)if(i.filename&&i.context_line===void 0&&typeof i.lineno=="number"){let n=t.get(i.filename);if(n===void 0)continue;nP(i.lineno,i,n)}}function nP(e,t,i){if(t.lineno===void 0||i===void 0)return;t.pre_context=[];for(let o=BA(e);o<e;o++){let s=i[o];if(s===void 0)return void bA(t);t.pre_context.push(s)}if(i[e]===void 0)return void bA(t);t.context_line=i[e];let n=RA(e);t.post_context=[];for(let o=e+1;o<=n;o++){let s=i[o];if(s===void 0)break;t.post_context.push(s)}}function bA(e){delete e.pre_context,delete e.context_line,delete e.post_context}function oP(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function sP(e){if(e.lineno!==void 0&&e.lineno>eP)return!0;if(e.colno!==void 0&&e.colno>qk)return!0;return!1}function rP(e,t){let i=Ls.get(e);if(i===void 0)return!1;for(let n=t[0];n<=t[1];n++)if(i[n]===void 0)return!1;return!0}function gP(e){if(!e.length)return[];let t=0,i=e[0];if(typeof i!="number")return[];let n=WA(i),o=[];while(!0){if(t===e.length-1){o.push(n);break}let s=e[t+1];if(typeof s!="number")break;if(s<=n[1])n[1]=s+Jl;else o.push(n),n=WA(s);t++}return o}function WA(e){return[BA(e),RA(e)]}function BA(e){return Math.max(1,e-Jl)}function RA(e){return e+Jl}function aP(e,t,i){let n=e.get(t);if(n===void 0)return e.set(t,i),i;return n}function lP(e,t){let i=e,n=i.length;if(n<=150)return i;if(t>n)t=n;let o=Math.max(t-60,0);if(o<5)o=0;let s=Math.min(o+140,n);if(s>n-5)s=n;if(s===n)o=Math.max(s-140,0);if(i=i.slice(o,s),o>0)i=`...${i}`;if(s<n)i+="...";return i}var _i=require("path");function GA(e=process.cwd()){let t=_i.sep==="\\",i=(o)=>t?o.replace(/\\/g,"/"):o,n=i(e);return async(o)=>{for(let s of o)if(!(!s.filename||s.filename.startsWith("node:")||s.filename.startsWith("data:"))){if(_i.isAbsolute(s.filename))s.filename=i(_i.relative(n,i(s.filename)))}return o}}var wA="5.46.1";var ft={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};class gi{constructor(e){this._host=e.host,this._distinctId=e.distinctId,this._groups=e.groups,this._disableGeoip=e.disableGeoip,this._flags=e.flags,this._requestId=e.requestId,this._evaluatedAt=e.evaluatedAt,this._flagDefinitionsLoadedAt=e.flagDefinitionsLoadedAt,this._errorsWhileComputing=e.errorsWhileComputing??!1,this._quotaLimited=e.quotaLimited??!1,this._accessed=e.accessed??new Set,this._isSlice=e.isSlice??!1}isEnabled(e){let t=this._flags[e];return this._recordAccess(e),t?.enabled??!1}getFlag(e){let t=this._flags[e];if(this._recordAccess(e),!t)return;if(!t.enabled)return!1;return t.variant??!0}getFlagPayload(e){return this._flags[e]?.payload}onlyAccessed(){let e={};for(let t of this._accessed){let i=this._flags[t];if(i)e[t]=i}return this._cloneWith(e)}only(e){let t={},i=[];for(let n of e){let o=this._flags[n];if(o)t[n]=o;else i.push(n)}if(i.length>0)this._host.logWarning(`FeatureFlagEvaluations.only() was called with flag keys that are not in the evaluation set and will be dropped: ${i.join(", ")}`);return this._cloneWith(t)}get keys(){return Object.keys(this._flags)}_getEventProperties(){let e={},t=[];for(let[i,n]of Object.entries(this._flags)){let o=n.enabled===!1?!1:n.variant??!0;if(e[`$feature/${i}`]=o,n.enabled)t.push(i)}if(t.length>0)t.sort(),e.$active_feature_flags=t;return e}_cloneWith(e){return new gi({host:this._host,distinctId:this._distinctId,groups:this._groups,disableGeoip:this._disableGeoip,flags:e,requestId:this._requestId,evaluatedAt:this._evaluatedAt,flagDefinitionsLoadedAt:this._flagDefinitionsLoadedAt,errorsWhileComputing:this._errorsWhileComputing,quotaLimited:this._quotaLimited,accessed:new Set(this._accessed),isSlice:!0})}_recordAccess(e){if(this._accessed.add(e),this._distinctId==="")return;if(this._isSlice&&!(e in this._flags))return;let t=this._flags[e],i=t===void 0?void 0:t.enabled===!1?!1:t.variant??!0,n={$feature_flag:e,$feature_flag_response:i,$feature_flag_id:t?.id,$feature_flag_version:t?.version,$feature_flag_reason:t?.reason,locally_evaluated:t?.locallyEvaluated??!1,[`$feature/${e}`]:i,$feature_flag_request_id:this._requestId,$feature_flag_evaluated_at:t?.locallyEvaluated?Date.now():this._evaluatedAt};if(t?.hasExperiment!==void 0)n.$feature_flag_has_experiment=t.hasExperiment;if(t?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0)n.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt;let o=[];if(this._errorsWhileComputing)o.push(ft.ERRORS_WHILE_COMPUTING);if(this._quotaLimited)o.push(ft.QUOTA_LIMITED);if(t===void 0)o.push(ft.FLAG_MISSING);if(o.length>0)n.$feature_flag_error=o.join(",");this._host.captureFlagCalledEventIfNeeded({distinctId:this._distinctId,key:e,response:i,groups:this._groups,disableGeoip:this._disableGeoip,properties:n})}}async function FA(e){let t=globalThis.crypto?.subtle;if(!t)throw Error("SubtleCrypto API not available");let i=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(i)).map((o)=>o.toString(16).padStart(2,"0")).join("")}var IP=60000,dP=1152921504606847000,cP=["is_not","is_set"];class Ki extends Error{constructor(e){super();Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=e,Object.setPrototypeOf(this,Ki.prototype)}}function PA(e,t){e.name=t.name,Error.captureStackTrace(e,t),Object.setPrototypeOf(e,t.prototype)}class x extends Error{constructor(e){super(e);PA(this,x)}}class gt extends Error{constructor(e){super(e);PA(this,gt)}}class El{constructor({pollingInterval:e,personalApiKey:t,projectApiKey:i,timeout:n,host:o,customHeaders:s,...r}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=e,this.personalApiKey=t,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=n,this.projectApiKey=i,this.host=o,this.poller=void 0,this.fetch=r.fetch||fetch,this.onError=r.onError,this.customHeaders=s,this.onLoad=r.onLoad,this.onMinimalFlagCalledEvents=r.onMinimalFlagCalledEvents,this.cacheProvider=r.cacheProvider,this.strictLocalEvaluation=r.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(e=!0){this.debugMode=e}logMsgIfDebug(e){if(this.debugMode)e()}createEvaluationContext(e,t={},i={},n={},o={}){return{distinctId:e,groups:t,personProperties:i,groupProperties:n,evaluationCache:o}}async getFeatureFlag(e,t,i={},n={},o={}){await this.loadFeatureFlags();let s,r;if(!this.loadedSuccessfullyOnce)return s;if(r=this.featureFlagsByKey[e],r!==void 0){let g=this.createEvaluationContext(t,i,n,o);try{s=(await this.computeFlagAndPayloadLocally(r,g)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${e} -> ${s}`))}catch(a){if(a instanceof gt||a instanceof x)this.logMsgIfDebug(()=>console.debug(`${a.name} when computing flag locally: ${e}: ${a.message}`));else if(a instanceof Error)this.onError?.(Error(`Error computing flag locally: ${e}: ${a}`))}}return s}async getAllFlagsAndPayloads(e,t){await this.loadFeatureFlags();let i={},n={},o=this.featureFlags.length==0,s=t?t.map((g)=>this.featureFlagsByKey[g]).filter(Boolean):this.featureFlags,r={...e,evaluationCache:e.evaluationCache??{}};return await Promise.all(s.map(async(g)=>{try{let{value:a,payload:l}=await this.computeFlagAndPayloadLocally(g,r);if(i[g.key]=a,l)n[g.key]=l}catch(a){if(a instanceof gt||a instanceof x)this.logMsgIfDebug(()=>console.debug(`${a.name} when computing flag locally: ${g.key}: ${a.message}`));else if(a instanceof Error)this.onError?.(Error(`Error computing flag locally: ${g.key}: ${a}`));o=!0}})),{response:i,payloads:n,fallbackToFlags:o}}async computeFlagAndPayloadLocally(e,t,i={}){let{matchValue:n,skipLoadCheck:o=!1}=i;if(!o)await this.loadFeatureFlags();if(!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=n!==void 0?n:await this.computeFlagValueLocally(e,t);let r=this.getFeatureFlagPayload(e.key,s);return{value:s,payload:r}}async computeFlagValueLocally(e,t){let{distinctId:i,groups:n,personProperties:o,groupProperties:s}=t;if(!e.active)return!1;if(e.ensure_experience_continuity)throw new x("Flag has experience continuity enabled");let g=(e.filters||{}).aggregation_group_type_index;if(g!=null){let a=this.groupTypeMapping[String(g)];if(!a)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${g} for feature flag ${e.key}`)),new x("Flag has unknown group type index");if(!(a in n))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${e.key} without group names passed in`)),!1;if(e.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id===""))this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${e.key}`));let l=s[a];return await this.matchFeatureFlagProperties(e,n[a],l,t)}{let a=this.getBucketingValueForFlag(e,i,o);if(a===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${e.key} without $device_id, falling back to server evaluation`)),new x(`Can't compute feature flag: ${e.key} without $device_id`);return await this.matchFeatureFlagProperties(e,a,o,t)}}getBucketingValueForFlag(e,t,i){if(e.filters?.aggregation_group_type_index!=null)return t;if(e.bucketing_identifier==="device_id"){let n=i?.$device_id;if(n==null||n==="")return;return n}return t}getFeatureFlagPayload(e,t){let i=null;if(t!==!1&&t!=null){if(typeof t=="boolean")i=this.featureFlagsByKey?.[e]?.filters?.payloads?.[t.toString()]||null;else if(typeof t=="string")i=this.featureFlagsByKey?.[e]?.filters?.payloads?.[t]||null;if(i!=null){if(typeof i=="object")return i;if(typeof i=="string")try{return JSON.parse(i)}catch{}return i}}return null}async evaluateFlagDependency(e,t,i){let{evaluationCache:n}=i,o=e.key;if(!this.featureFlagsByKey)throw new x("Feature flags not available for dependency evaluation");if(!("dependency_chain"in e))throw new x(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=e.dependency_chain;if(!Array.isArray(s))throw new x(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new x(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let g of s){if(!(g in n)){let l=this.featureFlagsByKey[g];if(l)if(l.active)try{let I=await this.computeFlagValueLocally(l,i);n[g]=I}catch(I){throw new x(`Error evaluating flag dependency '${g}' for flag '${o}': ${I}`)}else n[g]=!1;else throw new x(`Missing flag dependency '${g}' for flag '${o}'`)}if(n[g]==null)throw new x(`Dependency '${g}' could not be evaluated`)}let r=n[o];return this.flagEvaluatesToExpectedValue(e.value,r)}flagEvaluatesToExpectedValue(e,t){if(typeof e=="boolean")return e===t||typeof t=="string"&&t!==""&&e===!0;if(typeof e=="string")return t===e;return!1}async matchFeatureFlagProperties(e,t,i,n){let o=e.filters||{},s=o.groups||[],r=o.aggregation_group_type_index,g=o.early_exit??!1,{groups:a,groupProperties:l}=n,I=!1,d;for(let u of s)try{let c=u.aggregation_group_type_index!==void 0?u.aggregation_group_type_index:r,C=i,A=t;if(c!==r){if(c!=null){let p=this.groupTypeMapping[String(c)];if(!p||!(p in a)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${e.key}': group type index ${c} not available`));continue}if(!(p in l)){I=!0;continue}C=l[p],A=a[p]}}let m=await this.isConditionMatch(e,A,u,C,n);if(m==="match"){let p=u.variant,Z=o.multivariate?.variants||[];d=p&&Z.some((W)=>W.key===p)?p:await this.getMatchingVariant(e,A)||!0;break}if(g&&m==="out_of_rollout_bound")return!1}catch(c){if(c instanceof gt)throw c;if(c instanceof x)I=!0;else throw c}if(d!==void 0)return d;if(I)throw new x("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(e,t,i,n,o){let s=i.rollout_percentage,r=(g)=>{this.logMsgIfDebug(()=>console.warn(g))};if((i.properties||[]).length>0){for(let g of i.properties){let a=g.type,l=!1;if(a==="cohort"){let I=await NA(g,n,this.cohorts,this.debugMode,(d)=>this.evaluateFlagDependency(d,n,o));l=g.operator==="not_in"?!I:I}else l=a==="flag"?await this.evaluateFlagDependency(g,n,o):YA(g,n,r);if(!l)return"no_match"}if(s==null)return"match"}if(s!=null&&await HA(e.key,t)>s/100)return"out_of_rollout_bound";return"match"}async getMatchingVariant(e,t){let i=await HA(e.key,t,"variant"),n=this.variantLookupTable(e).find((o)=>i>=o.valueMin&&i<o.valueMax);if(n)return n.key}variantLookupTable(e){let t=[],i=0,n=0;return((e.filters||{}).multivariate?.variants||[]).forEach((r)=>{n=i+r.rollout_percentage/100,t.push({valueMin:i,valueMax:n,key:r.key}),i=n}),t}updateFlagState(e){this.featureFlags=e.flags,this.featureFlagsByKey=e.flags.reduce((t,i)=>(t[i.key]=i,t),{}),this.groupTypeMapping=e.groupTypeMapping,this.cohorts=e.cohorts,this.loadedSuccessfullyOnce=!0,this.onMinimalFlagCalledEvents?.(e.minimalFlagCalledEvents===!0)}warnAboutExperienceContinuityFlags(e){if(this.strictLocalEvaluation)return;let t=e.filter((i)=>i.ensure_experience_continuity);if(t.length>0)console.warn(`[PostHog] You are using local evaluation but ${t.length} flag(s) have experience continuity enabled: ${t.map((i)=>i.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(e){if(!this.cacheProvider)return!1;try{let t=await this.cacheProvider.getFlagDefinitions();if(t)return this.updateFlagState(t),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${e} (${t.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(t.flags),!0;return!1}catch(t){return this.onError?.(Error(`Failed to load from cache: ${t}`)),!1}}async loadFeatureFlags(e=!1){if(this.loadedSuccessfullyOnce&&!e)return;if(!e&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt)return void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period"));if(!this.loadingPromise)this.loadingPromise=this._loadFeatureFlags().catch((t)=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${t}`))).finally(()=>{this.loadingPromise=void 0});return this.loadingPromise}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){if(!this.shouldBeginExponentialBackoff)return this.pollingInterval;return Math.min(IP,this.pollingInterval*2**this.backOffCount)}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){if(this.poller)clearTimeout(this.poller),this.poller=void 0;this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval());try{let e=!0;if(this.cacheProvider)try{e=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(i){this.onError?.(Error(`Error in shouldFetchFlagDefinitions: ${i}`))}if(!e){if(await this.loadFromCache("Loaded flags from cache (skipped fetch)"))return;if(this.loadedSuccessfullyOnce)return}let t=await this._requestFeatureFlagDefinitions();if(!t)return;switch(t.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=t.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new Ki(`Your project key or secret key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.onMinimalFlagCalledEvents?.(!1);return;case 403:throw this.beginBackoff(),new Ki(`Your secret key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct secret and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new Ki(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let i=await t.json()??{};if(!("flags"in i))return void this.onError?.(Error(`Invalid response when getting feature flags: ${JSON.stringify(i)}`));this.flagsEtag=t.headers?.get("ETag")??void 0;let n={flags:i.flags??[],groupTypeMapping:i.group_type_mapping||{},cohorts:i.cohorts||{},minimalFlagCalledEvents:i.minimal_flag_called_events===!0};if(this.updateFlagState(n),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&e)try{await this.cacheProvider.onFlagDefinitionsReceived(n)}catch(o){this.onError?.(Error(`Failed to store in cache: ${o}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(n.flags);break}default:return}}catch(e){if(e instanceof Ki)this.onError?.(e)}}getPersonalApiKeyRequestOptions(e="GET",t){let i={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};if(t)i["If-None-Match"]=t;return{method:e,headers:i}}_requestFeatureFlagDefinitions(){let e=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,t=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),i=null;if(this.timeout&&typeof this.timeout=="number"){let n=new AbortController;i=de(()=>{n.abort()},this.timeout),t.signal=n.signal}try{let n=this.fetch;return n(e,t)}finally{clearTimeout(i)}}async stopPoller(e=30000){if(clearTimeout(this.poller),this.cacheProvider)try{let t=this.cacheProvider.shutdown();if(t instanceof Promise)await Promise.race([t,new Promise((i,n)=>setTimeout(()=>n(Error(`Cache shutdown timeout after ${e}ms`)),e))])}catch(t){this.onError?.(Error(`Error during cache shutdown: ${t}`))}}}async function HA(e,t,i=""){let n=await FA(`${e}.${t}${i}`);return parseInt(n.slice(0,15),16)/dP}function YA(e,t,i){let{key:n,value:o}=e,s=e.operator||"exact";if(n in t){if(s==="is_not_set")return!1}else{if(s==="is_not_set")return!0;throw new x(`Property ${n} not found in propertyValues`)}let r=t[n];if(r==null&&!cP.includes(s)){if(i)i(`Property ${n} cannot have a value of null/undefined with the ${s} operator`);return!1}function g(l,I){if(Array.isArray(l))return l.map((d)=>String(d).toLowerCase()).includes(String(I).toLowerCase());return String(l).toLowerCase()===String(I).toLowerCase()}function a(l,I,d){if(d==="gt")return l>I;if(d==="gte")return l>=I;if(d==="lt")return l<I;if(d==="lte")return l<=I;throw Error(`Invalid operator: ${d}`)}switch(s){case"exact":return g(o,r);case"is_not":return!g(o,r);case"is_set":return n in t;case"icontains":return String(r).toLowerCase().includes(String(o).toLowerCase());case"not_icontains":return!String(r).toLowerCase().includes(String(o).toLowerCase());case"regex":return vA(String(o))&&String(r).match(String(o))!==null;case"not_regex":return vA(String(o))&&String(r).match(String(o))===null;case"gt":case"gte":case"lt":case"lte":{let l=typeof o=="number"?o:parseFloat(String(o)),I;if(I=typeof r=="number"?r:r!=null?parseFloat(String(r)):NaN,Number.isFinite(l)&&Number.isFinite(I))return a(I,l,s);return a(String(r),String(o),s)}case"is_date_after":case"is_date_before":{if(typeof o=="boolean")throw new x("Date operations cannot be performed on boolean values");let l=AP(String(o));if(l==null)l=kA(o);if(l==null)throw new x(`Invalid date: ${o}`);let I=kA(r);if(["is_date_before"].includes(s))return I<l;return I>l}case"semver_eq":return Xe(ge(String(r)),ge(String(o)))===0;case"semver_neq":return Xe(ge(String(r)),ge(String(o)))!==0;case"semver_gt":return Xe(ge(String(r)),ge(String(o)))>0;case"semver_gte":return Xe(ge(String(r)),ge(String(o)))>=0;case"semver_lt":return Xe(ge(String(r)),ge(String(o)))<0;case"semver_lte":return Xe(ge(String(r)),ge(String(o)))<=0;case"semver_tilde":{let l=ge(String(r)),{lower:I,upper:d}=uP(String(o));return Xe(l,I)>=0&&Xe(l,d)<0}case"semver_caret":{let l=ge(String(r)),{lower:I,upper:d}=mP(String(o));return Xe(l,I)>=0&&Xe(l,d)<0}case"semver_wildcard":{let l=ge(String(r)),{lower:I,upper:d}=pP(String(o));return Xe(l,I)>=0&&Xe(l,d)<0}default:throw new x(`Unknown operator: ${s}`)}}function CP(e,t){if(!(e in t))throw new gt(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function NA(e,t,i,n=!1,o){let s=String(e.value);CP(s,i);let r=i[s];return XA(r,t,i,n,o)}async function XA(e,t,i,n=!1,o){if(!e)return!0;let{type:s,values:r}=e;if(!r||r.length===0)return!0;let g=!1;if("values"in r[0]){for(let a of r)try{let l=await XA(a,t,i,n,o);if(s==="AND"){if(!l)return!1}else if(l)return!0}catch(l){if(l instanceof gt)throw l;if(l instanceof x){if(n)console.debug(`Failed to compute property ${a} locally: ${l}`);g=!0}else throw l}if(g)throw new x("Can't match cohort without a given cohort property value");return s==="AND"}for(let a of r)try{let l;if(a.type==="cohort")l=await NA(a,t,i,n,o);else if(a.type==="flag"){if(!o)throw new x(`Flag dependency '${a.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);l=await o(a)}else l=YA(a,t);let I=a.negation||!1;if(s==="AND"){if(!l&&!I)return!1;if(l&&I)return!1}else{if(l&&!I)return!0;if(!l&&I)return!0}}catch(l){if(l instanceof gt)throw l;if(l instanceof x){if(n)console.debug(`Failed to compute property ${a} locally: ${l}`);g=!0}else throw l}if(g)throw new x("can't match cohort without a given cohort property value");return s==="AND"}function vA(e){try{return new RegExp(e),!0}catch(t){return!1}}function SA(e,t){if(!/^\d+$/.test(e))throw new x(`Invalid semver: ${t}`);if(e.length>1&&e[0]==="0")throw new x(`Invalid semver: ${t}`);return parseInt(e,10)}function ge(e){let i=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!i||i.startsWith("."))throw new x(`Invalid semver: ${e}`);let n=i.split("."),o=(a)=>{if(a===void 0||a==="")return 0;return SA(a,e)},s=o(n[0]),r=o(n[1]),g=o(n[2]);return[s,r,g]}function Xe(e,t){for(let i=0;i<3;i++){if(e[i]<t[i])return-1;if(e[i]>t[i])return 1}return 0}function uP(e){let t=ge(e),i=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:i,upper:n}}function mP(e){let t=ge(e),[i,n,o]=t,s=[i,n,o],r;return r=i>0?[i+1,0,0]:n>0?[0,n+1,0]:[0,0,o+1],{lower:s,upper:r}}function pP(e){let i=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!i)throw new x(`Invalid wildcard semver: ${e}`);let n=i.split("."),o=(a)=>{try{return SA(a,e)}catch{throw new x(`Invalid wildcard semver: ${e}`)}},s=o(n[0]),r,g;if(n.length===1)r=[s,0,0],g=[s+1,0,0];else{let a=o(n[1]);r=[s,a,0],g=[s,a+1,0]}return{lower:r,upper:g}}function kA(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new x(`${e} is in an invalid date format`)}throw new x(`The date provided ${e} must be a string, number, or date object`)}function AP(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,i=e.match(t),n=new Date(new Date().toISOString());if(!i)return null;{if(!i.groups)return null;let o=parseInt(i.groups.number);if(o>=1e4)return null;let s=i.groups.interval;if(s=="h")n.setUTCHours(n.getUTCHours()-o);else if(s=="d")n.setUTCDate(n.getUTCDate()-o);else if(s=="w")n.setUTCDate(n.getUTCDate()-7*o);else if(s=="m")n.setUTCMonth(n.getUTCMonth()-o);else{if(s!="y")return null;n.setUTCFullYear(n.getUTCFullYear()-o)}return n}}function ZP(e,t){let i=!1;return Object.assign((n)=>{let s=global.process.listeners("uncaughtException").filter((r)=>r.name!=="domainUncaughtExceptionClear"&&r._posthogErrorHandler!==!0).length===0;if(e(n,{mechanism:{type:"onuncaughtexception",handled:!1}}),!i&&s)i=!0,t(n)},{_posthogErrorHandler:!0})}function xA(e,t){globalThis.process?.on("uncaughtException",ZP(e,t))}function JA(e){globalThis.process?.on("unhandledRejection",(t)=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var bP=2000;class at{constructor(e,t,i){this.client=e,this._exceptionAutocaptureEnabled=t.enableExceptionAutocapture||!1,this._logger=i,this._rateLimiter=new bl({...Fp(t),refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(e){return io(e)&&"__posthog_previously_captured_error"in e&&e.__posthog_previously_captured_error===!0}static async buildEventMessage(e,t,i,n,o){let s={...o},r=e.buildFromUnknown(t,i);return r.$exception_list=await e.modifyFrames(r.$exception_list),{event:"$exception",distinctId:n,properties:{...r,...s},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){if(this.isEnabled())xA(this.onException.bind(this),this.onFatalError.bind(this)),JA(this.onException.bind(this))}onException(e,t){this.client.addPendingPromise((async()=>{if(!at.isPreviouslyCapturedError(e)){let i=await at.buildEventMessage(this.client.getErrorPropertiesBuilder(),e,t),o=i.properties?.$exception_list[0]?.type??"Exception";if(this._rateLimiter.consumeRateLimit(o))return void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:o});return this.client._capturePreparedEvent(i,!1)}})())}async onFatalError(e){console.error(e),await this.client.shutdown(bP),globalThis.process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}}class Ul{getProperty(e){return this._memoryStorage[e]}setProperty(e,t){this._memoryStorage[e]=t!==null?t:void 0}constructor(){this._memoryStorage={}}}function WP(e){return e==="v0"||e==="v1"}function EA(){let e=typeof process<"u"?process.env?.POSTHOG_CAPTURE_MODE:void 0;return WP(e)?e:"v0"}var Io="analytics",co="ai";function UA(e){return typeof e.event=="string"&&e.event.startsWith("$ai_")}class Li extends Error{constructor({requestId:e,drops:t,retryExhausted:i,cause:n}){super(Li.buildMessage(e,t,i,n)),this.name="CaptureV1Error",this.requestId=e,this.drops=t,this.retryExhausted=i,this.cause=n}static buildMessage(e,t,i,n){let o=`Capture V1 batch ${e} did not fully deliver: ${t.length} dropped, ${i.length} undelivered`;if(n instanceof Error)o+=` (${n.message})`;return o}}function Ol(e){if(typeof e=="boolean")return e;if(typeof e=="number")return e!==0;if(typeof e=="string"){let t=e.trim().toLowerCase();if(t==="true"||t==="1")return!0;if(t==="false"||t==="0")return!1}}function hP(e){return typeof e=="string"?e:void 0}var fP=[{property:"$cookieless_mode",optionKey:"cookieless_mode",coerce:Ol},{property:"$ignore_sent_at",optionKey:"disable_skew_correction",coerce:Ol},{property:"$process_person_profile",optionKey:"process_person_profile",coerce:Ol},{property:"$product_tour_id",optionKey:"product_tour_id",coerce:hP}],yP=[{property:"$session_id",field:"session_id"},{property:"$window_id",field:"window_id"}];function VP(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function BP(e){if(typeof e=="string"){let i=new Date(e);return Number.isNaN(i.getTime())?new Date().toISOString():e}if(e instanceof Date)return Number.isNaN(e.getTime())?new Date().toISOString():e.toISOString();let t=e==null?new Date:new Date(e);return Number.isNaN(t.getTime())?new Date().toISOString():t.toISOString()}function OA(e,t,i){if(i!==void 0&&!(t in e))e[t]=i}function RP(e){let i={...VP(e.properties)?e.properties:{}},n={};for(let{property:s,optionKey:r,coerce:g}of fP)if(s in i){let a=g(i[s]);if(a!==void 0)n[r]=a;delete i[s]}let o={};for(let{property:s,field:r}of yP)if(s in i){let g=i[s];if(typeof g=="string")o[r]=g;delete i[s]}return delete i.$lib,delete i.$lib_version,OA(i,"$set",e.$set),OA(i,"$set_once",e.$set_once),{event:String(e.event??""),uuid:String(e.uuid??""),distinct_id:String(e.distinct_id??""),timestamp:BP(e.timestamp),...o,options:n,properties:i}}function TA(e,{createdAt:t,historicalMigration:i}){let n={created_at:t,batch:e.map(RP)};if(i)n.historical_migration=!0;return n}var GP="/i/v1/analytics/events",wP=30000,FP=new Set([408,500,502,503,504]);class Tl{constructor(e,t){this.config=e,this.maxBackoffMs=e.maxBackoffMs??wP,this.fetchFn=t.fetch,this.onError=t.onError,this.now=t.now??Date.now,this.sleep=t.sleep??((i)=>new Promise((n)=>de(n,i))),this.generateRequestId=t.generateRequestId??we,this.compress=t.compress??ii}async sendV1Batch(e){if(e.length===0)return;let t=this.generateRequestId(),i=new Date(this.now()).toISOString(),{batch:n}=TA(e,{createdAt:i,historicalMigration:this.config.historicalMigration}),o=`${this.config.host}${GP}`,s=[],r=n,g=Math.max(1,this.config.maxAttempts);for(let a=1;a<=g;a++){let l=a===g,I=Ti({created_at:i,...this.config.historicalMigration?{historical_migration:!0}:{},batch:r}),d;try{d=await this.sendOnce(o,I,a,t)}catch(m){if(l)return this.surfaceBatchFailure(t,s,r,m);await this.sleep(this.backoffDelay(a));continue}let{status:u}=d;if(u<200||u>=300){if(!l&&FP.has(u)){let p=this.parseRetryAfter(d);await this.cancelBody(d),await this.sleep(this.backoffDelay(a,p));continue}let m=await this.buildHttpError(d,u);return this.surfaceBatchFailure(t,s,r,m)}let c;try{c=await this.parseResponse(d)}catch{return this.surfaceBatchFailure(t,s,r,Error(`Capture V1 returned an unparseable ${u} response body`))}let C=this.classify(r,c,s);if(C.length===0)return this.surfacePartialDrops(t,s);if(l)return void this.onError(new Li({requestId:t,drops:s,retryExhausted:C.map((m)=>m.uuid)}));r=C;let A=this.parseRetryAfter(d);await this.sleep(this.backoffDelay(a,A))}}async sendOnce(e,t,i,n){let o=this.buildHeaders(i,n),s=t;if(this.config.compressionEnabled){let a=await this.compress(t,this.config.isDebug);if(a!==null)s=a,o["Content-Encoding"]="gzip"}let r=new AbortController,g=de(()=>r.abort(),this.config.requestTimeoutMs);try{return await this.fetchFn(e,{method:"POST",headers:o,body:s,signal:r.signal})}finally{clearTimeout(g)}}buildHeaders(e,t){let i=`${this.config.libraryId}/${this.config.libraryVersion}`,n={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"PostHog-Sdk-Info":i,"PostHog-Attempt":String(e),"PostHog-Request-Id":t,"PostHog-Request-Timestamp":new Date(this.now()).toISOString()};if(this.config.userAgent)n["User-Agent"]=this.config.userAgent;return n}classify(e,t,i){let n=t.results??{},o=[];for(let s of e){let r=n[s.uuid];if(r){if(r.result==="drop")i.push({uuid:s.uuid,details:r.details??void 0});else if(r.result==="retry")o.push(s)}}return o}backoffDelay(e,t){let i=Math.min(this.config.initialRetryDelayMs*2**(e-1),this.maxBackoffMs);if(t===void 0)return i;return Math.max(i,Math.min(t,this.maxBackoffMs))}parseRetryAfter(e){let t=e.headers?.get("Retry-After");if(!t)return;let i=t.trim();if(/^\d+$/.test(i)){let s=parseInt(i,10);return Number.isFinite(s)&&s>0?1000*s:void 0}let n=Date.parse(i);if(Number.isNaN(n))return;let o=n-this.now();return o>0?o:void 0}async parseResponse(e){let t=await e.text(),i=JSON.parse(t);if(typeof i!="object"||i===null||Array.isArray(i))throw Error("unexpected response shape");let n=i.results;if(n!==void 0&&(typeof n!="object"||n===null||Array.isArray(n)))throw Error("unexpected results shape");return{results:n??{}}}async buildHttpError(e,t){let i="";try{i=(await e.text()).slice(0,512)}catch{}let n=i?`: ${i}`:"";return Error(`Capture V1 request failed with HTTP ${t}${n}`)}surfaceBatchFailure(e,t,i,n){this.onError(new Li({requestId:e,drops:t,retryExhausted:i.map((o)=>o.uuid),cause:n}))}surfacePartialDrops(e,t){if(t.length>0)this.onError(new Li({requestId:e,drops:t,retryExhausted:[]}))}async cancelBody(e){await e.body?.cancel()?.catch(()=>{})}}var HP=100,zA=30000,vP=50000,kP=50,PP=500,YP="https://us.i.posthog.com",jA=new Set;function Ms(e,t){if(jA.has(e))return;jA.add(e),console.warn(`[PostHog] ${t}`)}function NP(e){return typeof e=="string"?e.trim():""}function XP(e){return(typeof e=="string"?e.trim():"")||void 0}function SP(e){return(typeof e=="string"?e.trim():"")||YP}function xP(e){return(Array.isArray(e)?e:[e]).filter((i)=>typeof i=="string"&&i.trim().length>0)}function JP(e){if(!e)return{};let t={};for(let[n,o]of Object.entries(e))t[`$feature/${n}`]=o;let i=Object.keys(e).filter((n)=>e[n]!==!1).sort();if(i.length>0)t.$active_feature_flags=i;return t}class zl extends Ks{constructor(e,t={}){let i=NP(e),n={...t,maxQueueSize:t.maxQueueSize??1e4,flushInterval:t.flushInterval??5000,host:SP(t.host),personalApiKey:XP(t.secretKey??t.personalApiKey)};if(super(i,n),this._memoryStorage=new Ul,this._minimalFlagCalledEvents=!1,this.options=n,this.captureMode=EA(),this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof n.featureFlagsPollingInterval=="number"?Math.max(n.featureFlagsPollingInterval,HP):zA,typeof n.waitUntilDebounceMs=="number")this.options.waitUntilDebounceMs=Math.max(n.waitUntilDebounceMs,0);if(typeof n.waitUntilMaxWaitMs=="number")this.options.waitUntilMaxWaitMs=Math.max(n.waitUntilMaxWaitMs,0);if(!this.disabled&&n.personalApiKey){if(n.personalApiKey.includes("phc_"))throw Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');if(n.enableLocalEvaluation!==!1)this.featureFlagsPoller=new El({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:n.personalApiKey,projectApiKey:i,timeout:n.requestTimeout??1e4,host:this.host,fetch:n.fetch,onError:(s)=>{this._events.emit("error",s)},onLoad:(s)=>{this._events.emit("localEvaluationFlagsLoaded",s)},onMinimalFlagCalledEvents:(s)=>{this._minimalFlagCalledEvents=s},customHeaders:this.getCustomHeaders(),cacheProvider:n.flagDefinitionCacheProvider,strictLocalEvaluation:n.strictLocalEvaluation})}this.errorTracking=new at(this,n,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=n.maxCacheSize||vP}enqueue(e,t,i){super.enqueue(e,t,i),this.scheduleDebouncedFlush()}async flush(){let e=this.flushWithPendingPromises(),t=this.options.waitUntil;if(t&&!this._waitUntilCycle)try{t(e.catch(()=>{}))}catch{}return e}scheduleDebouncedFlush(){let e=this.options.waitUntil;if(!e)return;if(this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,r=new Promise((g)=>{s=g});try{e(r)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let t=Date.now()-this._waitUntilCycle.startedAt,i=this.options.waitUntilMaxWaitMs??PP,n=t>=i;if(this._waitUntilCycle.timer!==void 0)clearTimeout(this._waitUntilCycle.timer);if(n)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??kP;this._waitUntilCycle.timer=de(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let e=this._waitUntilCycle;if(e)clearTimeout(e.timer),this._waitUntilCycle=void 0;return e?.resolve}async resolveWaitUntilFlush(){let e=this._consumeWaitUntilCycle();try{await this.flushWithPendingPromises()}catch{}finally{e?.()}}getPersistedProperty(e){return this._memoryStorage.getProperty(e)}setPersistedProperty(e,t){return this._memoryStorage.setProperty(e,t)}fetch(e,t){return this.options.fetch?this.options.fetch(e,t):fetch(e,t)}getQueueRouteKey(e){return this.captureMode==="v1"&&UA(e)?co:Io}persistedQueueKeyForRoute(e){return e===co?Ge.AiQueue:Ge.Queue}getActiveQueueRoutes(){return this.captureMode==="v1"?[Io,co]:[Io]}async sendBatch(e,t,i=Io){if(this.captureMode!=="v1"||i===co)return super.sendBatch(e,t,i);let n=e.filter((o)=>o!==void 0);await this.getV1Sender().sendV1Batch(n)}getV1Sender(){if(!this._v1Sender)this._v1Sender=new Tl({host:this.host,apiKey:this.apiKey,libraryId:this.getLibraryId(),libraryVersion:this.getLibraryVersion(),userAgent:this.getCustomUserAgent()||void 0,historicalMigration:this.historicalMigration,compressionEnabled:!this.disableCompression,requestTimeoutMs:this.requestTimeout,maxAttempts:(this.options.fetchRetryCount??3)+1,initialRetryDelayMs:this.options.fetchRetryDelay??3000,isDebug:this.isDebug},{fetch:(e,t)=>this.fetch(e,t),onError:(e)=>this._events.emit("error",e)});return this._v1Sender}getLibraryVersion(){return wA}get metrics(){if(!this._metrics)this._metrics=new xs(this,Ss(this.options.metrics),this._logger);return this._metrics}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}getCommonEventProperties(){let e=super.getCommonEventProperties();if(this.options.isServer??!0)e.$is_server=!0;return e}enable(){return super.optIn()}disable(){return super.optOut()}debug(e=!0){super.debug(e),this.featureFlagsPoller?.debug(e)}_warnIfInvalidCapture(e,t,i){if(typeof e=="string")this._logger.warn(t);if(e.event==="$exception"&&!e._originatedFromCaptureException)this._logger.warn(i)}_sendPreparedEvent(e,t,i,n){return this.addPendingPromise(this._prepareEventMessage(t,n).then(({distinctId:o,event:s,properties:r,options:g})=>{let a={timestamp:g.timestamp,disableGeoip:g.disableGeoip,uuid:g.uuid},l={distinctId:o,event:s,properties:{...r,...this.getCommonEventProperties()}};return i?this.sendImmediate(e,l,a):this.enqueue(e,l,a)}).catch((o)=>{if(o)console.error(o)}))}_capturePreparedEvent(e,t){return this._sendPreparedEvent("capture",e,t)}capture(e){this._warnIfInvalidCapture(e,"Called capture() with a string as the first argument when an object was expected.","Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this._capturePreparedEvent(e,!1)}async captureImmediate(e){return this._warnIfInvalidCapture(e,"Called captureImmediate() with a string as the first argument when an object was expected.","Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this._capturePreparedEvent(e,!0)}identify({distinctId:e,properties:t={},disableGeoip:i}){let{$set:n,$set_once:o,$anon_distinct_id:s,...r}=t,l={$set:n||r,$set_once:o||{},$anon_distinct_id:s??void 0};this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:l,disableGeoip:i},!1,{includeContextProperties:!1})}async identifyImmediate({distinctId:e,properties:t={},disableGeoip:i}){let{$set:n,$set_once:o,$anon_distinct_id:s,...r}=t,l={$set:n||r,$set_once:o||{},$anon_distinct_id:s??void 0};await this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:l,disableGeoip:i},!0,{includeContextProperties:!1})}setPersonProperties({distinctId:e,properties:t={},propertiesOnce:i={}}){if(Object.keys(t).length===0&&Object.keys(i).length===0)return;let n={};if(Object.keys(t).length>0)n.$set=t;if(Object.keys(i).length>0)n.$set_once=i;this.capture({distinctId:e,event:"$set",properties:n})}unsetPersonProperties({distinctId:e,properties:t}){let i=xP(t);if(i.length===0)return;this.capture({distinctId:e,event:"$set",properties:{$unset:i}})}alias(e){this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!1,{includeContextProperties:!1})}async aliasImmediate(e){await this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!0,{includeContextProperties:!1})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady(e=zA){if(this.isLocalEvaluationReady())return!0;if(this.featureFlagsPoller===void 0)return!1;return new Promise((t)=>{let i=setTimeout(()=>{n(),t(!1)},e),n=this._events.on("localEvaluationFlagsLoaded",(o)=>{clearTimeout(i),n(),t(o>0)})})}_resolveDistinctId(e,t){if(typeof e=="string")return{distinctId:e,options:t};return{distinctId:this.context?.get()?.distinctId,options:e}}async _getFeatureFlagResult(e,t,i={},n){if(this.disabled)return void this._logger.warn("The client is disabled");let o=i.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&e in this._flagOverrides){let V=this._flagOverrides[e];if(V===void 0)return;let B=this._payloadOverrides?.[e];return{key:e,enabled:V!==!1,variant:typeof V=="string"?V:void 0,payload:B}}let{groups:s,disableGeoip:r}=i,{onlyEvaluateLocally:g,personProperties:a,groupProperties:l}=i,I=this.addLocalPersonAndGroupProperties(t,s,a,l);a=I.allPersonProperties,l=I.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(t,s,this.personPropertiesForLocalEvaluation(t,a),l);if(g==null)g=this.options.strictLocalEvaluation??!1;let u,c=!1,C,A,m,p,Z,W,h;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let V=this.featureFlagsPoller?.featureFlagsByKey[e];if(V)try{let B=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(V,d,{matchValue:n});if(B){c=!0;let F=B.value;p=V.id,W="Evaluated locally",h=V.has_experiment,u={key:e,enabled:F!==!1,variant:typeof F=="string"?F:void 0,payload:B.payload??void 0}}}catch(B){if(B instanceof gt||B instanceof x)this._logger?.info(`${B.name} when computing flag locally: ${e}: ${B.message}`);else throw B}}if(!c&&!g){let V=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,a,l,r,[e]);if(V===void 0)m=ft.UNKNOWN_ERROR;else{this._minimalFlagCalledEvents=V.minimalFlagCalledEvents===!0,C=V.requestId,A=V.evaluatedAt;let B=[];if(V.errorsWhileComputingFlags)B.push(ft.ERRORS_WHILE_COMPUTING);if(V.quotaLimited?.includes("feature_flags"))B.push(ft.QUOTA_LIMITED);let F=V.flags[e];if(F===void 0)B.push(ft.FLAG_MISSING);else{p=F.metadata?.id,Z=F.metadata?.version,W=F.reason?.description??F.reason?.code,h=F.metadata?.has_experiment;let R;if(F.metadata?.payload!==void 0)try{R=JSON.parse(F.metadata.payload)}catch{R=F.metadata.payload}u={key:e,enabled:F.enabled,variant:F.variant,payload:R}}if(B.length>0)m=B.join(",")}}if(o){let V=u===void 0?void 0:u.enabled===!1?!1:u.variant??!0,B={$feature_flag:e,$feature_flag_response:V,$feature_flag_id:p,$feature_flag_version:Z,$feature_flag_reason:W,locally_evaluated:c,[`$feature/${e}`]:V,$feature_flag_request_id:C,$feature_flag_evaluated_at:c?Date.now():A};if(h!==void 0)B.$feature_flag_has_experiment=h;if(c&&this.featureFlagsPoller){let F=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();if(F!==void 0)B.$feature_flag_definitions_loaded_at=F}if(m)B.$feature_flag_error=m;this._captureFlagCalledEventIfNeeded({distinctId:t,key:e,response:V,groups:s,disableGeoip:r,properties:B})}if(u!==void 0&&this._payloadOverrides!==void 0&&e in this._payloadOverrides)u={...u,payload:this._payloadOverrides[e]};return u}async getFeatureFlag(e,t,i){Ms("getFeatureFlag","`getFeatureFlag` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlag(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let n=await this._getFeatureFlagResult(e,t,{...i,sendFeatureFlagEvents:i?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(n===void 0)return;if(n.enabled===!1)return!1;return n.variant??!0}async getFeatureFlagPayload(e,t,i,n){if(Ms("getFeatureFlagPayload","`getFeatureFlagPayload` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlagPayload(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request."),this._payloadOverrides!==void 0&&e in this._payloadOverrides)return this._payloadOverrides[e];let o=await this._getFeatureFlagResult(e,t,{...n,sendFeatureFlagEvents:!1},i);if(o===void 0)return;return o.payload??null}async getFeatureFlagResult(e,t,i){let{distinctId:n,options:o}=this._resolveDistinctId(t,i);if(!n)return void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()");return this._getFeatureFlagResult(e,n,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0})}async getRemoteConfigPayload(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(!this.options.personalApiKey)throw Error("Personal API key is required for remote config payload decryption");let t=await this._requestRemoteConfigPayload(e);if(!t)return;let i=await t.json();if(typeof i=="string")try{return JSON.parse(i)}catch(n){}return i}async isFeatureEnabled(e,t,i){Ms("isFeatureEnabled","`isFeatureEnabled` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.isEnabled(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let n=await this._getFeatureFlagResult(e,t,{...i,sendFeatureFlagEvents:i?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(n===void 0)return;if(n.enabled===!1)return!1;return!!(n.variant??!0)||!1}async getAllFlags(e,t){let{distinctId:i,options:n}=this._resolveDistinctId(e,t);if(!i)return this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{};return(await this.getAllFlagsAndPayloads(i,n)).featureFlags||{}}async getAllFlagsAndPayloads(e,t){let{distinctId:i,options:n}=this._resolveDistinctId(e,t);if(!i)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};if(this.disabled)return this._logger.warn("The client is disabled"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:r}=n||{},{onlyEvaluateLocally:g,personProperties:a,groupProperties:l}=n||{},I=this.addLocalPersonAndGroupProperties(i,o,a,l);a=I.allPersonProperties,l=I.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(i,o,this.personPropertiesForLocalEvaluation(i,a),l);if(g==null)g=this.options.strictLocalEvaluation??!1;let u=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,r),c={},C={},A=!0;if(u)c=u.response,C=u.payloads,A=u.fallbackToFlags;if(A&&!g){let m=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,a,l,s,r);c={...c,...m.flags||{}},C={...C,...m.payloads||{}}}if(this._flagOverrides!==void 0)c={...c,...this._flagOverrides};if(this._payloadOverrides!==void 0)C={...C,...this._payloadOverrides};return{featureFlags:c,featureFlagPayloads:C}}async evaluateFlags(e,t){let{distinctId:i,options:n}=this._resolveDistinctId(e,t);if(!i)return this._logger.warn("[PostHog] distinctId is required to evaluate feature flags \u2014 pass it explicitly or use withContext()"),new gi({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});if(this.disabled)return this._logger.warn("The client is disabled"),new gi({host:this._getFeatureFlagEvaluationsHost(),distinctId:i,flags:{}});let{groups:o,disableGeoip:s,flagKeys:r}=n||{},{onlyEvaluateLocally:g,personProperties:a,groupProperties:l}=n||{},I=this.addLocalPersonAndGroupProperties(i,o,a,l);a=I.allPersonProperties,l=I.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(i,o,this.personPropertiesForLocalEvaluation(i,a),l);if(g==null)g=this.options.strictLocalEvaluation??!1;let u={},c,C,A=!1,m=!1,p=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,r),Z=new Set;if(p)for(let[h,f]of Object.entries(p.response)){let V=this.featureFlagsPoller?.featureFlagsByKey[h];u[h]={key:h,enabled:f!==!1,variant:typeof f=="string"?f:void 0,payload:p.payloads[h],id:V?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0,hasExperiment:V?.has_experiment},Z.add(h)}if((p?p.fallbackToFlags:!0)&&!g){let h=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,a,l,s,r);if(h){this._minimalFlagCalledEvents=h.minimalFlagCalledEvents===!0,c=h.requestId,C=h.evaluatedAt,A=Boolean(h.errorsWhileComputingFlags),m=Array.isArray(h.quotaLimited)&&h.quotaLimited.includes("feature_flags");for(let[f,V]of Object.entries(h.flags)){if(Z.has(f))continue;let B;if(V.metadata?.payload!==void 0)try{B=JSON.parse(V.metadata.payload)}catch{B=V.metadata.payload}u[f]={key:f,enabled:V.enabled,variant:V.variant,payload:B,id:V.metadata?.id,version:V.metadata?.version,reason:V.reason?.description??V.reason?.code,locallyEvaluated:!1,hasExperiment:V.metadata?.has_experiment}}}}if(this._flagOverrides!==void 0)for(let[h,f]of Object.entries(this._flagOverrides)){if(f===void 0){delete u[h];continue}let V=u[h];u[h]={key:h,enabled:f!==!1,variant:typeof f=="string"?f:void 0,payload:V?.payload,id:V?.id,version:V?.version,reason:V?.reason,locallyEvaluated:V?.locallyEvaluated??!1,hasExperiment:V?.hasExperiment}}if(this._payloadOverrides!==void 0)for(let[h,f]of Object.entries(this._payloadOverrides)){let V=u[h];if(V)u[h]={...V,payload:f}}return new gi({host:this._getFeatureFlagEvaluationsHost(),distinctId:i,groups:o,disableGeoip:s,flags:u,requestId:c,evaluatedAt:C,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:A,quotaLimited:m})}_shouldSendMinimalFlagCalledEvent(e,t){return e==="$feature_flag_called"&&this._minimalFlagCalledEvents&&t.$feature_flag_has_experiment===!1}_captureFlagCalledEventIfNeeded(e){let{distinctId:t,key:i,response:n,groups:o,disableGeoip:s,properties:r}=e,g=o&&Object.keys(o).length>0?`_${JSON.stringify(Object.entries(o).sort(([l],[I])=>l<I?-1:l>I?1:0))}`:"",a=`${i}_${n}${g}`;if(t in this.distinctIdHasSentFlagCalls&&this.distinctIdHasSentFlagCalls[t].has(a))return;if(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize)this.distinctIdHasSentFlagCalls={};if(this.distinctIdHasSentFlagCalls[t]instanceof Set)this.distinctIdHasSentFlagCalls[t].add(a);else this.distinctIdHasSentFlagCalls[t]=new Set([a]);this.capture({distinctId:t,event:"$feature_flag_called",properties:r,groups:o,disableGeoip:s})}_getFeatureFlagEvaluationsHost(){if(!this._featureFlagEvaluationsHost)this._featureFlagEvaluationsHost={captureFlagCalledEventIfNeeded:(e)=>this._captureFlagCalledEventIfNeeded(e),logWarning:(e)=>{if(this.options.featureFlagsLogWarnings!==!1)console.warn(`[PostHog] ${e}`)}};return this._featureFlagEvaluationsHost}groupIdentify({groupType:e,groupKey:t,properties:i,distinctId:n,disableGeoip:o}){this._sendPreparedEvent("capture",{distinctId:n||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:i||{}},disableGeoip:o},!1,{includeContextProperties:!1})}async groupIdentifyImmediate({groupType:e,groupKey:t,properties:i,distinctId:n,disableGeoip:o}){await this._sendPreparedEvent("capture",{distinctId:n||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:i||{}},disableGeoip:o},!0,{includeContextProperties:!1})}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(e){let t=(i)=>Object.fromEntries(i.map((n)=>[n,!0]));if(e===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(e)){this._flagOverrides=t(e);return}if(this._isFeatureFlagOverrideOptions(e)){if("flags"in e){if(e.flags===!1)this._flagOverrides=void 0;else if(Array.isArray(e.flags))this._flagOverrides=t(e.flags);else if(e.flags!==void 0)this._flagOverrides={...e.flags}}if("payloads"in e){if(e.payloads===!1)this._payloadOverrides=void 0;else if(e.payloads!==void 0)this._payloadOverrides={...e.payloads}}return}this._flagOverrides={...e}}_isFeatureFlagOverrideOptions(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;if("flags"in t){let i=t.flags;if(i===!1||Array.isArray(i)||typeof i=="object"&&i!==null)return!0}if("payloads"in t){let i=t.payloads;if(i===!1||typeof i=="object"&&i!==null)return!0}return!1}withContext(e,t,i){if(!this.context)return t();return this.context.run(e,t,i)}getContext(){return this.context?.get()}enterContext(e,t){this.context?.enter(e,t)}async _shutdown(e){let t=Date.now()+(e??30000),i=this._consumeWaitUntilCycle();if(await this.featureFlagsPoller?.stopPoller(e),this.errorTracking.shutdown(),this._metrics)await Promise.race([this._metrics.flush().catch(()=>{}),new Promise((n)=>de(n,Math.max(0,t-Date.now())))]),this._metrics.reset();try{return await super._shutdown(Math.max(0,t-Date.now()))}finally{this.distinctIdHasSentFlagCalls={},i?.()}}async _requestRemoteConfigPayload(e){if(this.disabled||!this.apiKey||!this.options.personalApiKey)return;let t=`${this.host}/api/projects/@current/feature_flags/${e}/remote_config?token=${encodeURIComponent(this.apiKey)}`,i={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},n=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;n=de(()=>{o.abort()},this.options.requestTimeout),i.signal=o.signal}try{return await this.fetch(t,i)}catch(o){this._events.emit("error",o);return}finally{if(n)clearTimeout(n)}}extractPropertiesFromEvent(e,t){if(!e)return{personProperties:{},groupProperties:{}};let i={},n={};for(let[o,s]of Object.entries(e))if(wp(s)&&t&&o in t){let r={};for(let[g,a]of Object.entries(s))r[String(g)]=String(a);n[String(o)]=r}else i[String(o)]=String(s);return{personProperties:i,groupProperties:n}}async getFeatureFlagsForEvent(e,t,i,n){if(this.disabled||!this.apiKey)return void this._logger.warn("The client is disabled");let o=n?.personProperties||{},s=n?.groupProperties||{},r=n?.flagKeys;if(n?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if(!((this.featureFlagsPoller?.featureFlags?.length||0)>0))return{};else{let a={};for(let[l,I]of Object.entries(t||{}))a[l]=String(I);return await this.getAllFlags(e,{groups:a,personProperties:o,groupProperties:s,disableGeoip:i,onlyEvaluateLocally:!0,flagKeys:r})}if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let a={};for(let[l,I]of Object.entries(t||{}))a[l]=String(I);return await this.getAllFlags(e,{groups:a,personProperties:o,groupProperties:s,disableGeoip:i,onlyEvaluateLocally:!0,flagKeys:r})}return(await super.getFeatureFlagsStateless(e,t,o,s,i)).flags}addLocalPersonAndGroupProperties(e,t,i,n){let o={...i||{}},s={};if(t)for(let r of Object.keys(t))s[r]={$group_key:t[r],...n?.[r]||{}};return{allPersonProperties:o,allGroupProperties:s}}personPropertiesForLocalEvaluation(e,t){return{distinct_id:e,...t||{}}}createFeatureFlagEvaluationContext(e,t,i,n){return{distinctId:e,groups:t||{},personProperties:i||{},groupProperties:n||{},evaluationCache:{}}}captureException(e,t,i,n,o){if(!at.isPreviouslyCapturedError(e)){let s=Error("PostHog syntheticException");this.addPendingPromise(at.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:s},t,i).then((r)=>this._capturePreparedEvent({...r,uuid:n,flags:o},!1)))}}async captureExceptionImmediate(e,t,i,n){if(!at.isPreviouslyCapturedError(e)){let o=Error("PostHog syntheticException");return this.addPendingPromise(at.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:o},t,i).then((s)=>this.captureImmediate({...s,flags:n})))}}async prepareEventMessage(e){return this._prepareEventMessage(e)}async _prepareEventMessage(e,t={}){let{distinctId:i,event:n,properties:o,groups:s,flags:r,sendFeatureFlags:g,timestamp:a,disableGeoip:l,uuid:I}=e,d=this.context?.get(),u=t.includeContextProperties??!0,c=i||d?.distinctId,C=u?{...this.props,...d?.properties||{},...o||{}}:{...o||{}};if(!c)c=we(),C.$process_person_profile=!1;if(u&&d?.sessionId&&!C.$session_id)C.$session_id=d.sessionId;let A=this._shouldSendMinimalFlagCalledEvent(n,C)?eo(C):C,m=this._runBeforeSend({distinctId:c,event:n,properties:A,groups:s,flags:r,sendFeatureFlags:g,timestamp:a,disableGeoip:l,uuid:I});if(!m)return Promise.reject(null);let p=await Promise.resolve().then(async()=>{if(r){if(g)console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`.");return r._getEventProperties()}if(g){Ms("sendFeatureFlags","`sendFeatureFlags` is deprecated and will be removed in a future major version. Pass a `flags` snapshot from `posthog.evaluateFlags(...)` instead \u2014 it avoids a second `/flags` request per capture and guarantees the event carries the exact flag values your code branched on.");let Z=typeof g=="object"?g:void 0,W=await this.getFeatureFlagsForEvent(m.distinctId,s,l,Z);return JP(W)}return{}}).catch(()=>({})).then((Z)=>{let W=m.groups||s;return{...Z,...m.properties||{},...W!==void 0&&Object.keys(W).length>0?{$groups:W}:{}}});if(m.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof p.$raw_user_agent=="string"){if(hp(p.$raw_user_agent,this.options.custom_blocked_useragents||[]))m.event="$bot_pageview",p.$browser_type="bot"}return{distinctId:m.distinctId,event:m.event,properties:p,options:{timestamp:m.timestamp,disableGeoip:m.disableGeoip,uuid:m.uuid}}}_runBeforeSend(e){let t=this.options.before_send;if(!t)return e;let i=Array.isArray(t)?t:[t],n=e;for(let o of i){if(n=o(n),!n)return this._logger.info(`Event '${e.event}' was rejected in beforeSend function`),null;if(!n.properties||Object.keys(n.properties).length===0){let s=`Event '${n.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(s)}}return n}}var DA=require("async_hooks");class jl{constructor(){this.storage=new DA.AsyncLocalStorage}get(){return this.storage.getStore()}run(e,t,i){return this.storage.run(this.resolve(e,i),t)}enter(e,t){this.storage.enterWith(this.resolve(e,t))}resolve(e,t){if(t?.fresh===!0)return e;let i=this.get()||{};return{distinctId:e.distinctId??i.distinctId,sessionId:e.sessionId??i.sessionId,properties:{...i.properties||{},...e.properties||{}}}}}function EP(e,{organization:t,projectId:i,prefix:n,severityAllowList:o=["error"],sendExceptionsToPostHog:s=!0}={}){return(r)=>{if(!(o==="*"||o.includes(r.level)))return r;if(!r.tags)r.tags={};let a=r.tags[QA.POSTHOG_ID_TAG];if(a===void 0)return r;let l=e.options.host??"https://us.i.posthog.com",I=new URL(`/project/${e.apiKey}/person/${a}`,l).toString();r.tags["PostHog Person URL"]=I;let d=r.exception?.values||[],u=d.map((C)=>({...C,stacktrace:C.stacktrace?{...C.stacktrace,type:"raw",frames:(C.stacktrace.frames||[]).map((A)=>({...A,platform:"node:javascript"}))}:void 0})),c={$exception_message:d[0]?.value||r.message,$exception_type:d[0]?.type,$exception_level:r.level,$exception_list:u,$sentry_event_id:r.event_id,$sentry_exception:r.exception,$sentry_exception_message:d[0]?.value||r.message,$sentry_exception_type:d[0]?.type,$sentry_tags:r.tags};if(t&&i)c.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+i+"&query="+r.event_id;if(s)e.capture({event:"$exception",distinctId:a,properties:c});return r}}class QA{static#i=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(e,t,i,n,o){this.name="posthog-node",this.name="posthog-node",this.setupOnce=function(s,r){let g=r()?.getClient()?.getDsn()?.projectId;s(EP(e,{organization:t,projectId:g,prefix:i,severityAllowList:n,sendExceptionsToPostHog:o??!0}))}}}class Dl extends zl{getLibraryId(){return"posthog-node"}initializeContext(){return new jl}createErrorPropertiesBuilder(){return new Ve.ErrorPropertiesBuilder([new Ve.EventCoercer,new Ve.ErrorCoercer,new Ve.ObjectCoercer,new Ve.StringCoercer,new Ve.PrimitiveCoercer],Ve.createStackParser("node:javascript",Ve.nodeStackLineParser),[Zp(),VA,GA()])}}var Se=(e)=>{if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"||t==="on"},Mi=(e)=>{if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="0"||t==="false"||t==="no"||t==="off"};var ie=require("fs/promises"),Ce=require("path");var $s={name:"@toloka-platform/sdk",version:"0.1.0-preview.8",private:!1,description:"Preview. Build, inspect, and operate Toloka pipeline projects as TypeScript source. The public API may change.",license:"Apache-2.0",bin:{toloka:"bin/toloka.js"},files:["README.md","bin","docs","dist","examples","openapi/gen","skills","src"],type:"module",main:"./src/index.ts",exports:{".":"./src/index.ts","./testing":"./src/testing/index.ts","./checks":"./src/checks/index.ts","./examples/face-image-collection":"./examples/face-image-collection/pipeline.ts"},publishConfig:{access:"public",registry:"https://registry.npmjs.org/",tag:"preview"},scripts:{build:"bun ./scripts/build-cli.ts ./dist/cli",generate:"orval --config ./openapi/orval.config.js",prepack:"bun run build","sync-skill-catalog":"bun ./scripts/sync-skill-catalog.ts","sync-task-ui-declarations":"bun ./scripts/sync-task-ui-declarations.ts",test:"vitest run","test:browser":"vitest run --config vitest.browser.config.ts",typecheck:"tsc --noEmit"},dependencies:{"@inquirer/select":"5.2.1","@typescript/vfs":"1.6.2",ajv:"8.17.1","ajv-formats":"3.0.1",commander:"15.0.0","es-toolkit":"1.42.0","jsonpath-rfc9535":"1.3.0","oxc-parser":"0.138.0","posthog-node":"5.46.1","typescript-api":"npm:typescript@6.0.3"},devDependencies:{"@types/node":"24.10.1",orval:"7.17.0",playwright:"1.56.1",typescript:"7.0.2",vitest:"4.1.0",yaml:"2.9.0"},peerDependencies:{playwright:">=1.56.1 <2",vitest:">=4.1.0 <5"},peerDependenciesMeta:{playwright:{optional:!0},vitest:{optional:!0}},engines:{bun:"1.4.0"}};var _A=require("fs/promises"),KA=require("path"),qs=(e,...t)=>e instanceof Error&&("code"in e)&&typeof e.code==="string"&&t.includes(e.code),er=(e)=>qs(e,"ENOENT"),$i=async(e)=>{try{return await _A.lstat(e)}catch(t){if(er(t))return;throw t}},Co=async(e,t,i="write")=>{let n=e;for(let o of t.split("/")){n=KA.join(n,o);let s=await $i(n);if(s===void 0)return;b(!s.isSymbolicLink(),`Refusing to ${i} through symbolic link ${n}.`)}};var qA=require("crypto"),q=require("fs/promises"),ce=require("path"),eZ=require("url");var OP=(e)=>{let t=typeof e.body==="string"?e.body:e.body===void 0?void 0:JSON.stringify(e.body);return t===void 0||t.length===0?void 0:t},uo=(e)=>{if(e instanceof te){let t=OP(e);return t===void 0?e.message:`${e.message}
141
- ${t}`}return e instanceof Error?e.message:String(e)};var Ql=eZ.fileURLToPath(new URL("../../skills","file:///Users/gzarip/code/potato-5/packages/sdk/src/cli/skill.ts")),tr="catalog.json",en=".agents/skills",qi="SKILL.md",tZ="skills",LA=500,MA=1048576,iZ=64,TP=/^[a-z0-9]+(?:-[a-z0-9]+)*$/u,zP=/^[a-f0-9]{64}$/u,nZ=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e),$A=(e)=>Array.isArray(e)&&e.every((t)=>typeof t==="string"),_l=(e)=>typeof e==="string"&&e.trim().length>0,jP=(e)=>typeof e==="string"&&e.length<=iZ&&TP.test(e),DP=(e)=>!e.includes("\\")&&!e.includes("\x00")&&e.split("/").every((t)=>t.length>0&&t!=="."&&t!==".."),QP=(e,t)=>{b(nZ(e),t("every skill must be an object."));let{id:i,name:n,description:o,tags:s,version:r,digest:g,files:a}=e;return b(jP(i),t(`skill id ${JSON.stringify(i)} must be at most ${iZ} lowercase letters, digits, and single hyphens.`)),b(_l(n),t(`skill ${i} needs a name.`)),b(_l(o),t(`skill ${i} needs a description.`)),b($A(s),t(`skill ${i} tags must be strings.`)),b(_l(r),t(`skill ${i} needs a version.`)),b(typeof g==="string"&&zP.test(g),t(`skill ${i} digest must be the sha256 hex digest of its files.`)),b($A(a)&&a.includes(qi),t(`skill ${i} files must include ${qi}.`)),b(a.every(DP),t(`skill ${i} files must be relative paths inside its directory.`)),b(new Set(a).size===a.length,t(`skill ${i} lists a file more than once.`)),{id:i,name:n,description:o,tags:s,version:r,digest:g,files:a}},_P=(e,t)=>{try{return JSON.parse(e)}catch(i){throw Error(`Invalid skill catalog ${t}: ${uo(i)}`)}},oZ=async(e)=>{try{return(await q.stat(e)).isFile()}catch(t){if(qs(t,"ENOENT","ENOTDIR"))return!1;throw t}},sZ=async(e)=>{let t=ce.join(e,tZ);if(await oZ(ce.join(t,tr)))return t;let i=ce.dirname(e);return i===e?void 0:sZ(i)};async function KP(e=process.argv[1]){let t=e===void 0?void 0:await q.realpath(e),i=t===void 0?void 0:await sZ(ce.dirname(t));if(i!==void 0)return i;let n=t===void 0?"process.argv[1] names no runtime entry":`none exists between ${t} and the filesystem root`;return b(await oZ(ce.join(Ql,tr)),`Cannot locate the bundled skill catalog. An installed @toloka-platform/sdk must ship ${tZ}/${tr} in a directory above its runtime entry, but ${n}, and the source checkout catalog ${Ql} is absent. Reinstall @toloka-platform/sdk.`),Ql}var Kl=async()=>LP(await KP());async function LP(e){let t=ce.join(e,tr),i=(g)=>`Invalid skill catalog ${t}: ${g}`,{size:n}=await q.stat(t);b(n<=MA,i(`the manifest is ${n} bytes; the limit is ${MA} bytes.`));let o=_P(await q.readFile(t,"utf8"),t);b(nZ(o)&&Array.isArray(o.skills),i("expected an object with a skills array.")),b(o.skills.length<=LA,i(`${o.skills.length} skills exceed the limit of ${LA}.`));let s=o.skills.map((g)=>QP(g,i)),r=new Set;for(let g of s)b(!r.has(g.id),i(`skill id ${g.id} appears more than once.`)),r.add(g.id);return{root:e,manifestPath:t,skills:s}}async function rZ(e,t){let i=qA.createHash("sha256");for(let n of t.toSorted())i.update(n),i.update("\x00"),i.update(await q.readFile(ce.join(e,n))),i.update("\x00");return i.digest("hex")}var MP=(e,t)=>{let i=t.trim().toLowerCase().split(/\s+/u).filter(Boolean);if(i.length===0)return[];return e.map((n,o)=>{let s=[n.id,n.name,n.description,...n.tags].join(`
142
- `).toLowerCase();return{skill:n,index:o,score:i.filter((r)=>s.includes(r)).length}}).filter(({score:n})=>n>0).toSorted((n,o)=>o.score-n.score||n.index-o.index).map(({skill:n})=>n)};async function $P(e,t){let i=ce.join(e,en,t.id);if(await $i(i)===void 0)return"not-installed";try{return await rZ(i,t.files)===t.digest?"current":"stale"}catch(n){if(qs(n,"ENOENT","ENOTDIR"))return"stale";throw n}}var gZ=({sourceRoot:e,skills:t})=>Promise.all(t.map(async(i)=>({...i,status:await $P(e,i)}))),qP=async(e,t,i,n)=>{await e(i,n);try{await e(t,i)}catch(o){try{await e(n,i)}catch(s){throw Error(`Failed to replace ${i}; the previous version is preserved at ${n}. ${uo(s)}`,{cause:o})}throw o}await q.rm(n,{recursive:!0,force:!0})};async function eY({catalog:e,sourceRoot:t,skillId:i,force:n=!1,rename:o=q.rename}){let s=e.skills.find((d)=>d.id===i);b(s,`Skill ${JSON.stringify(i)} is not in the catalog. Run \`toloka skill list\` to see the available skills.`);let r=`${en}/${s.id}`;await Co(t,r);let g=ce.join(t,r),a=await $i(g);b(a===void 0||n,`${r} already exists. Re-run with --force to replace it with the catalog version of ${s.id}.`);let l=ce.dirname(g);await q.mkdir(l,{recursive:!0});let I=await q.mkdtemp(ce.join(l,`.${s.id}.tmp-`));try{for(let d of s.files){let u=ce.join(I,d);await q.mkdir(ce.dirname(u),{recursive:!0}),await q.copyFile(ce.join(e.root,s.id,d),u)}if(b(await rZ(I,s.files)===s.digest,`Skill ${s.id} failed its digest check: the packaged files do not match the catalog digest ${s.digest}. Nothing was installed.`),a===void 0)await o(I,g);else await qP(o,I,g,`${I}.backup`)}catch(d){throw await q.rm(I,{recursive:!0,force:!0}),d}return{skill:s,directory:g,replaced:a!==void 0}}var aZ=(e,t)=>{if(t)return JSON.stringify(e,void 0,2);let i=Math.max(...e.map((o)=>o.id.length)),n=Math.max(...e.map((o)=>o.status.length));return e.flatMap((o)=>[`${o.id.padEnd(i)} ${o.status.padEnd(n)} ${o.name}`,` ${o.description}`]).join(`
143
- `)};async function lZ({sourceRoot:e,json:t,io:i}){let n=await Kl();i.stdout(aZ(await gZ({sourceRoot:e,skills:n.skills}),t))}async function IZ({sourceRoot:e,query:t,json:i,io:n}){let o=await Kl(),s=await gZ({sourceRoot:e,skills:MP(o.skills,t)});if(i||s.length>0){n.stdout(aZ(s,i));return}n.stdout(`No skills match ${JSON.stringify(t)}. Run \`toloka skill list\` to see the catalog.`)}async function dZ({sourceRoot:e,skillId:t,force:i,io:n}){let o=await Kl(),s=await eY({catalog:o,sourceRoot:e,skillId:t,force:i}),r=`${en}/${s.skill.id}`,g=s.skill.files.length;n.stdout(`${s.replaced?"Replaced":"Installed"} ${s.skill.id} in ${r} (${g} ${g===1?"file":"files"}). Start with ${r}/${qi}.`)}var Fe=$s.version,_e="@toloka-platform/sdk",ql="toloka-bootstrap",CZ=`.claude/skills/${ql}/SKILL.md`,uZ=`.cursor/rules/${ql}.mdc`,ai="AGENTS.md",tY=[CZ,uZ,ai],tn={begin:"<toloka>",end:"</toloka>"},Ll={begin:"<!-- toloka:begin -->",end:"<!-- toloka:end -->"},Ml=/<!-- toloka:sdk-version ([^\s>]+) -->/u,mZ=["toloka-build","toloka-pipeline-as-code"].flatMap((e)=>[{file:`.claude/skills/${e}/SKILL.md`,directory:`.claude/skills/${e}`},{file:`.cursor/rules/${e}.mdc`}]),nn=async(e)=>{try{return await ie.readFile(e,"utf8")}catch(t){if(er(t))return;throw t}},$l=async(e)=>{try{return(await ie.lstat(e)).isDirectory()}catch(t){if(er(t))return!1;throw t}},eI=(e)=>Ml.test(e),pZ=`Generated by \`${_e}\` version \`${Fe}\`.
144
- <!-- toloka:sdk-version ${Fe} -->`,iY=`${tn.begin}
139
+ `)}}}var fZ=require("crypto"),Ii=require("fs/promises"),or=require("path");var Ti=require("path");function Vp(){let e=v5();return async(t)=>{for(let i of t)i.module=e(i.filename);return t}}function v5(e=process.argv[1]?Ti.dirname(process.argv[1]):process.cwd(),t=Ti.sep==="\\"){let i=t?yp(e):e;return(n)=>{if(!n)return;let o=t?yp(n):n,{dir:s,base:r,ext:g}=Ti.posix.parse(o);if(g===".js"||g===".mjs"||g===".cjs")r=r.slice(0,-1*g.length);let a=decodeURIComponent(r);if(!s)s=".";let l=s.lastIndexOf("/node_modules");if(l>-1)return`${s.slice(l+14).replace(/\//g,".")}:${a}`;if(s.startsWith(i)){let I=s.slice(i.length+1).replace(/\//g,".");return I?`${I}:${a}`:a}return a}}function yp(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var Zl=(e)=>{if("flags"in e){let t=Bp(e.flags),i=Rp(e.flags);return{...e,featureFlags:t,featureFlagPayloads:i}}{let t=e.featureFlags??{},i=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([o,s])=>[o,Hs(s)])),n=Object.fromEntries(Object.entries(t).map(([o,s])=>[o,k5(o,s,i[o])]));return{...e,featureFlags:t,featureFlagPayloads:i,flags:n}}};function k5(e,t,i){return{key:e,enabled:typeof t=="string"?!0:t,variant:typeof t=="string"?t:void 0,reason:void 0,metadata:{id:void 0,version:void 0,payload:i?JSON.stringify(i):void 0,description:void 0}}}var Bp=(e)=>Object.fromEntries(Object.entries(e??{}).map(([t,i])=>[t,io(i)]).filter(([,t])=>t!==void 0)),Rp=(e)=>{let t=e??{};return Object.fromEntries(Object.keys(t).filter((i)=>{let n=t[i];return n.enabled&&n.metadata&&n.metadata.payload!==void 0}).map((i)=>{let n=t[i].metadata?.payload;return[i,n?Hs(n):void 0]}))},io=(e)=>e===void 0?void 0:e.variant??e.enabled,Hs=(e)=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};var P5=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],no=(e,t=[])=>{let i={},n=(o)=>{if(e[o]!==void 0)i[o]=e[o]};return P5.forEach(n),t.forEach(n),i};var we=function(e){return e.AnonymousId="anonymous_id",e.DistinctId="distinct_id",e.Props="props",e.EnablePersonProcessing="enable_person_processing",e.PersonMode="person_mode",e.FeatureFlagDetails="feature_flag_details",e.FeatureFlags="feature_flags",e.FeatureFlagPayloads="feature_flag_payloads",e.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",e.BootstrapFeatureFlags="bootstrap_feature_flags",e.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",e.OverrideFeatureFlags="override_feature_flags",e.Queue="queue",e.AiQueue="ai_queue",e.LogsQueue="logs_queue",e.OptedOut="opted_out",e.SessionId="session_id",e.SessionStartTimestamp="session_start_timestamp",e.SessionLastTimestamp="session_timestamp",e.PersonProperties="person_properties",e.GroupProperties="group_properties",e.InstalledAppBuild="installed_app_build",e.InstalledAppVersion="installed_app_version",e.SessionReplay="session_replay",e.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",e.SurveyLastSeenDate="survey_last_seen_date",e.SurveysSeen="surveys_seen",e.Surveys="surveys",e.RemoteConfig="remote_config",e.FlagsEndpointWasHit="flags_endpoint_was_hit",e.DeviceId="device_id",e}({});function bl(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var N5="NativeGzipValidationError",X5=31,S5=139,x5=8,J5=(e)=>e.length>=2&&e[0]===X5&&e[1]===S5;var oo,E5=()=>{if(oo)return oo;oo=[];for(let e=0;e<256;e++){let t=e;for(let i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;oo[e]=t>>>0}return oo},U5=(e)=>{let t=E5(),i=4294967295;for(let n=0;n<e.length;n++)i=t[(i^e[n])&255]^i>>>8;return(4294967295^i)>>>0},vs=(e)=>{let t=Error(`Native gzip produced invalid output: ${e}`);throw t.name=N5,t},O5=async(e,t)=>{if(e.size<18)vs("too-short");let i=new Uint8Array(await e.slice(0,10).arrayBuffer());if(!J5(i)||i[2]!==x5)vs("invalid-header");let n=new DataView(await e.slice(e.size-8).arrayBuffer());if(n.getUint32(0,!0)!==U5(t))vs("invalid-crc");let o=t.length>>>0;if(n.getUint32(4,!0)!==o)vs("invalid-size")};async function ni(e,t=!0,i){try{let n=new TextEncoder().encode(e),o=new globalThis.CompressionStream("gzip"),s=o.writable.getWriter(),r=s.write(n).then(()=>s.close()).catch(async(l)=>{try{await s.abort(l)}catch{}throw l}),g=new Response(o.readable).blob(),[a]=await Promise.all([g,r]);return await O5(a,n),a}catch(n){if(i?.rethrow)throw n;if(t)console.error("Failed to gzip compress data",n);return null}}var T5=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],Gp=function(e,t=[]){if(!e)return!1;let i=e.toLowerCase();return T5.concat(t).some((n)=>{let o=n.toLowerCase();return i.indexOf(o)!==-1})};function zi(e){let t=[];return JSON.stringify(e,function(i,n){if(typeof n=="bigint")return n.toString();if(typeof n=="function"||typeof n=="symbol")return;if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){while(t.length>0&&t[t.length-1]!==this)t.pop();if(t.includes(n))return"[Circular]";t.push(n)}return n})??"null"}var j5=Array.isArray,wp=Object.prototype,Cx=wp.hasOwnProperty,ks=wp.toString,st=j5||function(e){return ks.call(e)==="[object Array]"};var so=(e)=>e===Object(e)&&!st(e);var oi=(e)=>e===void 0,ht=(e)=>ks.call(e)=="[object String]",Fp=(e)=>ht(e)&&e.trim().length===0,Hp=(e)=>e===null;var ro=(e)=>ks.call(e)=="[object Number]"&&e===e;var vp=(e)=>ks.call(e)==="[object Boolean]";var kp=(e)=>e instanceof Error;function Ps(e){return e===null||typeof e!="object"}function si(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function Pp(e){return si(e,"ErrorEvent")}function ji(e){return typeof Event<"u"&&D5(e,Event)}function Yp(e){return si(e,"Object")}function D5(e,t){try{return e instanceof t}catch{return!1}}function go(e,t,i,n,o){if(t>i)n.warn("min cannot be greater than max."),t=i;if(ro(e))if(e>i)return n.warn(" cannot be greater than max: "+i+". Using max value instead."),i;else{if(!(e<t))return e;return n.warn(" cannot be less than min: "+t+". Using min value instead."),t}return n.warn(" must be a number. using max or fallback. max: "+i+", fallback: "+o),go(o||i,t,i,n)}var Q5=86400000,_5=1,K5=10;function Np(e={}){return{refillRate:e.exceptionRateLimiterRefillRate??e.__exceptionRateLimiterRefillRate??_5,bucketSize:e.exceptionRateLimiterBucketSize??e.__exceptionRateLimiterBucketSize??K5}}class Wl{constructor(e){this._buckets={},this._onBucketRateLimited=e._onBucketRateLimited,this._bucketSize=go(e.bucketSize,0,100,e._logger),this._refillRate=go(e.refillRate,0,this._bucketSize,e._logger),this._refillInterval=go(e.refillInterval,0,Q5,e._logger)}_applyRefill(e,t){let i=t-e.lastAccess,n=Math.floor(i/this._refillInterval);if(n>0){let o=n*this._refillRate;e.tokens=Math.min(e.tokens+o,this._bucketSize),e.lastAccess=e.lastAccess+n*this._refillInterval}}consumeRateLimit(e){let t=Date.now(),i=String(e),n=this._buckets[i];if(n)this._applyRefill(n,t);else n={tokens:this._bucketSize,lastAccess:t},this._buckets[i]=n;if(n.tokens===0)return!0;if(n.tokens--,n.tokens===0)this._onBucketRateLimited?.(e);return n.tokens===0}stop(){this._buckets={}}}/*! For license information please see uuidv7.mjs.LICENSE.txt */class ri{constructor(e){this.bytes=e}static ofInner(e){if(e.length===16)return new ri(e);throw TypeError("not 128-bit length")}static fromFieldsV7(e,t,i,n){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(i)||!Number.isInteger(n)||e<0||t<0||i<0||n<0||e>281474976710655||t>4095||i>1073741823||n>4294967295)throw RangeError("invalid field value");let o=new Uint8Array(16);return o[0]=e/1099511627776,o[1]=e/4294967296,o[2]=e/16777216,o[3]=e/65536,o[4]=e/256,o[5]=e,o[6]=112|t>>>8,o[7]=t,o[8]=128|i>>>24,o[9]=i>>>16,o[10]=i>>>8,o[11]=i,o[12]=n>>>24,o[13]=n>>>16,o[14]=n>>>8,o[15]=n,new ri(o)}static parse(e){let t;switch(e.length){case 32:t=/^[0-9a-f]{32}$/i.exec(e)?.[0];break;case 36:t=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;case 38:t=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(e)?.slice(1,6).join("");break;case 45:t=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;default:break}if(t){let i=new Uint8Array(16);for(let n=0;n<16;n+=4){let o=parseInt(t.substring(2*n,2*n+8),16);i[n+0]=o>>>24,i[n+1]=o>>>16,i[n+2]=o>>>8,i[n+3]=o}return new ri(i)}throw SyntaxError("could not parse UUID string")}toString(){let e="";for(let t=0;t<this.bytes.length;t++)if(e+="0123456789abcdef".charAt(this.bytes[t]>>>4),e+="0123456789abcdef".charAt(15&this.bytes[t]),t===3||t===5||t===7||t===9)e+="-";return e}toHex(){let e="";for(let t=0;t<this.bytes.length;t++)e+="0123456789abcdef".charAt(this.bytes[t]>>>4),e+="0123456789abcdef".charAt(15&this.bytes[t]);return e}toJSON(){return this.toString()}getVariant(){let e=this.bytes[8]>>>4;if(e<0)throw Error("unreachable");if(e<=7)return this.bytes.every((t)=>t===0)?"NIL":"VAR_0";if(e<=11)return"VAR_10";if(e<=13)return"VAR_110";if(e<=15)return this.bytes.every((t)=>t===255)?"MAX":"VAR_RESERVED";else throw Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new ri(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(let t=0;t<16;t++){let i=this.bytes[t]-e.bytes[t];if(i!==0)return Math.sign(i)}return 0}}class Sp{constructor(e){this.timestamp=0,this.counter=0,this.random=e??L5()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(e,t){let i=this.generateOrAbortCore(e,t);if(i===void 0)this.timestamp=0,i=this.generateOrAbortCore(e,t);return i}generateOrAbortCore(e,t){if(!Number.isInteger(e)||e<1||e>281474976710655)throw RangeError("`unixTsMs` must be a 48-bit positive integer");if(t<0||t>281474976710655)throw RangeError("`rollbackAllowance` out of reasonable range");if(e>this.timestamp)this.timestamp=e,this.resetCounter();else{if(!(e+t>=this.timestamp))return;if(this.counter++,this.counter>4398046511103)this.timestamp++,this.resetCounter()}return ri.fromFieldsV7(this.timestamp,Math.trunc(this.counter/1073741824),this.counter&1073741823,this.random.nextUint32())}resetCounter(){this.counter=1024*this.random.nextUint32()+(1023&this.random.nextUint32())}generateV4(){let e=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return e[6]=64|e[6]>>>4,e[8]=128|e[8]>>>2,ri.ofInner(e)}}var L5=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),Xp,Fe=()=>M5().toString(),M5=()=>(Xp||(Xp=new Sp)).generate();class hl{add(e){let t=Fe(),i=++this.nextId;return this.promiseByIds[t]={id:i,promise:e},e.catch(()=>{}).finally(()=>{delete this.promiseByIds[t]}),e}async join(){let e=Object.values(this.promiseByIds).map((i)=>i.promise),t=e.length;while(t>0)await Promise.all(e),e=Object.values(this.promiseByIds).map((i)=>i.promise),t=e.length}getPromises(e=[],t=this.nextId){let i=new Set(e);return Object.values(this.promiseByIds).filter((n)=>n.id<=t&&!i.has(n.promise)).map((n)=>n.promise)}get maxId(){return this.nextId}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={},this.nextId=0}}function $5(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var xp=(e,t,i)=>{function n(s,...r){t(()=>{let g=i[s];g(e,...r)})}return{debug:(...s)=>{n("debug",...s)},info:(...s)=>{n("log",...s)},warn:(...s)=>{n("warn",...s)},error:(...s)=>{n("error",...s)},critical:(...s)=>{i.error(e,...s)},createLogger:(s)=>xp(`${e} ${s}`,t,i)}},q5=(e)=>e();function Jp(e,t=q5){return xp(e,t,$5())}var Qi="Mobile",Ns="iOS",Di="Android",zp="Tablet",Bx=Di+" "+zp;var tk="Apple",Rx=tk+" Watch",jp="Safari",Xs="BlackBerry",Dp="Samsung",ik=Dp+"Browser",nk=Dp+" Internet",Ss="Chrome",ok=Ss+" OS",sk=Ss+" "+Ns,Qp="Internet Explorer",rk=Qp+" "+Qi,yl="Opera",Gx=yl+" Mini",_p="Edge",gk="Microsoft "+_p,Vl="Firefox",ak=Vl+" "+Ns,Bl="Nintendo",Rl="PlayStation",Ys="Xbox",lk=Di+" "+Qi,Ik=Qi+" "+jp,ao="Windows",dk=ao+" Phone";var Kp="Generic",wx=Kp+" "+Qi.toLowerCase(),Fx=Kp+" "+zp.toLowerCase(),ck="Konqueror",Ck="Oculus Browser",Ep="Vivaldi",uk="Yandex",Up="Whale",mk="DuckDuckGo",pk="Pale Moon",Op="Waterfox",Tp="Brave",Ak="Google Search App",_="(\\d+(\\.\\d+)?)",fl=new RegExp("Version/"+_);var Hx=new RegExp(Ys,"i"),vx=new RegExp(Rl+" \\w+","i"),kx=new RegExp(Bl+" \\w+","i"),Zk=new RegExp(Xs+"|PlayBook|BB10","i"),bk={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000","5.1":"XP","5.2":"XP","6.0":"Vista","6.1":"7","6.2":"8","6.3":"8.1","6.4":"10","10.0":"10"};var Px={[rk]:[new RegExp("rv:"+_)],[gk]:[new RegExp(_p+"?\\/"+_)],[Ss]:[new RegExp("("+Ss+"|CrMo)\\/"+_)],[sk]:[new RegExp("CriOS\\/"+_)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+_)],[jp]:[fl],[Ik]:[fl],[yl]:[new RegExp("("+yl+"|OPR)\\/"+_)],[Vl]:[new RegExp(Vl+"\\/"+_)],[ak]:[new RegExp("FxiOS\\/"+_)],[ck]:[new RegExp("Konqueror[:/]?"+_,"i")],[Xs]:[new RegExp(Xs+" "+_),fl],[lk]:[new RegExp("android\\s"+_,"i")],[nk]:[new RegExp(ik+"\\/"+_)],[Ck]:[new RegExp("OculusBrowser\\/"+_)],[Ep]:[new RegExp(Ep+"\\/"+_)],[uk]:[new RegExp("YaBrowser\\/"+_)],[Up]:[new RegExp(Up+"\\/"+_)],[Tp]:[new RegExp(Tp+"\\/"+_)],[mk]:[new RegExp("(DuckDuckGo|Ddg)\\/"+_)],[pk]:[new RegExp("PaleMoon\\/"+_)],[Op]:[new RegExp(Op+"\\/"+_)],[Ak]:[new RegExp("GSA\\/"+_)],[Qp]:[new RegExp("(rv:|MSIE )"+_)],Mozilla:[new RegExp("rv:"+_)]};var Yx=[[new RegExp(Ys+"; "+Ys+" (.*?)[);]","i"),(e)=>[Ys,e&&e[1]||""]],[new RegExp(Bl,"i"),[Bl,""]],[new RegExp(Rl,"i"),[Rl,""]],[Zk,[Xs,""]],[new RegExp(ao,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[dk,""];if(new RegExp(Qi).test(t)&&!/IEMobile\b/.test(t))return[ao+" "+Qi,""];let i=/Windows NT ([0-9.]+)/i.exec(t);if(i&&i[1]){let n=i[1],o=bk[n]||"";if(/arm/i.test(t))o="RT";return[ao,o]}return[ao,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,(e)=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[Ns,t.join(".")]}return[Ns,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,(e)=>{let t="";if(e&&e.length>=3)t=oi(e[2])?e[3]:e[2];return["watchOS",t]}],[new RegExp("("+Di+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+Di+")","i"),(e)=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[Di,t.join(".")]}return[Di,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,(e)=>{let t=["Mac OS X",""];if(e&&e[1]){let i=[e[1],e[2],e[3]||"0"];t[1]=i.join(".")}return t}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[ok,""]],[/Linux|debian/i,["Linux",""]]];var Lp="utf8",Wk=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function hk(e){return typeof e=="string"&&Wk.test(e)}function xs(e,t){return hk(e)?e:t()}function Mp(e){return e?.replace(/\/+$/,"")}async function $p(e,t){let i=null;for(let n=0;n<t.retryCount+1;n++){if(n>0)await new Promise((o)=>setTimeout(o,t.retryDelay));try{return await e()}catch(o){if(i=o,!t.retryCheck(o))throw o}}throw i}function Gl(){return new Date().toISOString()}function de(e,t){let i=setTimeout(e,t);return i?.unref&&i?.unref(),i}var qp=(e)=>e instanceof Error;function wl(e){return Promise.all(e.map((t)=>(t??Promise.resolve()).then((i)=>({status:"fulfilled",value:i}),(i)=>({status:"rejected",reason:i}))))}var yk={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},Dx=yk.info;function Fl(e){if(vp(e))return{boolValue:e};if(typeof e=="number"){if(!Number.isFinite(e))return{stringValue:String(e)};if(Number.isInteger(e))return{intValue:e};return{doubleValue:e}}if(typeof e=="string")return{stringValue:e};if(st(e))return{arrayValue:{values:e.map((t)=>Fl(t))}};try{return{stringValue:JSON.stringify(e)}}catch{return{stringValue:String(e)}}}function lo(e){let t=[];for(let i in e){let n=e[i];if(!(Hp(n)||oi(n)))t.push({key:i,value:Fl(n)})}return t}var Io=[0,5,10,25,50,75,100,250,500,750,1000,2500,5000,7500,1e4];function Hl(e){return String(e)+"000000"}function vl(e,t,i,n){let o="";if(n)o=Object.keys(n).sort().map((r)=>`${JSON.stringify(r)}:${JSON.stringify(n[r])}`).join(",");return`${e}\x00${t}\x00${i??""}\x00${o}`}function eA(e,t){for(let i=0;i<t.length;i++)if(e<=t[i])return i;return t.length}function kl(e,t,i){return{...e.resourceAttributes,"service.name":e.serviceName||"unknown_service",...e.environment&&{"deployment.environment":e.environment},...e.serviceVersion&&{"service.version":e.serviceVersion},"telemetry.sdk.name":t,"telemetry.sdk.version":i}}function Pl(e,t,i,n){return{resourceMetrics:[{resource:{attributes:lo(t)},scopeMetrics:[{scope:{name:i,version:n},metrics:e}]}]}}function Js(e){let t=e?.resourceAttributes;return{serviceName:t?.["service.name"]??e?.serviceName,serviceVersion:t?.["service.version"]??e?.serviceVersion,environment:t?.["deployment.environment"]??e?.environment,resourceAttributes:t,beforeSend:e?.beforeSend,flushIntervalMs:e?.flushIntervalMs??1e4,maxSeriesPerFlush:e?.maxSeriesPerFlush??1000}}var tA=1;class Es{constructor(e,t,i){this._instance=e,this._config=t,this._logger=i,this._series=new Map,this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._generation=0}count(e,t=1,i){this._capture({name:e,type:"count",value:t,unit:i?.unit,attributes:i?.attributes})}gauge(e,t,i){this._capture({name:e,type:"gauge",value:t,unit:i?.unit,attributes:i?.attributes})}histogram(e,t,i){this._capture({name:e,type:"histogram",value:t,unit:i?.unit,attributes:i?.attributes})}flush(){let e=this._flushPromise,i=(async()=>{if(e)await e.catch(()=>{});await this._doFlush()})().finally(()=>{if(this._flushPromise===i)this._flushPromise=null});return this._flushPromise=i,i}drainWindow(){if(this._series.size===0)return null;let e=this._series;return this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._buildPayload(e)}reset(){this._generation++,this._clearFlushTimer(),this._series=new Map,this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set}_capture(e){if(this._instance.isDisabled||this._instance.optedOut)return;let t=this._runBeforeSend(e);if(t===null)return;if(!t.name||typeof t.name!="string")return void this._logger.warn("Dropping metric with empty name");if(typeof t.value!="number"||!Number.isFinite(t.value))return void this._logger.warn(`Dropping metric '${t.name}': value must be a finite number`);if(t.type==="count"&&t.value<0)return void this._logger.warn(`Dropping count '${t.name}': counters are monotonic, value must be >= 0`);let i,n;try{i=t.attributes?{...t.attributes}:void 0,n=vl(t.type,t.name,t.unit,i)}catch(r){this._logger.warn(`Dropping metric '${t.name}': attributes could not be serialized`,r);return}let o=this._series.get(n);if(!o){if(!this._admitNewSeries())return;o={name:t.name,type:t.type,unit:t.unit,attributes:i,windowStartMs:Date.now()},this._series.set(n,o)}let s=this._typeByName.get(t.name);if(s===void 0)this._typeByName.set(t.name,t.type);else if(s!==t.type&&!this._typeCollisionWarned.has(t.name))this._typeCollisionWarned.add(t.name),this._logger.warn(`Metric name '${t.name}' is already used as a ${s}; recording it as a ${t.type} too will blend both series in charts. Use a distinct name.`);this._fold(o,t.value),this._armFlushTimer()}_admitNewSeries(){if(this._series.size<this._config.maxSeriesPerFlush)return!0;if(!this._seriesCapWarned)this._seriesCapWarned=!0,this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`);return!1}_fold(e,t){switch(e.type){case"count":e.total=(e.total??0)+t;break;case"gauge":e.last=t;break;case"histogram":{if(!e.hist)e.hist={count:0,sum:0,min:t,max:t,bucketCounts:Array(Io.length+1).fill(0)};let i=e.hist;i.count+=1,i.sum+=t,i.min=Math.min(i.min,t),i.max=Math.max(i.max,t),i.bucketCounts[eA(t,Io)]+=1;break}}}_runBeforeSend(e){let t=this._config.beforeSend;if(!t)return e;let i=st(t)?t:[t],n=e;for(let o of i)try{let s=o(n);if(!s)return this._logger.info("Metric was rejected in beforeSend function"),null;n=s}catch(s){return this._logger.error("Error in beforeSend function for metric:",s),null}return n}_armFlushTimer(){if(this._flushTimer)return;this._flushTimer=de(()=>{this._flushTimer=void 0,this.flush().catch((e)=>{this._logger.error("Metrics flush failed:",e)})},this._config.flushIntervalMs)}_clearFlushTimer(){if(this._flushTimer)clearTimeout(this._flushTimer),this._flushTimer=void 0}async _doFlush(){if(this._series.size===0)return;let e=this._series;this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set;let t=this._generation,i=await this._instance._sendMetricsBatch(this._buildPayload(e));if(t!==this._generation)return;switch(i.kind){case"ok":return;case"retry-later":this._mergeWindowBack(e),this._armFlushTimer();return;case"too-large":this._logger.warn("Metrics batch exceeded the server size limit and was dropped");return;case"fatal":this._logger.error("Failed to send metrics batch:",i.error);return}}_buildPayload(e){return Pl(this._buildMetrics(e),kl(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._instance.getLibraryId(),this._instance.getLibraryVersion())}_buildMetrics(e){let t=Hl(Date.now()),i=new Map;for(let n of e.values()){let o=vl(n.type,n.name,n.unit,void 0),s=i.get(o);if(!s){if(s={name:n.name,...n.unit&&{unit:n.unit}},n.type==="count")s.sum={aggregationTemporality:tA,isMonotonic:!0,dataPoints:[]};else if(n.type==="gauge")s.gauge={dataPoints:[]};else s.histogram={aggregationTemporality:tA,dataPoints:[]};i.set(o,s)}let r=lo(n.attributes??{}),g=Hl(n.windowStartMs);if(n.type==="count"){let a={attributes:r,startTimeUnixNano:g,timeUnixNano:t,asDouble:n.total??0};s.sum.dataPoints.push(a)}else if(n.type==="gauge"){let a={attributes:r,timeUnixNano:t,asDouble:n.last??0};s.gauge.dataPoints.push(a)}else if(n.hist){let a={attributes:r,startTimeUnixNano:g,timeUnixNano:t,count:n.hist.count,sum:n.hist.sum,min:n.hist.min,max:n.hist.max,bucketCounts:n.hist.bucketCounts,explicitBounds:Io};s.histogram.dataPoints.push(a)}}return Array.from(i.values())}_mergeWindowBack(e){for(let[t,i]of e){let n=this._series.get(t);if(!n){if(this._admitNewSeries())this._series.set(t,i);continue}switch(n.windowStartMs=Math.min(n.windowStartMs,i.windowStartMs),n.type){case"count":n.total=(n.total??0)+(i.total??0);break;case"gauge":break;case"histogram":if(i.hist)if(n.hist){n.hist.count+=i.hist.count,n.hist.sum+=i.hist.sum,n.hist.min=Math.min(n.hist.min,i.hist.min),n.hist.max=Math.max(n.hist.max,i.hist.max);for(let o=0;o<n.hist.bucketCounts.length;o++)n.hist.bucketCounts[o]+=i.hist.bucketCounts[o]}else n.hist=i.hist;break}}}}class Yl{constructor(){this.events={},this.events={}}on(e,t){if(!this.events[e])this.events[e]=[];return this.events[e].push(t),()=>{this.events[e]=this.events[e].filter((i)=>i!==t)}}emit(e,t){for(let i of this.events[e]||[])i(t);for(let i of this.events["*"]||[])i(e,t)}}var Ve={};zW(Ve,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>Ls,DOMExceptionCoercer:()=>CA,EXCEPTION_STEP_INTERNAL_FIELDS:()=>co,ErrorCoercer:()=>js,ErrorEventCoercer:()=>uA,ErrorPropertiesBuilder:()=>Ts,EventCoercer:()=>pA,ExceptionStepsBuffer:()=>bA,ObjectCoercer:()=>_s,PrimitiveCoercer:()=>Ks,PromiseRejectionEventCoercer:()=>AA,ReduceableCache:()=>ZA,StringCoercer:()=>Ds,chromeStackLineParser:()=>Nl,createDefaultStackParser:()=>Sl,createStackParser:()=>cA,geckoStackLineParser:()=>Xl,getUtf8ByteLength:()=>WA,nodeStackLineParser:()=>aA,opera10StackLineParser:()=>sA,opera11StackLineParser:()=>rA,resolveExceptionStepsConfig:()=>xl,reverseAndStripFrames:()=>dA,stripReservedExceptionStepFields:()=>jk,winjsStackLineParser:()=>oA});var Us,iA,Os;function nA(e){let t=globalThis._posthogChunkIds;if(!t)return;let i=Object.keys(t);if(Os&&i.length===iA)return Os;return iA=i.length,Os=i.reduce((n,o)=>{if(!Us)Us={};let s=Us[o];if(s)n[s[0]]=s[1];else{let r=e(o);for(let g=r.length-1;g>=0;g--){let l=r[g]?.filename,I=t[o];if(l&&I){n[l]=I,Us[o]=[l,I];break}}}return n},{}),Os}var Gk=4;class Ts{constructor(e,t,i=[]){this.coercers=e,this.stackParser=t,this.modifiers=i}buildFromUnknown(e,t={}){let n=t&&t.mechanism||{handled:!0,type:"generic"},s=this.buildCoercingContext(n,t,0).apply(e),r=this.buildParsingContext(t),g=this.parseStacktrace(s,r);return{$exception_list:this.convertToExceptionList(g,n),$exception_level:"error"}}async modifyFrames(e){for(let t of e)if(t.stacktrace&&t.stacktrace.frames&&st(t.stacktrace.frames))t.stacktrace.frames=await this.applyModifiers(t.stacktrace.frames);return e}coerceFallback(e){return{type:"Error",value:"Unknown error",stack:e.syntheticException?.stack,synthetic:!0}}parseStacktrace(e,t){let i;if(e.cause!=null)i=this.parseStacktrace(e.cause,t);let n;if(e.stack!=""&&e.stack!=null)n=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?t.skipFirstLines:0),t.chunkIdMap);return{...e,cause:i,stack:n}}applyChunkIds(e,t){return e.map((i)=>{if(i.filename&&t)i.chunk_id=t[i.filename];return i})}applyCoercers(e,t){for(let i of this.coercers)if(i.match(e))return i.coerce(e,t);return this.coerceFallback(t)}async applyModifiers(e){let t=e;for(let i of this.modifiers)t=await i(t);return t}convertToExceptionList(e,t){let i={type:e.type,value:e.value,mechanism:{type:t.type??"generic",handled:t.handled??!0,synthetic:e.synthetic??!1}};if(e.stack)i.stacktrace={type:"raw",frames:e.stack};let n=[i];if(e.cause!=null)n.push(...this.convertToExceptionList(e.cause,{...t,handled:!0}));return n}buildParsingContext(e){return{chunkIdMap:nA(this.stackParser),skipFirstLines:e.skipFirstLines??1}}buildCoercingContext(e,t,i=0){let n=(s,r)=>{if(!(r<=Gk))return;{let g=this.buildCoercingContext(e,t,r);return this.applyCoercers(s,g)}};return{...t,syntheticException:i==0?t.syntheticException:void 0,mechanism:e,apply:(s)=>n(s,i),next:(s)=>n(s,i+1)}}}var re="?";function rt(e,t,i,n,o){let s={platform:e,filename:t,function:i==="<anonymous>"?re:i,in_app:!0};if(!oi(n))s.lineno=n;if(!oi(o))s.colno=o;return s}var zs=(e,t)=>{let i=e.indexOf("safari-extension")!==-1,n=e.indexOf("safari-web-extension")!==-1;return i||n?[e.indexOf("@")!==-1?e.split("@")[0]:re,i?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var wk=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Fk=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Hk=/\((\S*)(?::(\d+))(?::(\d+))\)/,Nl=(e,t)=>{let i=wk.exec(e);if(i){let[,o,s,r]=i;return rt(t,o,re,+s,+r)}let n=Fk.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let g=Hk.exec(n[2]);if(g)n[2]=g[1],n[3]=g[2],n[4]=g[3]}let[s,r]=zs(n[1]||re,n[2]);return rt(t,r,s,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var vk=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,kk=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Xl=(e,t)=>{let i=vk.exec(e);if(i){if(i[3]&&i[3].indexOf(" > eval")>-1){let r=kk.exec(i[3]);if(r)i[1]=i[1]||"eval",i[3]=r[1],i[4]=r[2],i[5]=""}let o=i[3],s=i[1]||re;return[s,o]=zs(s,o),rt(t,o,s,i[4]?+i[4]:void 0,i[5]?+i[5]:void 0)}};var Pk=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,oA=(e,t)=>{let i=Pk.exec(e);return i?rt(t,i[2],i[1]||re,+i[3],i[4]?+i[4]:void 0):void 0};var Yk=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,sA=(e,t)=>{let i=Yk.exec(e);return i?rt(t,i[2],i[3]||re,+i[1]):void 0},Nk=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,rA=(e,t)=>{let i=Nk.exec(e);return i?rt(t,i[5],i[3]||i[4]||re,+i[1],+i[2]):void 0};var Xk=/^\s*[-]{4,}$/,Sk=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,xk=/^Promise\.(?:all|any)$/,Jk=/^index \d+$/,Ek="node:internal/promise",aA=(e,t)=>{let i=e.match(Sk);if(i){let n,o,s,r,g;if(i[1]){s=i[1];let I=s.lastIndexOf(".");if(s[I-1]===".")I--;if(I>0){n=s.slice(0,I),o=s.slice(I+1);let d=n.indexOf(".Module");if(d>0)s=s.slice(d+1),n=n.slice(0,d)}r=void 0}if(o)r=n,g=o;if(o==="<anonymous>")g=void 0,s=void 0;if(s===void 0)g=g||re,s=r?`${r}.${g}`:g;let a=i[2]?.startsWith("file://")?i[2].slice(7):i[2],l=i[5]==="native";if(a?.match(/\/[A-Z]:/))a=a.slice(1);if(!a&&i[5]&&!l)a=i[5];if(xk.test(s)&&Jk.test(a||""))a=Ek;return{filename:a?decodeURI(a):void 0,module:void 0,function:s,lineno:gA(i[3]),colno:gA(i[4]),in_app:Uk(a||"",l),platform:t}}if(e.match(Xk))return{filename:e,platform:t}};function Uk(e,t=!1){return!(t||e&&!e.startsWith("/")&&!e.match(/^[A-Z]:/)&&!e.startsWith(".")&&!e.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&e!==void 0&&!e.includes("node_modules/")}function gA(e){return parseInt(e||"",10)||void 0}var lA=/\(error: (.*)\)/,IA=50;function dA(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,IA).map((i)=>({...i,filename:i.filename||Ok(t).filename,function:i.function||re}))}function Ok(e){return e[e.length-1]||{}}function Sl(){return cA("web:javascript",Nl,Xl)}function cA(e,...t){return(i,n=0)=>{let o=[],s=i.split(`
140
+ `);for(let r=n;r<s.length;r++){let g=s[r];if(g.length>1024)continue;let a=lA.test(g)?g.replace(lA,"$1"):g;if(!a.match(/\S*Error: /)){for(let l of t){let I=l(a,e);if(I){o.push(I);break}}if(o.length>=IA)break}}return dA(o)}}class CA{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,t){let i=ht(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:i?e.stack:void 0,cause:e.cause?t.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){let t=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?`${t}: ${e.message}`:t}isDOMException(e){return si(e,"DOMException")}isDOMError(e){return si(e,"DOMError")}}class js{match(e){return kp(e)}coerce(e,t){return{type:this.getType(e),value:this.getMessage(e,t),stack:this.getStack(e),cause:e.cause?t.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,t){let i=e.message;if(i.error&&typeof i.error.message=="string")return String(i.error.message);return String(i)}getStack(e){return e.stacktrace||e.stack||void 0}}class uA{constructor(){}match(e){return Pp(e)&&e.error!=null}coerce(e,t){let i=t.apply(e.error);if(!i)return{type:"ErrorEvent",value:e.message,stack:t.syntheticException?.stack,synthetic:!0};return i}}var Tk=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Ds{match(e){return typeof e=="string"}coerce(e,t){let[i,n]=this.getInfos(e);return{type:i??"Error",value:n??e,stack:t.syntheticException?.stack,synthetic:!0}}getInfos(e){let t="Error",i=e,n=e.match(Tk);if(n)t=n[1],i=n[2];return[t,i]}}var mA=["fatal","error","warning","log","info","debug"];function Qs(e,t=40){let i=Object.keys(e);if(i.sort(),!i.length)return"[object has no keys]";for(let n=i.length;n>0;n--){let o=i.slice(0,n).join(", ");if(!(o.length>t)){if(n===i.length)return o;return o.length<=t?o:`${o.slice(0,t)}...`}}return""}class _s{match(e){return typeof e=="object"&&e!==null}coerce(e,t){let i=this.getErrorPropertyFromObject(e);if(i)return t.apply(i);return{type:this.getType(e),value:this.getValue(e),stack:t.syntheticException?.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return ji(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){let n=`'${e.name}' captured as exception`;if("message"in e&&typeof e.message=="string")n+=` with message: '${e.message}'`;return n}if("message"in e&&typeof e.message=="string")return e.message;let t=this.getObjectClassName(e),i=Qs(e);return`${t&&t!=="Object"?`'${t}'`:"Object"} captured as exception with keys: ${i}`}isSeverityLevel(e){return ht(e)&&!Fp(e)&&mA.indexOf(e)>=0}getErrorPropertyFromObject(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let i=e[t];if(qp(i))return i}}getObjectClassName(e){try{let t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch(t){return}}}class pA{match(e){return ji(e)}coerce(e,t){let i=e.constructor.name;return{type:i,value:`${i} captured as exception with keys: ${Qs(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}}class Ks{match(e){return Ps(e)}coerce(e,t){return{type:"Error",value:`Primitive value captured as exception: ${String(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}}class AA{match(e){return si(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!ji(e))return!1;try{let t=e.detail;return t!=null&&typeof t=="object"&&"reason"in t}catch{return!1}}coerce(e,t){let i=this.getUnhandledRejectionReason(e);if(Ps(i))return{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(i)}`,stack:t.syntheticException?.stack,synthetic:!0};return t.apply(i)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}class ZA{constructor(e){this._maxSize=e,this._cache=new Map}get(e){let t=this._cache.get(e);if(t===void 0)return;return this._cache.delete(e),this._cache.set(e,t),t}set(e,t){this._cache.set(e,t)}reduce(){while(this._cache.size>=this._maxSize){let e=this._cache.keys().next().value;if(e)this._cache.delete(e)}}}var co={MESSAGE:"$message",TIMESTAMP:"$timestamp"},zk=new Set([co.MESSAGE,co.TIMESTAMP]),Ls={enabled:!0,max_bytes:32768};function xl(e){if(!e)return{...Ls};return{enabled:e.enabled??Ls.enabled,max_bytes:Dk(e.max_bytes,Ls.max_bytes)}}function jk(e){if(!e)return{sanitizedProperties:{},droppedKeys:[]};let t=[];return{sanitizedProperties:Object.keys(e).reduce((n,o)=>{if(zk.has(o))return t.push(o),n;return n[o]=e[o],n},{}),droppedKeys:t}}class bA{constructor(e){this._entries=[],this._totalBytes=0,this._config=xl(e)}setConfig(e){this._config=xl(e),this._trimToMaxBytes()}add(e){let t=Qk(e);if(!t)return;let i=WA(t.json);if(i>this._config.max_bytes)return;this._entries.push({step:t.step,bytes:i}),this._totalBytes+=i,this._trimToMaxBytes()}getAttachable(){return this._entries.map((e)=>e.step)}clear(){this._entries=[],this._totalBytes=0}size(){return this._entries.length}_trimToMaxBytes(){while(this._totalBytes>this._config.max_bytes&&this._entries.length>0){let e=this._entries.shift();if(e)this._totalBytes-=e.bytes}}}function Dk(e,t){if(!ro(e)||e===1/0||e===-1/0)return t;let i=Math.floor(e);if(i<0)return t;return i}function Qk(e){let t;try{t=zi(e)}catch{return}try{let i=JSON.parse(t);if(!so(i))return;let n=i,o=n[co.MESSAGE],s=n[co.TIMESTAMP];if(!ht(o)||o.trim().length===0)return;if(!ht(s)&&!ro(s))return;return{step:n,json:t}}catch{return}}function WA(e){if(typeof TextEncoder<"u")return new TextEncoder().encode(e).length;let t=encodeURIComponent(e),i=0;for(let n=0;n<t.length;n++)if(t[n]==="%")i+=1,n+=2;else i+=1;return i}class Jt extends Error{constructor(e,t){super("HTTP error while fetching PostHog: status="+e.status+", reqByteLength="+t),this.response=e,this.reqByteLength=t,this.name="PostHogFetchHttpError"}get status(){return this.response.status}get text(){return this.response.text()}get json(){return this.response.json()}}class gi extends Error{constructor(e){super("Network error while fetching PostHog",e instanceof Error?{cause:e}:{}),this.error=e,this.name="PostHogFetchNetworkError"}}var yA=(e,t)=>{for(let i of Object.keys(t))if(i.startsWith("$feature/")||i==="$active_feature_flags")e[i]=t[i]};async function hA(e){if(e instanceof Jt){let t="";try{t=await e.text}catch{}console.error(`Error while flushing PostHog: message=${e.message}, response body=${t}`,e)}else console.error("Error while flushing PostHog",e);return Promise.resolve()}function _k(e){return typeof e=="object"&&(e instanceof Jt||VA(e))}function VA(e){return e instanceof gi}function Kk(e){if(e instanceof Jt)return e.status===502||e.status===504;if(!(e instanceof gi))return!1;let t=e.error;return(t?.code??t?.cause?.code)!=="ECONNREFUSED"}function _i(e){return typeof e=="object"&&e instanceof Jt&&e.status===413}function Co(e){if(e instanceof Jt)return e.status===408||e.status===429||e.status>=500;return VA(e)}function fA(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var Jl="default";class Ms{getErrorPropertiesBuilder(){if(!this._errorPropertiesBuilder)this._errorPropertiesBuilder=this.createErrorPropertiesBuilder();return this._errorPropertiesBuilder}createErrorPropertiesBuilder(){return new Ts([new js,new _s,new Ds,new Ks],Sl())}constructor(e,t={}){this.flushPromise=null,this.pendingFlushPromise=null,this.flushPromises=new Set,this._dequeuedMessagesCount=0,this.shutdownPromise=null,this.promiseQueue=new hl,this._events=new Yl,this._isInitialized=!1;let i=typeof e=="string"?e.trim():"",n=typeof t.host=="string"?t.host.trim():"",o=!i;if(this._logger=Jp("[PostHog]",this.logMsgIfDebug.bind(this)),o)this._logger.error("You must pass your PostHog project's api key. The client will be disabled.");if(this.apiKey=i,this.host=Mp(n||"https://us.i.posthog.com"),this.flushAt=t.flushAt?Math.max(t.flushAt,1):20,this.maxBatchSize=Math.max(this.flushAt,t.maxBatchSize??100),this.maxQueueSize=Math.max(this.flushAt,t.maxQueueSize??1000),this.flushInterval=t.flushInterval??1e4,this.preloadFeatureFlags=t.preloadFeatureFlags??!0,this.defaultOptIn=t.defaultOptIn??!0,this.disableSurveys=t.disableSurveys??!1,this._retryOptions={retryCount:t.fetchRetryCount??3,retryDelay:t.fetchRetryDelay??3000,retryCheck:Co},this.requestTimeout=t.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=t.featureFlagsRequestTimeoutMs??3000,this.featureFlagsRequestMaxRetries=t.featureFlagsRequestMaxRetries??1,this.remoteConfigRequestTimeoutMs=t.remoteConfigRequestTimeoutMs??3000,this.disableGeoip=t.disableGeoip??!0,this.disabled=(t.disabled??!1)||o,this.historicalMigration=t?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this.evaluationContexts=t?.evaluationContexts??t?.evaluationEnvironments,t?.evaluationEnvironments&&!t?.evaluationContexts)this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version.");this.disableCompression=!bl()||(t?.disableCompression??!1)}logMsgIfDebug(e){if(this.isDebug)e()}wrap(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return e();this._initPromise.then(()=>e())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(we.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(we.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(we.OptedOut,!0)})}on(e,t){return this._events.on(e,t)}debug(e=!0){if(this.removeDebugCallback?.(),e){let t=this.on("*",(i,n)=>this._logger.info(i,n));this.removeDebugCallback=()=>{t(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(e){let t=e.properties||{},i={...t,...this.getCommonEventProperties()};if(yA(i,t),e.event==="$feature_flag_called"&&i.$feature_flag_has_experiment===!1&&this.isMinimalFlagCalledEventsEnabled())i=no(i);return{distinct_id:e.distinct_id,event:e.event,properties:i}}isMinimalFlagCalledEventsEnabled(){return!1}addPendingPromise(e){return this.promiseQueue.add(e)}identifyStateless(e,t,i){this.wrap(()=>{let n={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};this.enqueue("identify",n,i)})}async identifyStatelessImmediate(e,t,i){let n={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};await this.sendImmediate("identify",n,i)}captureStateless(e,t,i,n){this.wrap(()=>{let o=this.buildPayload({distinct_id:e,event:t,properties:i});this.enqueue("capture",o,n)})}async captureStatelessImmediate(e,t,i,n){let o=this.buildPayload({distinct_id:e,event:t,properties:i});await this.sendImmediate("capture",o,n)}aliasStateless(e,t,i,n){this.wrap(()=>{let o=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...i||{},distinct_id:t,alias:e}});this.enqueue("alias",o,n)})}async aliasStatelessImmediate(e,t,i,n){let o=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...i||{},distinct_id:t,alias:e}});await this.sendImmediate("alias",o,n)}groupIdentifyStateless(e,t,i,n,o,s){this.wrap(()=>{let r=this.buildPayload({distinct_id:o||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:i||{},...s||{}}});this.enqueue("capture",r,n)})}async groupIdentifyStatelessImmediate(e,t,i,n,o,s){let r=this.buildPayload({distinct_id:o||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:i||{},...s||{}}});await this.sendImmediate("capture",r,n)}async getRemoteConfig(){await this._initPromise;let e=this.host;if(e==="https://us.i.posthog.com")e="https://us-assets.i.posthog.com";else if(e==="https://eu.i.posthog.com")e="https://eu-assets.i.posthog.com";let t=`${e}/array/${this.apiKey}/config`,i={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(t,i,{retryCount:0},this.remoteConfigRequestTimeoutMs).then((n)=>n.json()).catch((n)=>{this._logger.error("Remote config could not be loaded",n),this._events.emit("error",n)})}async getFlags(e,t={},i={},n={},o={},s=!1){await this._initPromise;let r=s?"&config=true":"",g=`${this.host}/flags/?v=2${r}`,a={token:this.apiKey,distinct_id:e,groups:t,person_properties:i,group_properties:n,...o};if(i.$device_id)a.$device_id=i.$device_id;if(this.evaluationContexts&&this.evaluationContexts.length>0)a.evaluation_contexts=this.evaluationContexts;let l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(a)};return this._logger.info("Flags URL",g),this.fetchWithRetry(g,l,{retryCount:this.featureFlagsRequestMaxRetries,retryCheck:Kk},this.featureFlagsRequestTimeoutMs).then((I)=>I.json()).then((I)=>({success:!0,response:Zl(I)})).catch((I)=>(this._events.emit("error",I),{success:!1,error:this.categorizeRequestError(I)}))}categorizeRequestError(e){if(e instanceof Jt)return{type:"api_error",statusCode:e.status};if(e instanceof gi){let t=e.error;if(t instanceof Error&&(t.name==="AbortError"||t.name==="TimeoutError"))return{type:"timeout"};return{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(e,t,i={},n={},o={},s){await this._initPromise;let r=await this.getFeatureFlagDetailStateless(e,t,i,n,o,s);if(r===void 0)return{response:void 0,requestId:void 0};let g=io(r.response);if(g===void 0)g=!1;return{response:g,requestId:r.requestId}}async getFeatureFlagDetailStateless(e,t,i={},n={},o={},s){await this._initPromise;let r=await this.getFeatureFlagDetailsStateless(t,i,n,o,s,[e]);if(r===void 0)return;return{response:r.flags[e],requestId:r.requestId,evaluatedAt:r.evaluatedAt}}async getFeatureFlagPayloadStateless(e,t,i={},n={},o={},s){await this._initPromise;let r=await this.getFeatureFlagPayloadsStateless(t,i,n,o,s,[e]);if(!r)return;let g=r[e];if(g===void 0)return null;return g}async getFeatureFlagPayloadsStateless(e,t={},i={},n={},o,s){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(e,t,i,n,o,s)).payloads}async getFeatureFlagsStateless(e,t={},i={},n={},o,s){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(e,t,i,n,o,s)}async getFeatureFlagsAndPayloadsStateless(e,t={},i={},n={},o,s){await this._initPromise;let r=await this.getFeatureFlagDetailsStateless(e,t,i,n,o,s);if(!r)return{flags:void 0,payloads:void 0,requestId:void 0};return{flags:r.featureFlags,payloads:r.featureFlagPayloads,requestId:r.requestId}}async getFeatureFlagDetailsStateless(e,t={},i={},n={},o,s){await this._initPromise;let r={geoip_disable:o??this.disableGeoip};if(s)r.flag_keys_to_evaluate=s;let g=await this.getFlags(e,t,i,n,r);if(!g.success)return;let a=g.response;if(a.errorsWhileComputingFlags)console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices");if(a.quotaLimited?.includes("feature_flags"))return console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:a?.requestId,quotaLimited:a.quotaLimited};return a}async getSurveysStateless(){if(await this._initPromise,this.disabled)return[];if(this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let e=`${this.host}/api/surveys/?token=${this.apiKey}`,t={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},n=(await this.fetchWithRetry(e,t).then((o)=>{if(o.status!==200||!o.json){let s=`Surveys API could not be loaded: ${o.status}`,r=Error(s);this._logger.error(r),this._events.emit("error",Error(s));return}return o.json()}).catch((o)=>{this._logger.error("Surveys API could not be loaded",o),this._events.emit("error",o)}))?.surveys;if(n)this._logger.info("Surveys fetched from API: ",JSON.stringify(n));return n??[]}get props(){if(!this._props)this._props=this.getPersistedProperty(we.Props);return this._props||{}}set props(e){this._props=e}async register(e){this.wrap(()=>{this.props={...this.props,...e},this.setPersistedProperty(we.Props,this.props)})}async unregister(e){this.wrap(()=>{delete this.props[e],this.setPersistedProperty(we.Props,this.props)})}processBeforeEnqueue(e){return e}async flushStorage(){}getQueueRouteKey(e){return Jl}persistedQueueKeyForRoute(e){return we.Queue}getActiveQueueRoutes(){return[Jl]}getRouteQueue(e){return this.getPersistedProperty(this.persistedQueueKeyForRoute(e))||[]}enqueue(e,t,i){this.wrap(()=>{if(this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let n=this.prepareMessage(t,i);if(n=this.processBeforeEnqueue(n),n===null)return;n=this.normalizeMessage(n);let o=this.persistedQueueKeyForRoute(this.getQueueRouteKey(n)),s=this.getPersistedProperty(o)||[];if(s.length>=this.maxQueueSize)s.shift(),this._logger.warn("Queue is full, the oldest event is dropped.");if(s.push({message:n}),this.setPersistedProperty(o,s),this._events.emit(e,n),s.length>=this.flushAt)this.flushBackground();if(this.flushInterval&&!this._flushTimer)this._flushTimer=de(()=>this.flushBackground(),this.flushInterval)})}async sendImmediate(e,t,i){if(this.disabled)return void this._logger.warn("The client is disabled");if(!this._isInitialized)await this._initPromise;if(this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let n=this.prepareMessage(t,i);if(n=this.processBeforeEnqueue(n),n===null)return;n=this.normalizeMessage(n);try{await this.sendBatch([n],void 0,this.getQueueRouteKey(n))}catch(o){this._events.emit("error",o)}}normalizeMessage(e){let{type:t,library:i,library_version:n,...o}=e,s=fA(o.properties)?o.properties:void 0;if(i!==void 0&&s?.$lib===void 0)s={...s||{},$lib:i};if(n!==void 0&&s?.$lib_version===void 0)s={...s||{},$lib_version:n};if(s)o.properties=s;return o.uuid=xs(o.uuid,Fe),o}prepareMessage(e,t){let i={...e,timestamp:t?.timestamp?t?.timestamp:Gl(),uuid:xs(t?.uuid,Fe)};if(t?.disableGeoip??this.disableGeoip){if(!fA(i.properties))i.properties={};i.properties.$geoip_disable=!0}if(i.distinctId)i.distinct_id=i.distinctId,delete i.distinctId;return i}clearFlushTimer(){if(this._flushTimer)clearTimeout(this._flushTimer),this._flushTimer=void 0}flushBackground(){if(this.pendingFlushPromise)return;this.flush().catch(async(e)=>{await hA(e)})}async waitForPendingPromises(e,t=[]){let i=t.filter((o)=>!!o),n=0;while(!0){let o=this.promiseQueue.getPromises([...i,...this.flushPromises],e);if(o.length===0)return;if(n>0)this._logger.debug(`flush() re-checking ${o.length} pending promise(s) before flushing`);await Promise.all(o.map((s)=>s.catch(()=>{}))),n++}}flushWithPendingPromises(){return this.flushInternal(!0)}flush(){return this.flushInternal(!1)}flushInternal(e){if(this.disabled)return Promise.resolve();if(!e&&this.pendingFlushPromise)return this.pendingFlushPromise;let t=this.flushPromise,i=this.promiseQueue.maxId,n=Promise.resolve().then(()=>{if(e)return this.waitForPendingPromises(i,[t,n])}).then(()=>wl([t])).then(()=>{if(this.pendingFlushPromise===n)this.pendingFlushPromise=null;return this._flush()});return this.pendingFlushPromise=n,this.flushPromise=n,this.flushPromises.add(n),this.addPendingPromise(n),wl([n]).then(()=>{if(this.flushPromises.delete(n),this.pendingFlushPromise===n)this.pendingFlushPromise=null;if(this.flushPromise===n)this.flushPromise=null}),n}getCustomHeaders(){let e=this.getCustomUserAgent(),t={};if(e&&e!=="")t["User-Agent"]=e;return t}async sendBatch(e,t,i=Jl){let n={api_key:this.apiKey,batch:e,sent_at:Gl()};if(this.historicalMigration)n.historical_migration=!0;let o=zi(n),s=`${this.host}/batch/`,r=this.disableCompression?null:await ni(o,this.isDebug),g={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...r!==null&&{"Content-Encoding":"gzip"}},body:r||o};await(await this.fetchWithRetry(s,g,t)).body?.cancel()?.catch(()=>{})}async _flush(){this.clearFlushTimer(),await this._initPromise;let e=this.getActiveQueueRoutes();if(!e.some((n)=>this.getRouteQueue(n).length>0))return;let t=[],i;for(let n of e)try{await this._flushRoute(n,t)}catch(o){if(i===void 0)i=o}if(i!==void 0)throw i;this._events.emit("flush",t)}async _flushRoute(e,t){let i=this.persistedQueueKeyForRoute(e),n=this.getPersistedProperty(i)||[];if(!n.length)return;let o=n.length,s=0;while(n.length>0&&s<o){let r=n.slice(0,this.maxBatchSize),g=r.map((I)=>I.message===void 0?I.message:this.normalizeMessage(I.message)),a=async()=>{let d=(this.getPersistedProperty(i)||[]).slice(r.length);this.setPersistedProperty(i,d),n=d,this._dequeuedMessagesCount+=r.length,await this.flushStorage()},l={retryCheck:(I)=>{if(_i(I))return!1;return Co(I)}};try{await this.sendBatch(g,l,e)}catch(I){if(_i(I)&&g.length>1){this.maxBatchSize=Math.max(1,Math.floor(g.length/2)),this._logger.warn(`Received 413 when sending batch of size ${g.length}, reducing batch size to ${this.maxBatchSize}`);continue}if(!(I instanceof gi))await a();throw this._events.emit("error",I),I}await a(),t.push(...g),s+=g.length}}async _sendLogsBatch(e){if(this.disabled)return{kind:"fatal",error:Error("The client is disabled")};let t=JSON.stringify(e),i=`${this.host}/i/v1/logs?token=${encodeURIComponent(this.apiKey)}`,n=this.disableCompression?null:await ni(t,this.isDebug),o={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...n!==null&&{"Content-Encoding":"gzip"}},body:n||t};try{return await this.fetchWithRetry(i,o,{retryCheck:(s)=>{if(_i(s))return!1;return Co(s)}}),{kind:"ok"}}catch(s){if(_i(s))return{kind:"too-large"};if(s instanceof gi)return{kind:"retry-later",error:s};return{kind:"fatal",error:s}}}async _sendMetricsBatch(e){if(this.disabled)return{kind:"fatal",error:Error("The client is disabled")};let t=JSON.stringify(e),i=`${this.host}/i/v1/metrics?token=${encodeURIComponent(this.apiKey)}`,n=this.disableCompression?null:await ni(t,this.isDebug),o={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...n!==null&&{"Content-Encoding":"gzip"}},body:n||t};try{return await this.fetchWithRetry(i,o,{retryCheck:(s)=>{if(_i(s))return!1;return Co(s)}}),{kind:"ok"}}catch(s){if(_i(s))return{kind:"too-large"};if(Co(s))return{kind:"retry-later",error:s};return{kind:"fatal",error:s}}}async fetchWithRetry(e,t,i,n){let o=t.body?t.body:"",s=-1;try{s=o instanceof Blob?o.size:Buffer.byteLength(o,Lp)}catch{if(o instanceof Blob)s=o.size;else s=new TextEncoder().encode(o).length}return await $p(async()=>{let r=new AbortController,g=n??this.requestTimeout,a=de(()=>r.abort(),g),l=null;try{l=await this.fetch(e,{signal:r.signal,...t})}catch(d){throw new gi(d)}finally{clearTimeout(a)}if(t.mode!=="no-cors"&&(l.status<200||l.status>=400))throw new Jt(l,s);return l},{...this._retryOptions,...i})}async _shutdown(e=30000){await this._initPromise;let t=!1;if(this.clearFlushTimer(),this.disabled)return;let i=async()=>{try{await this.promiseQueue.join();while(!0){if(!this.getActiveQueueRoutes().some((r)=>this.getRouteQueue(r).length>0))break;let s=this._dequeuedMessagesCount;if(await this.flush(),t)break;if(this._dequeuedMessagesCount===s){this._logger.warn("Shutdown flush completed but did not send any queued events. Stopping drain to avoid a loop.");break}}}catch(o){if(!_k(o))throw o;await hA(o)}},n;try{return await Promise.race([new Promise((o,s)=>{n=de(()=>{this._logger.error("Timed out while shutting down PostHog"),t=!0,s("Timeout while shutting down PostHog. Some events may not have been sent.")},e)}),i()])}finally{clearTimeout(n)}}async shutdown(e=30000){if(this.shutdownPromise)this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup");else this.shutdownPromise=this._shutdown(e).finally(()=>{this.shutdownPromise=null});return this.shutdownPromise}}var GA=require("fs"),wA=require("readline"),$s=new Ve.ReduceableCache(25),FA=new Ve.ReduceableCache(20),El=7,eP=1000,tP=1e4;async function HA(e){let t={};for(let o=e.length-1;o>=0;o--){let s=e[o],r=s?.filename;if(!s||typeof r!="string"||typeof s.lineno!="number"||sP(r)||rP(s))continue;if(!t[r])t[r]=[];t[r].push(s.lineno)}let i=Object.keys(t);if(i.length==0)return e;let n=[];for(let o of i){if(FA.get(o))continue;let s=t[o];if(!s)continue;s.sort((a,l)=>a-l);let r=aP(s);if(r.every((a)=>gP(o,a)))continue;let g=lP($s,o,{});n.push(iP(o,r,g))}if(await Promise.all(n).catch(()=>{}),e&&e.length>0)nP(e,$s);return $s.reduce(),e}function iP(e,t,i){return new Promise((n)=>{let o=GA.createReadStream(e),s=wA.createInterface({input:o});function r(){o.destroy(),n()}let g=0,a=0,l=t[a];if(l===void 0)return void r();let I=l[0],d=l[1];function u(){FA.set(e,1),s.close(),s.removeAllListeners(),r()}o.on("error",u),s.on("error",u),s.on("close",r),s.on("line",(c)=>{if(g++,g<I)return;if(i[g]=IP(c,0),g>=d){if(a===t.length-1){s.close(),s.removeAllListeners();return}a++;let C=t[a];if(C===void 0){s.close(),s.removeAllListeners();return}I=C[0],d=C[1]}})})}function nP(e,t){for(let i of e)if(i.filename&&i.context_line===void 0&&typeof i.lineno=="number"){let n=t.get(i.filename);if(n===void 0)continue;oP(i.lineno,i,n)}}function oP(e,t,i){if(t.lineno===void 0||i===void 0)return;t.pre_context=[];for(let o=vA(e);o<e;o++){let s=i[o];if(s===void 0)return void BA(t);t.pre_context.push(s)}if(i[e]===void 0)return void BA(t);t.context_line=i[e];let n=kA(e);t.post_context=[];for(let o=e+1;o<=n;o++){let s=i[o];if(s===void 0)break;t.post_context.push(s)}}function BA(e){delete e.pre_context,delete e.context_line,delete e.post_context}function sP(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function rP(e){if(e.lineno!==void 0&&e.lineno>tP)return!0;if(e.colno!==void 0&&e.colno>eP)return!0;return!1}function gP(e,t){let i=$s.get(e);if(i===void 0)return!1;for(let n=t[0];n<=t[1];n++)if(i[n]===void 0)return!1;return!0}function aP(e){if(!e.length)return[];let t=0,i=e[0];if(typeof i!="number")return[];let n=RA(i),o=[];while(!0){if(t===e.length-1){o.push(n);break}let s=e[t+1];if(typeof s!="number")break;if(s<=n[1])n[1]=s+El;else o.push(n),n=RA(s);t++}return o}function RA(e){return[vA(e),kA(e)]}function vA(e){return Math.max(1,e-El)}function kA(e){return e+El}function lP(e,t,i){let n=e.get(t);if(n===void 0)return e.set(t,i),i;return n}function IP(e,t){let i=e,n=i.length;if(n<=150)return i;if(t>n)t=n;let o=Math.max(t-60,0);if(o<5)o=0;let s=Math.min(o+140,n);if(s>n-5)s=n;if(s===n)o=Math.max(s-140,0);if(i=i.slice(o,s),o>0)i=`...${i}`;if(s<n)i+="...";return i}var Ki=require("path");function PA(e=process.cwd()){let t=Ki.sep==="\\",i=(o)=>t?o.replace(/\\/g,"/"):o,n=i(e);return async(o)=>{for(let s of o)if(!(!s.filename||s.filename.startsWith("node:")||s.filename.startsWith("data:"))){if(Ki.isAbsolute(s.filename))s.filename=i(Ki.relative(n,i(s.filename)))}return o}}var YA="5.46.1";var ft={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};class ai{constructor(e){this._host=e.host,this._distinctId=e.distinctId,this._groups=e.groups,this._disableGeoip=e.disableGeoip,this._flags=e.flags,this._requestId=e.requestId,this._evaluatedAt=e.evaluatedAt,this._flagDefinitionsLoadedAt=e.flagDefinitionsLoadedAt,this._errorsWhileComputing=e.errorsWhileComputing??!1,this._quotaLimited=e.quotaLimited??!1,this._accessed=e.accessed??new Set,this._isSlice=e.isSlice??!1}isEnabled(e){let t=this._flags[e];return this._recordAccess(e),t?.enabled??!1}getFlag(e){let t=this._flags[e];if(this._recordAccess(e),!t)return;if(!t.enabled)return!1;return t.variant??!0}getFlagPayload(e){return this._flags[e]?.payload}onlyAccessed(){let e={};for(let t of this._accessed){let i=this._flags[t];if(i)e[t]=i}return this._cloneWith(e)}only(e){let t={},i=[];for(let n of e){let o=this._flags[n];if(o)t[n]=o;else i.push(n)}if(i.length>0)this._host.logWarning(`FeatureFlagEvaluations.only() was called with flag keys that are not in the evaluation set and will be dropped: ${i.join(", ")}`);return this._cloneWith(t)}get keys(){return Object.keys(this._flags)}_getEventProperties(){let e={},t=[];for(let[i,n]of Object.entries(this._flags)){let o=n.enabled===!1?!1:n.variant??!0;if(e[`$feature/${i}`]=o,n.enabled)t.push(i)}if(t.length>0)t.sort(),e.$active_feature_flags=t;return e}_cloneWith(e){return new ai({host:this._host,distinctId:this._distinctId,groups:this._groups,disableGeoip:this._disableGeoip,flags:e,requestId:this._requestId,evaluatedAt:this._evaluatedAt,flagDefinitionsLoadedAt:this._flagDefinitionsLoadedAt,errorsWhileComputing:this._errorsWhileComputing,quotaLimited:this._quotaLimited,accessed:new Set(this._accessed),isSlice:!0})}_recordAccess(e){if(this._accessed.add(e),this._distinctId==="")return;if(this._isSlice&&!(e in this._flags))return;let t=this._flags[e],i=t===void 0?void 0:t.enabled===!1?!1:t.variant??!0,n={$feature_flag:e,$feature_flag_response:i,$feature_flag_id:t?.id,$feature_flag_version:t?.version,$feature_flag_reason:t?.reason,locally_evaluated:t?.locallyEvaluated??!1,[`$feature/${e}`]:i,$feature_flag_request_id:this._requestId,$feature_flag_evaluated_at:t?.locallyEvaluated?Date.now():this._evaluatedAt};if(t?.hasExperiment!==void 0)n.$feature_flag_has_experiment=t.hasExperiment;if(t?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0)n.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt;let o=[];if(this._errorsWhileComputing)o.push(ft.ERRORS_WHILE_COMPUTING);if(this._quotaLimited)o.push(ft.QUOTA_LIMITED);if(t===void 0)o.push(ft.FLAG_MISSING);if(o.length>0)n.$feature_flag_error=o.join(",");this._host.captureFlagCalledEventIfNeeded({distinctId:this._distinctId,key:e,response:i,groups:this._groups,disableGeoip:this._disableGeoip,properties:n})}}async function NA(e){let t=globalThis.crypto?.subtle;if(!t)throw Error("SubtleCrypto API not available");let i=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(i)).map((o)=>o.toString(16).padStart(2,"0")).join("")}var dP=60000,cP=1152921504606847000,CP=["is_not","is_set"];class Li extends Error{constructor(e){super();Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=e,Object.setPrototypeOf(this,Li.prototype)}}function JA(e,t){e.name=t.name,Error.captureStackTrace(e,t),Object.setPrototypeOf(e,t.prototype)}class x extends Error{constructor(e){super(e);JA(this,x)}}class gt extends Error{constructor(e){super(e);JA(this,gt)}}class Ul{constructor({pollingInterval:e,personalApiKey:t,projectApiKey:i,timeout:n,host:o,customHeaders:s,...r}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=e,this.personalApiKey=t,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=n,this.projectApiKey=i,this.host=o,this.poller=void 0,this.fetch=r.fetch||fetch,this.onError=r.onError,this.customHeaders=s,this.onLoad=r.onLoad,this.onMinimalFlagCalledEvents=r.onMinimalFlagCalledEvents,this.cacheProvider=r.cacheProvider,this.strictLocalEvaluation=r.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(e=!0){this.debugMode=e}logMsgIfDebug(e){if(this.debugMode)e()}createEvaluationContext(e,t={},i={},n={},o={}){return{distinctId:e,groups:t,personProperties:i,groupProperties:n,evaluationCache:o}}async getFeatureFlag(e,t,i={},n={},o={}){await this.loadFeatureFlags();let s,r;if(!this.loadedSuccessfullyOnce)return s;if(r=this.featureFlagsByKey[e],r!==void 0){let g=this.createEvaluationContext(t,i,n,o);try{s=(await this.computeFlagAndPayloadLocally(r,g)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${e} -> ${s}`))}catch(a){if(a instanceof gt||a instanceof x)this.logMsgIfDebug(()=>console.debug(`${a.name} when computing flag locally: ${e}: ${a.message}`));else if(a instanceof Error)this.onError?.(Error(`Error computing flag locally: ${e}: ${a}`))}}return s}async getAllFlagsAndPayloads(e,t){await this.loadFeatureFlags();let i={},n={},o=this.featureFlags.length==0,s=t?t.map((g)=>this.featureFlagsByKey[g]).filter(Boolean):this.featureFlags,r={...e,evaluationCache:e.evaluationCache??{}};return await Promise.all(s.map(async(g)=>{try{let{value:a,payload:l}=await this.computeFlagAndPayloadLocally(g,r);if(i[g.key]=a,l)n[g.key]=l}catch(a){if(a instanceof gt||a instanceof x)this.logMsgIfDebug(()=>console.debug(`${a.name} when computing flag locally: ${g.key}: ${a.message}`));else if(a instanceof Error)this.onError?.(Error(`Error computing flag locally: ${g.key}: ${a}`));o=!0}})),{response:i,payloads:n,fallbackToFlags:o}}async computeFlagAndPayloadLocally(e,t,i={}){let{matchValue:n,skipLoadCheck:o=!1}=i;if(!o)await this.loadFeatureFlags();if(!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=n!==void 0?n:await this.computeFlagValueLocally(e,t);let r=this.getFeatureFlagPayload(e.key,s);return{value:s,payload:r}}async computeFlagValueLocally(e,t){let{distinctId:i,groups:n,personProperties:o,groupProperties:s}=t;if(!e.active)return!1;if(e.ensure_experience_continuity)throw new x("Flag has experience continuity enabled");let g=(e.filters||{}).aggregation_group_type_index;if(g!=null){let a=this.groupTypeMapping[String(g)];if(!a)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${g} for feature flag ${e.key}`)),new x("Flag has unknown group type index");if(!(a in n))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${e.key} without group names passed in`)),!1;if(e.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id===""))this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${e.key}`));let l=s[a];return await this.matchFeatureFlagProperties(e,n[a],l,t)}{let a=this.getBucketingValueForFlag(e,i,o);if(a===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${e.key} without $device_id, falling back to server evaluation`)),new x(`Can't compute feature flag: ${e.key} without $device_id`);return await this.matchFeatureFlagProperties(e,a,o,t)}}getBucketingValueForFlag(e,t,i){if(e.filters?.aggregation_group_type_index!=null)return t;if(e.bucketing_identifier==="device_id"){let n=i?.$device_id;if(n==null||n==="")return;return n}return t}getFeatureFlagPayload(e,t){let i=null;if(t!==!1&&t!=null){if(typeof t=="boolean")i=this.featureFlagsByKey?.[e]?.filters?.payloads?.[t.toString()]||null;else if(typeof t=="string")i=this.featureFlagsByKey?.[e]?.filters?.payloads?.[t]||null;if(i!=null){if(typeof i=="object")return i;if(typeof i=="string")try{return JSON.parse(i)}catch{}return i}}return null}async evaluateFlagDependency(e,t,i){let{evaluationCache:n}=i,o=e.key;if(!this.featureFlagsByKey)throw new x("Feature flags not available for dependency evaluation");if(!("dependency_chain"in e))throw new x(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=e.dependency_chain;if(!Array.isArray(s))throw new x(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new x(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let g of s){if(!(g in n)){let l=this.featureFlagsByKey[g];if(l)if(l.active)try{let I=await this.computeFlagValueLocally(l,i);n[g]=I}catch(I){throw new x(`Error evaluating flag dependency '${g}' for flag '${o}': ${I}`)}else n[g]=!1;else throw new x(`Missing flag dependency '${g}' for flag '${o}'`)}if(n[g]==null)throw new x(`Dependency '${g}' could not be evaluated`)}let r=n[o];return this.flagEvaluatesToExpectedValue(e.value,r)}flagEvaluatesToExpectedValue(e,t){if(typeof e=="boolean")return e===t||typeof t=="string"&&t!==""&&e===!0;if(typeof e=="string")return t===e;return!1}async matchFeatureFlagProperties(e,t,i,n){let o=e.filters||{},s=o.groups||[],r=o.aggregation_group_type_index,g=o.early_exit??!1,{groups:a,groupProperties:l}=n,I=!1,d;for(let u of s)try{let c=u.aggregation_group_type_index!==void 0?u.aggregation_group_type_index:r,C=i,A=t;if(c!==r){if(c!=null){let p=this.groupTypeMapping[String(c)];if(!p||!(p in a)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${e.key}': group type index ${c} not available`));continue}if(!(p in l)){I=!0;continue}C=l[p],A=a[p]}}let m=await this.isConditionMatch(e,A,u,C,n);if(m==="match"){let p=u.variant,Z=o.multivariate?.variants||[];d=p&&Z.some((W)=>W.key===p)?p:await this.getMatchingVariant(e,A)||!0;break}if(g&&m==="out_of_rollout_bound")return!1}catch(c){if(c instanceof gt)throw c;if(c instanceof x)I=!0;else throw c}if(d!==void 0)return d;if(I)throw new x("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(e,t,i,n,o){let s=i.rollout_percentage,r=(g)=>{this.logMsgIfDebug(()=>console.warn(g))};if((i.properties||[]).length>0){for(let g of i.properties){let a=g.type,l=!1;if(a==="cohort"){let I=await UA(g,n,this.cohorts,this.debugMode,(d)=>this.evaluateFlagDependency(d,n,o));l=g.operator==="not_in"?!I:I}else l=a==="flag"?await this.evaluateFlagDependency(g,n,o):EA(g,n,r);if(!l)return"no_match"}if(s==null)return"match"}if(s!=null&&await XA(e.key,t)>s/100)return"out_of_rollout_bound";return"match"}async getMatchingVariant(e,t){let i=await XA(e.key,t,"variant"),n=this.variantLookupTable(e).find((o)=>i>=o.valueMin&&i<o.valueMax);if(n)return n.key}variantLookupTable(e){let t=[],i=0,n=0;return((e.filters||{}).multivariate?.variants||[]).forEach((r)=>{n=i+r.rollout_percentage/100,t.push({valueMin:i,valueMax:n,key:r.key}),i=n}),t}updateFlagState(e){this.featureFlags=e.flags,this.featureFlagsByKey=e.flags.reduce((t,i)=>(t[i.key]=i,t),{}),this.groupTypeMapping=e.groupTypeMapping,this.cohorts=e.cohorts,this.loadedSuccessfullyOnce=!0,this.onMinimalFlagCalledEvents?.(e.minimalFlagCalledEvents===!0)}warnAboutExperienceContinuityFlags(e){if(this.strictLocalEvaluation)return;let t=e.filter((i)=>i.ensure_experience_continuity);if(t.length>0)console.warn(`[PostHog] You are using local evaluation but ${t.length} flag(s) have experience continuity enabled: ${t.map((i)=>i.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(e){if(!this.cacheProvider)return!1;try{let t=await this.cacheProvider.getFlagDefinitions();if(t)return this.updateFlagState(t),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${e} (${t.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(t.flags),!0;return!1}catch(t){return this.onError?.(Error(`Failed to load from cache: ${t}`)),!1}}async loadFeatureFlags(e=!1){if(this.loadedSuccessfullyOnce&&!e)return;if(!e&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt)return void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period"));if(!this.loadingPromise)this.loadingPromise=this._loadFeatureFlags().catch((t)=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${t}`))).finally(()=>{this.loadingPromise=void 0});return this.loadingPromise}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){if(!this.shouldBeginExponentialBackoff)return this.pollingInterval;return Math.min(dP,this.pollingInterval*2**this.backOffCount)}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){if(this.poller)clearTimeout(this.poller),this.poller=void 0;this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval());try{let e=!0;if(this.cacheProvider)try{e=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(i){this.onError?.(Error(`Error in shouldFetchFlagDefinitions: ${i}`))}if(!e){if(await this.loadFromCache("Loaded flags from cache (skipped fetch)"))return;if(this.loadedSuccessfullyOnce)return}let t=await this._requestFeatureFlagDefinitions();if(!t)return;switch(t.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=t.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new Li(`Your project key or secret key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.onMinimalFlagCalledEvents?.(!1);return;case 403:throw this.beginBackoff(),new Li(`Your secret key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct secret and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new Li(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let i=await t.json()??{};if(!("flags"in i))return void this.onError?.(Error(`Invalid response when getting feature flags: ${JSON.stringify(i)}`));this.flagsEtag=t.headers?.get("ETag")??void 0;let n={flags:i.flags??[],groupTypeMapping:i.group_type_mapping||{},cohorts:i.cohorts||{},minimalFlagCalledEvents:i.minimal_flag_called_events===!0};if(this.updateFlagState(n),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&e)try{await this.cacheProvider.onFlagDefinitionsReceived(n)}catch(o){this.onError?.(Error(`Failed to store in cache: ${o}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(n.flags);break}default:return}}catch(e){if(e instanceof Li)this.onError?.(e)}}getPersonalApiKeyRequestOptions(e="GET",t){let i={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};if(t)i["If-None-Match"]=t;return{method:e,headers:i}}_requestFeatureFlagDefinitions(){let e=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,t=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),i=null;if(this.timeout&&typeof this.timeout=="number"){let n=new AbortController;i=de(()=>{n.abort()},this.timeout),t.signal=n.signal}try{let n=this.fetch;return n(e,t)}finally{clearTimeout(i)}}async stopPoller(e=30000){if(clearTimeout(this.poller),this.cacheProvider)try{let t=this.cacheProvider.shutdown();if(t instanceof Promise)await Promise.race([t,new Promise((i,n)=>setTimeout(()=>n(Error(`Cache shutdown timeout after ${e}ms`)),e))])}catch(t){this.onError?.(Error(`Error during cache shutdown: ${t}`))}}}async function XA(e,t,i=""){let n=await NA(`${e}.${t}${i}`);return parseInt(n.slice(0,15),16)/cP}function EA(e,t,i){let{key:n,value:o}=e,s=e.operator||"exact";if(n in t){if(s==="is_not_set")return!1}else{if(s==="is_not_set")return!0;throw new x(`Property ${n} not found in propertyValues`)}let r=t[n];if(r==null&&!CP.includes(s)){if(i)i(`Property ${n} cannot have a value of null/undefined with the ${s} operator`);return!1}function g(l,I){if(Array.isArray(l))return l.map((d)=>String(d).toLowerCase()).includes(String(I).toLowerCase());return String(l).toLowerCase()===String(I).toLowerCase()}function a(l,I,d){if(d==="gt")return l>I;if(d==="gte")return l>=I;if(d==="lt")return l<I;if(d==="lte")return l<=I;throw Error(`Invalid operator: ${d}`)}switch(s){case"exact":return g(o,r);case"is_not":return!g(o,r);case"is_set":return n in t;case"icontains":return String(r).toLowerCase().includes(String(o).toLowerCase());case"not_icontains":return!String(r).toLowerCase().includes(String(o).toLowerCase());case"regex":return SA(String(o))&&String(r).match(String(o))!==null;case"not_regex":return SA(String(o))&&String(r).match(String(o))===null;case"gt":case"gte":case"lt":case"lte":{let l=typeof o=="number"?o:parseFloat(String(o)),I;if(I=typeof r=="number"?r:r!=null?parseFloat(String(r)):NaN,Number.isFinite(l)&&Number.isFinite(I))return a(I,l,s);return a(String(r),String(o),s)}case"is_date_after":case"is_date_before":{if(typeof o=="boolean")throw new x("Date operations cannot be performed on boolean values");let l=ZP(String(o));if(l==null)l=xA(o);if(l==null)throw new x(`Invalid date: ${o}`);let I=xA(r);if(["is_date_before"].includes(s))return I<l;return I>l}case"semver_eq":return Se(ge(String(r)),ge(String(o)))===0;case"semver_neq":return Se(ge(String(r)),ge(String(o)))!==0;case"semver_gt":return Se(ge(String(r)),ge(String(o)))>0;case"semver_gte":return Se(ge(String(r)),ge(String(o)))>=0;case"semver_lt":return Se(ge(String(r)),ge(String(o)))<0;case"semver_lte":return Se(ge(String(r)),ge(String(o)))<=0;case"semver_tilde":{let l=ge(String(r)),{lower:I,upper:d}=mP(String(o));return Se(l,I)>=0&&Se(l,d)<0}case"semver_caret":{let l=ge(String(r)),{lower:I,upper:d}=pP(String(o));return Se(l,I)>=0&&Se(l,d)<0}case"semver_wildcard":{let l=ge(String(r)),{lower:I,upper:d}=AP(String(o));return Se(l,I)>=0&&Se(l,d)<0}default:throw new x(`Unknown operator: ${s}`)}}function uP(e,t){if(!(e in t))throw new gt(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function UA(e,t,i,n=!1,o){let s=String(e.value);uP(s,i);let r=i[s];return OA(r,t,i,n,o)}async function OA(e,t,i,n=!1,o){if(!e)return!0;let{type:s,values:r}=e;if(!r||r.length===0)return!0;let g=!1;if("values"in r[0]){for(let a of r)try{let l=await OA(a,t,i,n,o);if(s==="AND"){if(!l)return!1}else if(l)return!0}catch(l){if(l instanceof gt)throw l;if(l instanceof x){if(n)console.debug(`Failed to compute property ${a} locally: ${l}`);g=!0}else throw l}if(g)throw new x("Can't match cohort without a given cohort property value");return s==="AND"}for(let a of r)try{let l;if(a.type==="cohort")l=await UA(a,t,i,n,o);else if(a.type==="flag"){if(!o)throw new x(`Flag dependency '${a.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);l=await o(a)}else l=EA(a,t);let I=a.negation||!1;if(s==="AND"){if(!l&&!I)return!1;if(l&&I)return!1}else{if(l&&!I)return!0;if(!l&&I)return!0}}catch(l){if(l instanceof gt)throw l;if(l instanceof x){if(n)console.debug(`Failed to compute property ${a} locally: ${l}`);g=!0}else throw l}if(g)throw new x("can't match cohort without a given cohort property value");return s==="AND"}function SA(e){try{return new RegExp(e),!0}catch(t){return!1}}function TA(e,t){if(!/^\d+$/.test(e))throw new x(`Invalid semver: ${t}`);if(e.length>1&&e[0]==="0")throw new x(`Invalid semver: ${t}`);return parseInt(e,10)}function ge(e){let i=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!i||i.startsWith("."))throw new x(`Invalid semver: ${e}`);let n=i.split("."),o=(a)=>{if(a===void 0||a==="")return 0;return TA(a,e)},s=o(n[0]),r=o(n[1]),g=o(n[2]);return[s,r,g]}function Se(e,t){for(let i=0;i<3;i++){if(e[i]<t[i])return-1;if(e[i]>t[i])return 1}return 0}function mP(e){let t=ge(e),i=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:i,upper:n}}function pP(e){let t=ge(e),[i,n,o]=t,s=[i,n,o],r;return r=i>0?[i+1,0,0]:n>0?[0,n+1,0]:[0,0,o+1],{lower:s,upper:r}}function AP(e){let i=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!i)throw new x(`Invalid wildcard semver: ${e}`);let n=i.split("."),o=(a)=>{try{return TA(a,e)}catch{throw new x(`Invalid wildcard semver: ${e}`)}},s=o(n[0]),r,g;if(n.length===1)r=[s,0,0],g=[s+1,0,0];else{let a=o(n[1]);r=[s,a,0],g=[s,a+1,0]}return{lower:r,upper:g}}function xA(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new x(`${e} is in an invalid date format`)}throw new x(`The date provided ${e} must be a string, number, or date object`)}function ZP(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,i=e.match(t),n=new Date(new Date().toISOString());if(!i)return null;{if(!i.groups)return null;let o=parseInt(i.groups.number);if(o>=1e4)return null;let s=i.groups.interval;if(s=="h")n.setUTCHours(n.getUTCHours()-o);else if(s=="d")n.setUTCDate(n.getUTCDate()-o);else if(s=="w")n.setUTCDate(n.getUTCDate()-7*o);else if(s=="m")n.setUTCMonth(n.getUTCMonth()-o);else{if(s!="y")return null;n.setUTCFullYear(n.getUTCFullYear()-o)}return n}}function bP(e,t){let i=!1;return Object.assign((n)=>{let s=global.process.listeners("uncaughtException").filter((r)=>r.name!=="domainUncaughtExceptionClear"&&r._posthogErrorHandler!==!0).length===0;if(e(n,{mechanism:{type:"onuncaughtexception",handled:!1}}),!i&&s)i=!0,t(n)},{_posthogErrorHandler:!0})}function zA(e,t){globalThis.process?.on("uncaughtException",bP(e,t))}function jA(e){globalThis.process?.on("unhandledRejection",(t)=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var WP=2000;class at{constructor(e,t,i){this.client=e,this._exceptionAutocaptureEnabled=t.enableExceptionAutocapture||!1,this._logger=i,this._rateLimiter=new Wl({...Np(t),refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(e){return so(e)&&"__posthog_previously_captured_error"in e&&e.__posthog_previously_captured_error===!0}static async buildEventMessage(e,t,i,n,o){let s={...o},r=e.buildFromUnknown(t,i);return r.$exception_list=await e.modifyFrames(r.$exception_list),{event:"$exception",distinctId:n,properties:{...r,...s},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){if(this.isEnabled())zA(this.onException.bind(this),this.onFatalError.bind(this)),jA(this.onException.bind(this))}onException(e,t){this.client.addPendingPromise((async()=>{if(!at.isPreviouslyCapturedError(e)){let i=await at.buildEventMessage(this.client.getErrorPropertiesBuilder(),e,t),o=i.properties?.$exception_list[0]?.type??"Exception";if(this._rateLimiter.consumeRateLimit(o))return void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:o});return this.client._capturePreparedEvent(i,!1)}})())}async onFatalError(e){console.error(e),await this.client.shutdown(WP),globalThis.process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}}class Ol{getProperty(e){return this._memoryStorage[e]}setProperty(e,t){this._memoryStorage[e]=t!==null?t:void 0}constructor(){this._memoryStorage={}}}function hP(e){return e==="v0"||e==="v1"}function DA(){let e=typeof process<"u"?process.env?.POSTHOG_CAPTURE_MODE:void 0;return hP(e)?e:"v0"}var uo="analytics",mo="ai";function QA(e){return typeof e.event=="string"&&e.event.startsWith("$ai_")}class Mi extends Error{constructor({requestId:e,drops:t,retryExhausted:i,cause:n}){super(Mi.buildMessage(e,t,i,n)),this.name="CaptureV1Error",this.requestId=e,this.drops=t,this.retryExhausted=i,this.cause=n}static buildMessage(e,t,i,n){let o=`Capture V1 batch ${e} did not fully deliver: ${t.length} dropped, ${i.length} undelivered`;if(n instanceof Error)o+=` (${n.message})`;return o}}function Tl(e){if(typeof e=="boolean")return e;if(typeof e=="number")return e!==0;if(typeof e=="string"){let t=e.trim().toLowerCase();if(t==="true"||t==="1")return!0;if(t==="false"||t==="0")return!1}}function fP(e){return typeof e=="string"?e:void 0}var yP=[{property:"$cookieless_mode",optionKey:"cookieless_mode",coerce:Tl},{property:"$ignore_sent_at",optionKey:"disable_skew_correction",coerce:Tl},{property:"$process_person_profile",optionKey:"process_person_profile",coerce:Tl},{property:"$product_tour_id",optionKey:"product_tour_id",coerce:fP}],VP=[{property:"$session_id",field:"session_id"},{property:"$window_id",field:"window_id"}];function BP(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function RP(e){if(typeof e=="string"){let i=new Date(e);return Number.isNaN(i.getTime())?new Date().toISOString():e}if(e instanceof Date)return Number.isNaN(e.getTime())?new Date().toISOString():e.toISOString();let t=e==null?new Date:new Date(e);return Number.isNaN(t.getTime())?new Date().toISOString():t.toISOString()}function _A(e,t,i){if(i!==void 0&&!(t in e))e[t]=i}function GP(e){let i={...BP(e.properties)?e.properties:{}},n={};for(let{property:s,optionKey:r,coerce:g}of yP)if(s in i){let a=g(i[s]);if(a!==void 0)n[r]=a;delete i[s]}let o={};for(let{property:s,field:r}of VP)if(s in i){let g=i[s];if(typeof g=="string")o[r]=g;delete i[s]}return delete i.$lib,delete i.$lib_version,_A(i,"$set",e.$set),_A(i,"$set_once",e.$set_once),{event:String(e.event??""),uuid:String(e.uuid??""),distinct_id:String(e.distinct_id??""),timestamp:RP(e.timestamp),...o,options:n,properties:i}}function KA(e,{createdAt:t,historicalMigration:i}){let n={created_at:t,batch:e.map(GP)};if(i)n.historical_migration=!0;return n}var wP="/i/v1/analytics/events",FP=30000,HP=new Set([408,500,502,503,504]);class zl{constructor(e,t){this.config=e,this.maxBackoffMs=e.maxBackoffMs??FP,this.fetchFn=t.fetch,this.onError=t.onError,this.now=t.now??Date.now,this.sleep=t.sleep??((i)=>new Promise((n)=>de(n,i))),this.generateRequestId=t.generateRequestId??Fe,this.compress=t.compress??ni}async sendV1Batch(e){if(e.length===0)return;let t=this.generateRequestId(),i=new Date(this.now()).toISOString(),{batch:n}=KA(e,{createdAt:i,historicalMigration:this.config.historicalMigration}),o=`${this.config.host}${wP}`,s=[],r=n,g=Math.max(1,this.config.maxAttempts);for(let a=1;a<=g;a++){let l=a===g,I=zi({created_at:i,...this.config.historicalMigration?{historical_migration:!0}:{},batch:r}),d;try{d=await this.sendOnce(o,I,a,t)}catch(m){if(l)return this.surfaceBatchFailure(t,s,r,m);await this.sleep(this.backoffDelay(a));continue}let{status:u}=d;if(u<200||u>=300){if(!l&&HP.has(u)){let p=this.parseRetryAfter(d);await this.cancelBody(d),await this.sleep(this.backoffDelay(a,p));continue}let m=await this.buildHttpError(d,u);return this.surfaceBatchFailure(t,s,r,m)}let c;try{c=await this.parseResponse(d)}catch{return this.surfaceBatchFailure(t,s,r,Error(`Capture V1 returned an unparseable ${u} response body`))}let C=this.classify(r,c,s);if(C.length===0)return this.surfacePartialDrops(t,s);if(l)return void this.onError(new Mi({requestId:t,drops:s,retryExhausted:C.map((m)=>m.uuid)}));r=C;let A=this.parseRetryAfter(d);await this.sleep(this.backoffDelay(a,A))}}async sendOnce(e,t,i,n){let o=this.buildHeaders(i,n),s=t;if(this.config.compressionEnabled){let a=await this.compress(t,this.config.isDebug);if(a!==null)s=a,o["Content-Encoding"]="gzip"}let r=new AbortController,g=de(()=>r.abort(),this.config.requestTimeoutMs);try{return await this.fetchFn(e,{method:"POST",headers:o,body:s,signal:r.signal})}finally{clearTimeout(g)}}buildHeaders(e,t){let i=`${this.config.libraryId}/${this.config.libraryVersion}`,n={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"PostHog-Sdk-Info":i,"PostHog-Attempt":String(e),"PostHog-Request-Id":t,"PostHog-Request-Timestamp":new Date(this.now()).toISOString()};if(this.config.userAgent)n["User-Agent"]=this.config.userAgent;return n}classify(e,t,i){let n=t.results??{},o=[];for(let s of e){let r=n[s.uuid];if(r){if(r.result==="drop")i.push({uuid:s.uuid,details:r.details??void 0});else if(r.result==="retry")o.push(s)}}return o}backoffDelay(e,t){let i=Math.min(this.config.initialRetryDelayMs*2**(e-1),this.maxBackoffMs);if(t===void 0)return i;return Math.max(i,Math.min(t,this.maxBackoffMs))}parseRetryAfter(e){let t=e.headers?.get("Retry-After");if(!t)return;let i=t.trim();if(/^\d+$/.test(i)){let s=parseInt(i,10);return Number.isFinite(s)&&s>0?1000*s:void 0}let n=Date.parse(i);if(Number.isNaN(n))return;let o=n-this.now();return o>0?o:void 0}async parseResponse(e){let t=await e.text(),i=JSON.parse(t);if(typeof i!="object"||i===null||Array.isArray(i))throw Error("unexpected response shape");let n=i.results;if(n!==void 0&&(typeof n!="object"||n===null||Array.isArray(n)))throw Error("unexpected results shape");return{results:n??{}}}async buildHttpError(e,t){let i="";try{i=(await e.text()).slice(0,512)}catch{}let n=i?`: ${i}`:"";return Error(`Capture V1 request failed with HTTP ${t}${n}`)}surfaceBatchFailure(e,t,i,n){this.onError(new Mi({requestId:e,drops:t,retryExhausted:i.map((o)=>o.uuid),cause:n}))}surfacePartialDrops(e,t){if(t.length>0)this.onError(new Mi({requestId:e,drops:t,retryExhausted:[]}))}async cancelBody(e){await e.body?.cancel()?.catch(()=>{})}}var vP=100,LA=30000,kP=50000,PP=50,YP=500,NP="https://us.i.posthog.com",MA=new Set;function qs(e,t){if(MA.has(e))return;MA.add(e),console.warn(`[PostHog] ${t}`)}function XP(e){return typeof e=="string"?e.trim():""}function SP(e){return(typeof e=="string"?e.trim():"")||void 0}function xP(e){return(typeof e=="string"?e.trim():"")||NP}function JP(e){return(Array.isArray(e)?e:[e]).filter((i)=>typeof i=="string"&&i.trim().length>0)}function EP(e){if(!e)return{};let t={};for(let[n,o]of Object.entries(e))t[`$feature/${n}`]=o;let i=Object.keys(e).filter((n)=>e[n]!==!1).sort();if(i.length>0)t.$active_feature_flags=i;return t}class jl extends Ms{constructor(e,t={}){let i=XP(e),n={...t,maxQueueSize:t.maxQueueSize??1e4,flushInterval:t.flushInterval??5000,host:xP(t.host),personalApiKey:SP(t.secretKey??t.personalApiKey)};if(super(i,n),this._memoryStorage=new Ol,this._minimalFlagCalledEvents=!1,this.options=n,this.captureMode=DA(),this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof n.featureFlagsPollingInterval=="number"?Math.max(n.featureFlagsPollingInterval,vP):LA,typeof n.waitUntilDebounceMs=="number")this.options.waitUntilDebounceMs=Math.max(n.waitUntilDebounceMs,0);if(typeof n.waitUntilMaxWaitMs=="number")this.options.waitUntilMaxWaitMs=Math.max(n.waitUntilMaxWaitMs,0);if(!this.disabled&&n.personalApiKey){if(n.personalApiKey.includes("phc_"))throw Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');if(n.enableLocalEvaluation!==!1)this.featureFlagsPoller=new Ul({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:n.personalApiKey,projectApiKey:i,timeout:n.requestTimeout??1e4,host:this.host,fetch:n.fetch,onError:(s)=>{this._events.emit("error",s)},onLoad:(s)=>{this._events.emit("localEvaluationFlagsLoaded",s)},onMinimalFlagCalledEvents:(s)=>{this._minimalFlagCalledEvents=s},customHeaders:this.getCustomHeaders(),cacheProvider:n.flagDefinitionCacheProvider,strictLocalEvaluation:n.strictLocalEvaluation})}this.errorTracking=new at(this,n,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=n.maxCacheSize||kP}enqueue(e,t,i){super.enqueue(e,t,i),this.scheduleDebouncedFlush()}async flush(){let e=this.flushWithPendingPromises(),t=this.options.waitUntil;if(t&&!this._waitUntilCycle)try{t(e.catch(()=>{}))}catch{}return e}scheduleDebouncedFlush(){let e=this.options.waitUntil;if(!e)return;if(this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,r=new Promise((g)=>{s=g});try{e(r)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let t=Date.now()-this._waitUntilCycle.startedAt,i=this.options.waitUntilMaxWaitMs??YP,n=t>=i;if(this._waitUntilCycle.timer!==void 0)clearTimeout(this._waitUntilCycle.timer);if(n)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??PP;this._waitUntilCycle.timer=de(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let e=this._waitUntilCycle;if(e)clearTimeout(e.timer),this._waitUntilCycle=void 0;return e?.resolve}async resolveWaitUntilFlush(){let e=this._consumeWaitUntilCycle();try{await this.flushWithPendingPromises()}catch{}finally{e?.()}}getPersistedProperty(e){return this._memoryStorage.getProperty(e)}setPersistedProperty(e,t){return this._memoryStorage.setProperty(e,t)}fetch(e,t){return this.options.fetch?this.options.fetch(e,t):fetch(e,t)}getQueueRouteKey(e){return this.captureMode==="v1"&&QA(e)?mo:uo}persistedQueueKeyForRoute(e){return e===mo?we.AiQueue:we.Queue}getActiveQueueRoutes(){return this.captureMode==="v1"?[uo,mo]:[uo]}async sendBatch(e,t,i=uo){if(this.captureMode!=="v1"||i===mo)return super.sendBatch(e,t,i);let n=e.filter((o)=>o!==void 0);await this.getV1Sender().sendV1Batch(n)}getV1Sender(){if(!this._v1Sender)this._v1Sender=new zl({host:this.host,apiKey:this.apiKey,libraryId:this.getLibraryId(),libraryVersion:this.getLibraryVersion(),userAgent:this.getCustomUserAgent()||void 0,historicalMigration:this.historicalMigration,compressionEnabled:!this.disableCompression,requestTimeoutMs:this.requestTimeout,maxAttempts:(this.options.fetchRetryCount??3)+1,initialRetryDelayMs:this.options.fetchRetryDelay??3000,isDebug:this.isDebug},{fetch:(e,t)=>this.fetch(e,t),onError:(e)=>this._events.emit("error",e)});return this._v1Sender}getLibraryVersion(){return YA}get metrics(){if(!this._metrics)this._metrics=new Es(this,Js(this.options.metrics),this._logger);return this._metrics}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}getCommonEventProperties(){let e=super.getCommonEventProperties();if(this.options.isServer??!0)e.$is_server=!0;return e}enable(){return super.optIn()}disable(){return super.optOut()}debug(e=!0){super.debug(e),this.featureFlagsPoller?.debug(e)}_warnIfInvalidCapture(e,t,i){if(typeof e=="string")this._logger.warn(t);if(e.event==="$exception"&&!e._originatedFromCaptureException)this._logger.warn(i)}_sendPreparedEvent(e,t,i,n){return this.addPendingPromise(this._prepareEventMessage(t,n).then(({distinctId:o,event:s,properties:r,options:g})=>{let a={timestamp:g.timestamp,disableGeoip:g.disableGeoip,uuid:g.uuid},l={distinctId:o,event:s,properties:{...r,...this.getCommonEventProperties()}};return i?this.sendImmediate(e,l,a):this.enqueue(e,l,a)}).catch((o)=>{if(o)console.error(o)}))}_capturePreparedEvent(e,t){return this._sendPreparedEvent("capture",e,t)}capture(e){this._warnIfInvalidCapture(e,"Called capture() with a string as the first argument when an object was expected.","Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this._capturePreparedEvent(e,!1)}async captureImmediate(e){return this._warnIfInvalidCapture(e,"Called captureImmediate() with a string as the first argument when an object was expected.","Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this._capturePreparedEvent(e,!0)}identify({distinctId:e,properties:t={},disableGeoip:i}){let{$set:n,$set_once:o,$anon_distinct_id:s,...r}=t,l={$set:n||r,$set_once:o||{},$anon_distinct_id:s??void 0};this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:l,disableGeoip:i},!1,{includeContextProperties:!1})}async identifyImmediate({distinctId:e,properties:t={},disableGeoip:i}){let{$set:n,$set_once:o,$anon_distinct_id:s,...r}=t,l={$set:n||r,$set_once:o||{},$anon_distinct_id:s??void 0};await this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:l,disableGeoip:i},!0,{includeContextProperties:!1})}setPersonProperties({distinctId:e,properties:t={},propertiesOnce:i={}}){if(Object.keys(t).length===0&&Object.keys(i).length===0)return;let n={};if(Object.keys(t).length>0)n.$set=t;if(Object.keys(i).length>0)n.$set_once=i;this.capture({distinctId:e,event:"$set",properties:n})}unsetPersonProperties({distinctId:e,properties:t}){let i=JP(t);if(i.length===0)return;this.capture({distinctId:e,event:"$set",properties:{$unset:i}})}alias(e){this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!1,{includeContextProperties:!1})}async aliasImmediate(e){await this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!0,{includeContextProperties:!1})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady(e=LA){if(this.isLocalEvaluationReady())return!0;if(this.featureFlagsPoller===void 0)return!1;return new Promise((t)=>{let i=setTimeout(()=>{n(),t(!1)},e),n=this._events.on("localEvaluationFlagsLoaded",(o)=>{clearTimeout(i),n(),t(o>0)})})}_resolveDistinctId(e,t){if(typeof e=="string")return{distinctId:e,options:t};return{distinctId:this.context?.get()?.distinctId,options:e}}async _getFeatureFlagResult(e,t,i={},n){if(this.disabled)return void this._logger.warn("The client is disabled");let o=i.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&e in this._flagOverrides){let V=this._flagOverrides[e];if(V===void 0)return;let B=this._payloadOverrides?.[e];return{key:e,enabled:V!==!1,variant:typeof V=="string"?V:void 0,payload:B}}let{groups:s,disableGeoip:r}=i,{onlyEvaluateLocally:g,personProperties:a,groupProperties:l}=i,I=this.addLocalPersonAndGroupProperties(t,s,a,l);a=I.allPersonProperties,l=I.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(t,s,this.personPropertiesForLocalEvaluation(t,a),l);if(g==null)g=this.options.strictLocalEvaluation??!1;let u,c=!1,C,A,m,p,Z,W,h;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let V=this.featureFlagsPoller?.featureFlagsByKey[e];if(V)try{let B=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(V,d,{matchValue:n});if(B){c=!0;let F=B.value;p=V.id,W="Evaluated locally",h=V.has_experiment,u={key:e,enabled:F!==!1,variant:typeof F=="string"?F:void 0,payload:B.payload??void 0}}}catch(B){if(B instanceof gt||B instanceof x)this._logger?.info(`${B.name} when computing flag locally: ${e}: ${B.message}`);else throw B}}if(!c&&!g){let V=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,a,l,r,[e]);if(V===void 0)m=ft.UNKNOWN_ERROR;else{this._minimalFlagCalledEvents=V.minimalFlagCalledEvents===!0,C=V.requestId,A=V.evaluatedAt;let B=[];if(V.errorsWhileComputingFlags)B.push(ft.ERRORS_WHILE_COMPUTING);if(V.quotaLimited?.includes("feature_flags"))B.push(ft.QUOTA_LIMITED);let F=V.flags[e];if(F===void 0)B.push(ft.FLAG_MISSING);else{p=F.metadata?.id,Z=F.metadata?.version,W=F.reason?.description??F.reason?.code,h=F.metadata?.has_experiment;let R;if(F.metadata?.payload!==void 0)try{R=JSON.parse(F.metadata.payload)}catch{R=F.metadata.payload}u={key:e,enabled:F.enabled,variant:F.variant,payload:R}}if(B.length>0)m=B.join(",")}}if(o){let V=u===void 0?void 0:u.enabled===!1?!1:u.variant??!0,B={$feature_flag:e,$feature_flag_response:V,$feature_flag_id:p,$feature_flag_version:Z,$feature_flag_reason:W,locally_evaluated:c,[`$feature/${e}`]:V,$feature_flag_request_id:C,$feature_flag_evaluated_at:c?Date.now():A};if(h!==void 0)B.$feature_flag_has_experiment=h;if(c&&this.featureFlagsPoller){let F=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();if(F!==void 0)B.$feature_flag_definitions_loaded_at=F}if(m)B.$feature_flag_error=m;this._captureFlagCalledEventIfNeeded({distinctId:t,key:e,response:V,groups:s,disableGeoip:r,properties:B})}if(u!==void 0&&this._payloadOverrides!==void 0&&e in this._payloadOverrides)u={...u,payload:this._payloadOverrides[e]};return u}async getFeatureFlag(e,t,i){qs("getFeatureFlag","`getFeatureFlag` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlag(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let n=await this._getFeatureFlagResult(e,t,{...i,sendFeatureFlagEvents:i?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(n===void 0)return;if(n.enabled===!1)return!1;return n.variant??!0}async getFeatureFlagPayload(e,t,i,n){if(qs("getFeatureFlagPayload","`getFeatureFlagPayload` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlagPayload(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request."),this._payloadOverrides!==void 0&&e in this._payloadOverrides)return this._payloadOverrides[e];let o=await this._getFeatureFlagResult(e,t,{...n,sendFeatureFlagEvents:!1},i);if(o===void 0)return;return o.payload??null}async getFeatureFlagResult(e,t,i){let{distinctId:n,options:o}=this._resolveDistinctId(t,i);if(!n)return void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()");return this._getFeatureFlagResult(e,n,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0})}async getRemoteConfigPayload(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(!this.options.personalApiKey)throw Error("Personal API key is required for remote config payload decryption");let t=await this._requestRemoteConfigPayload(e);if(!t)return;let i=await t.json();if(typeof i=="string")try{return JSON.parse(i)}catch(n){}return i}async isFeatureEnabled(e,t,i){qs("isFeatureEnabled","`isFeatureEnabled` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.isEnabled(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let n=await this._getFeatureFlagResult(e,t,{...i,sendFeatureFlagEvents:i?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(n===void 0)return;if(n.enabled===!1)return!1;return!!(n.variant??!0)||!1}async getAllFlags(e,t){let{distinctId:i,options:n}=this._resolveDistinctId(e,t);if(!i)return this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{};return(await this.getAllFlagsAndPayloads(i,n)).featureFlags||{}}async getAllFlagsAndPayloads(e,t){let{distinctId:i,options:n}=this._resolveDistinctId(e,t);if(!i)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};if(this.disabled)return this._logger.warn("The client is disabled"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:r}=n||{},{onlyEvaluateLocally:g,personProperties:a,groupProperties:l}=n||{},I=this.addLocalPersonAndGroupProperties(i,o,a,l);a=I.allPersonProperties,l=I.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(i,o,this.personPropertiesForLocalEvaluation(i,a),l);if(g==null)g=this.options.strictLocalEvaluation??!1;let u=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,r),c={},C={},A=!0;if(u)c=u.response,C=u.payloads,A=u.fallbackToFlags;if(A&&!g){let m=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,a,l,s,r);c={...c,...m.flags||{}},C={...C,...m.payloads||{}}}if(this._flagOverrides!==void 0)c={...c,...this._flagOverrides};if(this._payloadOverrides!==void 0)C={...C,...this._payloadOverrides};return{featureFlags:c,featureFlagPayloads:C}}async evaluateFlags(e,t){let{distinctId:i,options:n}=this._resolveDistinctId(e,t);if(!i)return this._logger.warn("[PostHog] distinctId is required to evaluate feature flags \u2014 pass it explicitly or use withContext()"),new ai({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});if(this.disabled)return this._logger.warn("The client is disabled"),new ai({host:this._getFeatureFlagEvaluationsHost(),distinctId:i,flags:{}});let{groups:o,disableGeoip:s,flagKeys:r}=n||{},{onlyEvaluateLocally:g,personProperties:a,groupProperties:l}=n||{},I=this.addLocalPersonAndGroupProperties(i,o,a,l);a=I.allPersonProperties,l=I.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(i,o,this.personPropertiesForLocalEvaluation(i,a),l);if(g==null)g=this.options.strictLocalEvaluation??!1;let u={},c,C,A=!1,m=!1,p=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,r),Z=new Set;if(p)for(let[h,f]of Object.entries(p.response)){let V=this.featureFlagsPoller?.featureFlagsByKey[h];u[h]={key:h,enabled:f!==!1,variant:typeof f=="string"?f:void 0,payload:p.payloads[h],id:V?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0,hasExperiment:V?.has_experiment},Z.add(h)}if((p?p.fallbackToFlags:!0)&&!g){let h=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,a,l,s,r);if(h){this._minimalFlagCalledEvents=h.minimalFlagCalledEvents===!0,c=h.requestId,C=h.evaluatedAt,A=Boolean(h.errorsWhileComputingFlags),m=Array.isArray(h.quotaLimited)&&h.quotaLimited.includes("feature_flags");for(let[f,V]of Object.entries(h.flags)){if(Z.has(f))continue;let B;if(V.metadata?.payload!==void 0)try{B=JSON.parse(V.metadata.payload)}catch{B=V.metadata.payload}u[f]={key:f,enabled:V.enabled,variant:V.variant,payload:B,id:V.metadata?.id,version:V.metadata?.version,reason:V.reason?.description??V.reason?.code,locallyEvaluated:!1,hasExperiment:V.metadata?.has_experiment}}}}if(this._flagOverrides!==void 0)for(let[h,f]of Object.entries(this._flagOverrides)){if(f===void 0){delete u[h];continue}let V=u[h];u[h]={key:h,enabled:f!==!1,variant:typeof f=="string"?f:void 0,payload:V?.payload,id:V?.id,version:V?.version,reason:V?.reason,locallyEvaluated:V?.locallyEvaluated??!1,hasExperiment:V?.hasExperiment}}if(this._payloadOverrides!==void 0)for(let[h,f]of Object.entries(this._payloadOverrides)){let V=u[h];if(V)u[h]={...V,payload:f}}return new ai({host:this._getFeatureFlagEvaluationsHost(),distinctId:i,groups:o,disableGeoip:s,flags:u,requestId:c,evaluatedAt:C,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:A,quotaLimited:m})}_shouldSendMinimalFlagCalledEvent(e,t){return e==="$feature_flag_called"&&this._minimalFlagCalledEvents&&t.$feature_flag_has_experiment===!1}_captureFlagCalledEventIfNeeded(e){let{distinctId:t,key:i,response:n,groups:o,disableGeoip:s,properties:r}=e,g=o&&Object.keys(o).length>0?`_${JSON.stringify(Object.entries(o).sort(([l],[I])=>l<I?-1:l>I?1:0))}`:"",a=`${i}_${n}${g}`;if(t in this.distinctIdHasSentFlagCalls&&this.distinctIdHasSentFlagCalls[t].has(a))return;if(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize)this.distinctIdHasSentFlagCalls={};if(this.distinctIdHasSentFlagCalls[t]instanceof Set)this.distinctIdHasSentFlagCalls[t].add(a);else this.distinctIdHasSentFlagCalls[t]=new Set([a]);this.capture({distinctId:t,event:"$feature_flag_called",properties:r,groups:o,disableGeoip:s})}_getFeatureFlagEvaluationsHost(){if(!this._featureFlagEvaluationsHost)this._featureFlagEvaluationsHost={captureFlagCalledEventIfNeeded:(e)=>this._captureFlagCalledEventIfNeeded(e),logWarning:(e)=>{if(this.options.featureFlagsLogWarnings!==!1)console.warn(`[PostHog] ${e}`)}};return this._featureFlagEvaluationsHost}groupIdentify({groupType:e,groupKey:t,properties:i,distinctId:n,disableGeoip:o}){this._sendPreparedEvent("capture",{distinctId:n||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:i||{}},disableGeoip:o},!1,{includeContextProperties:!1})}async groupIdentifyImmediate({groupType:e,groupKey:t,properties:i,distinctId:n,disableGeoip:o}){await this._sendPreparedEvent("capture",{distinctId:n||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:i||{}},disableGeoip:o},!0,{includeContextProperties:!1})}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(e){let t=(i)=>Object.fromEntries(i.map((n)=>[n,!0]));if(e===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(e)){this._flagOverrides=t(e);return}if(this._isFeatureFlagOverrideOptions(e)){if("flags"in e){if(e.flags===!1)this._flagOverrides=void 0;else if(Array.isArray(e.flags))this._flagOverrides=t(e.flags);else if(e.flags!==void 0)this._flagOverrides={...e.flags}}if("payloads"in e){if(e.payloads===!1)this._payloadOverrides=void 0;else if(e.payloads!==void 0)this._payloadOverrides={...e.payloads}}return}this._flagOverrides={...e}}_isFeatureFlagOverrideOptions(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;if("flags"in t){let i=t.flags;if(i===!1||Array.isArray(i)||typeof i=="object"&&i!==null)return!0}if("payloads"in t){let i=t.payloads;if(i===!1||typeof i=="object"&&i!==null)return!0}return!1}withContext(e,t,i){if(!this.context)return t();return this.context.run(e,t,i)}getContext(){return this.context?.get()}enterContext(e,t){this.context?.enter(e,t)}async _shutdown(e){let t=Date.now()+(e??30000),i=this._consumeWaitUntilCycle();if(await this.featureFlagsPoller?.stopPoller(e),this.errorTracking.shutdown(),this._metrics)await Promise.race([this._metrics.flush().catch(()=>{}),new Promise((n)=>de(n,Math.max(0,t-Date.now())))]),this._metrics.reset();try{return await super._shutdown(Math.max(0,t-Date.now()))}finally{this.distinctIdHasSentFlagCalls={},i?.()}}async _requestRemoteConfigPayload(e){if(this.disabled||!this.apiKey||!this.options.personalApiKey)return;let t=`${this.host}/api/projects/@current/feature_flags/${e}/remote_config?token=${encodeURIComponent(this.apiKey)}`,i={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},n=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;n=de(()=>{o.abort()},this.options.requestTimeout),i.signal=o.signal}try{return await this.fetch(t,i)}catch(o){this._events.emit("error",o);return}finally{if(n)clearTimeout(n)}}extractPropertiesFromEvent(e,t){if(!e)return{personProperties:{},groupProperties:{}};let i={},n={};for(let[o,s]of Object.entries(e))if(Yp(s)&&t&&o in t){let r={};for(let[g,a]of Object.entries(s))r[String(g)]=String(a);n[String(o)]=r}else i[String(o)]=String(s);return{personProperties:i,groupProperties:n}}async getFeatureFlagsForEvent(e,t,i,n){if(this.disabled||!this.apiKey)return void this._logger.warn("The client is disabled");let o=n?.personProperties||{},s=n?.groupProperties||{},r=n?.flagKeys;if(n?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if(!((this.featureFlagsPoller?.featureFlags?.length||0)>0))return{};else{let a={};for(let[l,I]of Object.entries(t||{}))a[l]=String(I);return await this.getAllFlags(e,{groups:a,personProperties:o,groupProperties:s,disableGeoip:i,onlyEvaluateLocally:!0,flagKeys:r})}if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let a={};for(let[l,I]of Object.entries(t||{}))a[l]=String(I);return await this.getAllFlags(e,{groups:a,personProperties:o,groupProperties:s,disableGeoip:i,onlyEvaluateLocally:!0,flagKeys:r})}return(await super.getFeatureFlagsStateless(e,t,o,s,i)).flags}addLocalPersonAndGroupProperties(e,t,i,n){let o={...i||{}},s={};if(t)for(let r of Object.keys(t))s[r]={$group_key:t[r],...n?.[r]||{}};return{allPersonProperties:o,allGroupProperties:s}}personPropertiesForLocalEvaluation(e,t){return{distinct_id:e,...t||{}}}createFeatureFlagEvaluationContext(e,t,i,n){return{distinctId:e,groups:t||{},personProperties:i||{},groupProperties:n||{},evaluationCache:{}}}captureException(e,t,i,n,o){if(!at.isPreviouslyCapturedError(e)){let s=Error("PostHog syntheticException");this.addPendingPromise(at.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:s},t,i).then((r)=>this._capturePreparedEvent({...r,uuid:n,flags:o},!1)))}}async captureExceptionImmediate(e,t,i,n){if(!at.isPreviouslyCapturedError(e)){let o=Error("PostHog syntheticException");return this.addPendingPromise(at.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:o},t,i).then((s)=>this.captureImmediate({...s,flags:n})))}}async prepareEventMessage(e){return this._prepareEventMessage(e)}async _prepareEventMessage(e,t={}){let{distinctId:i,event:n,properties:o,groups:s,flags:r,sendFeatureFlags:g,timestamp:a,disableGeoip:l,uuid:I}=e,d=this.context?.get(),u=t.includeContextProperties??!0,c=i||d?.distinctId,C=u?{...this.props,...d?.properties||{},...o||{}}:{...o||{}};if(!c)c=Fe(),C.$process_person_profile=!1;if(u&&d?.sessionId&&!C.$session_id)C.$session_id=d.sessionId;let A=this._shouldSendMinimalFlagCalledEvent(n,C)?no(C):C,m=this._runBeforeSend({distinctId:c,event:n,properties:A,groups:s,flags:r,sendFeatureFlags:g,timestamp:a,disableGeoip:l,uuid:I});if(!m)return Promise.reject(null);let p=await Promise.resolve().then(async()=>{if(r){if(g)console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`.");return r._getEventProperties()}if(g){qs("sendFeatureFlags","`sendFeatureFlags` is deprecated and will be removed in a future major version. Pass a `flags` snapshot from `posthog.evaluateFlags(...)` instead \u2014 it avoids a second `/flags` request per capture and guarantees the event carries the exact flag values your code branched on.");let Z=typeof g=="object"?g:void 0,W=await this.getFeatureFlagsForEvent(m.distinctId,s,l,Z);return EP(W)}return{}}).catch(()=>({})).then((Z)=>{let W=m.groups||s;return{...Z,...m.properties||{},...W!==void 0&&Object.keys(W).length>0?{$groups:W}:{}}});if(m.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof p.$raw_user_agent=="string"){if(Gp(p.$raw_user_agent,this.options.custom_blocked_useragents||[]))m.event="$bot_pageview",p.$browser_type="bot"}return{distinctId:m.distinctId,event:m.event,properties:p,options:{timestamp:m.timestamp,disableGeoip:m.disableGeoip,uuid:m.uuid}}}_runBeforeSend(e){let t=this.options.before_send;if(!t)return e;let i=Array.isArray(t)?t:[t],n=e;for(let o of i){if(n=o(n),!n)return this._logger.info(`Event '${e.event}' was rejected in beforeSend function`),null;if(!n.properties||Object.keys(n.properties).length===0){let s=`Event '${n.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(s)}}return n}}var $A=require("async_hooks");class Dl{constructor(){this.storage=new $A.AsyncLocalStorage}get(){return this.storage.getStore()}run(e,t,i){return this.storage.run(this.resolve(e,i),t)}enter(e,t){this.storage.enterWith(this.resolve(e,t))}resolve(e,t){if(t?.fresh===!0)return e;let i=this.get()||{};return{distinctId:e.distinctId??i.distinctId,sessionId:e.sessionId??i.sessionId,properties:{...i.properties||{},...e.properties||{}}}}}function UP(e,{organization:t,projectId:i,prefix:n,severityAllowList:o=["error"],sendExceptionsToPostHog:s=!0}={}){return(r)=>{if(!(o==="*"||o.includes(r.level)))return r;if(!r.tags)r.tags={};let a=r.tags[qA.POSTHOG_ID_TAG];if(a===void 0)return r;let l=e.options.host??"https://us.i.posthog.com",I=new URL(`/project/${e.apiKey}/person/${a}`,l).toString();r.tags["PostHog Person URL"]=I;let d=r.exception?.values||[],u=d.map((C)=>({...C,stacktrace:C.stacktrace?{...C.stacktrace,type:"raw",frames:(C.stacktrace.frames||[]).map((A)=>({...A,platform:"node:javascript"}))}:void 0})),c={$exception_message:d[0]?.value||r.message,$exception_type:d[0]?.type,$exception_level:r.level,$exception_list:u,$sentry_event_id:r.event_id,$sentry_exception:r.exception,$sentry_exception_message:d[0]?.value||r.message,$sentry_exception_type:d[0]?.type,$sentry_tags:r.tags};if(t&&i)c.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+i+"&query="+r.event_id;if(s)e.capture({event:"$exception",distinctId:a,properties:c});return r}}class qA{static#i=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(e,t,i,n,o){this.name="posthog-node",this.name="posthog-node",this.setupOnce=function(s,r){let g=r()?.getClient()?.getDsn()?.projectId;s(UP(e,{organization:t,projectId:g,prefix:i,severityAllowList:n,sendExceptionsToPostHog:o??!0}))}}}class Ql extends jl{getLibraryId(){return"posthog-node"}initializeContext(){return new Dl}createErrorPropertiesBuilder(){return new Ve.ErrorPropertiesBuilder([new Ve.EventCoercer,new Ve.ErrorCoercer,new Ve.ObjectCoercer,new Ve.StringCoercer,new Ve.PrimitiveCoercer],Ve.createStackParser("node:javascript",Ve.nodeStackLineParser),[Vp(),HA,PA()])}}var xe=(e)=>{if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="yes"||t==="on"},$i=(e)=>{if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="0"||t==="false"||t==="no"||t==="off"};var ie=require("fs/promises"),ce=require("path");var er={name:"@toloka-platform/sdk",version:"0.1.0-preview.9",private:!1,description:"Preview. Build, inspect, and operate Toloka pipeline projects as TypeScript source. The public API may change.",license:"Apache-2.0",bin:{toloka:"bin/toloka.js"},files:["README.md","bin","docs","dist","examples","openapi/gen","skills","src"],type:"module",main:"./src/index.ts",exports:{".":"./src/index.ts","./testing":"./src/testing/index.ts","./checks":"./src/checks/index.ts","./examples/face-image-collection":"./examples/face-image-collection/pipeline.ts"},publishConfig:{access:"public",registry:"https://registry.npmjs.org/",tag:"preview"},scripts:{build:"bun ./scripts/build-cli.ts ./dist/cli",generate:"orval --config ./openapi/orval.config.js",prepack:"bun run build","sync-skill-catalog":"bun ./scripts/sync-skill-catalog.ts","sync-task-ui-declarations":"bun ./scripts/sync-task-ui-declarations.ts",test:"vitest run","test:browser":"vitest run --config vitest.browser.config.ts",typecheck:"tsc --noEmit"},dependencies:{"@inquirer/select":"5.2.1","@typescript/vfs":"1.6.2",ajv:"8.17.1","ajv-formats":"3.0.1",commander:"15.0.0","es-toolkit":"1.42.0","jsonpath-rfc9535":"1.3.0","oxc-parser":"0.138.0","posthog-node":"5.46.1","typescript-api":"npm:typescript@6.0.3"},devDependencies:{"@types/node":"24.10.1",orval:"7.17.0",playwright:"1.56.1",typescript:"7.0.2",vitest:"4.1.0",yaml:"2.9.0"},peerDependencies:{playwright:">=1.56.1 <2",vitest:">=4.1.0 <5"},peerDependenciesMeta:{playwright:{optional:!0},vitest:{optional:!0}},engines:{bun:"1.4.0"}};var eZ=require("fs/promises"),tZ=require("path"),tr=(e,...t)=>e instanceof Error&&("code"in e)&&typeof e.code==="string"&&t.includes(e.code),ir=(e)=>tr(e,"ENOENT"),qi=async(e)=>{try{return await eZ.lstat(e)}catch(t){if(ir(t))return;throw t}},po=async(e,t,i="write")=>{let n=e;for(let o of t.split("/")){n=tZ.join(n,o);let s=await qi(n);if(s===void 0)return;b(!s.isSymbolicLink(),`Refusing to ${i} through symbolic link ${n}.`)}};var sZ=require("crypto"),q=require("fs/promises"),Ze=require("path");var TP=(e)=>{let t=typeof e.body==="string"?e.body:e.body===void 0?void 0:JSON.stringify(e.body);return t===void 0||t.length===0?void 0:t},Ao=(e)=>{if(e instanceof te){let t=TP(e);return t===void 0?e.message:`${e.message}
141
+ ${t}`}return e instanceof Error?e.message:String(e)};var nr="catalog.json",tn=".agents/skills",en="SKILL.md",Kl="skills",iZ=500,nZ=1048576,rZ=64,zP=/^[a-z0-9]+(?:-[a-z0-9]+)*$/u,jP=/^[a-f0-9]{64}$/u,gZ=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e),oZ=(e)=>Array.isArray(e)&&e.every((t)=>typeof t==="string"),_l=(e)=>typeof e==="string"&&e.trim().length>0,DP=(e)=>typeof e==="string"&&e.length<=rZ&&zP.test(e),QP=(e)=>!e.includes("\\")&&!e.includes("\x00")&&e.split("/").every((t)=>t.length>0&&t!=="."&&t!==".."),_P=(e,t)=>{b(gZ(e),t("every skill must be an object."));let{id:i,name:n,description:o,tags:s,version:r,digest:g,files:a}=e;return b(DP(i),t(`skill id ${JSON.stringify(i)} must be at most ${rZ} lowercase letters, digits, and single hyphens.`)),b(_l(n),t(`skill ${i} needs a name.`)),b(_l(o),t(`skill ${i} needs a description.`)),b(oZ(s),t(`skill ${i} tags must be strings.`)),b(_l(r),t(`skill ${i} needs a version.`)),b(typeof g==="string"&&jP.test(g),t(`skill ${i} digest must be the sha256 hex digest of its files.`)),b(oZ(a)&&a.includes(en),t(`skill ${i} files must include ${en}.`)),b(a.every(QP),t(`skill ${i} files must be relative paths inside its directory.`)),b(new Set(a).size===a.length,t(`skill ${i} lists a file more than once.`)),{id:i,name:n,description:o,tags:s,version:r,digest:g,files:a}},KP=(e,t)=>{try{return JSON.parse(e)}catch(i){throw Error(`Invalid skill catalog ${t}: ${Ao(i)}`)}},LP=async(e)=>{try{return(await q.stat(e)).isFile()}catch(t){if(tr(t,"ENOENT","ENOTDIR"))return!1;throw t}},Ll=async(e)=>{let t=Ze.join(e,Kl);if(await LP(Ze.join(t,nr)))return t;let i=Ze.dirname(e);return i===e?void 0:Ll(i)};async function MP(e=process.argv[1]){let t=e===void 0?void 0:await q.realpath(e),i=t===void 0?void 0:await Ll(Ze.dirname(t));if(i!==void 0)return i;let n=await Ll(process.cwd()),o=t===void 0?"process.argv[1] names no runtime entry":`none exists between ${t} and the filesystem root`;return b(n!==void 0,`Cannot locate the bundled skill catalog. An installed @toloka-platform/sdk must ship ${Kl}/${nr} in a directory above its runtime entry, but ${o}, and no ${Kl}/${nr} exists above ${process.cwd()} either. Reinstall @toloka-platform/sdk.`),n}var Ml=async()=>$P(await MP());async function $P(e){let t=Ze.join(e,nr),i=(g)=>`Invalid skill catalog ${t}: ${g}`,{size:n}=await q.stat(t);b(n<=nZ,i(`the manifest is ${n} bytes; the limit is ${nZ} bytes.`));let o=KP(await q.readFile(t,"utf8"),t);b(gZ(o)&&Array.isArray(o.skills),i("expected an object with a skills array.")),b(o.skills.length<=iZ,i(`${o.skills.length} skills exceed the limit of ${iZ}.`));let s=o.skills.map((g)=>_P(g,i)),r=new Set;for(let g of s)b(!r.has(g.id),i(`skill id ${g.id} appears more than once.`)),r.add(g.id);return{root:e,manifestPath:t,skills:s}}async function aZ(e,t){let i=sZ.createHash("sha256");for(let n of t.toSorted())i.update(n),i.update("\x00"),i.update(await q.readFile(Ze.join(e,n))),i.update("\x00");return i.digest("hex")}var qP=(e,t)=>{let i=t.trim().toLowerCase().split(/\s+/u).filter(Boolean);if(i.length===0)return[];return e.map((n,o)=>{let s=[n.id,n.name,n.description,...n.tags].join(`
142
+ `).toLowerCase();return{skill:n,index:o,score:i.filter((r)=>s.includes(r)).length}}).filter(({score:n})=>n>0).toSorted((n,o)=>o.score-n.score||n.index-o.index).map(({skill:n})=>n)};async function eY(e,t){let i=Ze.join(e,tn,t.id);if(await qi(i)===void 0)return"not-installed";try{return await aZ(i,t.files)===t.digest?"current":"stale"}catch(n){if(tr(n,"ENOENT","ENOTDIR"))return"stale";throw n}}var lZ=({sourceRoot:e,skills:t})=>Promise.all(t.map(async(i)=>({...i,status:await eY(e,i)}))),tY=async(e,t,i,n)=>{await e(i,n);try{await e(t,i)}catch(o){try{await e(n,i)}catch(s){throw Error(`Failed to replace ${i}; the previous version is preserved at ${n}. ${Ao(s)}`,{cause:o})}throw o}await q.rm(n,{recursive:!0,force:!0})};async function iY({catalog:e,sourceRoot:t,skillId:i,force:n=!1,rename:o=q.rename}){let s=e.skills.find((d)=>d.id===i);b(s,`Skill ${JSON.stringify(i)} is not in the catalog. Run \`toloka skill list\` to see the available skills.`);let r=`${tn}/${s.id}`;await po(t,r);let g=Ze.join(t,r),a=await qi(g);b(a===void 0||n,`${r} already exists. Re-run with --force to replace it with the catalog version of ${s.id}.`);let l=Ze.dirname(g);await q.mkdir(l,{recursive:!0});let I=await q.mkdtemp(Ze.join(l,`.${s.id}.tmp-`));try{for(let d of s.files){let u=Ze.join(I,d);await q.mkdir(Ze.dirname(u),{recursive:!0}),await q.copyFile(Ze.join(e.root,s.id,d),u)}if(b(await aZ(I,s.files)===s.digest,`Skill ${s.id} failed its digest check: the packaged files do not match the catalog digest ${s.digest}. Nothing was installed.`),a===void 0)await o(I,g);else await tY(o,I,g,`${I}.backup`)}catch(d){throw await q.rm(I,{recursive:!0,force:!0}),d}return{skill:s,directory:g,replaced:a!==void 0}}var IZ=(e,t)=>{if(t)return JSON.stringify(e,void 0,2);let i=Math.max(...e.map((o)=>o.id.length)),n=Math.max(...e.map((o)=>o.status.length));return e.flatMap((o)=>[`${o.id.padEnd(i)} ${o.status.padEnd(n)} ${o.name}`,` ${o.description}`]).join(`
143
+ `)};async function dZ({sourceRoot:e,json:t,io:i}){let n=await Ml();i.stdout(IZ(await lZ({sourceRoot:e,skills:n.skills}),t))}async function cZ({sourceRoot:e,query:t,json:i,io:n}){let o=await Ml(),s=await lZ({sourceRoot:e,skills:qP(o.skills,t)});if(i||s.length>0){n.stdout(IZ(s,i));return}n.stdout(`No skills match ${JSON.stringify(t)}. Run \`toloka skill list\` to see the catalog.`)}async function CZ({sourceRoot:e,skillId:t,force:i,io:n}){let o=await Ml(),s=await iY({catalog:o,sourceRoot:e,skillId:t,force:i}),r=`${tn}/${s.skill.id}`,g=s.skill.files.length;n.stdout(`${s.replaced?"Replaced":"Installed"} ${s.skill.id} in ${r} (${g} ${g===1?"file":"files"}). Start with ${r}/${en}.`)}var He=er.version,_e="@toloka-platform/sdk",tI="toloka-bootstrap",mZ=`.claude/skills/${tI}/SKILL.md`,pZ=`.cursor/rules/${tI}.mdc`,li="AGENTS.md",nY=[mZ,pZ,li],nn={begin:"<toloka>",end:"</toloka>"},$l={begin:"<!-- toloka:begin -->",end:"<!-- toloka:end -->"},ql=/<!-- toloka:sdk-version ([^\s>]+) -->/u,AZ=["toloka-build","toloka-pipeline-as-code"].flatMap((e)=>[{file:`.claude/skills/${e}/SKILL.md`,directory:`.claude/skills/${e}`},{file:`.cursor/rules/${e}.mdc`}]),on=async(e)=>{try{return await ie.readFile(e,"utf8")}catch(t){if(ir(t))return;throw t}},eI=async(e)=>{try{return(await ie.lstat(e)).isDirectory()}catch(t){if(ir(t))return!1;throw t}},iI=(e)=>ql.test(e),ZZ=`Generated by \`${_e}\` version \`${He}\`.
144
+ <!-- toloka:sdk-version ${He} -->`,oY=`${nn.begin}
145
145
 
146
146
  ## Toloka Agent Bootstrap
147
147
 
148
- ${pZ}
148
+ ${ZZ}
149
149
  Re-run \`toloka init\` to refresh this block. Keep your own instructions outside it.
150
150
 
151
151
  This repository works with the Toloka platform through the \`toloka\` CLI. Before starting a Toloka task:
152
152
 
153
153
  1. Run \`toloka --help\`, then \`toloka <resource> --help\` for the resource you need.
154
154
  2. Run \`toloka skill search <query>\` to find a bundled skill for the task; \`toloka skill list\` shows every skill and whether it is installed.
155
- 3. Run \`toloka skill install <skill-id>\` and read \`${en}/<skill-id>/${qi}\` before acting; add \`--force\` to refresh a stale skill.
155
+ 3. Run \`toloka skill install <skill-id>\` and read \`${tn}/<skill-id>/${en}\` before acting; add \`--force\` to refresh a stale skill.
156
156
  4. Follow the installed skill. When no skill matches, continue with the CLI help and never invent commands or SDK helpers.
157
157
  5. To report a Toloka platform problem or unexpected failure to support, run \`toloka skill search report-issue\` and install \`toloka-report-issue\` before collecting evidence.
158
158
 
159
- ${tn.end}`,AZ=`# Toloka Agent Bootstrap pointer
159
+ ${nn.end}`,bZ=`# Toloka Agent Bootstrap pointer
160
160
 
161
- ${pZ}
161
+ ${ZZ}
162
162
 
163
- Read the \`${tn.begin}\` block in \`${ai}\` at the source root and follow it before doing Toloka work. It tells you to run \`toloka --help\`, search the bundled Skill Catalog with \`toloka skill search <query>\`, install the match with \`toloka skill install <skill-id>\`, and read \`${en}/<skill-id>/${qi}\` before acting.
164
- `,nY=`---
165
- name: ${ql}
166
- description: Toloka platform work with the toloka CLI and ${_e}, such as pipeline projects, datasets, runs, secrets, and issue reporting. Use when the user mentions Toloka or the toloka CLI. Start by reading the ${tn.begin} Agent Bootstrap block in ${ai}, then find and install the matching skill.
163
+ Read the \`${nn.begin}\` block in \`${li}\` at the source root and follow it before doing Toloka work. It tells you to run \`toloka --help\`, search the bundled Skill Catalog with \`toloka skill search <query>\`, install the match with \`toloka skill install <skill-id>\`, and read \`${tn}/<skill-id>/${en}\` before acting.
164
+ `,sY=`---
165
+ name: ${tI}
166
+ description: Toloka platform work with the toloka CLI and ${_e}, such as pipeline projects, datasets, runs, secrets, and issue reporting. Use when the user mentions Toloka or the toloka CLI. Start by reading the ${nn.begin} Agent Bootstrap block in ${li}, then find and install the matching skill.
167
167
  ---
168
168
 
169
- ${AZ}`,oY=`---
169
+ ${bZ}`,rY=`---
170
170
  description: Toloka Agent Bootstrap pointer for the toloka CLI and ${_e}
171
171
  alwaysApply: true
172
172
  ---
173
173
 
174
- ${AZ}`,cZ=(e,t,i)=>{let n=e.indexOf(t.begin),o=e.indexOf(t.end);if(n===-1&&o===-1)return;return b(n!==-1&&o!==-1&&n<o,`Malformed Toloka block in ${i}: expected one ${t.begin} followed by one ${t.end}. Repair the file by hand, then re-run \`toloka init\`.`),b(!e.includes(t.begin,n+t.begin.length)&&!e.includes(t.end,o+t.end.length),`Multiple Toloka blocks in ${i}: keep exactly one ${t.begin} ... ${t.end} block, then re-run \`toloka init\`.`),{beginIndex:n,endIndex:o+t.end.length}},sY=(e,t)=>{let i=cZ(e,tn,t),n=cZ(e,Ll,t);b(i===void 0||n===void 0,`Ambiguous Toloka blocks in ${t}: both ${tn.begin} and ${Ll.begin} are present. Keep one, then re-run \`toloka init\`.`);let o=e.includes(`\r
174
+ ${bZ}`,uZ=(e,t,i)=>{let n=e.indexOf(t.begin),o=e.indexOf(t.end);if(n===-1&&o===-1)return;return b(n!==-1&&o!==-1&&n<o,`Malformed Toloka block in ${i}: expected one ${t.begin} followed by one ${t.end}. Repair the file by hand, then re-run \`toloka init\`.`),b(!e.includes(t.begin,n+t.begin.length)&&!e.includes(t.end,o+t.end.length),`Multiple Toloka blocks in ${i}: keep exactly one ${t.begin} ... ${t.end} block, then re-run \`toloka init\`.`),{beginIndex:n,endIndex:o+t.end.length}},gY=(e,t)=>{let i=uZ(e,nn,t),n=uZ(e,$l,t);b(i===void 0||n===void 0,`Ambiguous Toloka blocks in ${t}: both ${nn.begin} and ${$l.begin} are present. Keep one, then re-run \`toloka init\`.`);let o=e.includes(`\r
175
175
  `)?`\r
176
176
  `:`
177
- `,s=iY.replaceAll(`
178
- `,o),r=i??n;if(r!==void 0)return`${e.slice(0,r.beginIndex)}${s}${e.slice(r.endIndex)}`;if(e.length===0)return`${s}${o}`;let g=e.endsWith(`${o}${o}`)?"":e.endsWith(o)?o:`${o}${o}`;return`${e}${g}${s}${o}`},rY=async(e)=>{if(await $l(Ce.join(e,"node_modules",_e)))return!0;let t=await nn(Ce.join(e,"package.json"));if(t===void 0)return!1;let i=JSON.parse(t);return b(typeof i==="object"&&i!==null,"package.json must contain a JSON object."),["dependencies","devDependencies"].some((n)=>{let o=Reflect.get(i,n);return typeof o==="object"&&o!==null&&typeof Reflect.get(o,_e)==="string"})},gY=async(e,t)=>{if(await nn(e)===t)return!1;return await ie.mkdir(Ce.dirname(e),{recursive:!0}),await ie.writeFile(e,t,"utf8"),!0},aY=async(e,t)=>{let i=Ce.join(e,t),n=await nn(i);b(n===void 0||eI(n),`Refusing to overwrite ${i}: it carries no \`<!-- toloka:sdk-version ... -->\` marker, so it is not a pointer generated by ${_e}. Move it aside, then re-run \`toloka init\`.`)},lY=async(e)=>(await Promise.all(mZ.map(async(i)=>{let n=Ce.join(e,i.file);if(await $i(n)===void 0)return;return await Co(e,i.file,"remove legacy agent entry point"),eI(await ie.readFile(n,"utf8"))?i:void 0}))).filter((i)=>i!==void 0),IY=async(e,t)=>{if(await ie.rm(Ce.join(e,t.file),{force:!0}),t.directory===void 0)return;let i=Ce.join(e,t.directory);if((await ie.readdir(i)).length===0)await ie.rmdir(i)},dY=(e,t,i,n)=>[`${i.length===0&&n.length===0?"Agent entry points are up to date":"Initialized agent entry points"} for ${_e} ${Fe} in ${e}:`,...t.map((o)=>` ${o}`),...n.map((o)=>` removed ${o} (replaced by the ${ai} Agent Bootstrap)`)].join(`
179
- `),cY=async(e,t)=>{if(t===void 0)return;let i=await Re(e);if(b(i===void 0||i.projectId===t,`This directory is already bound to ${i?.projectId}.`),i!==void 0)return;return await Lt(e,{projectId:t,pipelines:{},datasets:{}}),"toloka.json"};async function ZZ(e,t={}){await ie.mkdir(e,{recursive:!0});let i=await ie.realpath(e),n=Ce.join(i,ai),o=await nn(n),s=sY(o??"",n),[r,g]=await Promise.all([$l(Ce.join(i,".claude")),$l(Ce.join(i,".cursor","rules"))]),l=[...r||!r&&!g&&o===void 0?[{relativePath:CZ,source:nY}]:[],...g?[{relativePath:uZ,source:oY}]:[]],I=[...l,{relativePath:ai,source:s}];await Promise.all(I.map((Z)=>Co(i,Z.relativePath))),await Promise.all(l.map((Z)=>aY(i,Z.relativePath)));let d=await lY(i),u=await cY(i,t.projectId),c=u===void 0?[]:[u];for(let Z of I)if(await gY(Ce.join(i,Z.relativePath),Z.source))c.push(Z.relativePath);for(let Z of d)await IY(i,Z);let C=d.map((Z)=>Z.file),A=await rY(i),m=[...I.map((Z)=>Z.relativePath),...u===void 0?[]:[u]],p=A?void 0:`Warning: ${_e} is not listed in dependencies or devDependencies in ${Ce.join(i,"package.json")}. Run \`bun add --dev ${_e}\` before using \`toloka\`, then re-run \`toloka init\`.`;return{targetDirectory:i,files:m,writtenFiles:c,removedFiles:C,sdkVersion:Fe,dependencyReady:A,output:dY(i,m,c,C),...p===void 0?{}:{warning:p}}}async function bZ(e){let t=[],i=new Set,n=(s,r)=>{t.push(s);let g=Ml.exec(r)?.[1];if(g!==void 0)i.add(g)};for(let{file:s}of mZ){let r=await nn(Ce.join(e,s));if(r!==void 0&&eI(r))n(s,r)}for(let s of tY){let r=await nn(Ce.join(e,s));if(r===void 0)continue;let g=Ml.exec(r)?.[1];if(r.includes(Ll.begin)||g!==void 0&&g!==Fe)n(s,r)}if(t.length===0)return;return`Warning: Agent instructions generated by ${i.size===0?`an earlier ${_e} build`:`${_e} ${[...i].toSorted().join(", ")}`} are out of date (${t.join(", ")}). The installed ${Fe} manages one Agent Bootstrap in ${ai} plus pointer files. Re-run \`toloka init\`.`}var CY="phc_kqHt0f53B5MVqURyzWpW1aNlbOmYt1YbUYza0JPcg19",uY="https://eu.posthog.com",mY={"--source-root":!0,"--api-key":!0,"--base-url":!0,"--project-id":!0};function pY(e){let t=e.TOLOKA_TELEMETRY??process.env.TOLOKA_TELEMETRY;if(Mi(t))return!1;if(Se(t))return!0;if(Se(e.DO_NOT_TRACK??process.env.DO_NOT_TRACK))return!1;if(Se(e.CI??process.env.CI))return!1;if(Se(process.env.VITEST))return!1;return!0}var AY={project:{list:!0,add:!0,switch:!0,current:!0,remove:!0,create:!0},pipeline:{list:!0,run:!0,status:!0,runs:!0,cost:!0,cancel:!0,results:!0},dataset:{list:!0,fields:!0,load:!0,upload:!0},secret:{set:!0},skill:{list:!0,search:!0,install:!0},config:{get:!0,set:!0}},ZY={apply:!0,check:!0,"auth-status":!0,config:!0,help:!0,import:!0,init:!0,login:!0,logout:!0,plan:!0,status:!0,validate:!0,report:!0,version:!0,whoami:!0},tI=(e)=>{let t=e[0];if(t===void 0)return"help";let i=AY[t];if(i===void 0)return ZY[t]===!0?t:"unknown";let n=e[1];return n!==void 0&&i[n]===!0?`${t} ${n}`:t};function nr(e){if(e.includes("-v")||e.includes("--version"))return"version";let t=[];for(let i=0;i<e.length;i+=1){let n=e[i];if(n===void 0)continue;if(n==="--help"||n==="-h")break;if(n.startsWith("-")){if(mY[n]===!0)i+=1;continue}t.push(n)}return tI(t)}function bY(e){if(e===void 0)return{error_code:"command_failed"};if(e instanceof te||e instanceof Zi)return{error_code:e.code};return{error_code:e instanceof Error?"error":"unknown"}}var WY=(e)=>ir.join(ir.dirname(Ne(e)),"anonymous-id"),hY=async(e)=>{let t=WY(e);await ei(t);try{let n=(await li.readFile(t,"utf8")).trim();if(n.length>0)return await li.chmod(t,384),n}catch(n){if(!(n instanceof Error&&("code"in n)&&n.code==="ENOENT"))throw n}let i=WZ.randomUUID();return await li.writeFile(t,`${i}
180
- `,{mode:384}),await li.chmod(t,384),i},fY=()=>({shouldIdentify:!1,issueReportingEnabled:!1,identifyCurrentUser(){},captureCommand(){},async submitIssueReport(){b(!1,"Issue reporting is disabled. Re-run with TOLOKA_TELEMETRY=1.")},async shutdown(){}});function hZ(e){let{environment:t}=e;if(e.client===void 0&&!pY(t))return fY();let{client:i,distinctId:n}=e,o,s=[],r=(I)=>{s.push(I)};i?.on?.("error",r);let g=async()=>{if(i!==void 0&&n!==void 0)return;if(i===void 0){let I=new Dl(CY,{host:uY,flushAt:1,flushInterval:0});I.on("error",r),i=I}n??=await hY(t)},a=()=>({sdk_version:Fe,bun_version:typeof process.versions.bun==="string"?process.versions.bun:void 0,actor:"user",channel:"cli"}),l=g().catch(()=>{});return{issueReportingEnabled:!0,shouldIdentify:!0,identifyCurrentUser(I){l=l.then(()=>{if(i===void 0||n===void 0)return;if(o===I.id)return;if(o=I.id,n!==I.id)i.alias({distinctId:I.id,alias:n});n=I.id}).catch(()=>{})},captureCommand(I){l=l.then(()=>{if(i===void 0||n===void 0)return;let d=a();if(I.outcome==="failed"){let u=bY(I.error);i.capture({distinctId:n,event:"sdk_cli_command_failed",disableGeoip:!0,properties:{...d,command:tI(I.command.split(" ")),duration_ms:I.durationMs,exit_code:I.exitCode,...u}});return}i.capture({distinctId:n,event:"sdk_cli_command_completed",disableGeoip:!0,properties:{...d,command:tI(I.command.split(" ")),duration_ms:I.durationMs,exit_code:I.exitCode,outcome:I.outcome}})}).catch(()=>{})},submitIssueReport(I){let d=l.then(async()=>{b(i&&n,"PostHog issue reporting could not be initialized."),s.length=0,i.capture({distinctId:n,event:"sdk_cli_issue_report_submitted",disableGeoip:!0,properties:{...a(),report_id:I.reportId,report_text:I.reportText,report_length_bytes:new TextEncoder().encode(I.reportText).length,authored_by:I.authoredBy,platform:I.platform,$process_person_profile:!1}}),await i.flush();let u=s[0];if(s.length=0,u!==void 0)throw u});return l=d.catch(()=>{}),d},async shutdown(){try{await l,await i?.shutdown(2000)}catch{}}}}var rI=require("child_process"),sr=require("events"),HZ=require("fs"),gn=require("fs/promises"),rn=require("path"),vZ=require("url");var sn=require("fs/promises"),fZ=require("path");var on="auto-update",yZ={autoUpdate:!0};class or extends Error{constructor(e,t){super(e,t);this.name="SettingsError"}}var VZ=(e=process.env)=>fZ.join(ys(e),"settings.json"),yY=(e)=>{let t=typeof e==="object"&&e!==null?Reflect.get(e,"autoUpdate"):void 0;if(typeof t!=="boolean")return yZ;return{autoUpdate:t}};async function mo(e=process.env){try{return yY(JSON.parse(await sn.readFile(VZ(e),"utf8")))}catch{return yZ}}async function VY(e,t=process.env){let i=VZ(t);return await ei(i),await sn.writeFile(i,`${JSON.stringify({autoUpdate:e.autoUpdate},null,2)}
181
- `,{mode:384}),await sn.chmod(i,384),i}var BY=(e)=>{if(Se(e))return!0;if(Mi(e))return!1;throw new or(`Expected a boolean (true or false), got ${JSON.stringify(e)}.`)},RY=(e)=>`${on}=${e.autoUpdate}`,iI=(e,t)=>{if(t===void 0||t.length===0)return{output:RY(e)};if(t!==on)throw new or(`Unknown setting "${t}". Known settings: ${on}.`);return{output:String(e.autoUpdate)}};async function BZ(e,t,i){if(t!==on)throw new or(`Unknown setting "${t}". Known settings: ${on}.`);let n={autoUpdate:BY(i)};return await VY(n,e),{settings:n,output:`Set ${on} to ${n.autoUpdate}.`}}var GY=86400000,wY=86400000,oI=$s.name,kZ="https://registry.npmjs.org/",FY={config:!0,help:!0,version:!0},PZ=(e=process.env)=>rn.join(ys(e),"auto-update.json"),HY=()=>kZ,vY=(e)=>new URL(encodeURIComponent(e),kZ).toString(),RZ=(e)=>{let t=/^(\d+)\.(\d+)\.(\d+)(?:-preview\.(\d+))?$/u.exec(e);if(t===null)return;let[,i,n,o,s]=t;return[Number(i),Number(n),Number(o),s===void 0?Number.POSITIVE_INFINITY:Number(s)]},kY=(e,t)=>{let i=RZ(e),n=RZ(t);if(i===void 0||n===void 0)return;let o=Math.max(i.length,n.length);for(let s=0;s<o;s+=1){let r=i[s]??0,g=n[s]??0;if(r<g)return-1;if(r>g)return 1}return 0},GZ=(e)=>{if(typeof e!=="object"||e===null||Array.isArray(e))return;let t={};for(let[i,n]of Object.entries(e)){if(typeof n!=="string")return;t[i]=n}return t},PY=(e)=>{if(typeof e!=="object"||e===null)return;let t=GZ(Reflect.get(e,"dist-tags")),i=GZ(Reflect.get(e,"time"));if(t===void 0&&i===void 0)return{};return{...t===void 0?{}:{"dist-tags":t},...i===void 0?{}:{time:i}}},YY=(e)=>{let t=e["dist-tags"];if(t===void 0)return;let i=t.preview;if(typeof i==="string"&&i.length>0)return i;let n=t.latest;return typeof n==="string"&&n.length>0?n:void 0},NY=(e,t)=>{let i=e.time?.[t];if(typeof i!=="string"||i.length===0)return;let n=new Date(i);return Number.isNaN(n.getTime())?void 0:n},XY=(e)=>{if(typeof e!=="object"||e===null)return;let t=Reflect.get(e,"lastCheckedAt");if(typeof t!=="string"||t.length===0)return;let i=new Date(t);if(Number.isNaN(i.getTime()))return;return{lastCheckedAt:t}};async function SY(e=process.env){try{return XY(JSON.parse(await gn.readFile(PZ(e),"utf8")))}catch{return}}async function xY(e,t=process.env){let i=PZ(t);return await ei(i),await gn.writeFile(i,`${JSON.stringify(e,null,2)}
182
- `,{mode:384}),await gn.chmod(i,384),i}var wZ=`${rn.sep}install${rn.sep}global${rn.sep}`,JY=(e=process.argv[1],t=vZ.fileURLToPath("file:///Users/gzarip/code/potato-5/packages/sdk/src/cli/auto-update.ts"))=>[e,t].some((i)=>{if(typeof i!=="string")return!1;try{return HZ.realpathSync(i).includes(wZ)}catch{return i.includes(wZ)}});function EY(e,t){if(Se(e.TOLOKA_SKIP_AUTO_UPDATE))return!1;let i=e.TOLOKA_AUTO_UPDATE;if(Mi(i))return!1;if(Se(i))return!0;if(e[$t]!==void 0)return!1;if(Se(e.CI))return!1;if(Se(e.VITEST))return!1;return t.autoUpdate}var UY=(e)=>{let t=nr(e);return FY[t]===!0||t.startsWith("config ")},FZ=async(e)=>{if(e===null)return"";let t=[];return e.on("data",(i)=>{t.push(typeof i==="string"?Buffer.from(i):i)}),await sr.once(e,"end").catch(()=>{return}),Buffer.concat(t).toString("utf8")};class sI extends Error{constructor(e){super(e);this.name="RegistryError"}}var OY=async(e)=>{let t=await fetch(e,{headers:{accept:"application/json"},signal:AbortSignal.timeout(3000)});if(!t.ok)throw new sI(`npm registry responded ${t.status}`);let i=PY(await t.json());if(i===void 0)throw new sI("npm registry returned invalid package metadata");return i},TY=async({packageName:e,version:t,registry:i,environment:n})=>{let o=rI.spawn(process.execPath,["add","--global",`${e}@${t}`,`--registry=${i}`],{env:{...process.env,...n},stdio:["ignore","pipe","pipe"]}),[s,r,g]=await Promise.all([sr.once(o,"close"),FZ(o.stdout),FZ(o.stderr)]),a=s[0];if(a===0)return;let l=[g.trim(),r.trim()].filter((I)=>I.length>0).join(`
183
- `);throw Error(l.length>0?`bun add --global failed: ${l}`:`bun add --global exited ${String(a)}`)},zY=async({argv:e,environment:t})=>{let i=process.argv[1],n=rI.spawn(process.execPath,i===void 0?[...e]:[i,...e],{env:{...process.env,...t,TOLOKA_SKIP_AUTO_UPDATE:"1"},stdio:"inherit"}),[o]=await sr.once(n,"close");return typeof o==="number"?o:1},nI=()=>({status:"continue"}),jY=async(e)=>{let{argv:t,environment:i,hooks:n}=e;if(UY(t))return{status:"skip"};if(!await(n.isGlobalInstall??(()=>JY()))())return{status:"skip"};let s=await mo(i);if(!EY(i,s))return{status:"skip"};let r=n.now?.()??new Date,g=await SY(i);if(g!==void 0){let a=new Date(g.lastCheckedAt).getTime();if(r.getTime()-a<GY)return{status:"skip"}}return{status:"check",now:r}},DY=async(e)=>{let{environment:t,io:i,now:n,currentVersion:o,fetchRegistry:s}=e;try{await xY({lastCheckedAt:n.toISOString()},t)}catch{}let r;try{r=await s(vY(oI))}catch(I){return i.stderr(`Auto-update check failed: ${I instanceof Error?I.message:String(I)}.`),{status:"skip"}}let g=YY(r);if(g===void 0)return{status:"skip"};let a=kY(o,g);if(a===void 0||a>=0)return{status:"skip"};let l=NY(r,g);if(l===void 0)return{status:"skip"};if(n.getTime()-l.getTime()<wY)return{status:"skip"};return{status:"update",currentVersion:o,version:g}};async function YZ(e){let{argv:t,environment:i,io:n,hooks:o={}}=e,s=await jY({argv:t,environment:i,hooks:o});if(s.status==="skip")return nI();let r=await DY({environment:i,io:n,now:s.now,currentVersion:e.currentVersion??Fe,fetchRegistry:o.fetchRegistry??OY});if(r.status==="skip")return nI();let g=o.install??TY;try{await g({packageName:oI,version:r.version,registry:HY(),environment:i})}catch(l){return n.stderr(`Auto-update to ${r.version} failed: ${l instanceof Error?l.message:String(l)}.`),nI()}return n.stderr(`Updated ${oI} from ${r.currentVersion} to ${r.version}.`),{status:"reexec",exitCode:await(o.reexec??zY)({argv:t,environment:i})}}var an=require("fs/promises"),Zo=require("path");var xZ=Symbol("sourceReference"),JZ={code:!0,connect:!0,definePipeline:!0,field:!0,generation:!0,match:!0,pipeline:!0,quorum:!0,root:!0},QY={arguments:!0,await:!0,break:!0,case:!0,catch:!0,class:!0,const:!0,continue:!0,debugger:!0,default:!0,delete:!0,do:!0,else:!0,enum:!0,eval:!0,export:!0,extends:!0,false:!0,finally:!0,for:!0,function:!0,if:!0,implements:!0,import:!0,in:!0,instanceof:!0,interface:!0,let:!0,new:!0,null:!0,package:!0,private:!0,protected:!0,public:!0,return:!0,static:!0,super:!0,switch:!0,this:!0,throw:!0,true:!0,try:!0,typeof:!0,var:!0,void:!0,while:!0,with:!0,yield:!0};function Et(e,t){return e<t?-1:e>t?1:0}function NZ(e){let t=2166136261;for(let i=0;i<e.length;i+=1)t^=e.charCodeAt(i),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}function EZ(e){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").split(/[^A-Za-z0-9]+/).filter(Boolean)}function UZ(e,t){let[i,...n]=EZ(e),s=`${(i??t).toLowerCase()}${n.map((g)=>`${g.slice(0,1).toUpperCase()}${g.slice(1).toLowerCase()}`).join("")}`,r=/^\d/.test(s)?`_${s}`:s;return Object.hasOwn(QY,r)?`${r}Value`:r}function _Y(e,t){return EZ(e).map((i)=>i.toLowerCase()).join("-")||t}function gI(e,t,i){let n=new Map,o=new Set;for(let a of e){b(!o.has(a.key),`Naming key "${a.key}" is duplicated`),o.add(a.key);let l=t(a),I=n.get(l)??[];I.push(a),n.set(l,I)}let s=new Set(n.keys()),r=new Set,g=new Map;for(let[a,l]of[...n.entries()].toSorted(([I],[d])=>Et(I,d))){let I=l.toSorted((d,u)=>Et(d.key,u.key));for(let d of I){let u=a;if(I.length>1||i!==void 0&&Object.hasOwn(i,u))u=`${a}_${NZ(d.key)}`;let c=2;while(r.has(u)||i!==void 0&&Object.hasOwn(i,u)||u!==a&&s.has(u))u=`${a}_${NZ(d.key)}_${c}`,c+=1;r.add(u),g.set(d.key,u)}}return g}function KY(e){return typeof e==="object"&&e!==null&&xZ in e}function ne(e){return" ".repeat(e)}function xe(e,t=0){if(KY(e))return e.name;if(b(e!==void 0,"Cannot emit an undefined source value"),typeof e==="number")b(Number.isFinite(e),"Cannot emit a non-finite number");if(e===null||typeof e!=="object"){let o=JSON.stringify(e);return b(o!==void 0,`Cannot emit a ${typeof e} source value`),o}if(Array.isArray(e)){if(e.length===0)return"[]";return`[
184
- ${e.map((s)=>`${ne(t+1)}${xe(s,t+1)}`).join(`,
177
+ `,s=oY.replaceAll(`
178
+ `,o),r=i??n;if(r!==void 0)return`${e.slice(0,r.beginIndex)}${s}${e.slice(r.endIndex)}`;if(e.length===0)return`${s}${o}`;let g=e.endsWith(`${o}${o}`)?"":e.endsWith(o)?o:`${o}${o}`;return`${e}${g}${s}${o}`},aY=async(e)=>{if(await eI(ce.join(e,"node_modules",_e)))return!0;let t=await on(ce.join(e,"package.json"));if(t===void 0)return!1;let i=JSON.parse(t);return b(typeof i==="object"&&i!==null,"package.json must contain a JSON object."),["dependencies","devDependencies"].some((n)=>{let o=Reflect.get(i,n);return typeof o==="object"&&o!==null&&typeof Reflect.get(o,_e)==="string"})},lY=async(e,t)=>{if(await on(e)===t)return!1;return await ie.mkdir(ce.dirname(e),{recursive:!0}),await ie.writeFile(e,t,"utf8"),!0},IY=async(e,t)=>{let i=ce.join(e,t),n=await on(i);b(n===void 0||iI(n),`Refusing to overwrite ${i}: it carries no \`<!-- toloka:sdk-version ... -->\` marker, so it is not a pointer generated by ${_e}. Move it aside, then re-run \`toloka init\`.`)},dY=async(e)=>(await Promise.all(AZ.map(async(i)=>{let n=ce.join(e,i.file);if(await qi(n)===void 0)return;return await po(e,i.file,"remove legacy agent entry point"),iI(await ie.readFile(n,"utf8"))?i:void 0}))).filter((i)=>i!==void 0),cY=async(e,t)=>{if(await ie.rm(ce.join(e,t.file),{force:!0}),t.directory===void 0)return;let i=ce.join(e,t.directory);if((await ie.readdir(i)).length===0)await ie.rmdir(i)},CY=(e,t,i,n)=>[`${i.length===0&&n.length===0?"Agent entry points are up to date":"Initialized agent entry points"} for ${_e} ${He} in ${e}:`,...t.map((o)=>` ${o}`),...n.map((o)=>` removed ${o} (replaced by the ${li} Agent Bootstrap)`)].join(`
179
+ `),uY=async(e,t)=>{if(t===void 0)return;let i=await Re(e);if(b(i===void 0||i.projectId===t,`This directory is already bound to ${i?.projectId}.`),i!==void 0)return;return await Lt(e,{projectId:t,pipelines:{},datasets:{}}),"toloka.json"};async function WZ(e,t={}){await ie.mkdir(e,{recursive:!0});let i=await ie.realpath(e),n=ce.join(i,li),o=await on(n),s=gY(o??"",n),[r,g]=await Promise.all([eI(ce.join(i,".claude")),eI(ce.join(i,".cursor","rules"))]),l=[...r||!r&&!g&&o===void 0?[{relativePath:mZ,source:sY}]:[],...g?[{relativePath:pZ,source:rY}]:[]],I=[...l,{relativePath:li,source:s}];await Promise.all(I.map((Z)=>po(i,Z.relativePath))),await Promise.all(l.map((Z)=>IY(i,Z.relativePath)));let d=await dY(i),u=await uY(i,t.projectId),c=u===void 0?[]:[u];for(let Z of I)if(await lY(ce.join(i,Z.relativePath),Z.source))c.push(Z.relativePath);for(let Z of d)await cY(i,Z);let C=d.map((Z)=>Z.file),A=await aY(i),m=[...I.map((Z)=>Z.relativePath),...u===void 0?[]:[u]],p=A?void 0:`Warning: ${_e} is not listed in dependencies or devDependencies in ${ce.join(i,"package.json")}. Run \`bun add --dev ${_e}\` before using \`toloka\`, then re-run \`toloka init\`.`;return{targetDirectory:i,files:m,writtenFiles:c,removedFiles:C,sdkVersion:He,dependencyReady:A,output:CY(i,m,c,C),...p===void 0?{}:{warning:p}}}async function hZ(e){let t=[],i=new Set,n=(s,r)=>{t.push(s);let g=ql.exec(r)?.[1];if(g!==void 0)i.add(g)};for(let{file:s}of AZ){let r=await on(ce.join(e,s));if(r!==void 0&&iI(r))n(s,r)}for(let s of nY){let r=await on(ce.join(e,s));if(r===void 0)continue;let g=ql.exec(r)?.[1];if(r.includes($l.begin)||g!==void 0&&g!==He)n(s,r)}if(t.length===0)return;return`Warning: Agent instructions generated by ${i.size===0?`an earlier ${_e} build`:`${_e} ${[...i].toSorted().join(", ")}`} are out of date (${t.join(", ")}). The installed ${He} manages one Agent Bootstrap in ${li} plus pointer files. Re-run \`toloka init\`.`}var mY="phc_kqHt0f53B5MVqURyzWpW1aNlbOmYt1YbUYza0JPcg19",pY="https://eu.posthog.com",AY={"--source-root":!0,"--api-key":!0,"--base-url":!0,"--project-id":!0};function ZY(e){let t=e.TOLOKA_TELEMETRY??process.env.TOLOKA_TELEMETRY;if($i(t))return!1;if(xe(t))return!0;if(xe(e.DO_NOT_TRACK??process.env.DO_NOT_TRACK))return!1;if(xe(e.CI??process.env.CI))return!1;if(xe(process.env.VITEST))return!1;return!0}var bY={project:{list:!0,add:!0,switch:!0,current:!0,remove:!0,create:!0},pipeline:{list:!0,run:!0,status:!0,runs:!0,cost:!0,cancel:!0,results:!0},dataset:{list:!0,fields:!0,load:!0,upload:!0},secret:{set:!0},skill:{list:!0,search:!0,install:!0},config:{get:!0,set:!0}},WY={apply:!0,check:!0,"auth-status":!0,config:!0,help:!0,import:!0,init:!0,login:!0,logout:!0,plan:!0,status:!0,validate:!0,report:!0,version:!0,whoami:!0},nI=(e)=>{let t=e[0];if(t===void 0)return"help";let i=bY[t];if(i===void 0)return WY[t]===!0?t:"unknown";let n=e[1];return n!==void 0&&i[n]===!0?`${t} ${n}`:t};function sr(e){if(e.includes("-v")||e.includes("--version"))return"version";let t=[];for(let i=0;i<e.length;i+=1){let n=e[i];if(n===void 0)continue;if(n==="--help"||n==="-h")break;if(n.startsWith("-")){if(AY[n]===!0)i+=1;continue}t.push(n)}return nI(t)}function hY(e){if(e===void 0)return{error_code:"command_failed"};if(e instanceof te||e instanceof bi)return{error_code:e.code};return{error_code:e instanceof Error?"error":"unknown"}}var fY=(e)=>or.join(or.dirname(Xe(e)),"anonymous-id"),yY=async(e)=>{let t=fY(e);await ti(t);try{let n=(await Ii.readFile(t,"utf8")).trim();if(n.length>0)return await Ii.chmod(t,384),n}catch(n){if(!(n instanceof Error&&("code"in n)&&n.code==="ENOENT"))throw n}let i=fZ.randomUUID();return await Ii.writeFile(t,`${i}
180
+ `,{mode:384}),await Ii.chmod(t,384),i},VY=()=>({shouldIdentify:!1,issueReportingEnabled:!1,identifyCurrentUser(){},captureCommand(){},async submitIssueReport(){b(!1,"Issue reporting is disabled. Re-run with TOLOKA_TELEMETRY=1.")},async shutdown(){}});function yZ(e){let{environment:t}=e;if(e.client===void 0&&!ZY(t))return VY();let{client:i,distinctId:n}=e,o,s=[],r=(I)=>{s.push(I)};i?.on?.("error",r);let g=async()=>{if(i!==void 0&&n!==void 0)return;if(i===void 0){let I=new Ql(mY,{host:pY,flushAt:1,flushInterval:0});I.on("error",r),i=I}n??=await yY(t)},a=()=>({sdk_version:He,bun_version:typeof process.versions.bun==="string"?process.versions.bun:void 0,actor:"user",channel:"cli"}),l=g().catch(()=>{});return{issueReportingEnabled:!0,shouldIdentify:!0,identifyCurrentUser(I){l=l.then(()=>{if(i===void 0||n===void 0)return;if(o===I.id)return;if(o=I.id,n!==I.id)i.alias({distinctId:I.id,alias:n});n=I.id}).catch(()=>{})},captureCommand(I){l=l.then(()=>{if(i===void 0||n===void 0)return;let d=a();if(I.outcome==="failed"){let u=hY(I.error);i.capture({distinctId:n,event:"sdk_cli_command_failed",disableGeoip:!0,properties:{...d,command:nI(I.command.split(" ")),duration_ms:I.durationMs,exit_code:I.exitCode,...u}});return}i.capture({distinctId:n,event:"sdk_cli_command_completed",disableGeoip:!0,properties:{...d,command:nI(I.command.split(" ")),duration_ms:I.durationMs,exit_code:I.exitCode,outcome:I.outcome}})}).catch(()=>{})},submitIssueReport(I){let d=l.then(async()=>{b(i&&n,"PostHog issue reporting could not be initialized."),s.length=0,i.capture({distinctId:n,event:"sdk_cli_issue_report_submitted",disableGeoip:!0,properties:{...a(),report_id:I.reportId,report_text:I.reportText,report_length_bytes:new TextEncoder().encode(I.reportText).length,authored_by:I.authoredBy,platform:I.platform,$process_person_profile:!1}}),await i.flush();let u=s[0];if(s.length=0,u!==void 0)throw u});return l=d.catch(()=>{}),d},async shutdown(){try{await l,await i?.shutdown(2000)}catch{}}}}var aI=require("child_process"),gr=require("events"),kZ=require("fs"),an=require("fs/promises"),gn=require("path");var rn=require("fs/promises"),VZ=require("path");var sn="auto-update",BZ={autoUpdate:!0};class rr extends Error{constructor(e,t){super(e,t);this.name="SettingsError"}}var RZ=(e=process.env)=>VZ.join(Bs(e),"settings.json"),BY=(e)=>{let t=typeof e==="object"&&e!==null?Reflect.get(e,"autoUpdate"):void 0;if(typeof t!=="boolean")return BZ;return{autoUpdate:t}};async function Zo(e=process.env){try{return BY(JSON.parse(await rn.readFile(RZ(e),"utf8")))}catch{return BZ}}async function RY(e,t=process.env){let i=RZ(t);return await ti(i),await rn.writeFile(i,`${JSON.stringify({autoUpdate:e.autoUpdate},null,2)}
181
+ `,{mode:384}),await rn.chmod(i,384),i}var GY=(e)=>{if(xe(e))return!0;if($i(e))return!1;throw new rr(`Expected a boolean (true or false), got ${JSON.stringify(e)}.`)},wY=(e)=>`${sn}=${e.autoUpdate}`,oI=(e,t)=>{if(t===void 0||t.length===0)return{output:wY(e)};if(t!==sn)throw new rr(`Unknown setting "${t}". Known settings: ${sn}.`);return{output:String(e.autoUpdate)}};async function GZ(e,t,i){if(t!==sn)throw new rr(`Unknown setting "${t}". Known settings: ${sn}.`);let n={autoUpdate:GY(i)};return await RY(n,e),{settings:n,output:`Set ${sn} to ${n.autoUpdate}.`}}var FY=86400000,HY=86400000,rI=er.name,PZ="https://registry.npmjs.org/",vY={config:!0,help:!0,version:!0},YZ=(e=process.env)=>gn.join(Bs(e),"auto-update.json"),kY=()=>PZ,PY=(e)=>new URL(encodeURIComponent(e),PZ).toString(),wZ=(e)=>{let t=/^(\d+)\.(\d+)\.(\d+)(?:-preview\.(\d+))?$/u.exec(e);if(t===null)return;let[,i,n,o,s]=t;return[Number(i),Number(n),Number(o),s===void 0?Number.POSITIVE_INFINITY:Number(s)]},YY=(e,t)=>{let i=wZ(e),n=wZ(t);if(i===void 0||n===void 0)return;let o=Math.max(i.length,n.length);for(let s=0;s<o;s+=1){let r=i[s]??0,g=n[s]??0;if(r<g)return-1;if(r>g)return 1}return 0},FZ=(e)=>{if(typeof e!=="object"||e===null||Array.isArray(e))return;let t={};for(let[i,n]of Object.entries(e)){if(typeof n!=="string")return;t[i]=n}return t},NY=(e)=>{if(typeof e!=="object"||e===null)return;let t=FZ(Reflect.get(e,"dist-tags")),i=FZ(Reflect.get(e,"time"));if(t===void 0&&i===void 0)return{};return{...t===void 0?{}:{"dist-tags":t},...i===void 0?{}:{time:i}}},XY=(e)=>{let t=e["dist-tags"];if(t===void 0)return;let i=t.preview;if(typeof i==="string"&&i.length>0)return i;let n=t.latest;return typeof n==="string"&&n.length>0?n:void 0},SY=(e,t)=>{let i=e.time?.[t];if(typeof i!=="string"||i.length===0)return;let n=new Date(i);return Number.isNaN(n.getTime())?void 0:n},xY=(e)=>{if(typeof e!=="object"||e===null)return;let t=Reflect.get(e,"lastCheckedAt");if(typeof t!=="string"||t.length===0)return;let i=new Date(t);if(Number.isNaN(i.getTime()))return;return{lastCheckedAt:t}};async function JY(e=process.env){try{return xY(JSON.parse(await an.readFile(YZ(e),"utf8")))}catch{return}}async function EY(e,t=process.env){let i=YZ(t);return await ti(i),await an.writeFile(i,`${JSON.stringify(e,null,2)}
182
+ `,{mode:384}),await an.chmod(i,384),i}var HZ=`${gn.sep}install${gn.sep}global${gn.sep}`,UY=(e=process.argv[1],t=dm())=>[e,t].some((i)=>{if(typeof i!=="string")return!1;try{return kZ.realpathSync(i).includes(HZ)}catch{return i.includes(HZ)}});function OY(e,t){if(xe(e.TOLOKA_SKIP_AUTO_UPDATE))return!1;let i=e.TOLOKA_AUTO_UPDATE;if($i(i))return!1;if(xe(i))return!0;if(e[qt]!==void 0)return!1;if(xe(e.CI))return!1;if(xe(e.VITEST))return!1;return t.autoUpdate}var TY=(e)=>{let t=sr(e);return vY[t]===!0||t.startsWith("config ")},vZ=async(e)=>{if(e===null)return"";let t=[];return e.on("data",(i)=>{t.push(typeof i==="string"?Buffer.from(i):i)}),await gr.once(e,"end").catch(()=>{return}),Buffer.concat(t).toString("utf8")};class gI extends Error{constructor(e){super(e);this.name="RegistryError"}}var zY=async(e)=>{let t=await fetch(e,{headers:{accept:"application/json"},signal:AbortSignal.timeout(3000)});if(!t.ok)throw new gI(`npm registry responded ${t.status}`);let i=NY(await t.json());if(i===void 0)throw new gI("npm registry returned invalid package metadata");return i},jY=async({packageName:e,version:t,registry:i,environment:n})=>{let o=aI.spawn(process.execPath,["add","--global",`${e}@${t}`,`--registry=${i}`],{env:{...process.env,...n},stdio:["ignore","pipe","pipe"]}),[s,r,g]=await Promise.all([gr.once(o,"close"),vZ(o.stdout),vZ(o.stderr)]),a=s[0];if(a===0)return;let l=[g.trim(),r.trim()].filter((I)=>I.length>0).join(`
183
+ `);throw Error(l.length>0?`bun add --global failed: ${l}`:`bun add --global exited ${String(a)}`)},DY=async({argv:e,environment:t})=>{let i=process.argv[1],n=aI.spawn(process.execPath,i===void 0?[...e]:[i,...e],{env:{...process.env,...t,TOLOKA_SKIP_AUTO_UPDATE:"1"},stdio:"inherit"}),[o]=await gr.once(n,"close");return typeof o==="number"?o:1},sI=()=>({status:"continue"}),QY=async(e)=>{let{argv:t,environment:i,hooks:n}=e;if(TY(t))return{status:"skip"};if(!await(n.isGlobalInstall??(()=>UY()))())return{status:"skip"};let s=await Zo(i);if(!OY(i,s))return{status:"skip"};let r=n.now?.()??new Date,g=await JY(i);if(g!==void 0){let a=new Date(g.lastCheckedAt).getTime();if(r.getTime()-a<FY)return{status:"skip"}}return{status:"check",now:r}},_Y=async(e)=>{let{environment:t,io:i,now:n,currentVersion:o,fetchRegistry:s}=e;try{await EY({lastCheckedAt:n.toISOString()},t)}catch{}let r;try{r=await s(PY(rI))}catch(I){return i.stderr(`Auto-update check failed: ${I instanceof Error?I.message:String(I)}.`),{status:"skip"}}let g=XY(r);if(g===void 0)return{status:"skip"};let a=YY(o,g);if(a===void 0||a>=0)return{status:"skip"};let l=SY(r,g);if(l===void 0)return{status:"skip"};if(n.getTime()-l.getTime()<HY)return{status:"skip"};return{status:"update",currentVersion:o,version:g}};async function NZ(e){let{argv:t,environment:i,io:n,hooks:o={}}=e,s=await QY({argv:t,environment:i,hooks:o});if(s.status==="skip")return sI();let r=await _Y({environment:i,io:n,now:s.now,currentVersion:e.currentVersion??He,fetchRegistry:o.fetchRegistry??zY});if(r.status==="skip")return sI();let g=o.install??jY;try{await g({packageName:rI,version:r.version,registry:kY(),environment:i})}catch(l){return n.stderr(`Auto-update to ${r.version} failed: ${l instanceof Error?l.message:String(l)}.`),sI()}return n.stderr(`Updated ${rI} from ${r.currentVersion} to ${r.version}.`),{status:"reexec",exitCode:await(o.reexec??DY)({argv:t,environment:i})}}var ln=require("fs/promises"),ho=require("path");var JZ=Symbol("sourceReference"),EZ={code:!0,connect:!0,definePipeline:!0,field:!0,generation:!0,match:!0,pipeline:!0,quorum:!0,root:!0},KY={arguments:!0,await:!0,break:!0,case:!0,catch:!0,class:!0,const:!0,continue:!0,debugger:!0,default:!0,delete:!0,do:!0,else:!0,enum:!0,eval:!0,export:!0,extends:!0,false:!0,finally:!0,for:!0,function:!0,if:!0,implements:!0,import:!0,in:!0,instanceof:!0,interface:!0,let:!0,new:!0,null:!0,package:!0,private:!0,protected:!0,public:!0,return:!0,static:!0,super:!0,switch:!0,this:!0,throw:!0,true:!0,try:!0,typeof:!0,var:!0,void:!0,while:!0,with:!0,yield:!0};function Et(e,t){return e<t?-1:e>t?1:0}function XZ(e){let t=2166136261;for(let i=0;i<e.length;i+=1)t^=e.charCodeAt(i),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}function UZ(e){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").split(/[^A-Za-z0-9]+/).filter(Boolean)}function OZ(e,t){let[i,...n]=UZ(e),s=`${(i??t).toLowerCase()}${n.map((g)=>`${g.slice(0,1).toUpperCase()}${g.slice(1).toLowerCase()}`).join("")}`,r=/^\d/.test(s)?`_${s}`:s;return Object.hasOwn(KY,r)?`${r}Value`:r}function LY(e,t){return UZ(e).map((i)=>i.toLowerCase()).join("-")||t}function lI(e,t,i){let n=new Map,o=new Set;for(let a of e){b(!o.has(a.key),`Naming key "${a.key}" is duplicated`),o.add(a.key);let l=t(a),I=n.get(l)??[];I.push(a),n.set(l,I)}let s=new Set(n.keys()),r=new Set,g=new Map;for(let[a,l]of[...n.entries()].toSorted(([I],[d])=>Et(I,d))){let I=l.toSorted((d,u)=>Et(d.key,u.key));for(let d of I){let u=a;if(I.length>1||i!==void 0&&Object.hasOwn(i,u))u=`${a}_${XZ(d.key)}`;let c=2;while(r.has(u)||i!==void 0&&Object.hasOwn(i,u)||u!==a&&s.has(u))u=`${a}_${XZ(d.key)}_${c}`,c+=1;r.add(u),g.set(d.key,u)}}return g}function MY(e){return typeof e==="object"&&e!==null&&JZ in e}function ne(e){return" ".repeat(e)}function Je(e,t=0){if(MY(e))return e.name;if(b(e!==void 0,"Cannot emit an undefined source value"),typeof e==="number")b(Number.isFinite(e),"Cannot emit a non-finite number");if(e===null||typeof e!=="object"){let o=JSON.stringify(e);return b(o!==void 0,`Cannot emit a ${typeof e} source value`),o}if(Array.isArray(e)){if(e.length===0)return"[]";return`[
184
+ ${e.map((s)=>`${ne(t+1)}${Je(s,t+1)}`).join(`,
185
185
  `)}
186
186
  ${ne(t)}]`}let i=Object.entries(e).filter(([,o])=>o!==void 0).toSorted(([o],[s])=>Et(o,s));if(i.length===0)return"{}";return`{
187
- ${i.map(([o,s])=>{let r=o==="__proto__"?`[${JSON.stringify(o)}]`:/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(o)?o:JSON.stringify(o);return`${ne(t+1)}${r}: ${xe(s,t+1)}`}).join(`,
187
+ ${i.map(([o,s])=>{let r=o==="__proto__"?`[${JSON.stringify(o)}]`:/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(o)?o:JSON.stringify(o);return`${ne(t+1)}${r}: ${Je(s,t+1)}`}).join(`,
188
188
  `)}
189
- ${ne(t)}}`}function po(e,t){return{field:t(e.id),optional:e.optional}}function rr(e,t){let{fieldProxyId:i,relations:n,...o}=e;return{...o,field:t(i),...n===void 0?{}:{relations:n.map(({id:s,...r})=>({...r,field:t(s)}))}}}function aI(e,t){let{targetEntity:i,...n}=e;return{...n,targetEntity:t(i)}}function XZ(e,t){return{...e,gradedEntities:e.gradedEntities.map((i)=>aI(i,t))}}function LY(e,t){switch(e.type){case"root":{let{datasetId:i,itemFilter:n,startedFieldProxies:o,completedFieldProxies:s,...r}=e.settings;return{...r,started:o.output.map((g)=>po(g,t)),completed:s.input.map((g)=>po(g,t))}}case"code":{let{fieldProxies:i,...n}=e.settings;return{...n,input:i.input.map((o)=>po(o,t)),output:i.output.map((o)=>po(o,t))}}case"generation":{let{entities:i,qualityCriteria:n,exam:o,...s}=e.settings;return{...s,entities:{input:i.input.map((r)=>rr(r,t)),output:i.output.map((r)=>rr(r,t))},qualityCriteria:n.map((r)=>aI(r,t)),...o===void 0?{}:{exam:XZ(o,t)}}}case"match":{let{conditions:i,fieldProxies:n,...o}=e.settings;return{...o,conditions:i.map(({predicates:s,...r})=>({...r,predicates:s.map(({fieldProxyId:g,...a})=>({...a,field:t(g)}))})),input:n.input.map((s)=>po(s,t))}}case"quorum":{let{entities:i,qualityCriteria:n,exam:o,...s}=e.settings;return{...s,entities:{input:i.input.map((r)=>rr(r,t)),output:i.output.map((r)=>rr(r,t))},qualityCriteria:n.map((r)=>aI(r,t)),...o===void 0?{}:{exam:XZ(o,t)}}}}}function MY(e,t,i,n){let o=new Set,r=LY(e,(I)=>{let d=n.get(I);return b(d,`Node "${e.id}" references unknown field "${I}"`),o.add(d),{name:d,[xZ]:!0}}),g=[...o].toSorted(Et),a=[`import { ${e.type} } from '@toloka-platform/sdk';`,...g.length===0?[]:["",`import { ${g.join(", ")} } from '../../fields';`]],l=e.type==="root"?[`${ne(1)}${xe(r,1)}`,`${ne(1)}${xe({id:e.id},1)}`]:[`${ne(1)}${xe(e.settings.about.name,1)}`,`${ne(1)}${xe(r,1)}`,`${ne(1)}${xe({id:e.id},1)}`];return{binding:t,path:i,source:`${a.join(`
189
+ ${ne(t)}}`}function bo(e,t){return{field:t(e.id),optional:e.optional}}function ar(e,t){let{fieldProxyId:i,relations:n,...o}=e;return{...o,field:t(i),...n===void 0?{}:{relations:n.map(({id:s,...r})=>({...r,field:t(s)}))}}}function II(e,t){let{targetEntity:i,...n}=e;return{...n,targetEntity:t(i)}}function SZ(e,t){return{...e,gradedEntities:e.gradedEntities.map((i)=>II(i,t))}}function $Y(e,t){switch(e.type){case"root":{let{datasetId:i,itemFilter:n,startedFieldProxies:o,completedFieldProxies:s,...r}=e.settings;return{...r,started:o.output.map((g)=>bo(g,t)),completed:s.input.map((g)=>bo(g,t))}}case"code":{let{fieldProxies:i,...n}=e.settings;return{...n,input:i.input.map((o)=>bo(o,t)),output:i.output.map((o)=>bo(o,t))}}case"generation":{let{entities:i,qualityCriteria:n,exam:o,...s}=e.settings;return{...s,entities:{input:i.input.map((r)=>ar(r,t)),output:i.output.map((r)=>ar(r,t))},qualityCriteria:n.map((r)=>II(r,t)),...o===void 0?{}:{exam:SZ(o,t)}}}case"match":{let{conditions:i,fieldProxies:n,...o}=e.settings;return{...o,conditions:i.map(({predicates:s,...r})=>({...r,predicates:s.map(({fieldProxyId:g,...a})=>({...a,field:t(g)}))})),input:n.input.map((s)=>bo(s,t))}}case"quorum":{let{entities:i,qualityCriteria:n,exam:o,...s}=e.settings;return{...s,entities:{input:i.input.map((r)=>ar(r,t)),output:i.output.map((r)=>ar(r,t))},qualityCriteria:n.map((r)=>II(r,t)),...o===void 0?{}:{exam:SZ(o,t)}}}}}function qY(e,t,i,n){let o=new Set,r=$Y(e,(I)=>{let d=n.get(I);return b(d,`Node "${e.id}" references unknown field "${I}"`),o.add(d),{name:d,[JZ]:!0}}),g=[...o].toSorted(Et),a=[`import { ${e.type} } from '@toloka-platform/sdk';`,...g.length===0?[]:["",`import { ${g.join(", ")} } from '../../fields';`]],l=e.type==="root"?[`${ne(1)}${Je(r,1)}`,`${ne(1)}${Je({id:e.id},1)}`]:[`${ne(1)}${Je(e.settings.about.name,1)}`,`${ne(1)}${Je(r,1)}`,`${ne(1)}${Je({id:e.id},1)}`];return{binding:t,path:i,source:`${a.join(`
190
190
  `)}
191
191
 
192
192
  export const ${t} = ${e.type}(
193
193
  ${l.join(`,
194
194
  `)}
195
195
  );
196
- `}}function OZ(e,t){if(e.length===0)return`export {};
196
+ `}}function TZ(e,t){if(e.length===0)return`export {};
197
197
  `;return`import { field } from '@toloka-platform/sdk';
198
198
 
199
- ${e.map((n)=>{let o=t(n),s=[`${ne(1)}${xe(n.name,1)}`,`${ne(1)}${xe(n.jsonSchema,1)}`,...n.options===void 0?[]:[`${ne(1)}${xe(n.options,1)}`]];return{binding:o,source:`export const ${o} = field(
199
+ ${e.map((n)=>{let o=t(n),s=[`${ne(1)}${Je(n.name,1)}`,`${ne(1)}${Je(n.jsonSchema,1)}`,...n.options===void 0?[]:[`${ne(1)}${Je(n.options,1)}`]];return{binding:o,source:`export const ${o} = field(
200
200
  ${s.join(`,
201
201
  `)}
202
202
  );`}}).toSorted((n,o)=>Et(n.binding,o.binding)).map(({source:n})=>n).join(`
203
203
 
204
204
  `)}
205
- `}function TZ(e){let t=new Map(e.map((n)=>[n,`field:${n.options?.id??n.name}`])),i=gI(e.map((n)=>({key:t.get(n)??"",name:n.name,fallback:"field"})),({name:n,fallback:o})=>UZ(n,o),JZ);return OZ(e,(n)=>{let o=t.get(n);b(o,`Field "${n.name}" has no source key`);let s=i.get(o);return b(s,`Field "${n.name}" has no source binding`),s})}function $Y(e,t){return OZ(e.fields.map((i)=>({name:i.name,jsonSchema:i.jsonSchema,options:{id:i.id}})),(i)=>{let n=i.options?.id;b(n,`Field "${i.name}" has no source ID`);let o=t.get(n);return b(o,`Field "${n}" has no source binding`),o})}function SZ(e,t,i,n){let o=i.get(e.node);b(o,`Connection references unknown node "${e.node}"`);let s=n.get(o.id);switch(b(s,`Node "${o.id}" has no source binding`),o.type){case"root":return b(e.handle===(t==="output"?"started":"completed"),`Root ${t} handle "${e.handle}" cannot be authored`),`${s}.${t==="output"?"started":"completed"}`;case"code":case"generation":case"quorum":return b(e.handle===t,`${o.type} ${t} handle "${e.handle}" cannot be authored`),`${s}.${t}`;case"match":if(t==="input")return b(e.handle==="input",`Match input handle "${e.handle}" cannot be authored`),`${s}.input`;if(e.handle==="default")return`${s}.default`;let r=/^matched_(\d+)$/.exec(e.handle);b(r,`Match output handle "${e.handle}" cannot be authored`);let g=r[1];return b(g!==void 0,`Match output handle "${e.handle}" has no index`),b(String(Number(g))===g,`Match output handle "${e.handle}" is not canonical`),`${s}.matched(${g})`}}function qY(e,t,i,n,o){let s=new Map(e.nodes.map((d)=>[d.id,d])),r=[`import { ${e.connections.length===0?"definePipeline":"connect, definePipeline"} } from '@toloka-platform/sdk';`,...e.fields.length===0?[]:["",`import { ${[...n.values()].toSorted(Et).join(", ")} } from './fields';`],...i.toSorted((d,u)=>Et(d.path,u.path)).flatMap(({binding:d,path:u})=>[`import { ${d} } from './${u.slice(0,-3)}';`])],g=e.fields.map(({id:d})=>{let u=n.get(d);return b(u,`Field "${d}" has no source binding`),u}),a=e.nodes.map(({id:d})=>{let u=o.get(d);return b(u,`Node "${d}" has no source binding`),u}),l=e.connections.map((d)=>{let u=SZ(d.from,"output",s,o),c=SZ(d.to,"input",s,o);if(Object.keys(d.settings).length===0)return`connect(${u}, ${c})`;return`connect(
205
+ `}function zZ(e){let t=new Map(e.map((n)=>[n,`field:${n.options?.id??n.name}`])),i=lI(e.map((n)=>({key:t.get(n)??"",name:n.name,fallback:"field"})),({name:n,fallback:o})=>OZ(n,o),EZ);return TZ(e,(n)=>{let o=t.get(n);b(o,`Field "${n.name}" has no source key`);let s=i.get(o);return b(s,`Field "${n.name}" has no source binding`),s})}function eN(e,t){return TZ(e.fields.map((i)=>({name:i.name,jsonSchema:i.jsonSchema,options:{id:i.id}})),(i)=>{let n=i.options?.id;b(n,`Field "${i.name}" has no source ID`);let o=t.get(n);return b(o,`Field "${n}" has no source binding`),o})}function xZ(e,t,i,n){let o=i.get(e.node);b(o,`Connection references unknown node "${e.node}"`);let s=n.get(o.id);switch(b(s,`Node "${o.id}" has no source binding`),o.type){case"root":return b(e.handle===(t==="output"?"started":"completed"),`Root ${t} handle "${e.handle}" cannot be authored`),`${s}.${t==="output"?"started":"completed"}`;case"code":case"generation":case"quorum":return b(e.handle===t,`${o.type} ${t} handle "${e.handle}" cannot be authored`),`${s}.${t}`;case"match":if(t==="input")return b(e.handle==="input",`Match input handle "${e.handle}" cannot be authored`),`${s}.input`;if(e.handle==="default")return`${s}.default`;let r=/^matched_(\d+)$/.exec(e.handle);b(r,`Match output handle "${e.handle}" cannot be authored`);let g=r[1];return b(g!==void 0,`Match output handle "${e.handle}" has no index`),b(String(Number(g))===g,`Match output handle "${e.handle}" is not canonical`),`${s}.matched(${g})`}}function tN(e,t,i,n,o){let s=new Map(e.nodes.map((d)=>[d.id,d])),r=[`import { ${e.connections.length===0?"definePipeline":"connect, definePipeline"} } from '@toloka-platform/sdk';`,...e.fields.length===0?[]:["",`import { ${[...n.values()].toSorted(Et).join(", ")} } from './fields';`],...i.toSorted((d,u)=>Et(d.path,u.path)).flatMap(({binding:d,path:u})=>[`import { ${d} } from './${u.slice(0,-3)}';`])],g=e.fields.map(({id:d})=>{let u=n.get(d);return b(u,`Field "${d}" has no source binding`),u}),a=e.nodes.map(({id:d})=>{let u=o.get(d);return b(u,`Node "${d}" has no source binding`),u}),l=e.connections.map((d)=>{let u=xZ(d.from,"output",s,o),c=xZ(d.to,"input",s,o);if(Object.keys(d.settings).length===0)return`connect(${u}, ${c})`;return`connect(
206
206
  ${ne(3)}${u},
207
207
  ${ne(3)}${c},
208
- ${ne(3)}${xe(d.settings,3)}
208
+ ${ne(3)}${Je(d.settings,3)}
209
209
  ${ne(2)})`}),I=(d,u)=>{if(d.length===0)return"[]";return`[
210
210
  ${d.map((c)=>`${ne(u+1)}${c}`).join(`,
211
211
  `)}
@@ -213,49 +213,49 @@ ${ne(u)}]`};return`${r.join(`
213
213
  `)}
214
214
 
215
215
  export default definePipeline({
216
- dataset: ${xe(t)},
216
+ dataset: ${Je(t)},
217
217
  fields: ${I(g,1)},
218
218
  nodes: ${I(a,1)},
219
219
  connections: ${I(l,1)}
220
220
  });
221
- `}function zZ(e,t={dataset:"imported-dataset"}){let i=[...e.fields.map((l)=>({key:`field:${l.id}`,name:l.name,fallback:"field"})),...e.nodes.map((l)=>({key:`node:${l.id}`,name:l.type==="root"?"root":l.settings.about.name||l.type,fallback:l.type}))],n=gI(i,({name:l,fallback:I})=>UZ(l,I),JZ),o=gI(e.nodes.map((l)=>({key:`node:${l.id}`,name:l.type==="root"?"root":l.settings.about.name||l.type,fallback:l.type})),({name:l,fallback:I})=>_Y(l,I)),s=new Map(e.fields.map((l)=>{let I=n.get(`field:${l.id}`);return b(I,`Field "${l.id}" has no allocated binding`),[l.id,I]})),r=new Map(e.nodes.map((l)=>{let I=n.get(`node:${l.id}`);return b(I,`Node "${l.id}" has no allocated binding`),[l.id,I]})),g=e.nodes.map((l)=>{let I=r.get(l.id),d=o.get(`node:${l.id}`);return b(I&&d,`Node "${l.id}" has no allocated source name`),MY(l,I,`nodes/${d}/node.ts`,s)}),a=[{path:"fields.ts",source:$Y(e,s)},...g.map(({path:l,source:I})=>({path:l,source:I})),{path:"pipeline.ts",source:qY(e,t.dataset,g,s,r)}].toSorted((l,I)=>Et(l.path,I.path));return Object.fromEntries(a.map(({path:l,source:I})=>[l,I]))}var yt=require("fs/promises"),Ii=require("path");function jZ(e){let t=new Set;for(let i of e.nodes){if(i.type!=="code")continue;for(let n of i.settings.envVars??[])if(n.type==="secret")t.add(n.secretName)}return[...t].toSorted((i,n)=>i.localeCompare(n))}var eN=/^(?!\/)(?!.*\\)(?!.*(?:^|\/)\.\.?(?:\/|$))(?!.*\/\/).+$/u,II=(e)=>{if(Array.isArray(e))return e.map(II);if(typeof e!=="object"||e===null)return e;return Object.fromEntries(Object.entries(e).toSorted(([t],[i])=>t.localeCompare(i)).map(([t,i])=>[t,II(i)]))},Be=(e)=>JSON.stringify(II(e)),DZ=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e),_Z=(e,t)=>{if(!DZ(e)||!DZ(t))return t;return Object.fromEntries(Object.keys(e).map((i)=>[i,_Z(e[i],t[i])]))},tN=(e,t)=>Be(e)===Be(_Z(e,t)),Ao=async(e)=>{let t=[];for await(let i of e)t.push(i);return t},dI=(e)=>{let t=Reflect.get(e.settings,"about");if(typeof t==="object"&&t!==null){let i=Reflect.get(t,"name");if(typeof i==="string"&&i.length>0)return`${i} (${e.id})`}return e.id},iN=(e)=>`${e.name} (${e.id})`,nN=(e,t)=>{let i=t.get(e.from.node),n=t.get(e.to.node),o=i===void 0?e.from.node:dI(i),s=n===void 0?e.to.node:dI(n);return`${o}.${e.from.handle} -> ${s}.${e.to.handle}`},gr=(e)=>new Map(e.map((t)=>[t.id,t])),lI=(e,t,i,n)=>{let o=[];for(let[s,r]of[...e].toSorted(([g],[a])=>g.localeCompare(a))){let g=t.get(s);if(g===void 0)o.push(n(r,"added"));else if(!i(r,g))o.push(n(r,"changed"))}for(let[s,r]of[...t].toSorted(([g],[a])=>g.localeCompare(a)))if(!e.has(s))o.push(n(r,"removed"));return o};function oN(e,t){let i=gr(e.nodes),n=gr(t.nodes),o=new Map(e.connections.map((r)=>[Be(r),r])),s=new Map(t.connections.map((r)=>[Be(r),r]));return[...lI(gr(e.fields),gr(t.fields),(r,g)=>Be(r)===Be(g),(r,g)=>({kind:"field",action:g,label:iN(r),id:r.id})),...lI(i,n,tN,(r,g)=>({kind:"node",action:g,label:dI(r),id:r.id})),...lI(o,s,()=>!0,(r,g)=>({kind:"connection",action:g,label:nN(r,g==="removed"?n:i)})),...Be(e.layout)===Be(t.layout)?[]:[{kind:"layout",action:"changed",label:"pipeline layout"}]]}var cI=(e,t)=>{let i=t.nodes.find((o)=>o.type==="root"),n=i===void 0?{}:{...i.settings.itemFilter===void 0?{}:{itemFilter:i.settings.itemFilter},...i.settings.itemLimit===void 0?{}:{itemLimit:i.settings.itemLimit}};return{...e,...t.layout===void 0?{}:{layout:t.layout},nodes:e.nodes.map((o)=>o.type==="root"?{...o,settings:{...n,...o.settings}}:o)}},ar=(e)=>{let t=new Map;for(let i of e.pipelines){let n=t.get(i.definition.dataset);if(n===void 0)n=new Map,t.set(i.definition.dataset,n);for(let o of i.definition.graph.fields){let s=n.get(o.name);if(b(s===void 0||Be(s.jsonSchema)===Be(o.jsonSchema),`Dataset "${i.definition.dataset}" has conflicting schemas for field "${o.name}".`),s===void 0)n.set(o.name,o)}}return[...t].toSorted(([i],[n])=>i.localeCompare(n)).map(([i,n])=>({name:i,fields:[...n.values()].toSorted((o,s)=>o.name.localeCompare(s.name))}))},sN=(e)=>{let t=new Set;for(let i of e.pipelines)b(eN.test(i.sourceDirectory),`Invalid pipeline source directory ${i.sourceDirectory}`),b(!t.has(i.sourceDirectory),`Pipeline source directory ${i.sourceDirectory} is declared more than once`),t.add(i.sourceDirectory),Zs(i.definition);ar(e)},rN=(e,t,i)=>{let n=t===void 0?void 0:i.find((s)=>s.id===t.datasetId);if(n!==void 0)return b(n.name===e,`Dataset ${n.id} is bound as "${e}" but is named "${n.name}".`),n;let o=i.filter((s)=>s.name===e);return b(o.length<=1,`Project has multiple datasets named "${e}".`),o[0]},gN=(e,t,i)=>{let n=t===void 0?void 0:i.find((s)=>s.id===t.pipelineId);if(n!==void 0)return n;let o=i.filter((s)=>s.name===e.name);return b(o.length<=1,`Project has multiple pipelines named "${e.name}".`),o[0]},aN=(e)=>{let t=e.action==="added"?"+":e.action==="removed"?"-":e.action==="missing"?"!":"~";switch(e.kind){case"pipeline":return`${t} Pipeline ${e.action}: ${e.label}`;case"dataset":return`${t} Dataset ${e.action}: ${e.label}`;case"datasetField":return`${t} Dataset field ${e.action}: ${e.dataset}.${e.label}`;case"secret":return`${t} Missing secret: ${e.label}`;case"node":return`${t} Node ${e.action} in ${e.pipeline}: ${e.label}`;case"connection":return`${t} Connection ${e.action} in ${e.pipeline}: ${e.label}`;case"field":return`${t} Graph field ${e.action} in ${e.pipeline}: ${e.label}`;case"layout":return`${t} Layout ${e.action} in ${e.pipeline}: ${e.label}`}},lN=(e,t)=>{if(e.length===0)return"No changes.";let i=e.length===1?"change":"changes",n=[`Plan: ${e.length} ${i}`,...e.map(aN)];if(t.length>0){n.push("","Required secrets are missing:");for(let o of t)n.push(` ${o}`);n.push("Run `toloka secret set <name>` before apply.")}return n.join(`
222
- `)},IN=async(e,t,i,n)=>{let o=t.map((r)=>({desired:r,dataset:rN(r.name,i?.datasets[r.name],n)})),s=await Promise.all(o.map(async({dataset:r})=>r===void 0?[]:Ao(e.datasets.listAllFields({datasetId:r.id}))));return o.map(({desired:r,dataset:g},a)=>{let l=s[a]??[],I=new Map(l.map((d)=>[d.name,d]));return{...r,...g===void 0?{}:{dataset:g},liveFields:l,missingFields:r.fields.filter((d)=>!I.has(d.name)),conflictingFields:r.fields.filter((d)=>{let u=I.get(d.name);return u!==void 0&&Be(u.jsonSchema)!==Be(d.jsonSchema)})}})},dN=async(e,t,i,n,o)=>{let s=t.pipelines.map((g)=>({source:g,pipeline:gN(g,i?.pipelines[g.sourceDirectory],o)})),r=await Promise.all(s.map(async({pipeline:g})=>g===void 0?void 0:e.pipelines.getGraph({pipelineId:g.id})));return s.map(({source:g,pipeline:a},l)=>{let I=r[l],d=n.find((c)=>c.name===g.definition.dataset)?.dataset,u=[];if(a!==void 0&&I!==void 0)u=d===void 0?[{kind:"node",action:"changed",label:"root dataset binding",id:"root"}]:oN(cI(Qn(g.definition,{datasetId:d.id}),I.graph),I.graph);return{source:g,...a===void 0?{}:{pipeline:a},...I===void 0?{}:{snapshot:I},graphChanges:u}})},cN=(e,t,i,n,o)=>{let s=[];for(let r of o)s.push({kind:"pipeline",action:"removed",label:r});for(let r of n)s.push({kind:"dataset",action:"removed",label:r});for(let r of e){if(r.dataset===void 0)s.push({kind:"dataset",action:"added",label:r.name});for(let g of r.missingFields)s.push({kind:"datasetField",action:"added",label:g.name,dataset:r.name});for(let g of r.conflictingFields)s.push({kind:"datasetField",action:"changed",label:g.name,dataset:r.name})}for(let r of t)if(r.pipeline===void 0)s.push({kind:"pipeline",action:"added",label:r.source.sourceDirectory});else for(let g of r.graphChanges)s.push({...g,pipeline:r.source.sourceDirectory});for(let r of i)s.push({kind:"secret",action:"missing",label:r});return s},lr=async(e,t)=>{let i=t.source??await Ei(t.sourceRoot);sN(i);let n=await Re(t.sourceRoot),o=t.projectId??n?.projectId;b(o,M);let s=n?.projectId===o?n:void 0,r=new Set(i.pipelines.flatMap(({definition:Z})=>jZ(Z.graph))),g=t.listAllSecrets===!0||r.size>0,[a,l,I]=await Promise.all([Ao(e.pipelines.listAll({projectId:o})),Ao(e.datasets.listAll({projectId:o})),g?e.secrets.list({projectId:o}):Promise.resolve([])]),d=ar(i),u=Object.keys(s?.datasets??{}).filter((Z)=>!d.some((W)=>W.name===Z)).toSorted(),c=Object.keys(s?.pipelines??{}).filter((Z)=>!i.pipelines.some((W)=>W.sourceDirectory===Z)).toSorted(),C=await IN(e,d,s,l),A=await dN(e,i,s,C,a),m=new Set(I.map((Z)=>Z.name)),p=[...r].filter((Z)=>!m.has(Z)).toSorted();return{projectId:o,source:i,state:n,datasets:C,pipelines:A,livePipelines:a,liveDatasets:l,liveSecrets:I,changes:cN(C,A,p,u,c),missingSecrets:p,removedDatasets:u,removedPipelines:c}},QZ=(e)=>e.toLowerCase().match(/[a-z0-9]+/gu)?.join("-")||"pipeline",CN=(e)=>{let t=2166136261;for(let i=0;i<e.length;i+=1)t^=e.charCodeAt(i),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")},uN=(e)=>{let t=Map.groupBy(e,(i)=>QZ(i.name));return new Map(e.map((i)=>{let n=QZ(i.name),o=(t.get(n)?.length??0)>1;return[i.id,`pipelines/${o?`${n}-${CN(i.id)}`:n}`]}))};async function KZ(e,t){let i=(await Ao(e.pipelines.listAll({projectId:t.projectId}))).toSorted((Z,W)=>Z.name.localeCompare(W.name)||Z.id.localeCompare(W.id)),n=await Promise.all(i.map((Z)=>e.pipelines.getGraph({pipelineId:Z.id}))),o=new Set;for(let Z of n){let W=Z.graph.nodes.find((h)=>h.type==="root");b(W?.settings.datasetId,"Every imported pipeline must have a bound dataset."),o.add(W.settings.datasetId)}let s=await Ao(e.datasets.listAll({projectId:t.projectId})),r=[];for(let Z of[...o].toSorted()){let W=s.find((h)=>h.id===Z);b(W,`Project ${t.projectId} has no dataset ${Z}.`),r.push(W)}let g=new Map(r.map((Z)=>[Z.id,Z])),a=uN(i),l={},I={},d={};for(let[Z,W]of i.entries()){let h=n[Z];b(h,`Pipeline ${W.id} has no graph snapshot.`);let f=h.graph.nodes.find((R)=>R.type==="root");b(f?.settings.datasetId,`Pipeline ${W.id} has no dataset binding.`);let V=g.get(f.settings.datasetId);b(V,`Pipeline ${W.id} references unknown dataset ${f.settings.datasetId}.`);let B=d[V.name];b(B===void 0||B.datasetId===V.id,`Project has multiple referenced datasets named "${V.name}".`),d[V.name]={datasetId:V.id};let F=a.get(W.id);b(F,`Pipeline ${W.id} has no source directory.`),I[F]={pipelineId:W.id};for(let[R,U]of Object.entries(zZ(h.graph,{dataset:V.name})))l[`${F}/${R}`]=U}await yt.mkdir(t.sourceRoot,{recursive:!0});let u=Ii.join(t.sourceRoot,"pipelines"),c=!1;try{c=(await yt.stat(u)).isDirectory()}catch(Z){if(!(Z instanceof Error)||!("code"in Z)||Z.code!=="ENOENT")throw Z}if(b(!c||t.force===!0,`Folder already exists: ${u}. Pass --force to replace it.`),c)await yt.rm(u,{recursive:!0,force:!0});for(let[Z,W]of Object.entries(l).toSorted(([h],[f])=>h.localeCompare(f))){let h=Ii.join(t.sourceRoot,Z);await yt.mkdir(Ii.dirname(h),{recursive:!0}),await yt.writeFile(h,W,"utf8")}let C={projectId:t.projectId,pipelines:I,datasets:d};await Lt(t.sourceRoot,C);let A=[...Object.keys(l),us].toSorted(),m=i.length===1?"pipeline":"pipelines",p=r.length===1?"dataset":"datasets";return{state:C,files:A,output:`Imported project ${t.projectId} with ${i.length} ${m} and ${r.length} ${p} into ${Ii.resolve(t.sourceRoot)}.`}}async function LZ(e,t){let i=await lr(e,t);return{projectId:i.projectId,changes:i.changes,missingSecrets:i.missingSecrets,output:lN(i.changes,i.missingSecrets)}}async function MZ(e,t){let i=t.projectId;b(i,M);let n=await e.projects.get({projectId:i}),o=await lr(e,{...t,listAllSecrets:!0}),s=o.changes.length,r=s===0?"Source has no pending changes.":`Source has ${s} pending change${s===1?"":"s"}.`;return{projectId:i,output:[`Project: ${i} (${n.name})`,`Team: ${n.teamId}`,`Pipelines: ${o.livePipelines.length}`,`Datasets: ${o.liveDatasets.length}`,`Secrets: ${o.liveSecrets.length}`,r].join(`
223
- `)}}async function $Z(e,t){let i=await lr(e,t);b(i.removedPipelines.length===0,`Refusing to delete pipelines absent from source: ${i.removedPipelines.join(", ")}.`),b(i.removedDatasets.length===0,`Refusing to delete datasets absent from source: ${i.removedDatasets.join(", ")}. Dataset items are never deleted.`),b(i.missingSecrets.length===0,`Required secrets are missing: ${i.missingSecrets.join(", ")}. Run toloka secret set <name> before apply.`);let n=i.datasets.flatMap((I)=>I.conflictingFields.map((d)=>`${I.name}.${d.name}`));b(n.length===0,`Dataset field schemas conflict with source: ${n.join(", ")}. Existing fields are never rewritten.`);let o=0,s=new Map;for(let I of i.datasets){let d=I.dataset;if(d===void 0)d=await e.datasets.create({projectId:i.projectId,name:I.name}),o+=1;if(s.set(I.name,d.id),I.missingFields.length>0)await e.datasets.createFields({datasetId:d.id,fields:I.missingFields.map((u)=>({name:u.name,jsonSchema:u.jsonSchema}))}),o+=I.missingFields.length}let r=new Map;for(let I of i.pipelines){let d=s.get(I.source.definition.dataset);b(d,`Dataset ${I.source.definition.dataset} has no resolved ID.`);let u=Qn(I.source.definition,{datasetId:d});if(I.pipeline===void 0){let C=await e.pipelines.import({projectId:i.projectId,name:I.source.name,graph:u});await e.pipelines.attachDataset({pipelineId:C.id,datasetId:d}),r.set(I.source.sourceDirectory,C.id),o+=2;continue}if(r.set(I.source.sourceDirectory,I.pipeline.id),I.graphChanges.length===0)continue;let c=I.snapshot;b(c,`Pipeline ${I.pipeline.id} has no graph snapshot.`),await e.pipelines.replaceGraph({pipelineId:I.pipeline.id,graph:cI(u,c.graph),expectedVersion:c.version}),o+=1}let g={projectId:i.projectId,pipelines:Object.fromEntries(i.source.pipelines.map((I)=>{let d=r.get(I.sourceDirectory);return b(d,`Pipeline ${I.sourceDirectory} has no resolved ID.`),[I.sourceDirectory,{pipelineId:d}]})),datasets:Object.fromEntries(i.datasets.map((I)=>{let d=s.get(I.name);return b(d,`Dataset ${I.name} has no resolved ID.`),[I.name,{datasetId:d}]}))};if(Be(i.state)!==Be(g))await Lt(t.sourceRoot,g);let a=o===0?"unchanged":"changed",l=o===0?"No changes.":`Applied ${o} ${o===1?"write":"writes"} to project ${i.projectId}.`;return{action:a,state:g,changes:i.changes,writes:o,output:l}}var mN=(e)=>[e.nodeId,e.checkId].filter((t)=>t!==void 0).join("/"),pN=(e)=>e.issues.map((t)=>{let i=mN(t);return` ${t.severity} ${t.code}${i.length===0?"":` ${i}`}: ${t.message}`});async function qZ(e,t){let i=await lr(e,t),n=[];for(let r of i.pipelines){let g=i.datasets.find((I)=>I.name===r.source.definition.dataset)?.dataset;if(r.pipeline===void 0){n.push({sourceDirectory:r.source.sourceDirectory,skipped:"pipeline is not on the platform yet; run toloka apply first"});continue}if(g===void 0){n.push({sourceDirectory:r.source.sourceDirectory,pipelineId:r.pipeline.id,skipped:`dataset "${r.source.definition.dataset}" is not on the platform yet; run toloka apply first`});continue}let a=r.snapshot===void 0?Qn(r.source.definition,{datasetId:g.id}):cI(Qn(r.source.definition,{datasetId:g.id}),r.snapshot.graph),l=await e.pipelines.validateGraph({pipelineId:r.pipeline.id,graph:a});n.push({sourceDirectory:r.source.sourceDirectory,pipelineId:r.pipeline.id,report:l})}let o=n.every((r)=>r.report?.valid!==!1),s=n.flatMap((r)=>{if(r.skipped!==void 0)return[`- ${r.sourceDirectory}: skipped (${r.skipped})`];return b(r.report,`Pipeline ${r.sourceDirectory} is missing a validation report`),[r.report.valid?`- ${r.sourceDirectory}: valid`:`- ${r.sourceDirectory}: invalid`,...pN(r.report)]});return{projectId:i.projectId,results:n,valid:o,output:s.length===0?"No pipelines to validate.":s.join(`
224
- `)}}var ib="uploaded",AN=/^ds\.[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu,eb=3;class dr extends Error{constructor(e,t){super(e,{cause:t});this.name="DatasetUploadError"}}var ZN=(e)=>AN.test(e)?e.toLowerCase():void 0,bN={json:"application/json",jsonl:"application/x-ndjson",csv:"text/csv"},uI=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e),CI=(e)=>{if(!uI(e))return"unknown";if(Array.isArray(e.anyOf)){let n=[...new Set(e.anyOf.map(CI))];return n.length===0?"unknown":n.join(" | ")}let t=e.type,i=typeof t==="string"?[t]:Array.isArray(t)?t.filter((n)=>typeof n==="string"):[];if(i.length===0)return"unknown";return i.map((n)=>{if(n!=="array")return n;let o=CI(e.items);return o==="unknown"?"array":`array<${o}>`}).join(" | ")},WN=(e)=>{if(e.length===0)return"No inferred fields are available yet.";return["Inferred fields:",...e.toSorted((t,i)=>t.jsonPath.localeCompare(i.jsonPath)).map((t)=>`${" ".repeat(t.depth)}- ${t.jsonPath}: ${CI(t.jsonSchema)}`)].join(`
225
- `)},nb=async(e)=>{let t=e.source??await Ei(e.sourceRoot),i=ar(t).find((n)=>n.name===e.datasetName);return i===void 0?[]:i.fields.map((n)=>({name:n.name,jsonSchema:n.jsonSchema}))},tb=(e)=>`${e.name} (${e.id})`,ob=async(e,t)=>{let i=[];for await(let n of e.datasets.listAll({projectId:t}))i.push(n);return i.toSorted((n,o)=>{let s=n.name.localeCompare(o.name);return s===0?n.id.localeCompare(o.id):s})},mI=async(e,t,i)=>{let n=await Re(t.sourceRoot),o=t.projectId??n?.projectId;b(o,M);let s=t.datasetName,r=await ob(e,o),g=(c)=>r.filter((C)=>C.name===c).length<=1,a=ZN(s),l=r.find((c)=>c.id===s||c.id.toLowerCase()===a);if(l!==void 0)return{datasetId:l.id,name:l.name,nameIsUnique:g(l.name)};let I=r.filter((c)=>c.name===s);if(b(I.length<=1,`Project ${o} has multiple datasets named "${s}": ${I.map(tb).join(", ")}.`),I.length===1){let[c]=I;return b(c,`Dataset "${s}" has no resolved ID.`),{datasetId:c.id,name:c.name,nameIsUnique:!0}}let d=n?.projectId===o?n.datasets[s]:void 0;if(d!==void 0){let c=r.find((C)=>C.id===d.datasetId);if(c!==void 0)return{datasetId:c.id,name:c.name,nameIsUnique:g(c.name)}}b(i&&a===void 0,r.length===0?`Dataset "${s}" does not exist in project ${o}. Run toloka apply first.`:`Dataset "${s}" does not exist in project ${o}. This project has: ${r.map(tb).join(", ")}.`),b((await nb(t)).length>0,`Dataset "${s}" does not exist in project ${o} and no pipeline in source declares it. Bind a pipeline to it in source so its columns are known, or upload to an existing dataset.`);let u=await e.datasets.create({projectId:o,name:s});return{datasetId:u.id,name:u.name,nameIsUnique:!0}},hN=(e)=>{let t=e.toLowerCase();if(t.endsWith(".json"))return"json";if(t.endsWith(".jsonl"))return"jsonl";if(t.endsWith(".csv"))return"csv";b(!1,`${e} must have a .json, .jsonl, or .csv extension`)},fN=async(e)=>{let t=Zo.basename(e),i=hN(t),n=await an.readFile(e,"utf8");if(i==="jsonl")for(let{line:o,lineNumber:s}of n.split(/\r?\n/u).map((r,g)=>({line:r,lineNumber:g+1})).filter(({line:r})=>r.length>0)){let r;try{r=JSON.parse(o)}catch{b(!1,`${t}:${s} is not valid JSON`)}b(uI(r),`${t}:${s} must contain a JSON object`)}return{payload:n,format:i,contentType:bN[i]}},Ir=async(e,t,i)=>{let n=i instanceof Error?i.message:String(i);try{await e.datasets.cancelUpload({uploadId:t})}catch(o){let s=o instanceof Error?o.message:String(o);throw AggregateError([i,o],`Dataset upload ${t} failed and could not be canceled. Upload error: ${n}. Cancellation error: ${s}.`)}throw new dr(`Dataset upload ${t} failed and was canceled: ${n}`,i)},yN=async({client:e,started:t,payload:i,contentType:n,fetch:o,retryIntervalMs:s})=>{let r;try{r=await o(t.uploadUrl,{method:"PUT",headers:{"Content-Type":n,"x-ms-blob-type":"BlockBlob"},body:i})}catch(a){return Ir(e,t.job.id,a)}if(!r.ok)return Ir(e,t.job.id,new dr(`Dataset upload failed with HTTP ${r.status}.`,void 0));let g=0;while(!0)try{await e.datasets.finalizeUpload({uploadId:t.job.id});return}catch(a){if(!(a instanceof te&&a.status===503))return Ir(e,t.job.id,a);if(g+=1,g===eb)return Ir(e,t.job.id,new dr(`Storage remained unavailable after ${eb} finalization attempts.`,a));let{promise:l,resolve:I}=Promise.withResolvers();setTimeout(I,s),await l}};async function sb(e,t){let{payload:i,format:n,contentType:o}=await fN(t.filePath),s=await mI(e,t,!0),r=s.datasetId,g=new Map;for await(let p of e.datasets.listAllFields({datasetId:r})){if(p.internal||p.name===ib)continue;g.set(p.name,{name:p.name,jsonSchema:p.jsonSchema})}for(let p of await nb({...t,datasetName:s.name}))if(!g.has(p.name))g.set(p.name,p);let a=[...g.values()],l=await e.datasets.startUpload({datasetId:r,filename:Zo.basename(t.filePath),format:n,declaredSizeBytes:new TextEncoder().encode(i).byteLength,fields:a});await yN({client:e,started:l,payload:i,contentType:o,fetch:t.fetch??globalThis.fetch,retryIntervalMs:t.waitFor?.intervalMs??1000});let I=await e.waitFor({type:"datasetUpload",uploadId:l.job.id},t.waitFor),d=s.nameIsUnique?s.name:s.datasetId,u=I.status==="failed"&&I.error?.startsWith("Schema incompatible with existing upload")===!0?`
226
- Run toloka dataset fields ${JSON.stringify(d)} to inspect the inferred schema stored from the first successful upload.`:"";b(I.status==="succeeded",`${I.error??`Dataset upload ${I.id} failed.`}${u}`);let c=`Uploaded ${I.result.itemsIngested} rows to dataset ${s.name}.`,C=[],A,m;try{C=(await e.datasets.getInferredFields({datasetId:r})).fields,A=WN(C)}catch(p){m=`Upload succeeded, but inferred fields could not be fetched: ${p instanceof Error?p.message:String(p)}`}return{datasetId:r,rowsUploaded:I.result.itemsIngested,inferredFields:C,output:A===void 0?c:`${c}
227
- ${A}`,...m===void 0?{}:{warning:m}}}async function rb(e,t){let i=await mI(e,t,!1),n=await e.datasets.getInferredFields({datasetId:i.datasetId}),o=n.fields.filter((r)=>r.depth===1),s=TZ(o.map(({name:r,jsonSchema:g})=>({name:r,jsonSchema:g})));return{datasetId:i.datasetId,inferredFields:n.fields,declarations:s,output:o.length===0?`Dataset ${i.name} has no inferred fields yet.`:s}}async function gb(e,t){let i=await ob(e,t.projectId);if(i.length===0)return{output:"This project has no datasets."};return{output:i.map((n)=>`${n.name} ${n.id}`).join(`
228
- `)}}var VN=async(e)=>{let t=await e.fetch(e.downloadUrl);b(t.ok,`Dataset export download failed with HTTP ${t.status}.`);let i=await t.text(),n;try{n=JSON.parse(i)}catch(s){throw Error(`Dataset export ${e.exportId} is not valid JSON.`,{cause:s})}b(Array.isArray(n),`Dataset export ${e.exportId} is not a JSON array.`);let o=[];for(let[s,r]of n.entries())b(uI(r),`Dataset export ${e.exportId} row ${s} is not a JSON object.`),o.push(r);return o};async function ab(e,t){let i=await mI(e,t,!1),n=[];for await(let a of e.datasets.listAllFields({datasetId:i.datasetId})){if(a.internal||a.name===ib)continue;n.push(a.name)}b(n.length>0,`Dataset ${i.name} has no fields to export.`);let o=await e.datasets.startExport({datasetId:i.datasetId,fields:n}),s;try{s=await e.waitFor({type:"datasetExport",exportId:o.id},t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs})}catch(a){throw b(!(a instanceof te&&a.code==="wait_timeout"),`Stopped waiting for dataset export ${o.id}; raise --timeout to wait longer.`),a}b(s.result.downloadUrl,`Dataset export ${s.id} succeeded without a download URL.`);let r=await VN({downloadUrl:s.result.downloadUrl,exportId:s.id,fetch:t.fetch??globalThis.fetch}),g=t.limit===void 0?r:r.slice(0,t.limit);return await an.mkdir(Zo.dirname(t.outPath),{recursive:!0}),await an.writeFile(t.outPath,g.length===0?"":`${g.map((a)=>JSON.stringify(a)).join(`
221
+ `}function jZ(e,t={dataset:"imported-dataset"}){let i=[...e.fields.map((l)=>({key:`field:${l.id}`,name:l.name,fallback:"field"})),...e.nodes.map((l)=>({key:`node:${l.id}`,name:l.type==="root"?"root":l.settings.about.name||l.type,fallback:l.type}))],n=lI(i,({name:l,fallback:I})=>OZ(l,I),EZ),o=lI(e.nodes.map((l)=>({key:`node:${l.id}`,name:l.type==="root"?"root":l.settings.about.name||l.type,fallback:l.type})),({name:l,fallback:I})=>LY(l,I)),s=new Map(e.fields.map((l)=>{let I=n.get(`field:${l.id}`);return b(I,`Field "${l.id}" has no allocated binding`),[l.id,I]})),r=new Map(e.nodes.map((l)=>{let I=n.get(`node:${l.id}`);return b(I,`Node "${l.id}" has no allocated binding`),[l.id,I]})),g=e.nodes.map((l)=>{let I=r.get(l.id),d=o.get(`node:${l.id}`);return b(I&&d,`Node "${l.id}" has no allocated source name`),qY(l,I,`nodes/${d}/node.ts`,s)}),a=[{path:"fields.ts",source:eN(e,s)},...g.map(({path:l,source:I})=>({path:l,source:I})),{path:"pipeline.ts",source:tN(e,t.dataset,g,s,r)}].toSorted((l,I)=>Et(l.path,I.path));return Object.fromEntries(a.map(({path:l,source:I})=>[l,I]))}var yt=require("fs/promises"),di=require("path");function DZ(e){let t=new Set;for(let i of e.nodes){if(i.type!=="code")continue;for(let n of i.settings.envVars??[])if(n.type==="secret")t.add(n.secretName)}return[...t].toSorted((i,n)=>i.localeCompare(n))}var iN=/^(?!\/)(?!.*\\)(?!.*(?:^|\/)\.\.?(?:\/|$))(?!.*\/\/).+$/u,cI=(e)=>{if(Array.isArray(e))return e.map(cI);if(typeof e!=="object"||e===null)return e;return Object.fromEntries(Object.entries(e).toSorted(([t],[i])=>t.localeCompare(i)).map(([t,i])=>[t,cI(i)]))},Be=(e)=>JSON.stringify(cI(e)),QZ=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e),KZ=(e,t)=>{if(!QZ(e)||!QZ(t))return t;return Object.fromEntries(Object.keys(e).map((i)=>[i,KZ(e[i],t[i])]))},nN=(e,t)=>Be(e)===Be(KZ(e,t)),Wo=async(e)=>{let t=[];for await(let i of e)t.push(i);return t},CI=(e)=>{let t=Reflect.get(e.settings,"about");if(typeof t==="object"&&t!==null){let i=Reflect.get(t,"name");if(typeof i==="string"&&i.length>0)return`${i} (${e.id})`}return e.id},oN=(e)=>`${e.name} (${e.id})`,sN=(e,t)=>{let i=t.get(e.from.node),n=t.get(e.to.node),o=i===void 0?e.from.node:CI(i),s=n===void 0?e.to.node:CI(n);return`${o}.${e.from.handle} -> ${s}.${e.to.handle}`},lr=(e)=>new Map(e.map((t)=>[t.id,t])),dI=(e,t,i,n)=>{let o=[];for(let[s,r]of[...e].toSorted(([g],[a])=>g.localeCompare(a))){let g=t.get(s);if(g===void 0)o.push(n(r,"added"));else if(!i(r,g))o.push(n(r,"changed"))}for(let[s,r]of[...t].toSorted(([g],[a])=>g.localeCompare(a)))if(!e.has(s))o.push(n(r,"removed"));return o};function rN(e,t){let i=lr(e.nodes),n=lr(t.nodes),o=new Map(e.connections.map((r)=>[Be(r),r])),s=new Map(t.connections.map((r)=>[Be(r),r]));return[...dI(lr(e.fields),lr(t.fields),(r,g)=>Be(r)===Be(g),(r,g)=>({kind:"field",action:g,label:oN(r),id:r.id})),...dI(i,n,nN,(r,g)=>({kind:"node",action:g,label:CI(r),id:r.id})),...dI(o,s,()=>!0,(r,g)=>({kind:"connection",action:g,label:sN(r,g==="removed"?n:i)})),...Be(e.layout)===Be(t.layout)?[]:[{kind:"layout",action:"changed",label:"pipeline layout"}]]}var uI=(e,t)=>{let i=t.nodes.find((o)=>o.type==="root"),n=i===void 0?{}:{...i.settings.itemFilter===void 0?{}:{itemFilter:i.settings.itemFilter},...i.settings.itemLimit===void 0?{}:{itemLimit:i.settings.itemLimit}};return{...e,...t.layout===void 0?{}:{layout:t.layout},nodes:e.nodes.map((o)=>o.type==="root"?{...o,settings:{...n,...o.settings}}:o)}},Ir=(e)=>{let t=new Map;for(let i of e.pipelines){let n=t.get(i.definition.dataset);if(n===void 0)n=new Map,t.set(i.definition.dataset,n);for(let o of i.definition.graph.fields){let s=n.get(o.name);if(b(s===void 0||Be(s.jsonSchema)===Be(o.jsonSchema),`Dataset "${i.definition.dataset}" has conflicting schemas for field "${o.name}".`),s===void 0)n.set(o.name,o)}}return[...t].toSorted(([i],[n])=>i.localeCompare(n)).map(([i,n])=>({name:i,fields:[...n.values()].toSorted((o,s)=>o.name.localeCompare(s.name))}))},gN=(e)=>{let t=new Set;for(let i of e.pipelines)b(iN.test(i.sourceDirectory),`Invalid pipeline source directory ${i.sourceDirectory}`),b(!t.has(i.sourceDirectory),`Pipeline source directory ${i.sourceDirectory} is declared more than once`),t.add(i.sourceDirectory),hs(i.definition);Ir(e)},aN=(e,t,i)=>{let n=t===void 0?void 0:i.find((s)=>s.id===t.datasetId);if(n!==void 0)return b(n.name===e,`Dataset ${n.id} is bound as "${e}" but is named "${n.name}".`),n;let o=i.filter((s)=>s.name===e);return b(o.length<=1,`Project has multiple datasets named "${e}".`),o[0]},lN=(e,t,i)=>{let n=t===void 0?void 0:i.find((s)=>s.id===t.pipelineId);if(n!==void 0)return n;let o=i.filter((s)=>s.name===e.name);return b(o.length<=1,`Project has multiple pipelines named "${e.name}".`),o[0]},IN=(e)=>{let t=e.action==="added"?"+":e.action==="removed"?"-":e.action==="missing"?"!":"~";switch(e.kind){case"pipeline":return`${t} Pipeline ${e.action}: ${e.label}`;case"dataset":return`${t} Dataset ${e.action}: ${e.label}`;case"datasetField":return`${t} Dataset field ${e.action}: ${e.dataset}.${e.label}`;case"secret":return`${t} Missing secret: ${e.label}`;case"node":return`${t} Node ${e.action} in ${e.pipeline}: ${e.label}`;case"connection":return`${t} Connection ${e.action} in ${e.pipeline}: ${e.label}`;case"field":return`${t} Graph field ${e.action} in ${e.pipeline}: ${e.label}`;case"layout":return`${t} Layout ${e.action} in ${e.pipeline}: ${e.label}`}},dN=(e,t)=>{if(e.length===0)return"No changes.";let i=e.length===1?"change":"changes",n=[`Plan: ${e.length} ${i}`,...e.map(IN)];if(t.length>0){n.push("","Required secrets are missing:");for(let o of t)n.push(` ${o}`);n.push("Run `toloka secret set <name>` before apply.")}return n.join(`
222
+ `)},cN=async(e,t,i,n)=>{let o=t.map((r)=>({desired:r,dataset:aN(r.name,i?.datasets[r.name],n)})),s=await Promise.all(o.map(async({dataset:r})=>r===void 0?[]:Wo(e.datasets.listAllFields({datasetId:r.id}))));return o.map(({desired:r,dataset:g},a)=>{let l=s[a]??[],I=new Map(l.map((d)=>[d.name,d]));return{...r,...g===void 0?{}:{dataset:g},liveFields:l,missingFields:r.fields.filter((d)=>!I.has(d.name)),conflictingFields:r.fields.filter((d)=>{let u=I.get(d.name);return u!==void 0&&Be(u.jsonSchema)!==Be(d.jsonSchema)})}})},CN=async(e,t,i,n,o)=>{let s=t.pipelines.map((g)=>({source:g,pipeline:lN(g,i?.pipelines[g.sourceDirectory],o)})),r=await Promise.all(s.map(async({pipeline:g})=>g===void 0?void 0:e.pipelines.getGraph({pipelineId:g.id})));return s.map(({source:g,pipeline:a},l)=>{let I=r[l],d=n.find((c)=>c.name===g.definition.dataset)?.dataset,u=[];if(a!==void 0&&I!==void 0)u=d===void 0?[{kind:"node",action:"changed",label:"root dataset binding",id:"root"}]:rN(uI(Ln(g.definition,{datasetId:d.id}),I.graph),I.graph);return{source:g,...a===void 0?{}:{pipeline:a},...I===void 0?{}:{snapshot:I},graphChanges:u}})},uN=(e,t,i,n,o)=>{let s=[];for(let r of o)s.push({kind:"pipeline",action:"removed",label:r});for(let r of n)s.push({kind:"dataset",action:"removed",label:r});for(let r of e){if(r.dataset===void 0)s.push({kind:"dataset",action:"added",label:r.name});for(let g of r.missingFields)s.push({kind:"datasetField",action:"added",label:g.name,dataset:r.name});for(let g of r.conflictingFields)s.push({kind:"datasetField",action:"changed",label:g.name,dataset:r.name})}for(let r of t)if(r.pipeline===void 0)s.push({kind:"pipeline",action:"added",label:r.source.sourceDirectory});else for(let g of r.graphChanges)s.push({...g,pipeline:r.source.sourceDirectory});for(let r of i)s.push({kind:"secret",action:"missing",label:r});return s},dr=async(e,t)=>{let i=t.source??await Ui(t.sourceRoot);gN(i);let n=await Re(t.sourceRoot),o=t.projectId??n?.projectId;b(o,M);let s=n?.projectId===o?n:void 0,r=new Set(i.pipelines.flatMap(({definition:Z})=>DZ(Z.graph))),g=t.listAllSecrets===!0||r.size>0,[a,l,I]=await Promise.all([Wo(e.pipelines.listAll({projectId:o})),Wo(e.datasets.listAll({projectId:o})),g?e.secrets.list({projectId:o}):Promise.resolve([])]),d=Ir(i),u=Object.keys(s?.datasets??{}).filter((Z)=>!d.some((W)=>W.name===Z)).toSorted(),c=Object.keys(s?.pipelines??{}).filter((Z)=>!i.pipelines.some((W)=>W.sourceDirectory===Z)).toSorted(),C=await cN(e,d,s,l),A=await CN(e,i,s,C,a),m=new Set(I.map((Z)=>Z.name)),p=[...r].filter((Z)=>!m.has(Z)).toSorted();return{projectId:o,source:i,state:n,datasets:C,pipelines:A,livePipelines:a,liveDatasets:l,liveSecrets:I,changes:uN(C,A,p,u,c),missingSecrets:p,removedDatasets:u,removedPipelines:c}},_Z=(e)=>e.toLowerCase().match(/[a-z0-9]+/gu)?.join("-")||"pipeline",mN=(e)=>{let t=2166136261;for(let i=0;i<e.length;i+=1)t^=e.charCodeAt(i),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")},pN=(e)=>{let t=Map.groupBy(e,(i)=>_Z(i.name));return new Map(e.map((i)=>{let n=_Z(i.name),o=(t.get(n)?.length??0)>1;return[i.id,`pipelines/${o?`${n}-${mN(i.id)}`:n}`]}))};async function LZ(e,t){let i=(await Wo(e.pipelines.listAll({projectId:t.projectId}))).toSorted((Z,W)=>Z.name.localeCompare(W.name)||Z.id.localeCompare(W.id)),n=await Promise.all(i.map((Z)=>e.pipelines.getGraph({pipelineId:Z.id}))),o=new Set;for(let Z of n){let W=Z.graph.nodes.find((h)=>h.type==="root");b(W?.settings.datasetId,"Every imported pipeline must have a bound dataset."),o.add(W.settings.datasetId)}let s=await Wo(e.datasets.listAll({projectId:t.projectId})),r=[];for(let Z of[...o].toSorted()){let W=s.find((h)=>h.id===Z);b(W,`Project ${t.projectId} has no dataset ${Z}.`),r.push(W)}let g=new Map(r.map((Z)=>[Z.id,Z])),a=pN(i),l={},I={},d={};for(let[Z,W]of i.entries()){let h=n[Z];b(h,`Pipeline ${W.id} has no graph snapshot.`);let f=h.graph.nodes.find((R)=>R.type==="root");b(f?.settings.datasetId,`Pipeline ${W.id} has no dataset binding.`);let V=g.get(f.settings.datasetId);b(V,`Pipeline ${W.id} references unknown dataset ${f.settings.datasetId}.`);let B=d[V.name];b(B===void 0||B.datasetId===V.id,`Project has multiple referenced datasets named "${V.name}".`),d[V.name]={datasetId:V.id};let F=a.get(W.id);b(F,`Pipeline ${W.id} has no source directory.`),I[F]={pipelineId:W.id};for(let[R,U]of Object.entries(jZ(h.graph,{dataset:V.name})))l[`${F}/${R}`]=U}await yt.mkdir(t.sourceRoot,{recursive:!0});let u=di.join(t.sourceRoot,"pipelines"),c=!1;try{c=(await yt.stat(u)).isDirectory()}catch(Z){if(!(Z instanceof Error)||!("code"in Z)||Z.code!=="ENOENT")throw Z}if(b(!c||t.force===!0,`Folder already exists: ${u}. Pass --force to replace it.`),c)await yt.rm(u,{recursive:!0,force:!0});for(let[Z,W]of Object.entries(l).toSorted(([h],[f])=>h.localeCompare(f))){let h=di.join(t.sourceRoot,Z);await yt.mkdir(di.dirname(h),{recursive:!0}),await yt.writeFile(h,W,"utf8")}let C={projectId:t.projectId,pipelines:I,datasets:d};await Lt(t.sourceRoot,C);let A=[...Object.keys(l),As].toSorted(),m=i.length===1?"pipeline":"pipelines",p=r.length===1?"dataset":"datasets";return{state:C,files:A,output:`Imported project ${t.projectId} with ${i.length} ${m} and ${r.length} ${p} into ${di.resolve(t.sourceRoot)}.`}}async function MZ(e,t){let i=await dr(e,t);return{projectId:i.projectId,changes:i.changes,missingSecrets:i.missingSecrets,output:dN(i.changes,i.missingSecrets)}}async function $Z(e,t){let i=t.projectId;b(i,M);let n=await e.projects.get({projectId:i}),o=await dr(e,{...t,listAllSecrets:!0}),s=o.changes.length,r=s===0?"Source has no pending changes.":`Source has ${s} pending change${s===1?"":"s"}.`;return{projectId:i,output:[`Project: ${i} (${n.name})`,`Team: ${n.teamId}`,`Pipelines: ${o.livePipelines.length}`,`Datasets: ${o.liveDatasets.length}`,`Secrets: ${o.liveSecrets.length}`,r].join(`
223
+ `)}}async function qZ(e,t){let i=await dr(e,t);b(i.removedPipelines.length===0,`Refusing to delete pipelines absent from source: ${i.removedPipelines.join(", ")}.`),b(i.removedDatasets.length===0,`Refusing to delete datasets absent from source: ${i.removedDatasets.join(", ")}. Dataset items are never deleted.`),b(i.missingSecrets.length===0,`Required secrets are missing: ${i.missingSecrets.join(", ")}. Run toloka secret set <name> before apply.`);let n=i.datasets.flatMap((I)=>I.conflictingFields.map((d)=>`${I.name}.${d.name}`));b(n.length===0,`Dataset field schemas conflict with source: ${n.join(", ")}. Existing fields are never rewritten.`);let o=0,s=new Map;for(let I of i.datasets){let d=I.dataset;if(d===void 0)d=await e.datasets.create({projectId:i.projectId,name:I.name}),o+=1;if(s.set(I.name,d.id),I.missingFields.length>0)await e.datasets.createFields({datasetId:d.id,fields:I.missingFields.map((u)=>({name:u.name,jsonSchema:u.jsonSchema}))}),o+=I.missingFields.length}let r=new Map;for(let I of i.pipelines){let d=s.get(I.source.definition.dataset);b(d,`Dataset ${I.source.definition.dataset} has no resolved ID.`);let u=Ln(I.source.definition,{datasetId:d});if(I.pipeline===void 0){let C=await e.pipelines.import({projectId:i.projectId,name:I.source.name,graph:u});await e.pipelines.attachDataset({pipelineId:C.id,datasetId:d}),r.set(I.source.sourceDirectory,C.id),o+=2;continue}if(r.set(I.source.sourceDirectory,I.pipeline.id),I.graphChanges.length===0)continue;let c=I.snapshot;b(c,`Pipeline ${I.pipeline.id} has no graph snapshot.`),await e.pipelines.replaceGraph({pipelineId:I.pipeline.id,graph:uI(u,c.graph),expectedVersion:c.version}),o+=1}let g={projectId:i.projectId,pipelines:Object.fromEntries(i.source.pipelines.map((I)=>{let d=r.get(I.sourceDirectory);return b(d,`Pipeline ${I.sourceDirectory} has no resolved ID.`),[I.sourceDirectory,{pipelineId:d}]})),datasets:Object.fromEntries(i.datasets.map((I)=>{let d=s.get(I.name);return b(d,`Dataset ${I.name} has no resolved ID.`),[I.name,{datasetId:d}]}))};if(Be(i.state)!==Be(g))await Lt(t.sourceRoot,g);let a=o===0?"unchanged":"changed",l=o===0?"No changes.":`Applied ${o} ${o===1?"write":"writes"} to project ${i.projectId}.`;return{action:a,state:g,changes:i.changes,writes:o,output:l}}var AN=(e)=>[e.nodeId,e.checkId].filter((t)=>t!==void 0).join("/"),ZN=(e)=>e.issues.map((t)=>{let i=AN(t);return` ${t.severity} ${t.code}${i.length===0?"":` ${i}`}: ${t.message}`});async function eb(e,t){let i=await dr(e,t),n=[];for(let r of i.pipelines){let g=i.datasets.find((I)=>I.name===r.source.definition.dataset)?.dataset;if(r.pipeline===void 0){n.push({sourceDirectory:r.source.sourceDirectory,skipped:"pipeline is not on the platform yet; run toloka apply first"});continue}if(g===void 0){n.push({sourceDirectory:r.source.sourceDirectory,pipelineId:r.pipeline.id,skipped:`dataset "${r.source.definition.dataset}" is not on the platform yet; run toloka apply first`});continue}let a=r.snapshot===void 0?Ln(r.source.definition,{datasetId:g.id}):uI(Ln(r.source.definition,{datasetId:g.id}),r.snapshot.graph),l=await e.pipelines.validateGraph({pipelineId:r.pipeline.id,graph:a});n.push({sourceDirectory:r.source.sourceDirectory,pipelineId:r.pipeline.id,report:l})}let o=n.every((r)=>r.report?.valid!==!1),s=n.flatMap((r)=>{if(r.skipped!==void 0)return[`- ${r.sourceDirectory}: skipped (${r.skipped})`];return b(r.report,`Pipeline ${r.sourceDirectory} is missing a validation report`),[r.report.valid?`- ${r.sourceDirectory}: valid`:`- ${r.sourceDirectory}: invalid`,...ZN(r.report)]});return{projectId:i.projectId,results:n,valid:o,output:s.length===0?"No pipelines to validate.":s.join(`
224
+ `)}}var nb="uploaded",bN=/^ds\.[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu,tb=3;class Cr extends Error{constructor(e,t){super(e,{cause:t});this.name="DatasetUploadError"}}var WN=(e)=>bN.test(e)?e.toLowerCase():void 0,hN={json:"application/json",jsonl:"application/x-ndjson",csv:"text/csv"},pI=(e)=>typeof e==="object"&&e!==null&&!Array.isArray(e),mI=(e)=>{if(!pI(e))return"unknown";if(Array.isArray(e.anyOf)){let n=[...new Set(e.anyOf.map(mI))];return n.length===0?"unknown":n.join(" | ")}let t=e.type,i=typeof t==="string"?[t]:Array.isArray(t)?t.filter((n)=>typeof n==="string"):[];if(i.length===0)return"unknown";return i.map((n)=>{if(n!=="array")return n;let o=mI(e.items);return o==="unknown"?"array":`array<${o}>`}).join(" | ")},fN=(e)=>{if(e.length===0)return"No inferred fields are available yet.";return["Inferred fields:",...e.toSorted((t,i)=>t.jsonPath.localeCompare(i.jsonPath)).map((t)=>`${" ".repeat(t.depth)}- ${t.jsonPath}: ${mI(t.jsonSchema)}`)].join(`
225
+ `)},ob=async(e)=>{let t=e.source??await Ui(e.sourceRoot),i=Ir(t).find((n)=>n.name===e.datasetName);return i===void 0?[]:i.fields.map((n)=>({name:n.name,jsonSchema:n.jsonSchema}))},ib=(e)=>`${e.name} (${e.id})`,sb=async(e,t)=>{let i=[];for await(let n of e.datasets.listAll({projectId:t}))i.push(n);return i.toSorted((n,o)=>{let s=n.name.localeCompare(o.name);return s===0?n.id.localeCompare(o.id):s})},AI=async(e,t,i)=>{let n=await Re(t.sourceRoot),o=t.projectId??n?.projectId;b(o,M);let s=t.datasetName,r=await sb(e,o),g=(c)=>r.filter((C)=>C.name===c).length<=1,a=WN(s),l=r.find((c)=>c.id===s||c.id.toLowerCase()===a);if(l!==void 0)return{datasetId:l.id,name:l.name,nameIsUnique:g(l.name)};let I=r.filter((c)=>c.name===s);if(b(I.length<=1,`Project ${o} has multiple datasets named "${s}": ${I.map(ib).join(", ")}.`),I.length===1){let[c]=I;return b(c,`Dataset "${s}" has no resolved ID.`),{datasetId:c.id,name:c.name,nameIsUnique:!0}}let d=n?.projectId===o?n.datasets[s]:void 0;if(d!==void 0){let c=r.find((C)=>C.id===d.datasetId);if(c!==void 0)return{datasetId:c.id,name:c.name,nameIsUnique:g(c.name)}}b(i&&a===void 0,r.length===0?`Dataset "${s}" does not exist in project ${o}. Run toloka apply first.`:`Dataset "${s}" does not exist in project ${o}. This project has: ${r.map(ib).join(", ")}.`),b((await ob(t)).length>0,`Dataset "${s}" does not exist in project ${o} and no pipeline in source declares it. Bind a pipeline to it in source so its columns are known, or upload to an existing dataset.`);let u=await e.datasets.create({projectId:o,name:s});return{datasetId:u.id,name:u.name,nameIsUnique:!0}},yN=(e)=>{let t=e.toLowerCase();if(t.endsWith(".json"))return"json";if(t.endsWith(".jsonl"))return"jsonl";if(t.endsWith(".csv"))return"csv";b(!1,`${e} must have a .json, .jsonl, or .csv extension`)},VN=async(e)=>{let t=ho.basename(e),i=yN(t),n=await ln.readFile(e,"utf8");if(i==="jsonl")for(let{line:o,lineNumber:s}of n.split(/\r?\n/u).map((r,g)=>({line:r,lineNumber:g+1})).filter(({line:r})=>r.length>0)){let r;try{r=JSON.parse(o)}catch{b(!1,`${t}:${s} is not valid JSON`)}b(pI(r),`${t}:${s} must contain a JSON object`)}return{payload:n,format:i,contentType:hN[i]}},cr=async(e,t,i)=>{let n=i instanceof Error?i.message:String(i);try{await e.datasets.cancelUpload({uploadId:t})}catch(o){let s=o instanceof Error?o.message:String(o);throw AggregateError([i,o],`Dataset upload ${t} failed and could not be canceled. Upload error: ${n}. Cancellation error: ${s}.`)}throw new Cr(`Dataset upload ${t} failed and was canceled: ${n}`,i)},BN=async({client:e,started:t,payload:i,contentType:n,fetch:o,retryIntervalMs:s})=>{let r;try{r=await o(t.uploadUrl,{method:"PUT",headers:{"Content-Type":n,"x-ms-blob-type":"BlockBlob"},body:i})}catch(a){return cr(e,t.job.id,a)}if(!r.ok)return cr(e,t.job.id,new Cr(`Dataset upload failed with HTTP ${r.status}.`,void 0));let g=0;while(!0)try{await e.datasets.finalizeUpload({uploadId:t.job.id});return}catch(a){if(!(a instanceof te&&a.status===503))return cr(e,t.job.id,a);if(g+=1,g===tb)return cr(e,t.job.id,new Cr(`Storage remained unavailable after ${tb} finalization attempts.`,a));let{promise:l,resolve:I}=Promise.withResolvers();setTimeout(I,s),await l}};async function rb(e,t){let{payload:i,format:n,contentType:o}=await VN(t.filePath),s=await AI(e,t,!0),r=s.datasetId,g=new Map;for await(let p of e.datasets.listAllFields({datasetId:r})){if(p.internal||p.name===nb)continue;g.set(p.name,{name:p.name,jsonSchema:p.jsonSchema})}for(let p of await ob({...t,datasetName:s.name}))if(!g.has(p.name))g.set(p.name,p);let a=[...g.values()],l=await e.datasets.startUpload({datasetId:r,filename:ho.basename(t.filePath),format:n,declaredSizeBytes:new TextEncoder().encode(i).byteLength,fields:a});await BN({client:e,started:l,payload:i,contentType:o,fetch:t.fetch??globalThis.fetch,retryIntervalMs:t.waitFor?.intervalMs??1000});let I=await e.waitFor({type:"datasetUpload",uploadId:l.job.id},t.waitFor),d=s.nameIsUnique?s.name:s.datasetId,u=I.status==="failed"&&I.error?.startsWith("Schema incompatible with existing upload")===!0?`
226
+ Run toloka dataset fields ${JSON.stringify(d)} to inspect the inferred schema stored from the first successful upload.`:"";b(I.status==="succeeded",`${I.error??`Dataset upload ${I.id} failed.`}${u}`);let c=`Uploaded ${I.result.itemsIngested} rows to dataset ${s.name}.`,C=[],A,m;try{C=(await e.datasets.getInferredFields({datasetId:r})).fields,A=fN(C)}catch(p){m=`Upload succeeded, but inferred fields could not be fetched: ${p instanceof Error?p.message:String(p)}`}return{datasetId:r,rowsUploaded:I.result.itemsIngested,inferredFields:C,output:A===void 0?c:`${c}
227
+ ${A}`,...m===void 0?{}:{warning:m}}}async function gb(e,t){let i=await AI(e,t,!1),n=await e.datasets.getInferredFields({datasetId:i.datasetId}),o=n.fields.filter((r)=>r.depth===1),s=zZ(o.map(({name:r,jsonSchema:g})=>({name:r,jsonSchema:g})));return{datasetId:i.datasetId,inferredFields:n.fields,declarations:s,output:o.length===0?`Dataset ${i.name} has no inferred fields yet.`:s}}async function ab(e,t){let i=await sb(e,t.projectId);if(i.length===0)return{output:"This project has no datasets."};return{output:i.map((n)=>`${n.name} ${n.id}`).join(`
228
+ `)}}var RN=async(e)=>{let t=await e.fetch(e.downloadUrl);b(t.ok,`Dataset export download failed with HTTP ${t.status}.`);let i=await t.text(),n;try{n=JSON.parse(i)}catch(s){throw Error(`Dataset export ${e.exportId} is not valid JSON.`,{cause:s})}b(Array.isArray(n),`Dataset export ${e.exportId} is not a JSON array.`);let o=[];for(let[s,r]of n.entries())b(pI(r),`Dataset export ${e.exportId} row ${s} is not a JSON object.`),o.push(r);return o};async function lb(e,t){let i=await AI(e,t,!1),n=[];for await(let a of e.datasets.listAllFields({datasetId:i.datasetId})){if(a.internal||a.name===nb)continue;n.push(a.name)}b(n.length>0,`Dataset ${i.name} has no fields to export.`);let o=await e.datasets.startExport({datasetId:i.datasetId,fields:n}),s;try{s=await e.waitFor({type:"datasetExport",exportId:o.id},t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs})}catch(a){throw b(!(a instanceof te&&a.code==="wait_timeout"),`Stopped waiting for dataset export ${o.id}; raise --timeout to wait longer.`),a}b(s.result.downloadUrl,`Dataset export ${s.id} succeeded without a download URL.`);let r=await RN({downloadUrl:s.result.downloadUrl,exportId:s.id,fetch:t.fetch??globalThis.fetch}),g=t.limit===void 0?r:r.slice(0,t.limit);return await ln.mkdir(ho.dirname(t.outPath),{recursive:!0}),await ln.writeFile(t.outPath,g.length===0?"":`${g.map((a)=>JSON.stringify(a)).join(`
229
229
  `)}
230
- `),{output:`Wrote ${g.length} rows to ${t.outPath}.`}}async function lb(e,t){return await e.secrets.set({projectId:t.projectId,name:t.name,value:t.value}),{name:t.name,output:`Set secret ${t.name}.`}}var BN=["qwen3-4b","qwen3-8b","qwen3-32b","qwen3-235b"],bo=(e)=>{let t=e.reduce((i,n)=>n.map((o,s)=>Math.max(i[s]??0,o.length)),[]);return e.map((i)=>i.map((n,o)=>n.padEnd(t[o]??n.length)).join(" ").trimEnd()).join(`
231
- `)},di=(e,t,i,n)=>{e.stdout(t?JSON.stringify(i,null,2):n)},RN=(e)=>bo([["ID",e.id],["Name",e.displayName],["Provider",e.provider],["Upstream model",e.upstreamModel],["Upstream revision",e.upstreamRevision]]),Ib=(e)=>bo([["ID",e.id],["Project",e.projectId],["Name",e.name],["Base model",e.baseModelId],["Description",e.description??"-"],["Archived at",e.archivedAt??"-"],["Created at",e.createdAt],["Updated at",e.updatedAt]]),pI=(e)=>{let t=BN.find((i)=>i===e);return b(t,`Unknown base model ${e}.`),t},AI=async(e,t,i)=>{if(i.startsWith("mdl."))return e.models.get({projectId:t,modelId:i});let n=[];for await(let o of e.models.listAll({projectId:t,limit:100}))if(o.name===i)n.push(o);return b(n.length===1,`Model ${i} was not found or is ambiguous.`),n[0]},db=async(e,t,i)=>{let n=await e.baseModels.list();di(i,t.json,n,n.length===0?"No base models found.":bo([["ID","NAME","PROVIDER","UPSTREAM MODEL"],...n.map((o)=>[o.id,o.displayName,o.provider,o.upstreamModel])]))},cb=async(e,t,i)=>{let n=await e.baseModels.get({id:t.id});di(i,t.json,n,RN(n))},Cb=async(e,t,i)=>{let n=await e.models.listPage({projectId:t.projectId,limit:100,offset:0});di(i,t.json,n.models,n.models.length===0?"No models found.":bo([["ID","NAME","BASE MODEL"],...n.models.map((o)=>[o.id,o.name,o.baseModelId])]))},ub=async(e,t,i)=>{let n=await AI(e,t.projectId,t.nameOrId);di(i,t.json,n,Ib(n))},mb=async(e,t,i)=>{let n=await AI(e,t.projectId,t.nameOrId),o=[];for await(let s of e.models.listAllVersions({projectId:t.projectId,modelId:n.id,limit:100}))o.push(s);di(i,t.json,o,o.length===0?"No Model Versions found.":bo([["VERSION","ID","CREATED AT"],...o.map((s)=>[s.version,s.id,s.createdAt])]))},pb=async(e,t,i)=>{let{json:n,...o}=t,s=await e.models.create(o);di(i,n,s,Ib(s))},Ab=async(e,t,i)=>{let n=await AI(e,t.projectId,t.nameOrId),o=await e.models.archive({projectId:t.projectId,modelId:n.id});di(i,t.json,o,`Archived Model ${o.id}.`)};var GN=["emacs","vim"],wN=new Set(GN);function FN(e){return wN.has(e)}function Zb(){let e=process.env.INQUIRER_KEYBINDINGS;if(!e)return[];return Array.from(new Set(e.toLowerCase().split(/[\s,]+/).filter(FN)))}var Wo=(e,t=[])=>e.name==="up"||t.includes("vim")&&e.name==="k"||t.includes("emacs")&&e.ctrl&&e.name==="p",cr=(e,t=[])=>e.name==="down"||t.includes("vim")&&e.name==="j"||t.includes("emacs")&&e.ctrl&&e.name==="n";var ZI=(e)=>e.name==="backspace";var bI=(e)=>"1234567890".includes(e.name),WI=(e)=>e.name==="enter"||e.name==="return";class hI extends Error{name="AbortPromptError";message="Prompt was aborted";constructor(e){super();this.cause=e?.cause}}class fI extends Error{name="CancelPromptError";message="Prompt was canceled"}class Cr extends Error{name="ExitPromptError"}class yI extends Error{name="HookError"}class ho extends Error{name="ValidationError"}var fb=require("async_hooks");var ur=require("async_hooks");var bb=new ur.AsyncLocalStorage;function HN(e){return{rl:e,hooks:[],hooksCleanup:[],hooksEffect:[],index:0,handleChange(){}}}function Wb(e,t){let i=HN(e);return bb.run(i,()=>{function n(o){i.handleChange=()=>{i.index=0,o()},i.handleChange()}return t(n)})}function ci(){let e=bb.getStore();if(!e)throw new yI("[Inquirer] Hook functions can only be called from within a prompt");return e}function VI(){return ci().rl}function BI(e){let t=(...i)=>{let n=ci(),o=!1,s=n.handleChange;n.handleChange=()=>{o=!0};let r=e(...i);if(o)s();return n.handleChange=s,r};return ur.AsyncResource.bind(t)}function ln(e){let t=ci(),{index:i}=t,n={get(){return t.hooks[i]},set(s){t.hooks[i]=s},initialized:i in t.hooks},o=e(n);return t.index++,o}function hb(){ci().handleChange()}var Ci={queue(e){let t=ci(),{index:i}=t;t.hooksEffect.push(()=>{t.hooksCleanup[i]?.();let n=e(VI());if(n!=null&&typeof n!=="function")throw new ho("useEffect return value must be a cleanup function or nothing.");t.hooksCleanup[i]=n})},run(){let e=ci();BI(()=>{e.hooksEffect.forEach((t)=>{t()}),e.hooksEffect.length=0})()},clearAll(){let e=ci();e.hooksCleanup.forEach((t)=>{t?.()}),e.hooksEffect.length=0,e.hooksCleanup.length=0}};function vN(e){return typeof e==="function"}function lt(e){return ln((t)=>{let i=fb.AsyncResource.bind(function(s){if(t.get()!==s)t.set(s),hb()});if(t.initialized)return[t.get(),i];let n=vN(e)?e():e;return t.set(n),[n,i]})}function ui(e,t){ln((i)=>{let n=i.get();if(!Array.isArray(n)||t.some((s,r)=>!Object.is(s,n[r])))Ci.queue(e);i.set(t)})}var Ee=require("util");var Je=be(require("process"));function kN(){if(!Je.default.platform.startsWith("win"))return Je.default.env.TERM!=="linux";return Boolean(Je.default.env.CI)||Boolean(Je.default.env.WT_SESSION)||Boolean(Je.default.env.TERMINUS_SUBLIME)||Je.default.env.ConEmuTask==="{cmd::Cmder}"||Je.default.env.TERM_PROGRAM==="Terminus-Sublime"||Je.default.env.TERM_PROGRAM==="vscode"||Je.default.env.TERM==="xterm-256color"||Je.default.env.TERM==="alacritty"||Je.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var yb={circleQuestionMark:"(?)",questionMarkPrefix:"(?)",square:"\u2588",squareDarkShade:"\u2593",squareMediumShade:"\u2592",squareLightShade:"\u2591",squareTop:"\u2580",squareBottom:"\u2584",squareLeft:"\u258C",squareRight:"\u2590",squareCenter:"\u25A0",bullet:"\u25CF",dot:"\u2024",ellipsis:"\u2026",pointerSmall:"\u203A",triangleUp:"\u25B2",triangleUpSmall:"\u25B4",triangleDown:"\u25BC",triangleDownSmall:"\u25BE",triangleLeftSmall:"\u25C2",triangleRightSmall:"\u25B8",home:"\u2302",heart:"\u2665",musicNote:"\u266A",musicNoteBeamed:"\u266B",arrowUp:"\u2191",arrowDown:"\u2193",arrowLeft:"\u2190",arrowRight:"\u2192",arrowLeftRight:"\u2194",arrowUpDown:"\u2195",almostEqual:"\u2248",notEqual:"\u2260",lessOrEqual:"\u2264",greaterOrEqual:"\u2265",identical:"\u2261",infinity:"\u221E",subscriptZero:"\u2080",subscriptOne:"\u2081",subscriptTwo:"\u2082",subscriptThree:"\u2083",subscriptFour:"\u2084",subscriptFive:"\u2085",subscriptSix:"\u2086",subscriptSeven:"\u2087",subscriptEight:"\u2088",subscriptNine:"\u2089",oneHalf:"\xBD",oneThird:"\u2153",oneQuarter:"\xBC",oneFifth:"\u2155",oneSixth:"\u2159",oneEighth:"\u215B",twoThirds:"\u2154",twoFifths:"\u2156",threeQuarters:"\xBE",threeFifths:"\u2157",threeEighths:"\u215C",fourFifths:"\u2158",fiveSixths:"\u215A",fiveEighths:"\u215D",sevenEighths:"\u215E",line:"\u2500",lineBold:"\u2501",lineDouble:"\u2550",lineDashed0:"\u2504",lineDashed1:"\u2505",lineDashed2:"\u2508",lineDashed3:"\u2509",lineDashed4:"\u254C",lineDashed5:"\u254D",lineDashed6:"\u2574",lineDashed7:"\u2576",lineDashed8:"\u2578",lineDashed9:"\u257A",lineDashed10:"\u257C",lineDashed11:"\u257E",lineDashed12:"\u2212",lineDashed13:"\u2013",lineDashed14:"\u2010",lineDashed15:"\u2043",lineVertical:"\u2502",lineVerticalBold:"\u2503",lineVerticalDouble:"\u2551",lineVerticalDashed0:"\u2506",lineVerticalDashed1:"\u2507",lineVerticalDashed2:"\u250A",lineVerticalDashed3:"\u250B",lineVerticalDashed4:"\u254E",lineVerticalDashed5:"\u254F",lineVerticalDashed6:"\u2575",lineVerticalDashed7:"\u2577",lineVerticalDashed8:"\u2579",lineVerticalDashed9:"\u257B",lineVerticalDashed10:"\u257D",lineVerticalDashed11:"\u257F",lineDownLeft:"\u2510",lineDownLeftArc:"\u256E",lineDownBoldLeftBold:"\u2513",lineDownBoldLeft:"\u2512",lineDownLeftBold:"\u2511",lineDownDoubleLeftDouble:"\u2557",lineDownDoubleLeft:"\u2556",lineDownLeftDouble:"\u2555",lineDownRight:"\u250C",lineDownRightArc:"\u256D",lineDownBoldRightBold:"\u250F",lineDownBoldRight:"\u250E",lineDownRightBold:"\u250D",lineDownDoubleRightDouble:"\u2554",lineDownDoubleRight:"\u2553",lineDownRightDouble:"\u2552",lineUpLeft:"\u2518",lineUpLeftArc:"\u256F",lineUpBoldLeftBold:"\u251B",lineUpBoldLeft:"\u251A",lineUpLeftBold:"\u2519",lineUpDoubleLeftDouble:"\u255D",lineUpDoubleLeft:"\u255C",lineUpLeftDouble:"\u255B",lineUpRight:"\u2514",lineUpRightArc:"\u2570",lineUpBoldRightBold:"\u2517",lineUpBoldRight:"\u2516",lineUpRightBold:"\u2515",lineUpDoubleRightDouble:"\u255A",lineUpDoubleRight:"\u2559",lineUpRightDouble:"\u2558",lineUpDownLeft:"\u2524",lineUpBoldDownBoldLeftBold:"\u252B",lineUpBoldDownBoldLeft:"\u2528",lineUpDownLeftBold:"\u2525",lineUpBoldDownLeftBold:"\u2529",lineUpDownBoldLeftBold:"\u252A",lineUpDownBoldLeft:"\u2527",lineUpBoldDownLeft:"\u2526",lineUpDoubleDownDoubleLeftDouble:"\u2563",lineUpDoubleDownDoubleLeft:"\u2562",lineUpDownLeftDouble:"\u2561",lineUpDownRight:"\u251C",lineUpBoldDownBoldRightBold:"\u2523",lineUpBoldDownBoldRight:"\u2520",lineUpDownRightBold:"\u251D",lineUpBoldDownRightBold:"\u2521",lineUpDownBoldRightBold:"\u2522",lineUpDownBoldRight:"\u251F",lineUpBoldDownRight:"\u251E",lineUpDoubleDownDoubleRightDouble:"\u2560",lineUpDoubleDownDoubleRight:"\u255F",lineUpDownRightDouble:"\u255E",lineDownLeftRight:"\u252C",lineDownBoldLeftBoldRightBold:"\u2533",lineDownLeftBoldRightBold:"\u252F",lineDownBoldLeftRight:"\u2530",lineDownBoldLeftBoldRight:"\u2531",lineDownBoldLeftRightBold:"\u2532",lineDownLeftRightBold:"\u252E",lineDownLeftBoldRight:"\u252D",lineDownDoubleLeftDoubleRightDouble:"\u2566",lineDownDoubleLeftRight:"\u2565",lineDownLeftDoubleRightDouble:"\u2564",lineUpLeftRight:"\u2534",lineUpBoldLeftBoldRightBold:"\u253B",lineUpLeftBoldRightBold:"\u2537",lineUpBoldLeftRight:"\u2538",lineUpBoldLeftBoldRight:"\u2539",lineUpBoldLeftRightBold:"\u253A",lineUpLeftRightBold:"\u2536",lineUpLeftBoldRight:"\u2535",lineUpDoubleLeftDoubleRightDouble:"\u2569",lineUpDoubleLeftRight:"\u2568",lineUpLeftDoubleRightDouble:"\u2567",lineUpDownLeftRight:"\u253C",lineUpBoldDownBoldLeftBoldRightBold:"\u254B",lineUpDownBoldLeftBoldRightBold:"\u2548",lineUpBoldDownLeftBoldRightBold:"\u2547",lineUpBoldDownBoldLeftRightBold:"\u254A",lineUpBoldDownBoldLeftBoldRight:"\u2549",lineUpBoldDownLeftRight:"\u2540",lineUpDownBoldLeftRight:"\u2541",lineUpDownLeftBoldRight:"\u253D",lineUpDownLeftRightBold:"\u253E",lineUpBoldDownBoldLeftRight:"\u2542",lineUpDownLeftBoldRightBold:"\u253F",lineUpBoldDownLeftBoldRight:"\u2543",lineUpBoldDownLeftRightBold:"\u2544",lineUpDownBoldLeftBoldRight:"\u2545",lineUpDownBoldLeftRightBold:"\u2546",lineUpDoubleDownDoubleLeftDoubleRightDouble:"\u256C",lineUpDoubleDownDoubleLeftRight:"\u256B",lineUpDownLeftDoubleRightDouble:"\u256A",lineCross:"\u2573",lineBackslash:"\u2572",lineSlash:"\u2571"},Vb={tick:"\u2714",info:"\u2139",warning:"\u26A0",cross:"\u2718",squareSmall:"\u25FB",squareSmallFilled:"\u25FC",circle:"\u25EF",circleFilled:"\u25C9",circleDotted:"\u25CC",circleDouble:"\u25CE",circleCircle:"\u24DE",circleCross:"\u24E7",circlePipe:"\u24BE",radioOn:"\u25C9",radioOff:"\u25EF",checkboxOn:"\u2612",checkboxOff:"\u2610",checkboxCircleOn:"\u24E7",checkboxCircleOff:"\u24BE",pointer:"\u276F",triangleUpOutline:"\u25B3",triangleLeft:"\u25C0",triangleRight:"\u25B6",lozenge:"\u25C6",lozengeOutline:"\u25C7",hamburger:"\u2630",smiley:"\u32E1",mustache:"\u0DF4",star:"\u2605",play:"\u25B6",nodejs:"\u2B22",oneSeventh:"\u2150",oneNinth:"\u2151",oneTenth:"\u2152"},PN={tick:"\u221A",info:"i",warning:"\u203C",cross:"\xD7",squareSmall:"\u25A1",squareSmallFilled:"\u25A0",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(\u25CB)",circleCross:"(\xD7)",circlePipe:"(\u2502)",radioOn:"(*)",radioOff:"( )",checkboxOn:"[\xD7]",checkboxOff:"[ ]",checkboxCircleOn:"(\xD7)",checkboxCircleOff:"( )",pointer:">",triangleUpOutline:"\u2206",triangleLeft:"\u25C4",triangleRight:"\u25BA",lozenge:"\u2666",lozengeOutline:"\u25CA",hamburger:"\u2261",smiley:"\u263A",mustache:"\u250C\u2500\u2510",star:"\u2736",play:"\u25BA",nodejs:"\u2666",oneSeventh:"1/7",oneNinth:"1/9",oneTenth:"1/10"},YN={...yb,...Vb},NN={...yb,...PN},XN=kN(),SN=XN?YN:NN,In=SN,XT=Object.entries(Vb);var xN={prefix:{idle:Ee.styleText("blue","?"),done:Ee.styleText("green",In.tick)},spinner:{interval:80,frames:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"].map((e)=>Ee.styleText("yellow",e))},keybindings:[],style:{answer:(e)=>Ee.styleText("cyan",e),message:(e)=>Ee.styleText("bold",e),error:(e)=>Ee.styleText("red",`> ${e}`),defaultAnswer:(e)=>Ee.styleText("dim",`(${e})`),help:(e)=>Ee.styleText("dim",e),highlight:(e)=>Ee.styleText("cyan",e),key:(e)=>Ee.styleText("cyan",Ee.styleText("bold",`<${e}>`))}};function Bb(){return{...xN,keybindings:Zb()}}function Rb(e){if(typeof e!=="object"||e===null)return!1;let t=e;while(Object.getPrototypeOf(t)!==null)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function Gb(...e){let t={};for(let i of e)for(let[n,o]of Object.entries(i)){let s=t[n];t[n]=Rb(s)&&Rb(o)?Gb(s,o):o}return t}function fo(...e){let t=[Bb(),...e.filter((i)=>i!=null)];return Gb(...t)}function RI({status:e="idle",theme:t}){let[i,n]=lt(!1),[o,s]=lt(0),{prefix:r,spinner:g}=fo(t);if(ui(()=>{if(e==="loading"){let l,I=-1,d=setTimeout(()=>{n(!0),l=setInterval(()=>{I=I+1,s(I%g.frames.length)},g.interval)},300);return()=>{clearTimeout(d),clearInterval(l)}}else n(!1)},[e]),i)return g.frames[o];return typeof r==="string"?r:r[e==="loading"?"idle":e]??r.idle}function yo(e,t){return ln((i)=>{let n=i.get();if(!n||n.dependencies.length!==t.length||n.dependencies.some((o,s)=>o!==t[s])){let o=e();return i.set({value:o,dependencies:t}),o}return n.value})}function mi(e){return lt({current:e})[0]}function GI(e){let t=mi(e);t.current=e,ui((i)=>{let n=!1,o=BI((s,r)=>{if(n)return;t.current(r,i)});return i.input.on("keypress",o),()=>{n=!0,i.input.removeListener("keypress",o)}},[])}var jb=be(Fb(),1);var Hb=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(t)=>{let i=0;e.lastIndex=0;while(e.test(t))i+=1;return t.length-i}})(),vb=(e)=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,kb=(e)=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141;var UN=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,ON=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Pb=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,TN=/\t{1,1000}/y,Yb=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,zN=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,jN=/\p{M}+/gu,DN={limit:1/0,ellipsis:""},Nb=(e,t={},i={})=>{let n=t.limit??1/0,o=t.ellipsis??"",s=t?.ellipsisWidth??(o?Nb(o,DN,i).width:0),r=0,g=i.controlWidth??0,a=i.tabWidth??8,l=i.emojiWidth??2,I=2,d=i.regularWidth??1,u=i.wideWidth??2,c=[[zN,d],[UN,0],[ON,g],[TN,a],[Yb,l],[Pb,u]],C=0,A=0,m=e.length,p=0,Z=!1,W=m,h=Math.max(0,n-s),f=0,V=0,B=0,F=0;e:while(!0){if(V>f||A>=m&&A>C){let R=e.slice(f,V)||e.slice(C,A);p=0;for(let U of R.replaceAll(jN,"")){let K=U.codePointAt(0)||0;if(vb(K))F=2;else if(kb(K))F=u;else F=d;if(B+F>h)W=Math.min(W,Math.max(f,C)+p);if(B+F>n){Z=!0;break e}p+=U.length,B+=F}f=V=0}if(A>=m)break e;for(let R=0,U=c.length;R<U;R++){let[K,ee]=c[R];if(K.lastIndex=A,K.test(e)){if(p=K===Pb?Hb(e.slice(A,K.lastIndex)):K===Yb?1:K.lastIndex-A,F=p*ee,B+F>h)W=Math.min(W,A+Math.floor((h-B)/ee));if(B+F>n){Z=!0;break e}B+=F,f=C,V=A,A=C=K.lastIndex;continue e}}A+=1}return{width:Z?h:B,index:Z?W:m,truncated:Z,ellipsed:Z&&n>=s}},Xb=Nb;var QN={limit:1/0,ellipsis:"",ellipsisWidth:0},_N=(e,t={})=>Xb(e,QN,t).width,Vt=_N;var mr="\x1B",Ub="\x9B",KN=39,FI="\x07",Ob="[",LN="]",Tb="m",HI=`${LN}8;;`,Sb=new RegExp(`(?:\\${Ob}(?<code>\\d+)m|\\${HI}(?<uri>.*)${FI})`,"y"),xb=(e)=>{if(e>=30&&e<=37)return 39;if(e>=90&&e<=97)return 39;if(e>=40&&e<=47)return 49;if(e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0;return},Jb=(e)=>`${mr}${Ob}${e}${Tb}`,Eb=(e)=>`${mr}${HI}${e}${FI}`,wI=(e,t,i)=>{let n=t[Symbol.iterator](),o=!1,s=!1,r=e.at(-1),g=r===void 0?0:Vt(r),a=n.next(),l=n.next(),I=0;while(!a.done){let d=a.value,u=Vt(d);if(g+u<=i)e[e.length-1]+=d;else e.push(d),g=0;if(d===mr||d===Ub)o=!0,s=t.startsWith(HI,I+1);if(o){if(s){if(d===FI)o=!1,s=!1}else if(d===Tb)o=!1}else if(g+=u,g===i&&!l.done)e.push(""),g=0;a=l,l=n.next(),I+=d.length}if(r=e.at(-1),!g&&r!==void 0&&r.length&&e.length>1)e[e.length-2]+=e.pop()},MN=(e)=>{let t=e.split(" "),i=t.length;while(i){if(Vt(t[i-1]))break;i--}if(i===t.length)return e;return t.slice(0,i).join(" ")+t.slice(i).join("")},$N=(e,t,i={})=>{if(i.trim!==!1&&e.trim()==="")return"";let n="",o,s,r=e.split(" "),g=[""],a=0;for(let d=0;d<r.length;d++){let u=r[d];if(i.trim!==!1){let C=g.at(-1)??"",A=C.trimStart();if(C.length!==A.length)g[g.length-1]=A,a=Vt(A)}if(d!==0){if(a>=t&&(i.wordWrap===!1||i.trim===!1))g.push(""),a=0;if(a||i.trim===!1)g[g.length-1]+=" ",a++}let c=Vt(u);if(i.hard&&c>t){let C=t-a,A=1+Math.floor((c-C-1)/t);if(Math.floor((c-1)/t)<A)g.push("");wI(g,u,t),a=Vt(g.at(-1)??"");continue}if(a+c>t&&a&&c){if(i.wordWrap===!1&&a<t){wI(g,u,t),a=Vt(g.at(-1)??"");continue}g.push(""),a=0}if(a+c>t&&i.wordWrap===!1){wI(g,u,t),a=Vt(g.at(-1)??"");continue}g[g.length-1]+=u,a+=c}if(i.trim!==!1)g=g.map((d)=>MN(d));let l=g.join(`
232
- `),I=!1;for(let d=0;d<l.length;d++){let u=l[d];if(n+=u,!I){if(I=u>="\uD800"&&u<="\uDBFF",I)continue}else I=!1;if(u===mr||u===Ub){Sb.lastIndex=d+1;let C=Sb.exec(l)?.groups;if(C?.code!==void 0){let A=Number.parseFloat(C.code);o=A===KN?void 0:A}else if(C?.uri!==void 0)s=C.uri.length===0?void 0:C.uri}if(l[d+1]===`
233
- `){if(s)n+=Eb("");let c=o?xb(o):void 0;if(o&&c)n+=Jb(c)}else if(u===`
234
- `){if(o&&xb(o))n+=Jb(o);if(s)n+=Eb(s)}}return n},qN=/\r?\n/;function zb(e,t,i){return String(e).normalize().split(qN).map((n)=>$N(n,t,i)).join(`
235
- `)}function Vo(e,t){return e.split(`
236
- `).flatMap((i)=>zb(i,t,{trim:!1,wordWrap:!1}).split(`
230
+ `),{output:`Wrote ${g.length} rows to ${t.outPath}.`}}async function Ib(e,t){return await e.secrets.set({projectId:t.projectId,name:t.name,value:t.value}),{name:t.name,output:`Set secret ${t.name}.`}}var GN=["qwen3-4b","qwen3-8b","qwen3-32b","qwen3-235b"],fo=(e)=>{let t=e.reduce((i,n)=>n.map((o,s)=>Math.max(i[s]??0,o.length)),[]);return e.map((i)=>i.map((n,o)=>n.padEnd(t[o]??n.length)).join(" ").trimEnd()).join(`
231
+ `)},ci=(e,t,i,n)=>{e.stdout(t?JSON.stringify(i,null,2):n)},wN=(e)=>fo([["ID",e.id],["Name",e.displayName],["Provider",e.provider],["Upstream model",e.upstreamModel],["Upstream revision",e.upstreamRevision]]),db=(e)=>fo([["ID",e.id],["Project",e.projectId],["Name",e.name],["Base model",e.baseModelId],["Description",e.description??"-"],["Archived at",e.archivedAt??"-"],["Created at",e.createdAt],["Updated at",e.updatedAt]]),ZI=(e)=>{let t=GN.find((i)=>i===e);return b(t,`Unknown base model ${e}.`),t},bI=async(e,t,i)=>{if(i.startsWith("mdl."))return e.models.get({projectId:t,modelId:i});let n=[];for await(let o of e.models.listAll({projectId:t,limit:100}))if(o.name===i)n.push(o);return b(n.length===1,`Model ${i} was not found or is ambiguous.`),n[0]},cb=async(e,t,i)=>{let n=await e.baseModels.list();ci(i,t.json,n,n.length===0?"No base models found.":fo([["ID","NAME","PROVIDER","UPSTREAM MODEL"],...n.map((o)=>[o.id,o.displayName,o.provider,o.upstreamModel])]))},Cb=async(e,t,i)=>{let n=await e.baseModels.get({id:t.id});ci(i,t.json,n,wN(n))},ub=async(e,t,i)=>{let n=await e.models.listPage({projectId:t.projectId,limit:100,offset:0});ci(i,t.json,n.models,n.models.length===0?"No models found.":fo([["ID","NAME","BASE MODEL"],...n.models.map((o)=>[o.id,o.name,o.baseModelId])]))},mb=async(e,t,i)=>{let n=await bI(e,t.projectId,t.nameOrId);ci(i,t.json,n,db(n))},pb=async(e,t,i)=>{let n=await bI(e,t.projectId,t.nameOrId),o=[];for await(let s of e.models.listAllVersions({projectId:t.projectId,modelId:n.id,limit:100}))o.push(s);ci(i,t.json,o,o.length===0?"No Model Versions found.":fo([["VERSION","ID","CREATED AT"],...o.map((s)=>[s.version,s.id,s.createdAt])]))},Ab=async(e,t,i)=>{let{json:n,...o}=t,s=await e.models.create(o);ci(i,n,s,db(s))},Zb=async(e,t,i)=>{let n=await bI(e,t.projectId,t.nameOrId),o=await e.models.archive({projectId:t.projectId,modelId:n.id});ci(i,t.json,o,`Archived Model ${o.id}.`)};var FN=["emacs","vim"],HN=new Set(FN);function vN(e){return HN.has(e)}function bb(){let e=process.env.INQUIRER_KEYBINDINGS;if(!e)return[];return Array.from(new Set(e.toLowerCase().split(/[\s,]+/).filter(vN)))}var yo=(e,t=[])=>e.name==="up"||t.includes("vim")&&e.name==="k"||t.includes("emacs")&&e.ctrl&&e.name==="p",ur=(e,t=[])=>e.name==="down"||t.includes("vim")&&e.name==="j"||t.includes("emacs")&&e.ctrl&&e.name==="n";var WI=(e)=>e.name==="backspace";var hI=(e)=>"1234567890".includes(e.name),fI=(e)=>e.name==="enter"||e.name==="return";class yI extends Error{name="AbortPromptError";message="Prompt was aborted";constructor(e){super();this.cause=e?.cause}}class VI extends Error{name="CancelPromptError";message="Prompt was canceled"}class mr extends Error{name="ExitPromptError"}class BI extends Error{name="HookError"}class Vo extends Error{name="ValidationError"}var yb=require("async_hooks");var pr=require("async_hooks");var Wb=new pr.AsyncLocalStorage;function kN(e){return{rl:e,hooks:[],hooksCleanup:[],hooksEffect:[],index:0,handleChange(){}}}function hb(e,t){let i=kN(e);return Wb.run(i,()=>{function n(o){i.handleChange=()=>{i.index=0,o()},i.handleChange()}return t(n)})}function Ci(){let e=Wb.getStore();if(!e)throw new BI("[Inquirer] Hook functions can only be called from within a prompt");return e}function RI(){return Ci().rl}function GI(e){let t=(...i)=>{let n=Ci(),o=!1,s=n.handleChange;n.handleChange=()=>{o=!0};let r=e(...i);if(o)s();return n.handleChange=s,r};return pr.AsyncResource.bind(t)}function In(e){let t=Ci(),{index:i}=t,n={get(){return t.hooks[i]},set(s){t.hooks[i]=s},initialized:i in t.hooks},o=e(n);return t.index++,o}function fb(){Ci().handleChange()}var ui={queue(e){let t=Ci(),{index:i}=t;t.hooksEffect.push(()=>{t.hooksCleanup[i]?.();let n=e(RI());if(n!=null&&typeof n!=="function")throw new Vo("useEffect return value must be a cleanup function or nothing.");t.hooksCleanup[i]=n})},run(){let e=Ci();GI(()=>{e.hooksEffect.forEach((t)=>{t()}),e.hooksEffect.length=0})()},clearAll(){let e=Ci();e.hooksCleanup.forEach((t)=>{t?.()}),e.hooksEffect.length=0,e.hooksCleanup.length=0}};function PN(e){return typeof e==="function"}function lt(e){return In((t)=>{let i=yb.AsyncResource.bind(function(s){if(t.get()!==s)t.set(s),fb()});if(t.initialized)return[t.get(),i];let n=PN(e)?e():e;return t.set(n),[n,i]})}function mi(e,t){In((i)=>{let n=i.get();if(!Array.isArray(n)||t.some((s,r)=>!Object.is(s,n[r])))ui.queue(e);i.set(t)})}var Ue=require("util");var Ee=be(require("process"));function YN(){if(!Ee.default.platform.startsWith("win"))return Ee.default.env.TERM!=="linux";return Boolean(Ee.default.env.CI)||Boolean(Ee.default.env.WT_SESSION)||Boolean(Ee.default.env.TERMINUS_SUBLIME)||Ee.default.env.ConEmuTask==="{cmd::Cmder}"||Ee.default.env.TERM_PROGRAM==="Terminus-Sublime"||Ee.default.env.TERM_PROGRAM==="vscode"||Ee.default.env.TERM==="xterm-256color"||Ee.default.env.TERM==="alacritty"||Ee.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Vb={circleQuestionMark:"(?)",questionMarkPrefix:"(?)",square:"\u2588",squareDarkShade:"\u2593",squareMediumShade:"\u2592",squareLightShade:"\u2591",squareTop:"\u2580",squareBottom:"\u2584",squareLeft:"\u258C",squareRight:"\u2590",squareCenter:"\u25A0",bullet:"\u25CF",dot:"\u2024",ellipsis:"\u2026",pointerSmall:"\u203A",triangleUp:"\u25B2",triangleUpSmall:"\u25B4",triangleDown:"\u25BC",triangleDownSmall:"\u25BE",triangleLeftSmall:"\u25C2",triangleRightSmall:"\u25B8",home:"\u2302",heart:"\u2665",musicNote:"\u266A",musicNoteBeamed:"\u266B",arrowUp:"\u2191",arrowDown:"\u2193",arrowLeft:"\u2190",arrowRight:"\u2192",arrowLeftRight:"\u2194",arrowUpDown:"\u2195",almostEqual:"\u2248",notEqual:"\u2260",lessOrEqual:"\u2264",greaterOrEqual:"\u2265",identical:"\u2261",infinity:"\u221E",subscriptZero:"\u2080",subscriptOne:"\u2081",subscriptTwo:"\u2082",subscriptThree:"\u2083",subscriptFour:"\u2084",subscriptFive:"\u2085",subscriptSix:"\u2086",subscriptSeven:"\u2087",subscriptEight:"\u2088",subscriptNine:"\u2089",oneHalf:"\xBD",oneThird:"\u2153",oneQuarter:"\xBC",oneFifth:"\u2155",oneSixth:"\u2159",oneEighth:"\u215B",twoThirds:"\u2154",twoFifths:"\u2156",threeQuarters:"\xBE",threeFifths:"\u2157",threeEighths:"\u215C",fourFifths:"\u2158",fiveSixths:"\u215A",fiveEighths:"\u215D",sevenEighths:"\u215E",line:"\u2500",lineBold:"\u2501",lineDouble:"\u2550",lineDashed0:"\u2504",lineDashed1:"\u2505",lineDashed2:"\u2508",lineDashed3:"\u2509",lineDashed4:"\u254C",lineDashed5:"\u254D",lineDashed6:"\u2574",lineDashed7:"\u2576",lineDashed8:"\u2578",lineDashed9:"\u257A",lineDashed10:"\u257C",lineDashed11:"\u257E",lineDashed12:"\u2212",lineDashed13:"\u2013",lineDashed14:"\u2010",lineDashed15:"\u2043",lineVertical:"\u2502",lineVerticalBold:"\u2503",lineVerticalDouble:"\u2551",lineVerticalDashed0:"\u2506",lineVerticalDashed1:"\u2507",lineVerticalDashed2:"\u250A",lineVerticalDashed3:"\u250B",lineVerticalDashed4:"\u254E",lineVerticalDashed5:"\u254F",lineVerticalDashed6:"\u2575",lineVerticalDashed7:"\u2577",lineVerticalDashed8:"\u2579",lineVerticalDashed9:"\u257B",lineVerticalDashed10:"\u257D",lineVerticalDashed11:"\u257F",lineDownLeft:"\u2510",lineDownLeftArc:"\u256E",lineDownBoldLeftBold:"\u2513",lineDownBoldLeft:"\u2512",lineDownLeftBold:"\u2511",lineDownDoubleLeftDouble:"\u2557",lineDownDoubleLeft:"\u2556",lineDownLeftDouble:"\u2555",lineDownRight:"\u250C",lineDownRightArc:"\u256D",lineDownBoldRightBold:"\u250F",lineDownBoldRight:"\u250E",lineDownRightBold:"\u250D",lineDownDoubleRightDouble:"\u2554",lineDownDoubleRight:"\u2553",lineDownRightDouble:"\u2552",lineUpLeft:"\u2518",lineUpLeftArc:"\u256F",lineUpBoldLeftBold:"\u251B",lineUpBoldLeft:"\u251A",lineUpLeftBold:"\u2519",lineUpDoubleLeftDouble:"\u255D",lineUpDoubleLeft:"\u255C",lineUpLeftDouble:"\u255B",lineUpRight:"\u2514",lineUpRightArc:"\u2570",lineUpBoldRightBold:"\u2517",lineUpBoldRight:"\u2516",lineUpRightBold:"\u2515",lineUpDoubleRightDouble:"\u255A",lineUpDoubleRight:"\u2559",lineUpRightDouble:"\u2558",lineUpDownLeft:"\u2524",lineUpBoldDownBoldLeftBold:"\u252B",lineUpBoldDownBoldLeft:"\u2528",lineUpDownLeftBold:"\u2525",lineUpBoldDownLeftBold:"\u2529",lineUpDownBoldLeftBold:"\u252A",lineUpDownBoldLeft:"\u2527",lineUpBoldDownLeft:"\u2526",lineUpDoubleDownDoubleLeftDouble:"\u2563",lineUpDoubleDownDoubleLeft:"\u2562",lineUpDownLeftDouble:"\u2561",lineUpDownRight:"\u251C",lineUpBoldDownBoldRightBold:"\u2523",lineUpBoldDownBoldRight:"\u2520",lineUpDownRightBold:"\u251D",lineUpBoldDownRightBold:"\u2521",lineUpDownBoldRightBold:"\u2522",lineUpDownBoldRight:"\u251F",lineUpBoldDownRight:"\u251E",lineUpDoubleDownDoubleRightDouble:"\u2560",lineUpDoubleDownDoubleRight:"\u255F",lineUpDownRightDouble:"\u255E",lineDownLeftRight:"\u252C",lineDownBoldLeftBoldRightBold:"\u2533",lineDownLeftBoldRightBold:"\u252F",lineDownBoldLeftRight:"\u2530",lineDownBoldLeftBoldRight:"\u2531",lineDownBoldLeftRightBold:"\u2532",lineDownLeftRightBold:"\u252E",lineDownLeftBoldRight:"\u252D",lineDownDoubleLeftDoubleRightDouble:"\u2566",lineDownDoubleLeftRight:"\u2565",lineDownLeftDoubleRightDouble:"\u2564",lineUpLeftRight:"\u2534",lineUpBoldLeftBoldRightBold:"\u253B",lineUpLeftBoldRightBold:"\u2537",lineUpBoldLeftRight:"\u2538",lineUpBoldLeftBoldRight:"\u2539",lineUpBoldLeftRightBold:"\u253A",lineUpLeftRightBold:"\u2536",lineUpLeftBoldRight:"\u2535",lineUpDoubleLeftDoubleRightDouble:"\u2569",lineUpDoubleLeftRight:"\u2568",lineUpLeftDoubleRightDouble:"\u2567",lineUpDownLeftRight:"\u253C",lineUpBoldDownBoldLeftBoldRightBold:"\u254B",lineUpDownBoldLeftBoldRightBold:"\u2548",lineUpBoldDownLeftBoldRightBold:"\u2547",lineUpBoldDownBoldLeftRightBold:"\u254A",lineUpBoldDownBoldLeftBoldRight:"\u2549",lineUpBoldDownLeftRight:"\u2540",lineUpDownBoldLeftRight:"\u2541",lineUpDownLeftBoldRight:"\u253D",lineUpDownLeftRightBold:"\u253E",lineUpBoldDownBoldLeftRight:"\u2542",lineUpDownLeftBoldRightBold:"\u253F",lineUpBoldDownLeftBoldRight:"\u2543",lineUpBoldDownLeftRightBold:"\u2544",lineUpDownBoldLeftBoldRight:"\u2545",lineUpDownBoldLeftRightBold:"\u2546",lineUpDoubleDownDoubleLeftDoubleRightDouble:"\u256C",lineUpDoubleDownDoubleLeftRight:"\u256B",lineUpDownLeftDoubleRightDouble:"\u256A",lineCross:"\u2573",lineBackslash:"\u2572",lineSlash:"\u2571"},Bb={tick:"\u2714",info:"\u2139",warning:"\u26A0",cross:"\u2718",squareSmall:"\u25FB",squareSmallFilled:"\u25FC",circle:"\u25EF",circleFilled:"\u25C9",circleDotted:"\u25CC",circleDouble:"\u25CE",circleCircle:"\u24DE",circleCross:"\u24E7",circlePipe:"\u24BE",radioOn:"\u25C9",radioOff:"\u25EF",checkboxOn:"\u2612",checkboxOff:"\u2610",checkboxCircleOn:"\u24E7",checkboxCircleOff:"\u24BE",pointer:"\u276F",triangleUpOutline:"\u25B3",triangleLeft:"\u25C0",triangleRight:"\u25B6",lozenge:"\u25C6",lozengeOutline:"\u25C7",hamburger:"\u2630",smiley:"\u32E1",mustache:"\u0DF4",star:"\u2605",play:"\u25B6",nodejs:"\u2B22",oneSeventh:"\u2150",oneNinth:"\u2151",oneTenth:"\u2152"},NN={tick:"\u221A",info:"i",warning:"\u203C",cross:"\xD7",squareSmall:"\u25A1",squareSmallFilled:"\u25A0",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(\u25CB)",circleCross:"(\xD7)",circlePipe:"(\u2502)",radioOn:"(*)",radioOff:"( )",checkboxOn:"[\xD7]",checkboxOff:"[ ]",checkboxCircleOn:"(\xD7)",checkboxCircleOff:"( )",pointer:">",triangleUpOutline:"\u2206",triangleLeft:"\u25C4",triangleRight:"\u25BA",lozenge:"\u2666",lozengeOutline:"\u25CA",hamburger:"\u2261",smiley:"\u263A",mustache:"\u250C\u2500\u2510",star:"\u2736",play:"\u25BA",nodejs:"\u2666",oneSeventh:"1/7",oneNinth:"1/9",oneTenth:"1/10"},XN={...Vb,...Bb},SN={...Vb,...NN},xN=YN(),JN=xN?XN:SN,dn=JN,OT=Object.entries(Bb);var EN={prefix:{idle:Ue.styleText("blue","?"),done:Ue.styleText("green",dn.tick)},spinner:{interval:80,frames:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"].map((e)=>Ue.styleText("yellow",e))},keybindings:[],style:{answer:(e)=>Ue.styleText("cyan",e),message:(e)=>Ue.styleText("bold",e),error:(e)=>Ue.styleText("red",`> ${e}`),defaultAnswer:(e)=>Ue.styleText("dim",`(${e})`),help:(e)=>Ue.styleText("dim",e),highlight:(e)=>Ue.styleText("cyan",e),key:(e)=>Ue.styleText("cyan",Ue.styleText("bold",`<${e}>`))}};function Rb(){return{...EN,keybindings:bb()}}function Gb(e){if(typeof e!=="object"||e===null)return!1;let t=e;while(Object.getPrototypeOf(t)!==null)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function wb(...e){let t={};for(let i of e)for(let[n,o]of Object.entries(i)){let s=t[n];t[n]=Gb(s)&&Gb(o)?wb(s,o):o}return t}function Bo(...e){let t=[Rb(),...e.filter((i)=>i!=null)];return wb(...t)}function wI({status:e="idle",theme:t}){let[i,n]=lt(!1),[o,s]=lt(0),{prefix:r,spinner:g}=Bo(t);if(mi(()=>{if(e==="loading"){let l,I=-1,d=setTimeout(()=>{n(!0),l=setInterval(()=>{I=I+1,s(I%g.frames.length)},g.interval)},300);return()=>{clearTimeout(d),clearInterval(l)}}else n(!1)},[e]),i)return g.frames[o];return typeof r==="string"?r:r[e==="loading"?"idle":e]??r.idle}function Ro(e,t){return In((i)=>{let n=i.get();if(!n||n.dependencies.length!==t.length||n.dependencies.some((o,s)=>o!==t[s])){let o=e();return i.set({value:o,dependencies:t}),o}return n.value})}function pi(e){return lt({current:e})[0]}function FI(e){let t=pi(e);t.current=e,mi((i)=>{let n=!1,o=GI((s,r)=>{if(n)return;t.current(r,i)});return i.input.on("keypress",o),()=>{n=!0,i.input.removeListener("keypress",o)}},[])}var Db=be(Hb(),1);var vb=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return(t)=>{let i=0;e.lastIndex=0;while(e.test(t))i+=1;return t.length-i}})(),kb=(e)=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,Pb=(e)=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141;var TN=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,zN=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Yb=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,jN=/\t{1,1000}/y,Nb=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,DN=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,QN=/\p{M}+/gu,_N={limit:1/0,ellipsis:""},Xb=(e,t={},i={})=>{let n=t.limit??1/0,o=t.ellipsis??"",s=t?.ellipsisWidth??(o?Xb(o,_N,i).width:0),r=0,g=i.controlWidth??0,a=i.tabWidth??8,l=i.emojiWidth??2,I=2,d=i.regularWidth??1,u=i.wideWidth??2,c=[[DN,d],[TN,0],[zN,g],[jN,a],[Nb,l],[Yb,u]],C=0,A=0,m=e.length,p=0,Z=!1,W=m,h=Math.max(0,n-s),f=0,V=0,B=0,F=0;e:while(!0){if(V>f||A>=m&&A>C){let R=e.slice(f,V)||e.slice(C,A);p=0;for(let U of R.replaceAll(QN,"")){let K=U.codePointAt(0)||0;if(kb(K))F=2;else if(Pb(K))F=u;else F=d;if(B+F>h)W=Math.min(W,Math.max(f,C)+p);if(B+F>n){Z=!0;break e}p+=U.length,B+=F}f=V=0}if(A>=m)break e;for(let R=0,U=c.length;R<U;R++){let[K,ee]=c[R];if(K.lastIndex=A,K.test(e)){if(p=K===Yb?vb(e.slice(A,K.lastIndex)):K===Nb?1:K.lastIndex-A,F=p*ee,B+F>h)W=Math.min(W,A+Math.floor((h-B)/ee));if(B+F>n){Z=!0;break e}B+=F,f=C,V=A,A=C=K.lastIndex;continue e}}A+=1}return{width:Z?h:B,index:Z?W:m,truncated:Z,ellipsed:Z&&n>=s}},Sb=Xb;var KN={limit:1/0,ellipsis:"",ellipsisWidth:0},LN=(e,t={})=>Sb(e,KN,t).width,Vt=LN;var Ar="\x1B",Ob="\x9B",MN=39,vI="\x07",Tb="[",$N="]",zb="m",kI=`${$N}8;;`,xb=new RegExp(`(?:\\${Tb}(?<code>\\d+)m|\\${kI}(?<uri>.*)${vI})`,"y"),Jb=(e)=>{if(e>=30&&e<=37)return 39;if(e>=90&&e<=97)return 39;if(e>=40&&e<=47)return 49;if(e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0;return},Eb=(e)=>`${Ar}${Tb}${e}${zb}`,Ub=(e)=>`${Ar}${kI}${e}${vI}`,HI=(e,t,i)=>{let n=t[Symbol.iterator](),o=!1,s=!1,r=e.at(-1),g=r===void 0?0:Vt(r),a=n.next(),l=n.next(),I=0;while(!a.done){let d=a.value,u=Vt(d);if(g+u<=i)e[e.length-1]+=d;else e.push(d),g=0;if(d===Ar||d===Ob)o=!0,s=t.startsWith(kI,I+1);if(o){if(s){if(d===vI)o=!1,s=!1}else if(d===zb)o=!1}else if(g+=u,g===i&&!l.done)e.push(""),g=0;a=l,l=n.next(),I+=d.length}if(r=e.at(-1),!g&&r!==void 0&&r.length&&e.length>1)e[e.length-2]+=e.pop()},qN=(e)=>{let t=e.split(" "),i=t.length;while(i){if(Vt(t[i-1]))break;i--}if(i===t.length)return e;return t.slice(0,i).join(" ")+t.slice(i).join("")},e1=(e,t,i={})=>{if(i.trim!==!1&&e.trim()==="")return"";let n="",o,s,r=e.split(" "),g=[""],a=0;for(let d=0;d<r.length;d++){let u=r[d];if(i.trim!==!1){let C=g.at(-1)??"",A=C.trimStart();if(C.length!==A.length)g[g.length-1]=A,a=Vt(A)}if(d!==0){if(a>=t&&(i.wordWrap===!1||i.trim===!1))g.push(""),a=0;if(a||i.trim===!1)g[g.length-1]+=" ",a++}let c=Vt(u);if(i.hard&&c>t){let C=t-a,A=1+Math.floor((c-C-1)/t);if(Math.floor((c-1)/t)<A)g.push("");HI(g,u,t),a=Vt(g.at(-1)??"");continue}if(a+c>t&&a&&c){if(i.wordWrap===!1&&a<t){HI(g,u,t),a=Vt(g.at(-1)??"");continue}g.push(""),a=0}if(a+c>t&&i.wordWrap===!1){HI(g,u,t),a=Vt(g.at(-1)??"");continue}g[g.length-1]+=u,a+=c}if(i.trim!==!1)g=g.map((d)=>qN(d));let l=g.join(`
232
+ `),I=!1;for(let d=0;d<l.length;d++){let u=l[d];if(n+=u,!I){if(I=u>="\uD800"&&u<="\uDBFF",I)continue}else I=!1;if(u===Ar||u===Ob){xb.lastIndex=d+1;let C=xb.exec(l)?.groups;if(C?.code!==void 0){let A=Number.parseFloat(C.code);o=A===MN?void 0:A}else if(C?.uri!==void 0)s=C.uri.length===0?void 0:C.uri}if(l[d+1]===`
233
+ `){if(s)n+=Ub("");let c=o?Jb(o):void 0;if(o&&c)n+=Eb(c)}else if(u===`
234
+ `){if(o&&Jb(o))n+=Eb(o);if(s)n+=Ub(s)}}return n},t1=/\r?\n/;function jb(e,t,i){return String(e).normalize().split(t1).map((n)=>e1(n,t,i)).join(`
235
+ `)}function Go(e,t){return e.split(`
236
+ `).flatMap((i)=>jb(i,t,{trim:!1,wordWrap:!1}).split(`
237
237
  `).map((n)=>n.trimEnd())).join(`
238
- `)}function pr(){return jb.default({defaultWidth:80,output:VI().output})}function e1({active:e,renderedItems:t,pageSize:i,loop:n}){let o=mi({lastPointer:e,lastActive:void 0}),{lastPointer:s,lastActive:r}=o.current,g=Math.floor(i/2),a=t.reduce((d,u)=>d+u.length,0),l=t.slice(0,e).reduce((d,u)=>d+u.length,0),I=l;if(a>i)if(n){if(I=s,r!=null&&r<e&&e-r<i)I=Math.min(g,Math.abs(e-r)===1?Math.min(s+(t[r]?.length??0),Math.max(l,s)):s+e-r)}else{let d=t.slice(e).reduce((u,c)=>u+c.length,0);I=d<i-g?i-d:Math.min(l,g)}return o.current.lastPointer=I,o.current.lastActive=e,I}function vI({items:e,active:t,renderItem:i,pageSize:n,loop:o=!0}){let s=pr(),r=(p)=>(p%e.length+e.length)%e.length,g=e.map((p,Z)=>{if(p==null)return[];return Vo(i({item:p,index:Z,isActive:Z===t}),s).split(`
239
- `)}),a=g.reduce((p,Z)=>p+Z.length,0),l=(p)=>g[p]??[],I=e1({active:t,renderedItems:g,pageSize:n,loop:o}),d=l(t).slice(0,n),u=I+d.length<=n?I:n-d.length,c=Array.from({length:n});c.splice(u,d.length,...d);let C=new Set([t]),A=u+d.length,m=r(t+1);while(A<n&&!C.has(m)&&(o&&a>n?m!==t:m>t)){let Z=l(m).slice(0,n-A);c.splice(A,Z.length,...Z),C.add(m),A+=Z.length,m=r(m+1)}A=u-1,m=r(t-1);while(A>=0&&!C.has(m)&&(o&&a>n?m!==t:m<t)){let p=l(m),Z=p.slice(Math.max(0,p.length-A-1));c.splice(A-Z.length+1,Z.length,...Z),C.add(m),A-=Z.length,m=r(m-1)}return c.filter((p)=>typeof p==="string").join(`
240
- `)}var oW=be(require("readline")),sW=require("async_hooks"),rW=be(_b(),1);var pi=[];pi.push("SIGHUP","SIGINT","SIGTERM");if(process.platform!=="win32")pi.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");if(process.platform==="linux")pi.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var Ar=(e)=>!!e&&typeof e==="object"&&typeof e.removeListener==="function"&&typeof e.emit==="function"&&typeof e.reallyExit==="function"&&typeof e.listeners==="function"&&typeof e.kill==="function"&&typeof e.pid==="number"&&typeof e.on==="function",kI=Symbol.for("signal-exit emitter"),PI=globalThis,i1=Object.defineProperty.bind(Object);class Kb{emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(PI[kI])return PI[kI];i1(PI,kI,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(e,t){this.listeners[e].push(t)}removeListener(e,t){let i=this.listeners[e],n=i.indexOf(t);if(n===-1)return;if(n===0&&i.length===1)i.length=0;else i.splice(n,1)}emit(e,t,i){if(this.emitted[e])return!1;this.emitted[e]=!0;let n=!1;for(let o of this.listeners[e])n=o(t,i)===!0||n;if(e==="exit")n=this.emit("afterExit",t,i)||n;return n}}class NI{}var n1=(e)=>({onExit(t,i){return e.onExit(t,i)},load(){return e.load()},unload(){return e.unload()}});class Lb extends NI{onExit(){return()=>{}}load(){}unload(){}}class Mb extends NI{#i=YI.platform==="win32"?"SIGINT":"SIGHUP";#t=new Kb;#e;#s;#r;#o={};#n=!1;constructor(e){super();this.#e=e,this.#o={};for(let t of pi)this.#o[t]=()=>{let i=this.#e.listeners(t),{count:n}=this.#t,o=e;if(typeof o.__signal_exit_emitter__==="object"&&typeof o.__signal_exit_emitter__.count==="number")n+=o.__signal_exit_emitter__.count;if(i.length===n){this.unload();let s=this.#t.emit("exit",null,t),r=t==="SIGHUP"?this.#i:t;if(!s)e.kill(e.pid,r)}};this.#r=e.reallyExit,this.#s=e.emit}onExit(e,t){if(!Ar(this.#e))return()=>{};if(this.#n===!1)this.load();let i=t?.alwaysLast?"afterExit":"exit";return this.#t.on(i,e),()=>{if(this.#t.removeListener(i,e),this.#t.listeners.exit.length===0&&this.#t.listeners.afterExit.length===0)this.unload()}}load(){if(this.#n)return;this.#n=!0,this.#t.count+=1;for(let e of pi)try{let t=this.#o[e];if(t)this.#e.on(e,t)}catch(t){}this.#e.emit=(e,...t)=>this.#a(e,...t),this.#e.reallyExit=(e)=>this.#g(e)}unload(){if(!this.#n)return;this.#n=!1,pi.forEach((e)=>{let t=this.#o[e];if(!t)throw Error("Listener not defined for signal: "+e);try{this.#e.removeListener(e,t)}catch(i){}}),this.#e.emit=this.#s,this.#e.reallyExit=this.#r,this.#t.count-=1}#g(e){if(!Ar(this.#e))return 0;return this.#e.exitCode=e||0,this.#t.emit("exit",this.#e.exitCode,null),this.#r.call(this.#e,this.#e.exitCode)}#a(e,...t){let i=this.#s;if(e==="exit"&&Ar(this.#e)){if(typeof t[0]==="number")this.#e.exitCode=t[0];let n=i.call(this.#e,e,...t);return this.#t.emit("exit",this.#e.exitCode,null),n}else return i.call(this.#e,e,...t)}}var YI=globalThis.process,{onExit:$b,load:Zz,unload:bz}=n1(Ar(YI)?new Mb(YI):new Lb);var nW=require("util");var XI="\x1B[G",eW="\x1B[?25l",tW="\x1B[?25h",SI=(e=1)=>e>0?`\x1B[${e}A`:"",xI=(e=1)=>e>0?`\x1B[${e}B`:"",JI=(e,t)=>{if(typeof t==="number"&&!Number.isNaN(t))return`\x1B[${t+1};${e+1}H`;return`\x1B[${e+1}G`},qb="\x1B[2K",EI=(e)=>e>0?(qb+SI(1)).repeat(e-1)+qb+XI:"";var iW=(e)=>e.split(`
241
- `).length,o1=(e)=>e.split(`
242
- `).pop()??"";class Zr{height=0;extraLinesUnderPrompt=0;cursorPos;rl;constructor(e){this.rl=e,this.cursorPos=e.getCursorPos()}write(e){this.rl.output.unmute(),this.rl.output.write(e),this.rl.output.mute()}render(e,t=""){let i=o1(e),n=nW.stripVTControlCharacters(i),o=n;if(this.rl.line.length>0)o=o.slice(0,-this.rl.line.length);this.rl.setPrompt(o),this.cursorPos=this.rl.getCursorPos();let s=pr();if(e=Vo(e,s),t=Vo(t,s),n.length%s===0)e+=`
238
+ `)}function Zr(){return Db.default({defaultWidth:80,output:RI().output})}function i1({active:e,renderedItems:t,pageSize:i,loop:n}){let o=pi({lastPointer:e,lastActive:void 0}),{lastPointer:s,lastActive:r}=o.current,g=Math.floor(i/2),a=t.reduce((d,u)=>d+u.length,0),l=t.slice(0,e).reduce((d,u)=>d+u.length,0),I=l;if(a>i)if(n){if(I=s,r!=null&&r<e&&e-r<i)I=Math.min(g,Math.abs(e-r)===1?Math.min(s+(t[r]?.length??0),Math.max(l,s)):s+e-r)}else{let d=t.slice(e).reduce((u,c)=>u+c.length,0);I=d<i-g?i-d:Math.min(l,g)}return o.current.lastPointer=I,o.current.lastActive=e,I}function PI({items:e,active:t,renderItem:i,pageSize:n,loop:o=!0}){let s=Zr(),r=(p)=>(p%e.length+e.length)%e.length,g=e.map((p,Z)=>{if(p==null)return[];return Go(i({item:p,index:Z,isActive:Z===t}),s).split(`
239
+ `)}),a=g.reduce((p,Z)=>p+Z.length,0),l=(p)=>g[p]??[],I=i1({active:t,renderedItems:g,pageSize:n,loop:o}),d=l(t).slice(0,n),u=I+d.length<=n?I:n-d.length,c=Array.from({length:n});c.splice(u,d.length,...d);let C=new Set([t]),A=u+d.length,m=r(t+1);while(A<n&&!C.has(m)&&(o&&a>n?m!==t:m>t)){let Z=l(m).slice(0,n-A);c.splice(A,Z.length,...Z),C.add(m),A+=Z.length,m=r(m+1)}A=u-1,m=r(t-1);while(A>=0&&!C.has(m)&&(o&&a>n?m!==t:m<t)){let p=l(m),Z=p.slice(Math.max(0,p.length-A-1));c.splice(A-Z.length+1,Z.length,...Z),C.add(m),A-=Z.length,m=r(m-1)}return c.filter((p)=>typeof p==="string").join(`
240
+ `)}var sW=be(require("readline")),rW=require("async_hooks"),gW=be(Kb(),1);var Ai=[];Ai.push("SIGHUP","SIGINT","SIGTERM");if(process.platform!=="win32")Ai.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");if(process.platform==="linux")Ai.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var br=(e)=>!!e&&typeof e==="object"&&typeof e.removeListener==="function"&&typeof e.emit==="function"&&typeof e.reallyExit==="function"&&typeof e.listeners==="function"&&typeof e.kill==="function"&&typeof e.pid==="number"&&typeof e.on==="function",YI=Symbol.for("signal-exit emitter"),NI=globalThis,o1=Object.defineProperty.bind(Object);class Lb{emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(NI[YI])return NI[YI];o1(NI,YI,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(e,t){this.listeners[e].push(t)}removeListener(e,t){let i=this.listeners[e],n=i.indexOf(t);if(n===-1)return;if(n===0&&i.length===1)i.length=0;else i.splice(n,1)}emit(e,t,i){if(this.emitted[e])return!1;this.emitted[e]=!0;let n=!1;for(let o of this.listeners[e])n=o(t,i)===!0||n;if(e==="exit")n=this.emit("afterExit",t,i)||n;return n}}class SI{}var s1=(e)=>({onExit(t,i){return e.onExit(t,i)},load(){return e.load()},unload(){return e.unload()}});class Mb extends SI{onExit(){return()=>{}}load(){}unload(){}}class $b extends SI{#i=XI.platform==="win32"?"SIGINT":"SIGHUP";#t=new Lb;#e;#s;#r;#o={};#n=!1;constructor(e){super();this.#e=e,this.#o={};for(let t of Ai)this.#o[t]=()=>{let i=this.#e.listeners(t),{count:n}=this.#t,o=e;if(typeof o.__signal_exit_emitter__==="object"&&typeof o.__signal_exit_emitter__.count==="number")n+=o.__signal_exit_emitter__.count;if(i.length===n){this.unload();let s=this.#t.emit("exit",null,t),r=t==="SIGHUP"?this.#i:t;if(!s)e.kill(e.pid,r)}};this.#r=e.reallyExit,this.#s=e.emit}onExit(e,t){if(!br(this.#e))return()=>{};if(this.#n===!1)this.load();let i=t?.alwaysLast?"afterExit":"exit";return this.#t.on(i,e),()=>{if(this.#t.removeListener(i,e),this.#t.listeners.exit.length===0&&this.#t.listeners.afterExit.length===0)this.unload()}}load(){if(this.#n)return;this.#n=!0,this.#t.count+=1;for(let e of Ai)try{let t=this.#o[e];if(t)this.#e.on(e,t)}catch(t){}this.#e.emit=(e,...t)=>this.#a(e,...t),this.#e.reallyExit=(e)=>this.#g(e)}unload(){if(!this.#n)return;this.#n=!1,Ai.forEach((e)=>{let t=this.#o[e];if(!t)throw Error("Listener not defined for signal: "+e);try{this.#e.removeListener(e,t)}catch(i){}}),this.#e.emit=this.#s,this.#e.reallyExit=this.#r,this.#t.count-=1}#g(e){if(!br(this.#e))return 0;return this.#e.exitCode=e||0,this.#t.emit("exit",this.#e.exitCode,null),this.#r.call(this.#e,this.#e.exitCode)}#a(e,...t){let i=this.#s;if(e==="exit"&&br(this.#e)){if(typeof t[0]==="number")this.#e.exitCode=t[0];let n=i.call(this.#e,e,...t);return this.#t.emit("exit",this.#e.exitCode,null),n}else return i.call(this.#e,e,...t)}}var XI=globalThis.process,{onExit:qb,load:Vz,unload:Bz}=s1(br(XI)?new $b(XI):new Mb);var oW=require("util");var xI="\x1B[G",tW="\x1B[?25l",iW="\x1B[?25h",JI=(e=1)=>e>0?`\x1B[${e}A`:"",EI=(e=1)=>e>0?`\x1B[${e}B`:"",UI=(e,t)=>{if(typeof t==="number"&&!Number.isNaN(t))return`\x1B[${t+1};${e+1}H`;return`\x1B[${e+1}G`},eW="\x1B[2K",OI=(e)=>e>0?(eW+JI(1)).repeat(e-1)+eW+xI:"";var nW=(e)=>e.split(`
241
+ `).length,r1=(e)=>e.split(`
242
+ `).pop()??"";class Wr{height=0;extraLinesUnderPrompt=0;cursorPos;rl;constructor(e){this.rl=e,this.cursorPos=e.getCursorPos()}write(e){this.rl.output.unmute(),this.rl.output.write(e),this.rl.output.mute()}render(e,t=""){let i=r1(e),n=oW.stripVTControlCharacters(i),o=n;if(this.rl.line.length>0)o=o.slice(0,-this.rl.line.length);this.rl.setPrompt(o),this.cursorPos=this.rl.getCursorPos();let s=Zr();if(e=Go(e,s),t=Go(t,s),n.length%s===0)e+=`
243
243
  `;let r=e+(t?`
244
- `+t:""),a=Math.floor(n.length/s)-this.cursorPos.rows+(t?iW(t):0);if(a>0)r+=SI(a);r+=JI(this.cursorPos.cols),this.write(xI(this.extraLinesUnderPrompt)+EI(this.height)+r),this.extraLinesUnderPrompt=a,this.height=iW(r)}checkCursorPos(){let e=this.rl.getCursorPos();if(e.cols!==this.cursorPos.cols)this.write(JI(e.cols)),this.cursorPos=e}done({clearContent:e}){this.rl.setPrompt("");let t=xI(this.extraLinesUnderPrompt);t+=e?EI(this.height):`
245
- `,t+=XI,t+=tW,this.write(t),this.rl.close()}}class UI extends Promise{static withResolver(){let e,t;return{promise:new Promise((n,o)=>{e=n,t=o}),resolve:e,reject:t}}}var gW=be(require("path")),s1=globalThis.setImmediate;function r1(){let e=Error.prepareStackTrace,t=[];try{Error.prepareStackTrace=(i,n)=>{let o=n.slice(1);return t=o,o},Error().stack}catch{return t}return Error.prepareStackTrace=e,t}function OI(e){let t=r1();return(n,o={})=>{let{input:s=process.stdin,signal:r}=o,g=new Set,a=new rW.default;a.pipe(o.output??process.stdout);let l=oW.createInterface({terminal:!0,input:s,output:a});a.mute();let I=new Zr(l),{promise:d,resolve:u,reject:c}=UI.withResolver(),C=()=>c(new fI);if(r){let m=()=>c(new hI({cause:r.reason}));if(r.aborted)return m(),Object.assign(d,{cancel:C});r.addEventListener("abort",m),g.add(()=>r.removeEventListener("abort",m))}g.add($b((m,p)=>{c(new Cr(`User force closed the prompt with ${m} ${p}`))}));let A=()=>c(new Cr("User force closed the prompt with SIGINT"));return l.on("SIGINT",A),g.add(()=>l.removeListener("SIGINT",A)),Wb(l,(m)=>{let p=sW.AsyncResource.bind(()=>Ci.clearAll());l.on("close",p),g.add(()=>l.removeListener("close",p));let Z=()=>{let W=()=>I.checkCursorPos();l.input.on("keypress",W),g.add(()=>l.input.removeListener("keypress",W));let h=null;m(()=>{let f=!1;try{let V=e(n,(R)=>{if(f)u(R);else h={value:R}});if(V===void 0){let R=t[1]?.getFileName();if(R&&!R.startsWith("file://"))R=gW.default.resolve(R);throw Error(`Prompt functions must return a string.
246
- at ${R}`)}let[B,F]=typeof V==="string"?[V]:V;I.render(B,F),Ci.run()}catch(V){c(V)}if(f=!0,h!==null){let{value:V}=h;h=null,u(V)}})};if("readableFlowing"in s)s1(Z);else Z();return Object.assign(d.then((W)=>(Ci.clearAll(),W),(W)=>{throw Ci.clearAll(),W}).finally(()=>{g.forEach((W)=>W()),I.done({clearContent:Boolean(o.clearPromptOnDone)}),a.end()}).then(()=>d),{cancel:C})})}}var aW=require("util");class It{separator=aW.styleText("dim",Array.from({length:15}).join(In.line));type="separator";constructor(e){if(e)this.separator=e}static isSeparator(e){return Boolean(e&&typeof e==="object"&&"type"in e&&e.type==="separator")}}var dn=require("util");var g1={icon:{cursor:In.pointer},style:{disabled:(e)=>dn.styleText("dim",e),description:(e)=>dn.styleText("cyan",e),keysHelpTip:(e)=>e.map(([t,i])=>`${dn.styleText("bold",t)} ${dn.styleText("dim",i)}`).join(dn.styleText("dim"," \u2022 "))},i18n:{disabledError:"This option is disabled and cannot be selected."},indexMode:"hidden"};function TI(e){return!It.isSeparator(e)&&!e.disabled}function zI(e){return!It.isSeparator(e)}function a1(e){return e.map((t)=>{if(It.isSeparator(t))return t;if(typeof t!=="object"||t===null||!("value"in t)){let o=String(t);return{value:t,name:o,short:o,disabled:!1}}let i=t.name??String(t.value),n={value:t.value,name:i,short:t.short??i,disabled:t.disabled??!1};if(t.description)n.description=t.description;return n})}var lW=OI((e,t)=>{let{loop:i=!0,pageSize:n=7}=e,o=fo(g1,e.theme),{keybindings:s}=o,[r,g]=lt("idle"),a=RI({status:r,theme:o}),l=mi(),I=!s.includes("vim"),d=yo(()=>a1(e.choices),[e.choices]),u=yo(()=>{let R=d.findIndex(zI),U=d.findLastIndex(zI);if(R===-1)throw new ho("[select prompt] No selectable choices. All choices are disabled.");return{first:R,last:U}},[d]),c=yo(()=>{if(!("default"in e))return-1;return d.findIndex((R)=>TI(R)&&R.value===e.default)},[e.default,d]),[C,A]=lt(c===-1?u.first:c),m=d[C];if(m==null||It.isSeparator(m))throw Error("Active index does not point to a choice");let[p,Z]=lt();GI((R,U)=>{if(clearTimeout(l.current),p)Z(void 0);if(WI(R))if(m.disabled)Z(o.i18n.disabledError);else g("done"),t(m.value);else if(Wo(R,s)||cr(R,s)){if(U.clearLine(0),i||Wo(R,s)&&C!==u.first||cr(R,s)&&C!==u.last){let K=Wo(R,s)?-1:1,ee=C;do ee=(ee+K+d.length)%d.length;while(!zI(d[ee]));A(ee)}}else if(bI(R)&&!Number.isNaN(Number(U.line))){let K=Number(U.line)-1,ee=-1,He=d.findIndex((un)=>{if(It.isSeparator(un))return!1;return ee++,ee===K}),Cn=d[He];if(Cn!=null&&TI(Cn))A(He);l.current=setTimeout(()=>{U.clearLine(0)},700)}else if(ZI(R))U.clearLine(0);else if(I){let K=U.line.toLowerCase(),ee=d.findIndex((He)=>{if(It.isSeparator(He)||!TI(He))return!1;return He.name.toLowerCase().startsWith(K)});if(ee!==-1)A(ee);l.current=setTimeout(()=>{U.clearLine(0)},700)}}),ui(()=>()=>{clearTimeout(l.current)},[]);let W=o.style.message(e.message,r),h=o.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]),f=0,V=vI({items:d,active:C,renderItem({item:R,isActive:U,index:K}){if(It.isSeparator(R))return f++,` ${R.separator}`;let ee=U?o.icon.cursor:" ",He=o.indexMode==="number"?`${K+1-f}. `:"";if(R.disabled){let un=typeof R.disabled==="string"?R.disabled:"(disabled)",PW=U?o.icon.cursor:"-";return o.style.disabled(`${PW} ${He}${R.name} ${un}`)}return(U?o.style.highlight:(un)=>un)(`${ee} ${He}${R.name}`)},pageSize:n,loop:i});if(r==="done")return[a,W,o.style.answer(m.short)].filter(Boolean).join(" ");let{description:B}=m;return`${[[a,W].filter(Boolean).join(" "),V," ",B?o.style.description(B):"",p?o.style.error(p):"",h].filter(Boolean).join(`
247
- `).trimEnd()}${eW}`});var l1="Failure details are withheld because this API key has read access only. A key with write access on the project sees them.",I1=async(e)=>{let t=[];for await(let i of e)t.push(i);return t},dW=(e,t)=>{if(t===void 0||t.projectId!==e)return new Map;let i=new Map;for(let[o,s]of Object.entries(t.pipelines)){let r=i.get(s.pipelineId)??[];r.push(o),i.set(s.pipelineId,r)}let n=new Map;for(let[o,s]of i){let[r,...g]=s;if(r!==void 0&&g.length===0)n.set(o,r)}return n},cW=(e,t)=>{let i=t.get(e.id);return{pipelineId:e.id,name:e.name,...i===void 0?{}:{sourceDirectory:i}}},cn=(e)=>e.sourceDirectory===void 0?`${e.name} (${e.pipelineId})`:`${e.name} (${e.pipelineId}) ${e.sourceDirectory}`,d1=(e)=>e.length===0?"This project has no pipelines.":`Unknown pipeline. This project has: ${e.map(cn).join(", ")}.`;async function CW(e){return lW({message:"This project tracks several pipelines. Select one",choices:e})}async function uW(e){let t=e.limit??20,i=await e.client.pipelines.listPage({projectId:e.projectId,limit:t}),n=dW(e.projectId,e.state),o=i.pipelines.map((r)=>cW(r,n)).toSorted((r,g)=>{let a=r.name.localeCompare(g.name);return a===0?r.pipelineId.localeCompare(g.pipelineId):a});if(o.length===0)return{outcome:"reported",output:"This project has no pipelines."};let s=o.map((r)=>r.sourceDirectory===void 0?`${r.name} ${r.pipelineId}`:`${r.name} ${r.pipelineId} ${r.sourceDirectory}`);if(i.pagination.hasMore)s.push(`Showing ${o.length} of ${i.pagination.total} pipelines. Raise --limit to see more.`);return{outcome:"reported",output:s.join(`
248
- `)}}var c1=async(e,t,i)=>{let n=await I1(e.pipelines.listAll({projectId:t})),o=dW(t,i);return n.map((s)=>cW(s,o)).toSorted((s,r)=>{let g=s.name.localeCompare(r.name);return g===0?s.pipelineId.localeCompare(r.pipelineId):g})},br=(e,t,i)=>{if(b(e.length<=1,t),e.length!==1)return;let[n]=e;return b(n,i),n},IW=(e,t)=>{let i=d1(t),n=br(t.filter((l)=>l.pipelineId===e),i,i);if(n!==void 0)return n;let o=t.filter((l)=>l.name===e),s=br(o,`Multiple pipelines are named ${e}: ${o.map(cn).join(", ")}.`,i);if(s!==void 0)return s;let r=br(t.filter((l)=>l.sourceDirectory===e),i,i);if(r!==void 0)return r;let g=t.filter((l)=>{if(l.sourceDirectory===void 0)return!1;let I=l.sourceDirectory.split("/");return I[I.length-1]===e}),a=br(g,`Multiple pipelines match ${e}: ${g.map(cn).join(", ")}.`,i);if(a!==void 0)return a;b(!1,i)};async function Bo(e){let t=await c1(e.client,e.projectId,e.state);if(e.pipeline!==void 0)return IW(e.pipeline,t);if(b(t.length>0,"This project has no pipelines."),t.length>1&&e.select!==void 0){let i=await e.select(t.map((n)=>({name:cn(n),value:n.pipelineId})));return IW(i,t)}if(t.length===1){let[i]=t;b(i,"This project has no pipelines."),b(!1,`Pass a pipeline name. This project has: ${cn(i)}.`)}b(!1,`This project tracks several pipelines, so name one: ${t.map(cn).join(", ")}.`)}var mW=(e)=>`run ${e.id} is ${e.status}`,pW=(e)=>{if(e.status==="succeeded")return"succeeded";if(e.status==="failed")return"failed";return"started"};async function AW(e,t){let i=await Bo({client:e,...t}),n=await e.runs.start({pipelineId:i.pipelineId});if(t.wait!==!0)return{outcome:"started",output:[`Started ${mW(n)} for ${i.name}.`,`Follow it with toloka pipeline status ${i.pipelineId}, or re-run with --wait.`].join(`
249
- `)};try{let o=await e.waitFor({type:"pipelineRun",runId:n.id},{...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs},...t.intervalMs===void 0?{}:{intervalMs:t.intervalMs}}),s=pW(o);return{outcome:s,output:s==="failed"?[`Run ${o.id} failed.`,`Inspect items with toloka pipeline results ${o.id} --failed.`].join(`
244
+ `+t:""),a=Math.floor(n.length/s)-this.cursorPos.rows+(t?nW(t):0);if(a>0)r+=JI(a);r+=UI(this.cursorPos.cols),this.write(EI(this.extraLinesUnderPrompt)+OI(this.height)+r),this.extraLinesUnderPrompt=a,this.height=nW(r)}checkCursorPos(){let e=this.rl.getCursorPos();if(e.cols!==this.cursorPos.cols)this.write(UI(e.cols)),this.cursorPos=e}done({clearContent:e}){this.rl.setPrompt("");let t=EI(this.extraLinesUnderPrompt);t+=e?OI(this.height):`
245
+ `,t+=xI,t+=iW,this.write(t),this.rl.close()}}class TI extends Promise{static withResolver(){let e,t;return{promise:new Promise((n,o)=>{e=n,t=o}),resolve:e,reject:t}}}var aW=be(require("path")),g1=globalThis.setImmediate;function a1(){let e=Error.prepareStackTrace,t=[];try{Error.prepareStackTrace=(i,n)=>{let o=n.slice(1);return t=o,o},Error().stack}catch{return t}return Error.prepareStackTrace=e,t}function zI(e){let t=a1();return(n,o={})=>{let{input:s=process.stdin,signal:r}=o,g=new Set,a=new gW.default;a.pipe(o.output??process.stdout);let l=sW.createInterface({terminal:!0,input:s,output:a});a.mute();let I=new Wr(l),{promise:d,resolve:u,reject:c}=TI.withResolver(),C=()=>c(new VI);if(r){let m=()=>c(new yI({cause:r.reason}));if(r.aborted)return m(),Object.assign(d,{cancel:C});r.addEventListener("abort",m),g.add(()=>r.removeEventListener("abort",m))}g.add(qb((m,p)=>{c(new mr(`User force closed the prompt with ${m} ${p}`))}));let A=()=>c(new mr("User force closed the prompt with SIGINT"));return l.on("SIGINT",A),g.add(()=>l.removeListener("SIGINT",A)),hb(l,(m)=>{let p=rW.AsyncResource.bind(()=>ui.clearAll());l.on("close",p),g.add(()=>l.removeListener("close",p));let Z=()=>{let W=()=>I.checkCursorPos();l.input.on("keypress",W),g.add(()=>l.input.removeListener("keypress",W));let h=null;m(()=>{let f=!1;try{let V=e(n,(R)=>{if(f)u(R);else h={value:R}});if(V===void 0){let R=t[1]?.getFileName();if(R&&!R.startsWith("file://"))R=aW.default.resolve(R);throw Error(`Prompt functions must return a string.
246
+ at ${R}`)}let[B,F]=typeof V==="string"?[V]:V;I.render(B,F),ui.run()}catch(V){c(V)}if(f=!0,h!==null){let{value:V}=h;h=null,u(V)}})};if("readableFlowing"in s)g1(Z);else Z();return Object.assign(d.then((W)=>(ui.clearAll(),W),(W)=>{throw ui.clearAll(),W}).finally(()=>{g.forEach((W)=>W()),I.done({clearContent:Boolean(o.clearPromptOnDone)}),a.end()}).then(()=>d),{cancel:C})})}}var lW=require("util");class It{separator=lW.styleText("dim",Array.from({length:15}).join(dn.line));type="separator";constructor(e){if(e)this.separator=e}static isSeparator(e){return Boolean(e&&typeof e==="object"&&"type"in e&&e.type==="separator")}}var cn=require("util");var l1={icon:{cursor:dn.pointer},style:{disabled:(e)=>cn.styleText("dim",e),description:(e)=>cn.styleText("cyan",e),keysHelpTip:(e)=>e.map(([t,i])=>`${cn.styleText("bold",t)} ${cn.styleText("dim",i)}`).join(cn.styleText("dim"," \u2022 "))},i18n:{disabledError:"This option is disabled and cannot be selected."},indexMode:"hidden"};function jI(e){return!It.isSeparator(e)&&!e.disabled}function DI(e){return!It.isSeparator(e)}function I1(e){return e.map((t)=>{if(It.isSeparator(t))return t;if(typeof t!=="object"||t===null||!("value"in t)){let o=String(t);return{value:t,name:o,short:o,disabled:!1}}let i=t.name??String(t.value),n={value:t.value,name:i,short:t.short??i,disabled:t.disabled??!1};if(t.description)n.description=t.description;return n})}var IW=zI((e,t)=>{let{loop:i=!0,pageSize:n=7}=e,o=Bo(l1,e.theme),{keybindings:s}=o,[r,g]=lt("idle"),a=wI({status:r,theme:o}),l=pi(),I=!s.includes("vim"),d=Ro(()=>I1(e.choices),[e.choices]),u=Ro(()=>{let R=d.findIndex(DI),U=d.findLastIndex(DI);if(R===-1)throw new Vo("[select prompt] No selectable choices. All choices are disabled.");return{first:R,last:U}},[d]),c=Ro(()=>{if(!("default"in e))return-1;return d.findIndex((R)=>jI(R)&&R.value===e.default)},[e.default,d]),[C,A]=lt(c===-1?u.first:c),m=d[C];if(m==null||It.isSeparator(m))throw Error("Active index does not point to a choice");let[p,Z]=lt();FI((R,U)=>{if(clearTimeout(l.current),p)Z(void 0);if(fI(R))if(m.disabled)Z(o.i18n.disabledError);else g("done"),t(m.value);else if(yo(R,s)||ur(R,s)){if(U.clearLine(0),i||yo(R,s)&&C!==u.first||ur(R,s)&&C!==u.last){let K=yo(R,s)?-1:1,ee=C;do ee=(ee+K+d.length)%d.length;while(!DI(d[ee]));A(ee)}}else if(hI(R)&&!Number.isNaN(Number(U.line))){let K=Number(U.line)-1,ee=-1,ve=d.findIndex((mn)=>{if(It.isSeparator(mn))return!1;return ee++,ee===K}),un=d[ve];if(un!=null&&jI(un))A(ve);l.current=setTimeout(()=>{U.clearLine(0)},700)}else if(WI(R))U.clearLine(0);else if(I){let K=U.line.toLowerCase(),ee=d.findIndex((ve)=>{if(It.isSeparator(ve)||!jI(ve))return!1;return ve.name.toLowerCase().startsWith(K)});if(ee!==-1)A(ee);l.current=setTimeout(()=>{U.clearLine(0)},700)}}),mi(()=>()=>{clearTimeout(l.current)},[]);let W=o.style.message(e.message,r),h=o.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]),f=0,V=PI({items:d,active:C,renderItem({item:R,isActive:U,index:K}){if(It.isSeparator(R))return f++,` ${R.separator}`;let ee=U?o.icon.cursor:" ",ve=o.indexMode==="number"?`${K+1-f}. `:"";if(R.disabled){let mn=typeof R.disabled==="string"?R.disabled:"(disabled)",YW=U?o.icon.cursor:"-";return o.style.disabled(`${YW} ${ve}${R.name} ${mn}`)}return(U?o.style.highlight:(mn)=>mn)(`${ee} ${ve}${R.name}`)},pageSize:n,loop:i});if(r==="done")return[a,W,o.style.answer(m.short)].filter(Boolean).join(" ");let{description:B}=m;return`${[[a,W].filter(Boolean).join(" "),V," ",B?o.style.description(B):"",p?o.style.error(p):"",h].filter(Boolean).join(`
247
+ `).trimEnd()}${tW}`});var d1="Failure details are withheld because this API key has read access only. A key with write access on the project sees them.",c1=async(e)=>{let t=[];for await(let i of e)t.push(i);return t},cW=(e,t)=>{if(t===void 0||t.projectId!==e)return new Map;let i=new Map;for(let[o,s]of Object.entries(t.pipelines)){let r=i.get(s.pipelineId)??[];r.push(o),i.set(s.pipelineId,r)}let n=new Map;for(let[o,s]of i){let[r,...g]=s;if(r!==void 0&&g.length===0)n.set(o,r)}return n},CW=(e,t)=>{let i=t.get(e.id);return{pipelineId:e.id,name:e.name,...i===void 0?{}:{sourceDirectory:i}}},Cn=(e)=>e.sourceDirectory===void 0?`${e.name} (${e.pipelineId})`:`${e.name} (${e.pipelineId}) ${e.sourceDirectory}`,C1=(e)=>e.length===0?"This project has no pipelines.":`Unknown pipeline. This project has: ${e.map(Cn).join(", ")}.`;async function uW(e){return IW({message:"This project tracks several pipelines. Select one",choices:e})}async function mW(e){let t=e.limit??20,i=await e.client.pipelines.listPage({projectId:e.projectId,limit:t}),n=cW(e.projectId,e.state),o=i.pipelines.map((r)=>CW(r,n)).toSorted((r,g)=>{let a=r.name.localeCompare(g.name);return a===0?r.pipelineId.localeCompare(g.pipelineId):a});if(o.length===0)return{outcome:"reported",output:"This project has no pipelines."};let s=o.map((r)=>r.sourceDirectory===void 0?`${r.name} ${r.pipelineId}`:`${r.name} ${r.pipelineId} ${r.sourceDirectory}`);if(i.pagination.hasMore)s.push(`Showing ${o.length} of ${i.pagination.total} pipelines. Raise --limit to see more.`);return{outcome:"reported",output:s.join(`
248
+ `)}}var u1=async(e,t,i)=>{let n=await c1(e.pipelines.listAll({projectId:t})),o=cW(t,i);return n.map((s)=>CW(s,o)).toSorted((s,r)=>{let g=s.name.localeCompare(r.name);return g===0?s.pipelineId.localeCompare(r.pipelineId):g})},hr=(e,t,i)=>{if(b(e.length<=1,t),e.length!==1)return;let[n]=e;return b(n,i),n},dW=(e,t)=>{let i=C1(t),n=hr(t.filter((l)=>l.pipelineId===e),i,i);if(n!==void 0)return n;let o=t.filter((l)=>l.name===e),s=hr(o,`Multiple pipelines are named ${e}: ${o.map(Cn).join(", ")}.`,i);if(s!==void 0)return s;let r=hr(t.filter((l)=>l.sourceDirectory===e),i,i);if(r!==void 0)return r;let g=t.filter((l)=>{if(l.sourceDirectory===void 0)return!1;let I=l.sourceDirectory.split("/");return I[I.length-1]===e}),a=hr(g,`Multiple pipelines match ${e}: ${g.map(Cn).join(", ")}.`,i);if(a!==void 0)return a;b(!1,i)};async function wo(e){let t=await u1(e.client,e.projectId,e.state);if(e.pipeline!==void 0)return dW(e.pipeline,t);if(b(t.length>0,"This project has no pipelines."),t.length>1&&e.select!==void 0){let i=await e.select(t.map((n)=>({name:Cn(n),value:n.pipelineId})));return dW(i,t)}if(t.length===1){let[i]=t;b(i,"This project has no pipelines."),b(!1,`Pass a pipeline name. This project has: ${Cn(i)}.`)}b(!1,`This project tracks several pipelines, so name one: ${t.map(Cn).join(", ")}.`)}var pW=(e)=>`run ${e.id} is ${e.status}`,AW=(e)=>{if(e.status==="succeeded")return"succeeded";if(e.status==="failed")return"failed";return"started"};async function ZW(e,t){let i=await wo({client:e,...t}),n=await e.runs.start({pipelineId:i.pipelineId});if(t.wait!==!0)return{outcome:"started",output:[`Started ${pW(n)} for ${i.name}.`,`Follow it with toloka pipeline status ${i.pipelineId}, or re-run with --wait.`].join(`
249
+ `)};try{let o=await e.waitFor({type:"pipelineRun",runId:n.id},{...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs},...t.intervalMs===void 0?{}:{intervalMs:t.intervalMs}}),s=AW(o);return{outcome:s,output:s==="failed"?[`Run ${o.id} failed.`,`Inspect items with toloka pipeline results ${o.id} --failed.`].join(`
250
250
  `):`Run ${o.id} succeeded.`}}catch(o){if(o instanceof te&&o.code==="wait_timeout")return{outcome:"timedOut",output:[`Stopped waiting for run ${n.id}; it has not reached a terminal state yet and may still be running.`,`Check it with toloka pipeline status ${i.pipelineId}.`].join(`
251
- `)};throw o}}async function ZW(e,t){let i=await Bo({client:e,...t}),n=await e.runs.listPage({pipelineId:i.pipelineId,limit:t.limit??10});if(n.runs.length===0)return{outcome:"reported",output:`No runs yet for ${i.name}.`};let o=[];for(let s of n.runs){let r=await e.runs.get({runId:s.id});o.push(` ${r.id} ${r.status.padEnd(9)} ${s.createdAt}`)}return{outcome:"reported",output:[`Runs for ${i.name} (${n.pagination.total} total):`,...o].join(`
252
- `)}}async function bW(e,t){let i=await Bo({client:e,...t}),o=(await e.runs.listPage({pipelineId:i.pipelineId,limit:1})).runs[0];if(o===void 0)return{outcome:"reported",output:`No runs yet for ${i.name}.`};let s=await e.runs.get({runId:o.id}),r=t.itemScanLimit??500,g=new Map,a=0;for await(let I of e.runs.listAllItems({runId:s.id}))if(g.set(I.state.status,(g.get(I.state.status)??0)+1),a+=1,a>=r)break;let l=g.size===0?[" no items yet"]:[...g.entries()].toSorted(([I],[d])=>I.localeCompare(d)).map(([I,d])=>` ${I.padEnd(12)} ${d}`);return{outcome:pW(s),output:[`Latest ${mW(s)} (started ${o.createdAt}).`,a>=r?`Items (first ${r}):`:"Items:",...l].join(`
253
- `)}}async function WW(e,t){let i=await e.runs.cancel({runId:t.runId});return{outcome:"canceled",output:`Requested cancellation of run ${i.id}; it is now ${i.status}.`}}var C1=(e)=>{let t=` ${e.index} ${e.id} ${e.state.status}`;if(e.state.status!=="failed")return t;if(!("error"in e.state))return`${t}
254
- ${l1}`;return e.state.error===null?t:`${t}
255
- ${e.state.error}`};async function hW(e,t){let i=t.limit??20,n=t.itemScanLimit??Math.max(500,i),o=[],s=0;for await(let a of e.runs.listAllItems({runId:t.runId})){if(s+=1,t.failedOnly!==!0||a.state.status==="failed")o.push(a);if(o.length>=i||s>=n)break}if(o.length===0)return{outcome:"reported",output:t.failedOnly===!0&&s>=n?`No failed items in the first ${n} items.`:t.failedOnly===!0?"No failed items.":"No items yet."};return{outcome:"reported",output:[s>=n&&o.length<i?`${t.failedOnly===!0?"Failed items":"Items"} for run ${t.runId} (showing ${o.length} after scanning ${n}, limit ${i}):`:`${t.failedOnly===!0?"Failed items":"Items"} for run ${t.runId} (showing ${o.length}, limit ${i}):`,...o.map(C1)].join(`
256
- `)}}var fW=(e)=>{if(typeof e!=="object"||e===null)return!1;if(!("label"in e)||typeof e.label!=="string")return!1;if(!("expectedTotal"in e)||typeof e.expectedTotal!=="string")return!1;if(!("maxTotal"in e)||typeof e.maxTotal!=="string")return!1;if("subLines"in e&&e.subLines!==void 0&&!Array.isArray(e.subLines))return!1;return!0},u1=(e)=>{let t=[0,0,0];for(let i of e)for(let n=0;n<3;n+=1){let o=i[n];t[n]=Math.max(t[n]??0,o?.length??0)}return e.map((i)=>i.map((n,o)=>o===0?n.padEnd(t[0]??0):n.padStart(t[o]??0)).join(" "))},yW=(e,t)=>{let n=[[`${" ".repeat(t)}${e.label}`,e.expectedTotal,e.maxTotal]];for(let o of e.subLines??[])if(fW(o))n.push(...yW(o,t+1));return n},m1=(e)=>{let t=[],i=[];for(let n of e){if(n.kind==="priced"){t.push([n.nodeNameDisplay,n.expectedTotal,n.maxTotal]);for(let o of n.displayBreakdown)if(fW(o))t.push(...yW(o,1));continue}i.push(n.kind==="validation-errors"?` ${n.nodeNameDisplay} skipped (validation errors)`:` ${n.nodeNameDisplay} not billed`)}return{billed:t,unpriced:i}},p1=(e)=>{let t=[["Total",e.expected,e.worstCase]];if(e.bestCase!=null)t.push(["Best case",e.bestCase,""]);if(e.perItemExpected!=null)t.push(["Per item",e.perItemExpected,e.perItemWorstCase??""]);return t},A1=(e,t)=>{let{billed:i,unpriced:n}=m1(e.nodes),o=p1(e.total),s=u1([["Item","Expected","Maximum"],...i,...o]),r=s.slice(0,1+i.length),g=s.slice(1+i.length),a=[`Cost estimate for ${t} ${e.dataset.itemCount} item${e.dataset.itemCount===1?"":"s"}`,"",...r];if(i.length===0)a.push(" (no billed nodes)");if(a.push("",...g),n.length>0)a.push("","Not billed",...n);if(e.isInternalPricing===!0)a.push("","Internal-team pricing.");return a.push("",e.disclaimer),a.join(`
257
- `)};async function VW(e,t){let i=await Bo({client:e,...t}),n=await e.pipelines.estimateCost({pipelineId:i.pipelineId,...t.itemLimit===void 0?{}:{itemLimit:t.itemLimit}});return{output:A1(n,i.name)}}var BW=require("crypto"),jI=require("fs"),Wr=require("fs/promises"),Ke=require("path"),Z1=262144,b1=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}),W1=async(e,t)=>{let i=Ke.relative(t,e);if(i===""||i===".."||i.startsWith(`..${Ke.sep}`)||Ke.isAbsolute(i))return;let n=i.split(Ke.sep);for(let o=1;o<n.length;o+=1){let s=Ke.join(t,...n.slice(0,o)),r=await Wr.lstat(s);b(!r.isSymbolicLink(),`Report file ${e} is inside the symbolic link ${s}; select a path that does not traverse symbolic links.`)}},h1=async(e,t,i)=>{let n=Ke.resolve(i,e);await W1(n,t);let o;try{o=await Wr.open(n,jI.constants.O_RDONLY|jI.constants.O_NOFOLLOW)}catch(s){throw b(!(s instanceof Error&&("code"in s)&&s.code==="ELOOP"),`Report file ${n} is a symbolic link; select the file it points to directly.`),s}try{let s=await o.stat();return b(s.isFile(),`Report file ${n} is not a regular file.`),b(s.size>0,`Report file ${n} is empty.`),b(s.size<=Z1,`Report file ${n} is ${s.size} bytes; the limit is 256 KiB.`),{handle:o,absolutePath:n,size:s.size}}catch(s){throw await o.close(),s}},f1=async(e,t,i)=>{let n=await h1(e,t,i);try{let o=await n.handle.readFile();b(o.byteLength===n.size,`${n.absolutePath} changed while it was being read.`);try{return b1.decode(o)}catch{throw Error(`Report file ${n.absolutePath} is not valid UTF-8.`)}}finally{await n.handle.close()}},y1=async(e,t)=>{if(t)return!0;if(e.prompt===void 0)return!1;let i=(await e.prompt("Send this report to Toloka? [y/N] ")).trim().toLowerCase();return i==="y"||i==="yes"};async function RW(e){let{analytics:t,io:i}=e;b(t.issueReportingEnabled,"Issue reporting is disabled. Re-run with TOLOKA_TELEMETRY=1.");let n=await f1(e.path,e.sourceRoot,e.cwd);if(i.stdout("Issue report preview:"),i.stdout(""),i.stdout(n.replace(/(?![\t\n])(?!\r\n)(?:\p{Cc}|\p{Bidi_Control})/gu,(s)=>`\\u${s.charCodeAt(0).toString(16).padStart(4,"0")}`)),i.stdout(""),i.stdout(`Authored by: ${e.authoredBy}`),i.stdout(`Platform: ${e.platform}`),i.stdout(""),!await y1(i,e.confirm))return i.stderr("Refusing to submit without confirmation in a non-interactive environment. Pass --confirm after reviewing the preview above."),1;let o=BW.randomUUID();return await t.submitIssueReport({reportId:o,reportText:n,authoredBy:e.authoredBy,platform:e.platform}),i.stdout(`Submitted issue report: ${o}`),0}var V1=["Credentials resolve in this order, highest first:"," 1. --api-key / --base-url"," 2. POTATO_API_KEY / POTATO_BASE_URL"," 3. the file written by toloka login",`The platform defaults to ${ti}.`].join(`
258
- `),B1=(e)=>{if(e!=="human"&&e!=="agent")throw new Ct('Expected "human" or "agent".');return e},Ut=(e)=>{let t=Number(e);if(!Number.isInteger(t)||t<=0)throw new Ct("Expected a positive integer.");return t},DI=(e)=>{if(e==="failed")return 1;if(e==="timedOut")return 2;return 0},dt=async(e,t)=>{if(e.sourceRoot!==void 0)return Go.resolve(e.sourceRoot);let i=process.cwd(),n=await xm(i);if(n===void 0||n===i)return i;return t.stderr(`Using project root ${n} (found from ${i}).`),n},GW=(e)=>e.sourceRoot===void 0?process.cwd():Go.resolve(e.sourceRoot),vW=async(e,t)=>{let{found:i,warning:n}=await Mn(t.environment,e.apiKey??t.environment.POTATO_API_KEY);if(n!==void 0)t.io.stderr(n);return i?.credentials},Ro=async(e,t)=>{if(t?.shouldIdentify!==!0)return;try{t.identifyCurrentUser(await e.me())}catch{}},z=async(e,t)=>{let i=await dt(e,t.io),n=await Re(i),o=await vW(e,t),s=pl(e,n,t.environment,o),r=t.injectedClient??ut({apiKey:s.apiKey,baseUrl:s.baseUrl});return await Ro(r,t.analytics),{sourceRoot:i,client:r,baseUrl:s.baseUrl,state:n,stored:o,...s.projectId===void 0?{}:{projectId:s.projectId}}},wW=(e,t,i,n)=>Ui({flags:e,environment:t.environment,stored:i,...n===void 0?{}:{state:n}});function R1(e){let t=new Ai("toloka"),i={value:0},n=e.runChecks??dl,o=async(m,p=n)=>{let Z=new AbortController,W,h=(B)=>{W=B,Z.abort()},f=()=>h(130),V=()=>h(143);process.on("SIGINT",f),process.on("SIGTERM",V);try{return{result:await p({...m,signal:Z.signal}),...W===void 0?{}:{interruptedExitCode:W}}}finally{process.off("SIGINT",f),process.off("SIGTERM",V)}},s=!1;t.description("Preview. Build and operate Toloka pipeline projects from TypeScript source. The public API may change.").version(Fe,"-v, --version","output the current version").option("--source-root <directory>","project root; discovered from the working directory when omitted").option("--api-key <key>","API key for this command only").option("--base-url <url>","platform base URL for this command only").option("--project-id <id>","target project; overrides toloka.json").addHelpText("after",`
259
- ${V1}`).configureOutput({writeOut:(m)=>e.io.stdout(m.replace(/\n$/u,"")),writeErr:(m)=>e.io.stderr(m.replace(/\n$/u,""))}).exitOverride();let r=()=>t.opts();t.hook("postAction",async(m,p)=>{if(s)return;let Z=[];for(let f=p;f!==null;f=f.parent)Z.push(f.name());if(Z.includes("init")||Z.includes("help")||Z.includes("report")||Z.includes("url")||Z.includes("version")||Z.includes("config"))return;let W=await dt(r(),e.io),h=await bZ(W).catch(()=>{return});if(h===void 0)return;s=!0,e.io.stderr(h)}),t.command("version").description("print the current CLI version").action(()=>e.io.stdout(Fe));let g=t.command("config").description("read and write machine CLI settings");g.command("get").argument("[name]","setting name; omit to print every setting").description("print a CLI setting, or every setting").action(async(m)=>{let p=await mo(e.environment);e.io.stdout(iI(p,m).output)}),g.command("set").argument("<name>","setting name").argument("<value>","setting value").description("write a CLI setting for this machine").action(async(m,p)=>{let Z=await BZ(e.environment,m,p);e.io.stdout(Z.output)}),g.action(async()=>{let m=await mo(e.environment);e.io.stdout(iI(m,void 0).output)}),t.command("login").description("store an API key for this machine after verifying it").action(async()=>{let m=await Cp({...r().apiKey===void 0?{}:{apiKey:r().apiKey},...r().baseUrl===void 0?{}:{baseUrl:r().baseUrl},...e.io.prompt===void 0?{}:{prompt:e.io.prompt},write:e.io.stdout,environment:e.environment});e.io.stdout(m.output);try{let p=await tp(e.environment);if(p===void 0)return;let Z=e.injectedClient??ut(p);await Ro(Z,e.analytics)}catch{}}),t.command("logout").description("remove stored credentials from this machine").action(async()=>{let m=await up(e.environment);e.io.stdout(m.output)}),t.command("auth-status").alias("whoami").description("show which platform and key the CLI would use").option("--show-token","print the API key instead of masking it",!1).action(async(m)=>{let p=r(),Z=await Mn(e.environment,p.apiKey??e.environment.POTATO_API_KEY),W=Z.found?.credentials,h=await dt(p,e.io),f=await Re(h),V=wW(p,e,W,f),B=e.injectedClient,F=await pp({environment:e.environment,showToken:m.showToken,credentialLookup:Z,...p.apiKey===void 0?{}:{flagApiKey:p.apiKey},...p.baseUrl===void 0?{}:{flagBaseUrl:p.baseUrl},...B===void 0?{}:{probe:()=>B},...V===void 0?{}:{project:V}});if(e.io.stdout(F.output),!F.authenticated){i.value=1;return}try{let R=pl(p,f,e.environment,W),U=e.injectedClient??ut({apiKey:R.apiKey,baseUrl:R.baseUrl});await Ro(U,e.analytics)}catch{}});let a=t.command("project").description("select and manage the current platform project");a.command("list").option("--limit <n>","maximum projects to list",Ut).description("list remote projects this key can see").action(async(m)=>{let p=r(),{client:Z,stored:W,state:h}=await z(p,e),f=wW(p,e,W,h);await rp({client:Z,io:e.io,...f===void 0?{}:{context:f},...m.limit===void 0?{}:{limit:m.limit}})}),a.command("add").argument("[alias]","local name for this project").argument("[projectId]","platform project id").description("register a live project and select it").action(async(m,p)=>{let Z=r(),W=await xt(e.environment),h=e.injectedClient??ut(W.credentials);await gp({environment:e.environment,flags:Z,client:h,io:e.io,afterPreflight:async()=>Ro(h,e.analytics),...m===void 0?{}:{alias:m},...p===void 0?{}:{projectId:p}})}),a.command("switch").argument("<alias>","local project alias").description("select a registered project").action(async(m)=>{await ap({environment:e.environment,flags:r(),alias:m,io:e.io})}),a.command("current").description("show the project this command would use").action(async()=>{let m=r(),p=await vW(m,e),Z=await dt(m,e.io),W=await Re(Z);if(Ip({flags:m,environment:e.environment,stored:p,...W===void 0?{}:{state:W},io:e.io}).project===void 0)i.value=1}),a.command("url").description("print the current project URL").action(async()=>{let{baseUrl:m,client:p,projectId:Z}=await z(r(),e);b(Z,M);let W=await p.projects.get({projectId:Z}),h=new URL(`/teams/${encodeURIComponent(W.teamId)}/projects/${encodeURIComponent(W.id)}`,m);e.io.stdout(h.href)}),a.command("remove").argument("<alias>","local project alias").description("forget a local project alias").action(async(m)=>{await lp({environment:e.environment,flags:r(),alias:m,io:e.io})}),a.command("create").argument("[alias]","local name for the new project").option("--name <name>","platform project name").option("--team-id <id>","team that owns the project").description("create a live project and select it").action(async(m,p)=>{let Z=r(),W=await xt(e.environment),h=e.injectedClient??ut(W.credentials),f=await dt(Z,e.io);await dp({environment:e.environment,flags:Z,client:h,io:e.io,sourceRoot:f,afterPreflight:async()=>Ro(h,e.analytics),...m===void 0?{}:{alias:m},...p.name===void 0?{}:{name:p.name},...p.teamId===void 0?{}:{teamId:p.teamId}})}),t.command("init").description("initialize this project directory and install the agent bootstrap").action(async()=>{let m=r(),p=GW(m),Z=await Re(p),W=Ui({flags:m,environment:e.environment,...Z===void 0?{}:{state:Z}}),h=await ZZ(p,W===void 0?{}:{projectId:W.id});if(e.io.stdout(h.output),h.warning!==void 0)e.io.stderr(h.warning)}),t.command("import").argument("[projectId]","existing project to write into source; defaults to the selected project").option("-f, --force","replace an existing pipelines/ directory",!1).description("generate TypeScript source from a live project").action(async(m,p)=>{let{sourceRoot:Z,client:W,projectId:h}=await z(r(),e),f=m??h;b(f,M);let V=await KZ(W,{sourceRoot:Z,projectId:f,...p?.force===!0?{force:!0}:{}});e.io.stdout(V.output)}),t.command("plan").description("show what apply would change").action(async()=>{let{sourceRoot:m,client:p,projectId:Z}=await z(r(),e),W=await LZ(p,{sourceRoot:m,...Z===void 0?{}:{projectId:Z}});e.io.stdout(W.output)}),t.command("validate").description("run platform spec validation and report matching checks").action(async()=>{let{sourceRoot:m,client:p,projectId:Z}=await z(r(),e),W=await qZ(p,{sourceRoot:m,...Z===void 0?{}:{projectId:Z}});if(e.io.stdout(W.output),!W.valid)i.value=1}),t.command("check").argument("[pipeline]","pipeline source directory or name").option("--node <node>","check one code or human-work node by name or id").option("--json","print the structured check report",!1).option("--watch","rerun checks when project files change",!1).description("run the complete local source, type, and test gate").action(async(m,p)=>{let Z=await dt(r(),e.io),W={environment:e.environment,sourceRoot:Z,...m===void 0?{}:{pipeline:m},...p.node===void 0?{}:{node:p.node},...p.json?{json:!0}:{}},h=async(F)=>{let R=e.environment[$t];if(R===void 0)e.io.stdout(F);else await FW.writeFile(R,F,"utf8")},f=e.runChecks===void 0&&e.environment[$t]===void 0?cl:n;if(p.watch){let F=new AbortController,R=()=>F.abort();process.on("SIGINT",R),process.on("SIGTERM",R);try{await Km(W,async(U)=>{await h(U.output),i.value=U.exitCode},void 0,F.signal)}finally{process.off("SIGINT",R),process.off("SIGTERM",R)}return}let{result:V,interruptedExitCode:B}=await o(W,f);await h(V.output),i.value=B??V.exitCode}),t.command("apply").description("check source, then make the platform match it").action(async()=>{let m=await dt(r(),e.io),{result:p,interruptedExitCode:Z}=await o({sourceRoot:m,environment:e.environment});if(e.io.stdout(p.output),Z!==void 0){i.value=Z;return}if(p.exitCode!==0){i.value=p.exitCode;return}b(p.source,"Passing checks must return project source");let{client:W,projectId:h}=await z(r(),e),f=await $Z(W,{sourceRoot:m,source:p.source,...h===void 0?{}:{projectId:h}});e.io.stdout(f.output)}),t.command("secret").description("manage project secrets").command("set").argument("<name>","secret name referenced by a code node").option("--from-env <variable>","read the value from this environment variable instead of stdin").description("set a secret value without writing it to disk").action(async(m,p)=>{let{client:Z,projectId:W}=await z(r(),e);b(W,M);let h=p.fromEnv===void 0?(await e.io.readStdin()).replace(/\r?\n$/u,""):e.environment[p.fromEnv];b(h!==void 0,`Missing secret value. Set ${p.fromEnv??"the named environment variable"} or pipe it to stdin.`);try{let f=await lb(Z,{projectId:W,name:m,value:h});e.io.stdout(f.output)}catch{e.io.stderr(`Failed to set secret ${m}.`),i.value=1}});let I=t.command("base-model").description("inspect the global base model catalog");I.command("list").option("--json","print JSON",!1).description("list base models").action(async(m)=>{let{client:p}=await z(r(),e);await db(p,{json:m.json},e.io)}),I.command("get").argument("<id>","base model ID").option("--json","print JSON",!1).description("show one base model").action(async(m,p)=>{let{client:Z}=await z(r(),e);await cb(Z,{id:pI(m),json:p.json},e.io)});let d=t.command("model").description("manage project Models and immutable versions");d.command("list").option("--json","print JSON",!1).description("list Models owned by the selected project").action(async(m)=>{let{client:p,projectId:Z}=await z(r(),e);b(Z,M),await Cb(p,{projectId:Z,json:m.json},e.io)}),d.command("get").argument("<name-or-id>","project Model name or ID").option("--json","print JSON",!1).description("show one project Model").action(async(m,p)=>{let{client:Z,projectId:W}=await z(r(),e);b(W,M),await ub(Z,{projectId:W,nameOrId:m,json:p.json},e.io)}),d.command("versions").argument("<name-or-id>","project Model name or ID").option("--json","print JSON",!1).description("list immutable versions of a model").action(async(m,p)=>{let{client:Z,projectId:W}=await z(r(),e);b(W,M),await mb(Z,{projectId:W,nameOrId:m,json:p.json},e.io)}),d.command("create").argument("<name>","new Model name").requiredOption("--base <id>","base model ID").option("--description <text>","Model description").option("--json","print JSON",!1).description("create project Model metadata without a Model Version").action(async(m,p)=>{let{client:Z,projectId:W}=await z(r(),e);b(W,M),await pb(Z,{projectId:W,name:m,description:p.description,baseModelId:pI(p.base),json:p.json},e.io)}),d.command("archive").option("--json","print JSON",!1).argument("<name-or-id>","project Model name or ID").description("archive a project Model").action(async(m,p)=>{let{client:Z,projectId:W}=await z(r(),e);b(W,M),await Ab(Z,{projectId:W,nameOrId:m,json:p.json},e.io)});let u=t.command("dataset").description("inspect and move dataset catalog and rows");u.command("list").description("list live datasets in the selected project").action(async()=>{let{client:m,projectId:p}=await z(r(),e);b(p,M);let Z=await gb(m,{projectId:p});e.io.stdout(Z.output)}),u.command("fields").argument("<name>","dataset name or id").description("print field declarations inferred from uploaded rows").action(async(m)=>{let{sourceRoot:p,client:Z,projectId:W}=await z(r(),e),h=await rb(Z,{sourceRoot:p,datasetName:m,...W===void 0?{}:{projectId:W}});e.io.stdout(h.output)}),u.command("load").argument("<name>","dataset name or id").requiredOption("--out <file>","JSONL file to write").option("--limit <n>","how many rows to keep after download",Ut).option("--timeout <ms>","how long to wait for the export",Ut).description("download live dataset rows into a JSONL file").action(async(m,p)=>{let{sourceRoot:Z,client:W,projectId:h}=await z(r(),e),f=await ab(W,{sourceRoot:Z,datasetName:m,outPath:Go.resolve(p.out),...h===void 0?{}:{projectId:h},...p.limit===void 0?{}:{limit:p.limit},...p.timeout===void 0?{}:{timeoutMs:p.timeout}});e.io.stdout(f.output)}),u.command("upload").argument("<name>","dataset name or id").argument("<file>","JSON array, JSONL, or CSV file").description("append rows to a dataset").action(async(m,p)=>{let{sourceRoot:Z,client:W,projectId:h}=await z(r(),e),f=await sb(W,{sourceRoot:Z,datasetName:m,filePath:Go.resolve(p),...h===void 0?{}:{projectId:h}});if(e.io.stdout(f.output),f.warning!==void 0)e.io.stderr(f.warning)});let c="pipeline name or id; required unless a TTY picker can choose among several",C=t.command("pipeline").description("operate on a live pipeline in the selected project");C.command("list").option("--limit <n>","maximum pipelines to list",Ut).description("list live pipelines in the selected project").action(async(m)=>{let{client:p,projectId:Z,state:W}=await z(r(),e);b(Z,M);let h=await uW({client:p,projectId:Z,state:W,...m.limit===void 0?{}:{limit:m.limit}});e.io.stdout(h.output)}),C.command("run").argument("[name]",c).option("--wait","wait for the run to reach a terminal state",!1).option("--timeout <ms>","how long to wait",Ut).description("start a run on a deployed pipeline").action(async(m,p)=>{let{client:Z,state:W,projectId:h}=await z(r(),e);b(h,M);let f=await AW(Z,{projectId:h,state:W,...m===void 0?{}:{pipeline:m},wait:p.wait,...p.timeout===void 0?{}:{timeoutMs:p.timeout},...e.io.select===void 0?{}:{select:e.io.select}});e.io.stdout(f.output),i.value=DI(f.outcome)}),C.command("status").argument("[name]",c).description("report the latest run's state and item counts").action(async(m)=>{let{client:p,state:Z,projectId:W}=await z(r(),e);b(W,M);let h=await bW(p,{projectId:W,state:Z,...m===void 0?{}:{pipeline:m},...e.io.select===void 0?{}:{select:e.io.select}});e.io.stdout(h.output),i.value=DI(h.outcome)}),C.command("runs").argument("[name]",c).option("--limit <n>","how many runs to list",Ut).description("list recent runs").action(async(m,p)=>{let{client:Z,state:W,projectId:h}=await z(r(),e);b(h,M);let f=await ZW(Z,{projectId:h,state:W,...m===void 0?{}:{pipeline:m},...p.limit===void 0?{}:{limit:p.limit},...e.io.select===void 0?{}:{select:e.io.select}});e.io.stdout(f.output)}),C.command("cost").argument("[name]",c).option("--item-limit <n>","cap how many items to price",Ut).description("forecast what a run of this pipeline would bill").action(async(m,p)=>{let{client:Z,state:W,projectId:h}=await z(r(),e);b(h,M);let f=await VW(Z,{projectId:h,state:W,...m===void 0?{}:{pipeline:m},...p.itemLimit===void 0?{}:{itemLimit:p.itemLimit},...e.io.select===void 0?{}:{select:e.io.select}});e.io.stdout(f.output)}),C.command("cancel").argument("<runId>","run to cancel").description("request cancellation of a run").action(async(m)=>{let{client:p}=await z(r(),e),Z=await WW(p,{runId:m});e.io.stdout(Z.output)}),C.command("results").argument("<runId>","run to read").option("--limit <n>","how many items to scan",Ut).option("--failed","only report failed items",!1).description("report a run's items").action(async(m,p)=>{let{client:Z}=await z(r(),e),W=await hW(Z,{runId:m,failedOnly:p.failed,...p.limit===void 0?{}:{limit:p.limit}});e.io.stdout(W.output),i.value=DI(W.outcome)}),t.command("status").description("report project health: live counts and pending source changes").action(async()=>{let{sourceRoot:m,client:p,projectId:Z}=await z(r(),e);b(Z,M);let W=await MZ(p,{sourceRoot:m,projectId:Z});e.io.stdout(W.output)}),t.command("report").argument("<markdownPath>","path to a UTF-8 Markdown report").option("--authored-by <who>","human or agent",B1,"human").option("--confirm","confirm submission in a non-interactive environment",!1).description("preview and send an issue report to Toloka through PostHog").action(async(m,p)=>{b(e.analytics,"Issue reporting requires CLI analytics.");let Z=GW(r()),W=r().baseUrl??e.environment.POTATO_BASE_URL??Wt(e.environment)??ti;i.value=await RW({path:m,authoredBy:p.authoredBy,platform:new URL(W).origin,confirm:p.confirm,sourceRoot:Z,cwd:process.cwd(),analytics:e.analytics,io:e.io})});let A=t.command("skill").description("discover bundled agent skills and install them into .agents/skills");return A.command("list").option("--json","print Skill Descriptors with their status as JSON",!1).description("list bundled skills as not-installed, current, or stale").action(async(m)=>{let p=await dt(r(),e.io);await lZ({sourceRoot:p,json:m.json,io:e.io})}),A.command("search").argument("<query>","text matched case-insensitively against id, name, description, and tags").option("--json","print matching Skill Descriptors with their status as JSON",!1).description("find bundled skills for a task").action(async(m,p)=>{let Z=await dt(r(),e.io);await IZ({sourceRoot:Z,query:m,json:p.json,io:e.io})}),A.command("install").argument("<skillId>","skill id from toloka skill list").option("-f, --force","replace an existing .agents/skills/<skillId> directory",!1).description("copy one bundled skill into .agents/skills/<skillId>").action(async(m,p)=>{let Z=await dt(r(),e.io);await dZ({sourceRoot:Z,skillId:m,force:p.force,io:e.io})}),{program:t,exitCode:i}}var G1=async()=>{process.stdin.setEncoding("utf8");let e=[];for await(let t of process.stdin)e.push(String(t));return e.join("")},w1=async(e)=>{process.stdout.write(e);let t=process.stdin.isRaw;process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.setEncoding("utf8");let{promise:i,resolve:n,reject:o}=Promise.withResolvers(),s="",r=()=>{process.stdin.off("data",I),process.stdin.off("end",a),process.stdin.off("error",l),process.stdin.setRawMode(t),process.stdin.pause()},g=()=>{r(),process.stdout.write(`
251
+ `)};throw o}}async function bW(e,t){let i=await wo({client:e,...t}),n=await e.runs.listPage({pipelineId:i.pipelineId,limit:t.limit??10});if(n.runs.length===0)return{outcome:"reported",output:`No runs yet for ${i.name}.`};let o=[];for(let s of n.runs){let r=await e.runs.get({runId:s.id});o.push(` ${r.id} ${r.status.padEnd(9)} ${s.createdAt}`)}return{outcome:"reported",output:[`Runs for ${i.name} (${n.pagination.total} total):`,...o].join(`
252
+ `)}}async function WW(e,t){let i=await wo({client:e,...t}),o=(await e.runs.listPage({pipelineId:i.pipelineId,limit:1})).runs[0];if(o===void 0)return{outcome:"reported",output:`No runs yet for ${i.name}.`};let s=await e.runs.get({runId:o.id}),r=t.itemScanLimit??500,g=new Map,a=0;for await(let I of e.runs.listAllItems({runId:s.id}))if(g.set(I.state.status,(g.get(I.state.status)??0)+1),a+=1,a>=r)break;let l=g.size===0?[" no items yet"]:[...g.entries()].toSorted(([I],[d])=>I.localeCompare(d)).map(([I,d])=>` ${I.padEnd(12)} ${d}`);return{outcome:AW(s),output:[`Latest ${pW(s)} (started ${o.createdAt}).`,a>=r?`Items (first ${r}):`:"Items:",...l].join(`
253
+ `)}}async function hW(e,t){let i=await e.runs.cancel({runId:t.runId});return{outcome:"canceled",output:`Requested cancellation of run ${i.id}; it is now ${i.status}.`}}var m1=(e)=>{let t=` ${e.index} ${e.id} ${e.state.status}`;if(e.state.status!=="failed")return t;if(!("error"in e.state))return`${t}
254
+ ${d1}`;return e.state.error===null?t:`${t}
255
+ ${e.state.error}`};async function fW(e,t){let i=t.limit??20,n=t.itemScanLimit??Math.max(500,i),o=[],s=0;for await(let a of e.runs.listAllItems({runId:t.runId})){if(s+=1,t.failedOnly!==!0||a.state.status==="failed")o.push(a);if(o.length>=i||s>=n)break}if(o.length===0)return{outcome:"reported",output:t.failedOnly===!0&&s>=n?`No failed items in the first ${n} items.`:t.failedOnly===!0?"No failed items.":"No items yet."};return{outcome:"reported",output:[s>=n&&o.length<i?`${t.failedOnly===!0?"Failed items":"Items"} for run ${t.runId} (showing ${o.length} after scanning ${n}, limit ${i}):`:`${t.failedOnly===!0?"Failed items":"Items"} for run ${t.runId} (showing ${o.length}, limit ${i}):`,...o.map(m1)].join(`
256
+ `)}}var yW=(e)=>{if(typeof e!=="object"||e===null)return!1;if(!("label"in e)||typeof e.label!=="string")return!1;if(!("expectedTotal"in e)||typeof e.expectedTotal!=="string")return!1;if(!("maxTotal"in e)||typeof e.maxTotal!=="string")return!1;if("subLines"in e&&e.subLines!==void 0&&!Array.isArray(e.subLines))return!1;return!0},p1=(e)=>{let t=[0,0,0];for(let i of e)for(let n=0;n<3;n+=1){let o=i[n];t[n]=Math.max(t[n]??0,o?.length??0)}return e.map((i)=>i.map((n,o)=>o===0?n.padEnd(t[0]??0):n.padStart(t[o]??0)).join(" "))},VW=(e,t)=>{let n=[[`${" ".repeat(t)}${e.label}`,e.expectedTotal,e.maxTotal]];for(let o of e.subLines??[])if(yW(o))n.push(...VW(o,t+1));return n},A1=(e)=>{let t=[],i=[];for(let n of e){if(n.kind==="priced"){t.push([n.nodeNameDisplay,n.expectedTotal,n.maxTotal]);for(let o of n.displayBreakdown)if(yW(o))t.push(...VW(o,1));continue}i.push(n.kind==="validation-errors"?` ${n.nodeNameDisplay} skipped (validation errors)`:` ${n.nodeNameDisplay} not billed`)}return{billed:t,unpriced:i}},Z1=(e)=>{let t=[["Total",e.expected,e.worstCase]];if(e.bestCase!=null)t.push(["Best case",e.bestCase,""]);if(e.perItemExpected!=null)t.push(["Per item",e.perItemExpected,e.perItemWorstCase??""]);return t},b1=(e,t)=>{let{billed:i,unpriced:n}=A1(e.nodes),o=Z1(e.total),s=p1([["Item","Expected","Maximum"],...i,...o]),r=s.slice(0,1+i.length),g=s.slice(1+i.length),a=[`Cost estimate for ${t} ${e.dataset.itemCount} item${e.dataset.itemCount===1?"":"s"}`,"",...r];if(i.length===0)a.push(" (no billed nodes)");if(a.push("",...g),n.length>0)a.push("","Not billed",...n);if(e.isInternalPricing===!0)a.push("","Internal-team pricing.");return a.push("",e.disclaimer),a.join(`
257
+ `)};async function BW(e,t){let i=await wo({client:e,...t}),n=await e.pipelines.estimateCost({pipelineId:i.pipelineId,...t.itemLimit===void 0?{}:{itemLimit:t.itemLimit}});return{output:b1(n,i.name)}}var RW=require("crypto"),QI=require("fs"),fr=require("fs/promises"),Ke=require("path"),W1=262144,h1=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}),f1=async(e,t)=>{let i=Ke.relative(t,e);if(i===""||i===".."||i.startsWith(`..${Ke.sep}`)||Ke.isAbsolute(i))return;let n=i.split(Ke.sep);for(let o=1;o<n.length;o+=1){let s=Ke.join(t,...n.slice(0,o)),r=await fr.lstat(s);b(!r.isSymbolicLink(),`Report file ${e} is inside the symbolic link ${s}; select a path that does not traverse symbolic links.`)}},y1=async(e,t,i)=>{let n=Ke.resolve(i,e);await f1(n,t);let o;try{o=await fr.open(n,QI.constants.O_RDONLY|QI.constants.O_NOFOLLOW)}catch(s){throw b(!(s instanceof Error&&("code"in s)&&s.code==="ELOOP"),`Report file ${n} is a symbolic link; select the file it points to directly.`),s}try{let s=await o.stat();return b(s.isFile(),`Report file ${n} is not a regular file.`),b(s.size>0,`Report file ${n} is empty.`),b(s.size<=W1,`Report file ${n} is ${s.size} bytes; the limit is 256 KiB.`),{handle:o,absolutePath:n,size:s.size}}catch(s){throw await o.close(),s}},V1=async(e,t,i)=>{let n=await y1(e,t,i);try{let o=await n.handle.readFile();b(o.byteLength===n.size,`${n.absolutePath} changed while it was being read.`);try{return h1.decode(o)}catch{throw Error(`Report file ${n.absolutePath} is not valid UTF-8.`)}}finally{await n.handle.close()}},B1=async(e,t)=>{if(t)return!0;if(e.prompt===void 0)return!1;let i=(await e.prompt("Send this report to Toloka? [y/N] ")).trim().toLowerCase();return i==="y"||i==="yes"};async function GW(e){let{analytics:t,io:i}=e;b(t.issueReportingEnabled,"Issue reporting is disabled. Re-run with TOLOKA_TELEMETRY=1.");let n=await V1(e.path,e.sourceRoot,e.cwd);if(i.stdout("Issue report preview:"),i.stdout(""),i.stdout(n.replace(/(?![\t\n])(?!\r\n)(?:\p{Cc}|\p{Bidi_Control})/gu,(s)=>`\\u${s.charCodeAt(0).toString(16).padStart(4,"0")}`)),i.stdout(""),i.stdout(`Authored by: ${e.authoredBy}`),i.stdout(`Platform: ${e.platform}`),i.stdout(""),!await B1(i,e.confirm))return i.stderr("Refusing to submit without confirmation in a non-interactive environment. Pass --confirm after reviewing the preview above."),1;let o=RW.randomUUID();return await t.submitIssueReport({reportId:o,reportText:n,authoredBy:e.authoredBy,platform:e.platform}),i.stdout(`Submitted issue report: ${o}`),0}var R1=["Credentials resolve in this order, highest first:"," 1. --api-key / --base-url"," 2. POTATO_API_KEY / POTATO_BASE_URL"," 3. the file written by toloka login",`The platform defaults to ${ii}.`].join(`
258
+ `),G1=(e)=>{if(e!=="human"&&e!=="agent")throw new Ct('Expected "human" or "agent".');return e},Ut=(e)=>{let t=Number(e);if(!Number.isInteger(t)||t<=0)throw new Ct("Expected a positive integer.");return t},_I=(e)=>{if(e==="failed")return 1;if(e==="timedOut")return 2;return 0},dt=async(e,t)=>{if(e.sourceRoot!==void 0)return Ho.resolve(e.sourceRoot);let i=process.cwd(),n=await Tm(i);if(n===void 0||n===i)return i;return t.stderr(`Using project root ${n} (found from ${i}).`),n},wW=(e)=>e.sourceRoot===void 0?process.cwd():Ho.resolve(e.sourceRoot),kW=async(e,t)=>{let{found:i,warning:n}=await eo(t.environment,e.apiKey??t.environment.POTATO_API_KEY);if(n!==void 0)t.io.stderr(n);return i?.credentials},Fo=async(e,t)=>{if(t?.shouldIdentify!==!0)return;try{t.identifyCurrentUser(await e.me())}catch{}},z=async(e,t)=>{let i=await dt(e,t.io),n=await Re(i),o=await kW(e,t),s=Al(e,n,t.environment,o),r=t.injectedClient??ut({apiKey:s.apiKey,baseUrl:s.baseUrl});return await Fo(r,t.analytics),{sourceRoot:i,client:r,baseUrl:s.baseUrl,state:n,stored:o,...s.projectId===void 0?{}:{projectId:s.projectId}}},FW=(e,t,i,n)=>Oi({flags:e,environment:t.environment,stored:i,...n===void 0?{}:{state:n}});function w1(e){let t=new Zi("toloka"),i={value:0},n=e.runChecks??cl,o=async(m,p=n)=>{let Z=new AbortController,W,h=(B)=>{W=B,Z.abort()},f=()=>h(130),V=()=>h(143);process.on("SIGINT",f),process.on("SIGTERM",V);try{return{result:await p({...m,signal:Z.signal}),...W===void 0?{}:{interruptedExitCode:W}}}finally{process.off("SIGINT",f),process.off("SIGTERM",V)}},s=!1;t.description("Preview. Build and operate Toloka pipeline projects from TypeScript source. The public API may change.").version(He,"-v, --version","output the current version").option("--source-root <directory>","project root; discovered from the working directory when omitted").option("--api-key <key>","API key for this command only").option("--base-url <url>","platform base URL for this command only").option("--project-id <id>","target project; overrides toloka.json").addHelpText("after",`
259
+ ${R1}`).configureOutput({writeOut:(m)=>e.io.stdout(m.replace(/\n$/u,"")),writeErr:(m)=>e.io.stderr(m.replace(/\n$/u,""))}).exitOverride();let r=()=>t.opts();t.hook("postAction",async(m,p)=>{if(s)return;let Z=[];for(let f=p;f!==null;f=f.parent)Z.push(f.name());if(Z.includes("init")||Z.includes("help")||Z.includes("report")||Z.includes("url")||Z.includes("version")||Z.includes("config"))return;let W=await dt(r(),e.io),h=await hZ(W).catch(()=>{return});if(h===void 0)return;s=!0,e.io.stderr(h)}),t.command("version").description("print the current CLI version").action(()=>e.io.stdout(He));let g=t.command("config").description("read and write machine CLI settings");g.command("get").argument("[name]","setting name; omit to print every setting").description("print a CLI setting, or every setting").action(async(m)=>{let p=await Zo(e.environment);e.io.stdout(oI(p,m).output)}),g.command("set").argument("<name>","setting name").argument("<value>","setting value").description("write a CLI setting for this machine").action(async(m,p)=>{let Z=await GZ(e.environment,m,p);e.io.stdout(Z.output)}),g.action(async()=>{let m=await Zo(e.environment);e.io.stdout(oI(m,void 0).output)}),t.command("login").description("store an API key for this machine after verifying it").action(async()=>{let m=await bp({...r().apiKey===void 0?{}:{apiKey:r().apiKey},...r().baseUrl===void 0?{}:{baseUrl:r().baseUrl},...e.io.prompt===void 0?{}:{prompt:e.io.prompt},write:e.io.stdout,environment:e.environment});e.io.stdout(m.output);try{let p=await gp(e.environment);if(p===void 0)return;let Z=e.injectedClient??ut(p);await Fo(Z,e.analytics)}catch{}}),t.command("logout").description("remove stored credentials from this machine").action(async()=>{let m=await Wp(e.environment);e.io.stdout(m.output)}),t.command("auth-status").alias("whoami").description("show which platform and key the CLI would use").option("--show-token","print the API key instead of masking it",!1).action(async(m)=>{let p=r(),Z=await eo(e.environment,p.apiKey??e.environment.POTATO_API_KEY),W=Z.found?.credentials,h=await dt(p,e.io),f=await Re(h),V=FW(p,e,W,f),B=e.injectedClient,F=await fp({environment:e.environment,showToken:m.showToken,credentialLookup:Z,...p.apiKey===void 0?{}:{flagApiKey:p.apiKey},...p.baseUrl===void 0?{}:{flagBaseUrl:p.baseUrl},...B===void 0?{}:{probe:()=>B},...V===void 0?{}:{project:V}});if(e.io.stdout(F.output),!F.authenticated){i.value=1;return}try{let R=Al(p,f,e.environment,W),U=e.injectedClient??ut({apiKey:R.apiKey,baseUrl:R.baseUrl});await Fo(U,e.analytics)}catch{}});let a=t.command("project").description("select and manage the current platform project");a.command("list").option("--limit <n>","maximum projects to list",Ut).description("list remote projects this key can see").action(async(m)=>{let p=r(),{client:Z,stored:W,state:h}=await z(p,e),f=FW(p,e,W,h);await cp({client:Z,io:e.io,...f===void 0?{}:{context:f},...m.limit===void 0?{}:{limit:m.limit}})}),a.command("add").argument("[alias]","local name for this project").argument("[projectId]","platform project id").description("register a live project and select it").action(async(m,p)=>{let Z=r(),W=await xt(e.environment),h=e.injectedClient??ut(W.credentials);await Cp({environment:e.environment,flags:Z,client:h,io:e.io,afterPreflight:async()=>Fo(h,e.analytics),...m===void 0?{}:{alias:m},...p===void 0?{}:{projectId:p}})}),a.command("switch").argument("<alias>","local project alias").description("select a registered project").action(async(m)=>{await up({environment:e.environment,flags:r(),alias:m,io:e.io})}),a.command("current").description("show the project this command would use").action(async()=>{let m=r(),p=await kW(m,e),Z=await dt(m,e.io),W=await Re(Z);if(pp({flags:m,environment:e.environment,stored:p,...W===void 0?{}:{state:W},io:e.io}).project===void 0)i.value=1}),a.command("url").description("print the current project URL").action(async()=>{let{baseUrl:m,client:p,projectId:Z}=await z(r(),e);b(Z,M);let W=await p.projects.get({projectId:Z}),h=new URL(`/teams/${encodeURIComponent(W.teamId)}/projects/${encodeURIComponent(W.id)}`,m);e.io.stdout(h.href)}),a.command("remove").argument("<alias>","local project alias").description("forget a local project alias").action(async(m)=>{await mp({environment:e.environment,flags:r(),alias:m,io:e.io})}),a.command("create").argument("[alias]","local name for the new project").option("--name <name>","platform project name").option("--team-id <id>","team that owns the project").description("create a live project and select it").action(async(m,p)=>{let Z=r(),W=await xt(e.environment),h=e.injectedClient??ut(W.credentials),f=await dt(Z,e.io);await Ap({environment:e.environment,flags:Z,client:h,io:e.io,sourceRoot:f,afterPreflight:async()=>Fo(h,e.analytics),...m===void 0?{}:{alias:m},...p.name===void 0?{}:{name:p.name},...p.teamId===void 0?{}:{teamId:p.teamId}})}),t.command("init").description("initialize this project directory and install the agent bootstrap").action(async()=>{let m=r(),p=wW(m),Z=await Re(p),W=Oi({flags:m,environment:e.environment,...Z===void 0?{}:{state:Z}}),h=await WZ(p,W===void 0?{}:{projectId:W.id});if(e.io.stdout(h.output),h.warning!==void 0)e.io.stderr(h.warning)}),t.command("import").argument("[projectId]","existing project to write into source; defaults to the selected project").option("-f, --force","replace an existing pipelines/ directory",!1).description("generate TypeScript source from a live project").action(async(m,p)=>{let{sourceRoot:Z,client:W,projectId:h}=await z(r(),e),f=m??h;b(f,M);let V=await LZ(W,{sourceRoot:Z,projectId:f,...p?.force===!0?{force:!0}:{}});e.io.stdout(V.output)}),t.command("plan").description("show what apply would change").action(async()=>{let{sourceRoot:m,client:p,projectId:Z}=await z(r(),e),W=await MZ(p,{sourceRoot:m,...Z===void 0?{}:{projectId:Z}});e.io.stdout(W.output)}),t.command("validate").description("run platform spec validation and report matching checks").action(async()=>{let{sourceRoot:m,client:p,projectId:Z}=await z(r(),e),W=await eb(p,{sourceRoot:m,...Z===void 0?{}:{projectId:Z}});if(e.io.stdout(W.output),!W.valid)i.value=1}),t.command("check").argument("[pipeline]","pipeline source directory or name").option("--node <node>","check one code or human-work node by name or id").option("--json","print the structured check report",!1).option("--watch","rerun checks when project files change",!1).description("run the complete local source, type, and test gate").action(async(m,p)=>{let Z=await dt(r(),e.io),W={environment:e.environment,sourceRoot:Z,...m===void 0?{}:{pipeline:m},...p.node===void 0?{}:{node:p.node},...p.json?{json:!0}:{}},h=async(F)=>{let R=e.environment[qt];if(R===void 0)e.io.stdout(F);else await HW.writeFile(R,F,"utf8")},f=e.runChecks===void 0&&e.environment[qt]===void 0?Cl:n;if(p.watch){let F=new AbortController,R=()=>F.abort();process.on("SIGINT",R),process.on("SIGTERM",R);try{await tp(W,async(U)=>{await h(U.output),i.value=U.exitCode},void 0,F.signal)}finally{process.off("SIGINT",R),process.off("SIGTERM",R)}return}let{result:V,interruptedExitCode:B}=await o(W,f);await h(V.output),i.value=B??V.exitCode}),t.command("apply").description("check source, then make the platform match it").action(async()=>{let m=await dt(r(),e.io),{result:p,interruptedExitCode:Z}=await o({sourceRoot:m,environment:e.environment});if(e.io.stdout(p.output),Z!==void 0){i.value=Z;return}if(p.exitCode!==0){i.value=p.exitCode;return}b(p.source,"Passing checks must return project source");let{client:W,projectId:h}=await z(r(),e),f=await qZ(W,{sourceRoot:m,source:p.source,...h===void 0?{}:{projectId:h}});e.io.stdout(f.output)}),t.command("secret").description("manage project secrets").command("set").argument("<name>","secret name referenced by a code node").option("--from-env <variable>","read the value from this environment variable instead of stdin").description("set a secret value without writing it to disk").action(async(m,p)=>{let{client:Z,projectId:W}=await z(r(),e);b(W,M);let h=p.fromEnv===void 0?(await e.io.readStdin()).replace(/\r?\n$/u,""):e.environment[p.fromEnv];b(h!==void 0,`Missing secret value. Set ${p.fromEnv??"the named environment variable"} or pipe it to stdin.`);try{let f=await Ib(Z,{projectId:W,name:m,value:h});e.io.stdout(f.output)}catch{e.io.stderr(`Failed to set secret ${m}.`),i.value=1}});let I=t.command("base-model").description("inspect the global base model catalog");I.command("list").option("--json","print JSON",!1).description("list base models").action(async(m)=>{let{client:p}=await z(r(),e);await cb(p,{json:m.json},e.io)}),I.command("get").argument("<id>","base model ID").option("--json","print JSON",!1).description("show one base model").action(async(m,p)=>{let{client:Z}=await z(r(),e);await Cb(Z,{id:ZI(m),json:p.json},e.io)});let d=t.command("model").description("manage project Models and immutable versions");d.command("list").option("--json","print JSON",!1).description("list Models owned by the selected project").action(async(m)=>{let{client:p,projectId:Z}=await z(r(),e);b(Z,M),await ub(p,{projectId:Z,json:m.json},e.io)}),d.command("get").argument("<name-or-id>","project Model name or ID").option("--json","print JSON",!1).description("show one project Model").action(async(m,p)=>{let{client:Z,projectId:W}=await z(r(),e);b(W,M),await mb(Z,{projectId:W,nameOrId:m,json:p.json},e.io)}),d.command("versions").argument("<name-or-id>","project Model name or ID").option("--json","print JSON",!1).description("list immutable versions of a model").action(async(m,p)=>{let{client:Z,projectId:W}=await z(r(),e);b(W,M),await pb(Z,{projectId:W,nameOrId:m,json:p.json},e.io)}),d.command("create").argument("<name>","new Model name").requiredOption("--base <id>","base model ID").option("--description <text>","Model description").option("--json","print JSON",!1).description("create project Model metadata without a Model Version").action(async(m,p)=>{let{client:Z,projectId:W}=await z(r(),e);b(W,M),await Ab(Z,{projectId:W,name:m,description:p.description,baseModelId:ZI(p.base),json:p.json},e.io)}),d.command("archive").option("--json","print JSON",!1).argument("<name-or-id>","project Model name or ID").description("archive a project Model").action(async(m,p)=>{let{client:Z,projectId:W}=await z(r(),e);b(W,M),await Zb(Z,{projectId:W,nameOrId:m,json:p.json},e.io)});let u=t.command("dataset").description("inspect and move dataset catalog and rows");u.command("list").description("list live datasets in the selected project").action(async()=>{let{client:m,projectId:p}=await z(r(),e);b(p,M);let Z=await ab(m,{projectId:p});e.io.stdout(Z.output)}),u.command("fields").argument("<name>","dataset name or id").description("print field declarations inferred from uploaded rows").action(async(m)=>{let{sourceRoot:p,client:Z,projectId:W}=await z(r(),e),h=await gb(Z,{sourceRoot:p,datasetName:m,...W===void 0?{}:{projectId:W}});e.io.stdout(h.output)}),u.command("load").argument("<name>","dataset name or id").requiredOption("--out <file>","JSONL file to write").option("--limit <n>","how many rows to keep after download",Ut).option("--timeout <ms>","how long to wait for the export",Ut).description("download live dataset rows into a JSONL file").action(async(m,p)=>{let{sourceRoot:Z,client:W,projectId:h}=await z(r(),e),f=await lb(W,{sourceRoot:Z,datasetName:m,outPath:Ho.resolve(p.out),...h===void 0?{}:{projectId:h},...p.limit===void 0?{}:{limit:p.limit},...p.timeout===void 0?{}:{timeoutMs:p.timeout}});e.io.stdout(f.output)}),u.command("upload").argument("<name>","dataset name or id").argument("<file>","JSON array, JSONL, or CSV file").description("append rows to a dataset").action(async(m,p)=>{let{sourceRoot:Z,client:W,projectId:h}=await z(r(),e),f=await rb(W,{sourceRoot:Z,datasetName:m,filePath:Ho.resolve(p),...h===void 0?{}:{projectId:h}});if(e.io.stdout(f.output),f.warning!==void 0)e.io.stderr(f.warning)});let c="pipeline name or id; required unless a TTY picker can choose among several",C=t.command("pipeline").description("operate on a live pipeline in the selected project");C.command("list").option("--limit <n>","maximum pipelines to list",Ut).description("list live pipelines in the selected project").action(async(m)=>{let{client:p,projectId:Z,state:W}=await z(r(),e);b(Z,M);let h=await mW({client:p,projectId:Z,state:W,...m.limit===void 0?{}:{limit:m.limit}});e.io.stdout(h.output)}),C.command("run").argument("[name]",c).option("--wait","wait for the run to reach a terminal state",!1).option("--timeout <ms>","how long to wait",Ut).description("start a run on a deployed pipeline").action(async(m,p)=>{let{client:Z,state:W,projectId:h}=await z(r(),e);b(h,M);let f=await ZW(Z,{projectId:h,state:W,...m===void 0?{}:{pipeline:m},wait:p.wait,...p.timeout===void 0?{}:{timeoutMs:p.timeout},...e.io.select===void 0?{}:{select:e.io.select}});e.io.stdout(f.output),i.value=_I(f.outcome)}),C.command("status").argument("[name]",c).description("report the latest run's state and item counts").action(async(m)=>{let{client:p,state:Z,projectId:W}=await z(r(),e);b(W,M);let h=await WW(p,{projectId:W,state:Z,...m===void 0?{}:{pipeline:m},...e.io.select===void 0?{}:{select:e.io.select}});e.io.stdout(h.output),i.value=_I(h.outcome)}),C.command("runs").argument("[name]",c).option("--limit <n>","how many runs to list",Ut).description("list recent runs").action(async(m,p)=>{let{client:Z,state:W,projectId:h}=await z(r(),e);b(h,M);let f=await bW(Z,{projectId:h,state:W,...m===void 0?{}:{pipeline:m},...p.limit===void 0?{}:{limit:p.limit},...e.io.select===void 0?{}:{select:e.io.select}});e.io.stdout(f.output)}),C.command("cost").argument("[name]",c).option("--item-limit <n>","cap how many items to price",Ut).description("forecast what a run of this pipeline would bill").action(async(m,p)=>{let{client:Z,state:W,projectId:h}=await z(r(),e);b(h,M);let f=await BW(Z,{projectId:h,state:W,...m===void 0?{}:{pipeline:m},...p.itemLimit===void 0?{}:{itemLimit:p.itemLimit},...e.io.select===void 0?{}:{select:e.io.select}});e.io.stdout(f.output)}),C.command("cancel").argument("<runId>","run to cancel").description("request cancellation of a run").action(async(m)=>{let{client:p}=await z(r(),e),Z=await hW(p,{runId:m});e.io.stdout(Z.output)}),C.command("results").argument("<runId>","run to read").option("--limit <n>","how many items to scan",Ut).option("--failed","only report failed items",!1).description("report a run's items").action(async(m,p)=>{let{client:Z}=await z(r(),e),W=await fW(Z,{runId:m,failedOnly:p.failed,...p.limit===void 0?{}:{limit:p.limit}});e.io.stdout(W.output),i.value=_I(W.outcome)}),t.command("status").description("report project health: live counts and pending source changes").action(async()=>{let{sourceRoot:m,client:p,projectId:Z}=await z(r(),e);b(Z,M);let W=await $Z(p,{sourceRoot:m,projectId:Z});e.io.stdout(W.output)}),t.command("report").argument("<markdownPath>","path to a UTF-8 Markdown report").option("--authored-by <who>","human or agent",G1,"human").option("--confirm","confirm submission in a non-interactive environment",!1).description("preview and send an issue report to Toloka through PostHog").action(async(m,p)=>{b(e.analytics,"Issue reporting requires CLI analytics.");let Z=wW(r()),W=r().baseUrl??e.environment.POTATO_BASE_URL??Wt(e.environment)??ii;i.value=await GW({path:m,authoredBy:p.authoredBy,platform:new URL(W).origin,confirm:p.confirm,sourceRoot:Z,cwd:process.cwd(),analytics:e.analytics,io:e.io})});let A=t.command("skill").description("discover bundled agent skills and install them into .agents/skills");return A.command("list").option("--json","print Skill Descriptors with their status as JSON",!1).description("list bundled skills as not-installed, current, or stale").action(async(m)=>{let p=await dt(r(),e.io);await dZ({sourceRoot:p,json:m.json,io:e.io})}),A.command("search").argument("<query>","text matched case-insensitively against id, name, description, and tags").option("--json","print matching Skill Descriptors with their status as JSON",!1).description("find bundled skills for a task").action(async(m,p)=>{let Z=await dt(r(),e.io);await cZ({sourceRoot:Z,query:m,json:p.json,io:e.io})}),A.command("install").argument("<skillId>","skill id from toloka skill list").option("-f, --force","replace an existing .agents/skills/<skillId> directory",!1).description("copy one bundled skill into .agents/skills/<skillId>").action(async(m,p)=>{let Z=await dt(r(),e.io);await CZ({sourceRoot:Z,skillId:m,force:p.force,io:e.io})}),{program:t,exitCode:i}}var F1=async()=>{process.stdin.setEncoding("utf8");let e=[];for await(let t of process.stdin)e.push(String(t));return e.join("")},H1=async(e)=>{process.stdout.write(e);let t=process.stdin.isRaw;process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.setEncoding("utf8");let{promise:i,resolve:n,reject:o}=Promise.withResolvers(),s="",r=()=>{process.stdin.off("data",I),process.stdin.off("end",a),process.stdin.off("error",l),process.stdin.setRawMode(t),process.stdin.pause()},g=()=>{r(),process.stdout.write(`
260
260
  `)},a=()=>{g(),o(Error("Standard input closed before an API key was entered."))},l=(d)=>{g(),o(d)},I=(d)=>{for(let u of d){if(u==="\r"||u===`
261
- `){g(),n(s);return}if(u==="\x03"||u==="\x04"){g(),o(Error(u==="\x03"?"Canceled.":"Standard input closed before an API key was entered."));return}if(u==="\x7F"||u==="\b"){if(s.length>0)s=s.slice(0,-1),process.stdout.write("\b \b");continue}s+=u,process.stdout.write("*")}};process.stdin.on("data",I),process.stdin.once("end",a),process.stdin.once("error",l);try{return await i}finally{r()}},F1=async(e,t={})=>{if(t.mask===!0)return w1(e);let i=HW.createInterface({input:process.stdin,output:process.stdout,terminal:!0});try{return await i.question(e)}finally{i.close()}},H1=()=>({stdout:(e)=>console.log(e),stderr:(e)=>console.error(e),readStdin:G1,...process.stdin.isTTY?{prompt:F1,select:CW}:{}}),v1=async(e,t,i,n)=>{try{await e.parseAsync([...i],{from:"user"});let o=t.value;return{code:o,outcome:o===0?"succeeded":"failed"}}catch(o){if(o instanceof ct){let s=o.exitCode===0?0:1;return{code:s,outcome:s===0?"succeeded":"usage_error",error:o}}return n.stderr(uo(o)),{code:1,outcome:"failed",error:o}}};async function kW(e,t=process.env,i=H1(),n,o,s,r){let g=await YZ({argv:e,environment:t,io:i,...r===void 0?{}:{hooks:r}});if(g.status==="reexec")return g.exitCode;let a=t[$t]===void 0?o??hZ({environment:t}):void 0,{program:l,exitCode:I}=R1({environment:t,io:i,...a===void 0?{}:{analytics:a},...n===void 0?{}:{injectedClient:n},...s===void 0?{}:{runChecks:s}}),d=Date.now(),u=await v1(l,I,e,i);if(a!==void 0)try{a.captureCommand({command:nr(e),durationMs:Date.now()-d,exitCode:u.code,outcome:u.outcome,...u.error===void 0?{}:{error:u.error}}),await a.shutdown()}catch{}return u.code}kW(process.argv.slice(2)).then((e)=>{process.exitCode=e},(e)=>{console.error(e),process.exitCode=1});})
261
+ `){g(),n(s);return}if(u==="\x03"||u==="\x04"){g(),o(Error(u==="\x03"?"Canceled.":"Standard input closed before an API key was entered."));return}if(u==="\x7F"||u==="\b"){if(s.length>0)s=s.slice(0,-1),process.stdout.write("\b \b");continue}s+=u,process.stdout.write("*")}};process.stdin.on("data",I),process.stdin.once("end",a),process.stdin.once("error",l);try{return await i}finally{r()}},v1=async(e,t={})=>{if(t.mask===!0)return H1(e);let i=vW.createInterface({input:process.stdin,output:process.stdout,terminal:!0});try{return await i.question(e)}finally{i.close()}},k1=()=>({stdout:(e)=>console.log(e),stderr:(e)=>console.error(e),readStdin:F1,...process.stdin.isTTY?{prompt:v1,select:uW}:{}}),P1=async(e,t,i,n)=>{try{await e.parseAsync([...i],{from:"user"});let o=t.value;return{code:o,outcome:o===0?"succeeded":"failed"}}catch(o){if(o instanceof ct){let s=o.exitCode===0?0:1;return{code:s,outcome:s===0?"succeeded":"usage_error",error:o}}return n.stderr(Ao(o)),{code:1,outcome:"failed",error:o}}};async function PW(e,t=process.env,i=k1(),n,o,s,r){let g=await NZ({argv:e,environment:t,io:i,...r===void 0?{}:{hooks:r}});if(g.status==="reexec")return g.exitCode;let a=t[qt]===void 0?o??yZ({environment:t}):void 0,{program:l,exitCode:I}=w1({environment:t,io:i,...a===void 0?{}:{analytics:a},...n===void 0?{}:{injectedClient:n},...s===void 0?{}:{runChecks:s}}),d=Date.now(),u=await P1(l,I,e,i);if(a!==void 0)try{a.captureCommand({command:sr(e),durationMs:Date.now()-d,exitCode:u.code,outcome:u.outcome,...u.error===void 0?{}:{error:u.error}}),await a.shutdown()}catch{}return u.code}PW(process.argv.slice(2)).then((e)=>{process.exitCode=e},(e)=>{console.error(e),process.exitCode=1});})