@ditojs/admin 1.29.0 → 2.0.0

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.
Files changed (79) hide show
  1. package/dist/dito-admin.es.js +5295 -6852
  2. package/dist/dito-admin.umd.js +5 -5
  3. package/dist/style.css +1 -1
  4. package/package.json +37 -22
  5. package/src/DitoAdmin.js +44 -58
  6. package/src/DitoComponent.js +18 -50
  7. package/src/DitoContext.js +7 -3
  8. package/src/TypeComponent.js +15 -13
  9. package/src/appState.js +4 -2
  10. package/src/components/DitoAccount.vue +14 -14
  11. package/src/components/DitoButtons.vue +18 -10
  12. package/src/components/DitoClipboard.vue +16 -16
  13. package/src/components/DitoContainer.vue +32 -32
  14. package/src/components/DitoCreateButton.vue +22 -23
  15. package/src/components/DitoDialog.vue +73 -18
  16. package/src/components/DitoEditButtons.vue +31 -31
  17. package/src/components/DitoElement.vue +6 -6
  18. package/src/components/DitoErrors.vue +6 -6
  19. package/src/components/DitoForm.vue +42 -43
  20. package/src/components/DitoFormNested.vue +7 -3
  21. package/src/components/DitoHeader.vue +19 -19
  22. package/src/components/DitoLabel.vue +25 -25
  23. package/src/components/DitoMenu.vue +9 -9
  24. package/src/components/DitoPagination.vue +5 -5
  25. package/src/components/DitoPane.vue +32 -32
  26. package/src/components/DitoPanel.vue +18 -18
  27. package/src/components/DitoPanels.vue +5 -3
  28. package/src/components/DitoRoot.vue +107 -30
  29. package/src/components/DitoSchema.vue +76 -74
  30. package/src/components/DitoSchemaInlined.vue +33 -30
  31. package/src/components/DitoScopes.vue +14 -13
  32. package/src/components/DitoSpinner.vue +101 -0
  33. package/src/components/DitoTableCell.vue +19 -25
  34. package/src/components/DitoTableHead.vue +10 -7
  35. package/src/components/DitoTabs.vue +7 -6
  36. package/src/components/DitoTreeItem.vue +89 -85
  37. package/src/components/DitoVNode.vue +9 -7
  38. package/src/components/DitoView.vue +25 -21
  39. package/src/mixins/DataMixin.js +2 -2
  40. package/src/mixins/DitoMixin.js +43 -46
  41. package/src/mixins/DomMixin.js +1 -1
  42. package/src/mixins/EmitterMixin.js +11 -11
  43. package/src/mixins/ItemMixin.js +7 -5
  44. package/src/mixins/RouteMixin.js +20 -10
  45. package/src/mixins/SchemaParentMixin.js +2 -2
  46. package/src/mixins/SourceMixin.js +7 -9
  47. package/src/mixins/TypeMixin.js +29 -34
  48. package/src/mixins/ValidationMixin.js +4 -19
  49. package/src/types/TypeButton.vue +11 -15
  50. package/src/types/TypeCheckbox.vue +7 -8
  51. package/src/types/TypeCheckboxes.vue +14 -15
  52. package/src/types/TypeCode.vue +5 -5
  53. package/src/types/TypeColor.vue +9 -12
  54. package/src/types/TypeComponent.vue +12 -7
  55. package/src/types/TypeComputed.vue +13 -12
  56. package/src/types/TypeDate.vue +10 -11
  57. package/src/types/TypeLabel.vue +1 -1
  58. package/src/types/TypeList.vue +115 -92
  59. package/src/types/TypeMarkup.vue +166 -125
  60. package/src/types/TypeMultiselect.vue +37 -47
  61. package/src/types/TypeNumber.vue +10 -11
  62. package/src/types/TypeObject.vue +72 -46
  63. package/src/types/TypeProgress.vue +7 -8
  64. package/src/types/TypeRadio.vue +15 -14
  65. package/src/types/TypeSection.vue +10 -10
  66. package/src/types/TypeSelect.vue +32 -33
  67. package/src/types/TypeSlider.vue +20 -22
  68. package/src/types/TypeSwitch.vue +8 -9
  69. package/src/types/TypeText.vue +7 -8
  70. package/src/types/TypeTextarea.vue +8 -9
  71. package/src/types/TypeTreeList.vue +40 -34
  72. package/src/types/TypeUpload.vue +61 -61
  73. package/src/utils/accessor.js +1 -1
  74. package/src/utils/data.js +0 -4
  75. package/src/utils/options.js +48 -0
  76. package/src/utils/path.js +5 -0
  77. package/src/utils/schema.js +73 -56
  78. package/src/utils/vue.js +11 -0
  79. package/types/index.d.ts +1 -1
@@ -1,6 +1,6 @@
1
- (function(v,V){typeof exports=="object"&&typeof module<"u"?module.exports=V(require("vue"),require("vue-js-modal"),require("vue-router"),require("vue-notification"),require("@ditojs/utils"),require("nanoid"),require("vuedraggable"),require("codeflask"),require("tinycolor2"),require("vue-color"),require("tiptap"),require("tiptap-commands"),require("tiptap-extensions"),require("vue-multiselect"),require("vue-upload-component"),require("filesize-parser"),require("filesize")):typeof define=="function"&&define.amd?define(["vue","vue-js-modal","vue-router","vue-notification","@ditojs/utils","nanoid","vuedraggable","codeflask","tinycolor2","vue-color","tiptap","tiptap-commands","tiptap-extensions","vue-multiselect","vue-upload-component","filesize-parser","filesize"],V):(v=typeof globalThis<"u"?globalThis:v||self,v["dito-admin"]=V(v.vue,v["vue-js-modal"],v["vue-router"],v["vue-notification"],v["@ditojs/utils"],v.nanoid,v.vuedraggable,v.codeflask,v.tinycolor2,v["vue-color"],v.tiptap,v["tiptap-commands"],v["tiptap-extensions"],v["vue-multiselect"],v["vue-upload-component"],v["filesize-parser"],v.filesize))})(this,function(v,V,L,Ls,o,Ms,nt,qs,at,Is,W,As,F,Ns,zs,Us,Hs){"use strict";var Uu=Object.defineProperty;var Hu=(v,V,L)=>V in v?Uu(v,V,{enumerable:!0,configurable:!0,writable:!0,value:L}):v[V]=L;var Ft=(v,V,L)=>(Hu(v,typeof V!="symbol"?V+"":V,L),L);const jt={title:"",routeComponents:[],user:null,loadCache:{},activeLabel:null,clipboardData:null};function j(t,e){return t?`${t}/${e}`:e}function Ws(t){const e=o.parseDataPath(t);return e==null||e.pop(),e}function it(t,e=!1){return e?Ws(t):o.parseDataPath(t)}function Ys(t,e=!1){return o.normalizeDataPath(it(t,e))}function Vt(t,e=!1){const s=it(t,e);if(s){let n;do n=s.pop();while(n!=null&&o.isInteger(+n));if(n!=null)return s}return null}function Ks(t,e=!1){return o.normalizeDataPath(Vt(t,e))}function rt(t,e,s=!1){const n=it(e,s);return n?o.getValueAtDataPath(t,n):null}function ot(t,e,s=!1){const n=Vt(e,s);return n?o.getValueAtDataPath(t,n):null}function Et(t){const e=o.parseDataPath(t);return e[e.length-1]}function Js(t){const e=Et(t);return e==null||o.isInteger(+e)?null:e}function lt(t){const e=Et(t),s=e==null?null:+e;return o.isInteger(s)?s:null}let Qs=0;function Xs(t,e="id"){t[e]=`@${++Qs}`}function Y(t){return/^@/.test(t)}function Gs(t,e="id"){return(t==null?void 0:t[e])!=null&&Object.keys(t).length===1}const ct=new WeakMap;function w(t,e,s){const n=ct.get(t),a=n[e];return a!==void 0||n.hasOwnProperty(e)?a:o.isFunction(s)?s():s}function Zs(t,e,s){ct.get(t)[e]=s}class S{constructor(e,s){s=s?o.isFunction(s)?s():{...s}:{},s.nested??(s.nested=!0),s.component=e;const n=Object.setPrototypeOf(s,e);ct.set(this,n)}static get(e,s){return s instanceof S?s:new S(e,s)}get nested(){return w(this,"nested",!0)}get value(){return w(this,"value",void 0)}get dataPath(){return w(this,"dataPath","")}get name(){return w(this,"name",()=>Js(this.dataPath))}get index(){return w(this,"index",()=>lt(this.dataPath))}get itemDataPath(){return Ys(this.dataPath,this.nested)}get parentItemDataPath(){return Ks(this.dataPath,this.nested)}get itemIndex(){return lt(this.itemDataPath)}get parentItemIndex(){return lt(this.parentItemDataPath)}get item(){return w(this,"data",()=>rt(this.rootItem,this.dataPath,this.nested))}get parentItem(){const e=ot(this.rootItem,this.dataPath,this.nested)||null;return e!==this.item?e:null}get rootItem(){return w(this,"rootData",null)}get processedItem(){return w(this,"processedData",null)}get clipboardItem(){return w(this,"clipboardData",null)}get user(){return w(this,"user",null)}get api(){return w(this,"api",null)}get views(){return w(this,"views",null)}get itemLabel(){return w(this,"itemLabel",null)}get formLabel(){return w(this,"formLabel",null)}get component(){return w(this,"component",null)}get schemaComponent(){return w(this,"schemaComponent",null)}get formComponent(){return w(this,"formComponent",null)}get viewComponent(){return w(this,"viewComponent",null)}get dialogComponent(){return w(this,"dialogComponent",null)}get panelComponent(){return w(this,"panelComponent",null)}get resourceComponent(){return w(this,"resourceComponent",null)}get sourceComponent(){return w(this,"sourceComponent",null)}get option(){return w(this,"option",void 0)}get options(){return w(this,"options",void 0)}get query(){return w(this,"query",void 0)}get error(){return w(this,"error",void 0)}get wasNotified(){return w(this,"wasNotified",!1)}get request(){return e=>this.component.request(e)}get format(){return(e,s)=>this.component.format(e,s)}get navigate(){return e=>this.component.navigate(e)}get download(){return e=>this.component.download(e)}get getResourceUrl(){return e=>this.component.getResourceUrl(e)}get notify(){return e=>{this.component.notify(e),Zs(this,"wasNotified",!0)}}}const tn={data(){return{$events:null}},methods:{on(t,e){if(o.isArray(t))for(const s of t)this.on(s,e);else if(o.isPlainObject(t))for(const s in t)this.on(s,t[s]);else{const s=this.$events||(this.$events=Object.create(null)),{callbacks:n}=s[t]||(s[t]={callbacks:[],queue:[]});n.push(e)}return this},once(t,e){const s=(...n)=>(this.off(t,s),e.apply(this,n));return s.callback=e,this.on(t,s)},off(t,e){var s;if(!arguments.length)delete this.$events;else if(o.isArray(t))for(const n of t)this.off(n,e);else if(o.isPlainObject(t))for(const n in t)this.off(n,t[n]);else{const n=(s=this.$events)==null?void 0:s[t];if(n)if(!e)delete this.$events[t];else{const{callbacks:a}=n,i=a.findIndex(r=>r===e||r.callback===e);i!==-1&&a.splice(i,1)}}return this},emit(t,...e){var n;const s=(n=this.$events)==null?void 0:n[t];if(s){const{queue:a,callbacks:i}=s;return new Promise(r=>{const l=async()=>{const c=a.shift();if(c){let u;for(const d of i)try{const h=await d.apply(this,c.args);h!==void 0&&(u=h)}catch(h){console.error(`Error during event handler for '${t}':`,h)}c.resolve(u),l()}};a.push({args:e,resolve:r}),a.length===1&&l()})}},hasListeners(t){var e;if(o.isArray(t)){for(const s of t)if(!this.hasListeners(s))return!1;return t.length>0}else return!!((e=this.$events)!=null&&e[t])},delegate(t,e){if(e)if(o.isArray(t))for(const s of t)this.delegate(s,e);else this.on(t,(...s)=>e.emit(t,...s));return this}}},ut={Boolean:o.isBoolean,Number:o.isNumber,String:o.isString,Date:o.isDate,Array:o.isArray,Object:o.isObject,RegExp:o.isRegExp,Function:o.isFunction},en={Boolean:t=>!!t,Number:t=>+t,String:t=>String(t),Date:t=>o.isDate(t)?t:new Date(t),Array:t=>o.isArray(t)?t:o.isString(t)?t.split(","):o.asArray(t),Object:t=>o.isObject(t)?t:t===!0?{}:null,RegExp:t=>o.isRegExp(t)?t:new RegExp(t)};function dt(t,e){var s;if(t&&e!=null){for(const n of t)if((s=ut[n.name])!=null&&s.call(ut,e))return!0}return!1}function sn(t,e){const s=t&&en[t.name||t];return s?s(e):e}function Rt(t){return!!E(t.resource)}function E(t,e={}){var a;const{parent:s,...n}=e;return t=o.isObject(t)?{...n,...t}:o.isString(t)?{...n,path:t}:null,t&&s!==void 0&&t.parent===void 0&&!((a=t.path)!=null&&a.startsWith("/"))&&(t.parent=s,t.path||(t.path=".")),t}function ht(t,e){return t!=null&&(e==null?void 0:e.type)==="collection"?{type:"member",...o.pickBy(e,(s,n)=>["method","path","parent"].includes(n)),id:`${t}`}:null}const pt={mixins:[tn],inject:["api","$verbs","$views","$isPopulated","$schemaComponent","$routeComponent","$dataComponent","$sourceComponent","$resourceComponent","$dialogComponent","$panelComponent","$tabComponent"],provide(){return this.providesData?{$dataComponent:()=>this}:{}},data(){return{appState:jt,overrides:null}},computed:{sourceSchema(){var t;return(t=this.meta)==null?void 0:t.schema},user(){return jt.user},verbs(){return this.$verbs()},views(){return this.$views()},isPopulated(){return this.$isPopulated()},locale(){return this.api.locale},context(){return new S(this,{nested:!1})},rootComponent(){return this.$root.$children[0]},schemaComponent(){return this.$schemaComponent()},routeComponent(){return this.$routeComponent()},formComponent(){const t=this.routeComponent;return t!=null&&t.isForm?t:null},viewComponent(){const t=this.routeComponent;return t!=null&&t.isView?t:null},dataComponent(){return this.providesData?this:this.$dataComponent()},sourceComponent(){return this.$sourceComponent()},resourceComponent(){return this.$resourceComponent()},dialogComponent(){return this.$dialogComponent()},panelComponent(){return this.$panelComponent()},tabComponent(){return this.$tabComponent()},parentSchemaComponent(){var t;return(t=this.schemaComponent)==null?void 0:t.$parent.schemaComponent},parentRouteComponent(){var t;return(t=this.routeComponent)==null?void 0:t.$parent.routeComponent},parentFormComponent(){var t;return(t=this.formComponent)==null?void 0:t.$parent.formComponent},rootData(){var t;return(t=this.dataComponent)==null?void 0:t.data}},beforeCreate(){this.$uid=++nn},methods:{getStore(t){return this.store[t]},setStore(t,e){return this.$set(this.store,t,e)},getChildStore(t){return this.getStore(t)||this.setStore(t,{})},getSchemaValue(t,{type:e,default:s,schema:n=this.schema,callback:a=!0}={}){const i=e&&o.asArray(e);let r=n?o.isArray(t)?o.getValueAtDataPath(n,t,()=>{}):n[t]:void 0;if(r===void 0&&s!==void 0)return a&&o.isFunction(s)&&!dt(i,s)&&(s=s.call(this,this.context)),s;if(dt(i,r))return r;if(a&&o.isFunction(r)&&(r=r.call(this,this.context)),i&&r!=null&&!dt(i,r))for(const l of i){const c=sn(l,r);if(c!==r)return c}return r},getLabel(t,e){return t?this.getSchemaValue("label",{type:String,schema:t})||o.labelize(e||t.name):o.labelize(e)||""},labelize:o.labelize,getButtonAttributes(t,e){const s=this.verbs[t]||t;return{class:`dito-button-${s}`,title:(e==null?void 0:e.text)||o.labelize(s)}},getDragOptions(t,e=!1){return{animation:150,disabled:!t,handle:".dito-button-drag",dragClass:"dito-drag-active",chosenClass:"dito-drag-chosen",ghostClass:"dito-drag-ghost",fallbackClass:"dito-drag-fallback",forceFallback:e}},getQueryLink(t){return{query:t,hash:this.$route.hash}},shouldRender(t=null){return!!t&&this.getSchemaValue("if",{type:Boolean,default:!0,schema:t})},showDialog({components:t,buttons:e,data:s,settings:n={width:480,height:"auto",clickToClose:!1}}){return new Promise((a,i)=>{this.$modal.show(b.component("dito-dialog"),{components:t,buttons:e,data:s,promise:{resolve:a,reject:i}},n)})},getResourcePath(t){var e;return t=E(t),t.parent===void 0&&(t.parent=(e=this.dataComponent)==null?void 0:e.resource),this.api.resources.any(E(t))},getResourceUrl(t){const e=this.getResourcePath(t);return e?this.api.getApiUrl({url:e,query:t.query}):null},async sendRequest({method:t,url:e,resource:s,query:n,data:a,internal:i}){e||(e=this.getResourcePath(s)),t||(t=s==null?void 0:s.method);const r=!i&&this.api.isApiUrl(e);r&&await this.rootComponent.ensureUser();const l=await this.api.request({method:t,url:e,data:a,query:n});return r&&t==="patch"&&o.equals(s,ht(this.user.id,this.api.users))&&await this.rootComponent.fetchUser(),l},request({cache:t,...e}){const s=t&&{global:this.appState,local:this.dataComponent}[t],n=s==null?void 0:s.loadCache,a=n&&`${e.method||"get"} ${e.url} ${JSON.stringify(e.query||e.params||"")} ${JSON.stringify(e.data||"")}`;if(n&&a in n)return n[a];const i=this.sendRequest(e).then(r=>r.data).catch(r=>{var c;const l=(c=r.response)==null?void 0:c.data;throw l?Object.assign(new Error(l.message),l):r});return n&&(n[a]=i),i},format(t,{locale:e=this.api.locale,defaults:s=this.api.formats,...n}={}){return o.format(t,{locale:e,defaults:s,...n})},async navigate(t){return new Promise(e=>{this.$router.push(t,()=>e(!0),()=>e(!1))})},download(t={}){o.isString(t)&&(t={url:t});const e=document.createElement("a");e.href=this.api.getApiUrl(t),e.download=t.filename??null;const{body:s}=document;s.appendChild(e),e.click(),s.removeChild(e)},notify(t){this.rootComponent.notify(t)},closeNotifications(){this.rootComponent.closeNotifications()},setupSchemaFields(){this.setupMethods(),this.setupComputed(),this.setupEvents()},setupMethods(){for(const[t,e]of Object.entries(this.schema.methods||{}))o.isFunction(e)?this[t]=e:console.error(`Invalid method definition: ${t}: ${e}`)},setupComputed(){for(const[t,e]of Object.entries(this.schema.computed||{})){const s=o.isFunction(e)?{get:e}:o.isObject(e)&&o.isFunction(e.get)?e:null;s?Object.defineProperty(this,t,s):console.error(`Invalid computed property definition: ${t}: ${e}`)}},setupEvents(){const{watch:t,events:e}=this.schema;if(t){const n=o.isFunction(t)?t.call(this):t;o.isObject(n)&&this.$nextTick(()=>{for(const[a,i]of Object.entries(n)){const r=this.schemaComponent.getComponentByName(a)?`data.${a}`:a;this.$watch(r,i)}})}const s=(n,a,i)=>{o.isFunction(i)?this.on(o.hyphenate(a),i):console.error(`Invalid event definition: ${n}: ${i}`)};if(e)for(const[n,a]of Object.entries(e))s(n,n,a);for(const[n,a]of Object.entries(this.schema))/^on[A-Z]/.test(n)&&s(n,n.slice(2),a)},async emitEvent(t,{context:e=null,parent:s=null}={}){const n=this.hasListeners(t),a=s==null?void 0:s.hasListeners(t);if(n||a){["load","change"].includes(t)&&await this.$nextTick();const i=()=>e=S.get(this,e),r=n?await this.emit(t,i()):void 0;return a&&r!==!1&&s.emit(t,i()),r}},emitSchemaEvent(t,e){return this.schemaComponent.emitEvent(t,e)}}};let nn=0;const an=Object.freeze(Object.defineProperty({__proto__:null,creditcard:{validate:t=>o.isCreditCard(t),message:"is invalid"},decimals:{validate:(t,e)=>{const s=e==="*"?"+":`{1,${e}}`;return new RegExp(`^[-+]?\\d*(\\.\\d${s})?$`).test(t)},message:(t,e)=>`must be numeric and may contain ${!e||e==="*"?"":e} decimal points`},domain:{validate:t=>o.isDomain(t),message:"is not a domain"},email:{validate:t=>o.isEmail(t),message:"must be a valid email"},hostname:{validate:t=>o.isHostname(t),message:"is not a host name"},integer:{validate:t=>o.isInteger(t),message:"must be whole number"},max:{validate:(t,e)=>t<=e,message(t,e){return`must be ${e} or less`}},min:{validate:(t,e)=>t>=e,message(t,e){return`must be ${e} or more`}},password:{validate:()=>!0},range:{validate:(t,[e,s])=>t>=e&&t<=s,message(t,[e,s]){return`must be between ${e} and ${s}`}},required:{validate:(t,e,{password:s})=>t!=null&&t!==""||s&&t===void 0,message:"is required",nullish:!0},url:{validate:t=>o.isUrl(t),message:"is not a valid URL"}},Symbol.toStringTag,{value:"Module"})),rn={data(){return{isTouched:!1,isDirty:!1,isValidated:!1,isValid:!1,errors:null}},computed:{events(){return{focus:()=>{this.isTouched=!0},blur:()=>{this.validate()},change:()=>{this.markDirty()},input:()=>{this.markDirty()}}}},methods:{resetValidation(){this.isTouched=!1,this.isDirty=!1,this.isValidated=!1,this.isValid=!1,this.clearErrors()},validate(t=!0){let e=!0;t&&this.clearErrors();const{value:s}=this;for(const[n,a]of Object.entries(this.validations)){const i=an[n];if(i&&(i.nullish||s!=null)){const{validate:r,message:l}=i;if(!r(s,a,this.validations)&&(e=!1,t)){const c=o.isFunction(l)?l(s,a,this):l;this.addError(c,!0)}}}return t&&(this.isValidated=!0,this.isValid=e),e},verify(){return this.validate(!1)},markDirty(){this.isDirty=!0,this.isValidated=!1,this.isValid=!1,this.clearErrors()},addError(t,e=!1){this.errors||(this.errors=[]),e&&(t=`The ${this.label||this.placeholder||this.name} field ${t}.`),this.errors.push(t),this.$emit("errors",this.errors)},showValidationErrors(t,e){this.errors=[];for(const{message:s}of t)this.addError(s,!0);return e&&this.focus(),!0},getErrors(){return this.errors?[...this.errors]:null},clearErrors(){this.errors=null,this.$emit("errors",this.errors)}}};function f(t,{type:e,default:s,get:n,set:a,callback:i=!0}={}){o.isString(t)&&t.includes(".")&&(t=o.parseDataPath(t));const r=o.normalizeDataPath(t);return{get(){const l=!n||n.length>0?this.overrides&&r in this.overrides?this.overrides[r]:this.getSchemaValue(t,{type:e,default:s,callback:i}):void 0;return n?n.call(this,l):l},set(l){a?a.call(this,l):(this.overrides||(this.overrides={}),this.$set(this.overrides,r,l))}}}function ft(t,{default:e,get:s,set:n}={}){return{get(){let a=this.getStore(t);return a===void 0&&e!==void 0&&(a=o.isFunction(e)?e.call(this,this.context):e,this[t]=a,this.getStore(t)),s?s.call(this,a):a},set(a){(!n||(a=n.call(this,a))!==void 0)&&this.setStore(t,a)}}}const Tt=new WeakMap;let on=0;function ln(t,e){let s=Tt.get(t);return s||(s=e||`@${++on}`,Tt.set(t,s)),s}class cn{constructor(){Ft(this,"graph",{});Ft(this,"references",{})}set(e,s,n){e=o.parseDataPath(e);let a=this.graph;for(const i of e){const r=o.isInteger(+i)?"*":i;a=a[r]??(a[r]={})}a.$settings={...n,...a.$settings,...s}}addSource(e,s){this.set(e,{type:"source",schema:s},{related:!1})}setSourceRelated(e){this.set(e,{related:!0,reference:this.getReferencePrefix(e)})}addRelation(e,s,n){this.set(e,{type:"relation",schema:n,internal:!!s,reference:this.getReferencePrefix(s)})}getReferencePrefix(e){var s;return e?(s=this.references)[e]??(s[e]=Ms.nanoid(6)):null}flatten(){const e=s=>{const n=[];for(const[a,{$settings:i,...r}]of Object.entries(s)){i&&n.push([a,i]);for(const[l,c]of e(r))n.push([`${a}/${l}`,c])}return n};return e(this.graph)}process(e,s,{target:n}){const a=n==="clipboard";a&&delete s[e.idKey||"id"];for(const[i,r]of this.flatten()){const{type:l,schema:c,internal:u,related:d,reference:h}=r,m=l==="source",g=l==="relation";if(m||g&&u){const _=o.getValueAtDataPath(s,i,()=>null),y=a&&m&&!d,x=a&&(g&&u||m&&d);for(const P of o.asArray(_).flat()){const $=m&&c.idKey||g&&c.relateBy||"id";let D=P==null?void 0:P[$];if(D!=null&&(y&&delete P[$],x||Y(D))){Y(D)&&(D=D.slice(1));const k=a?$:m?"#id":"#ref",O=a?`@${D}`:h?`${h}-${D}`:D;P[k]=O,k!==$&&delete P[$]}}}}return s}}const Bt={},Lt={};function un(t,e){Bt[t]=e}function mt(t,e=!1){const s=Bt[t]||null;if(!s&&!e&&!Lt[t])throw Lt[t]=!0,new Error(`Unknown Dito component type: '${t}'`);return s}function Mt(t,e){const s=[...Object.values((t==null?void 0:t.tabs)||{}),t];for(const n of s)if(n){const a=e(n);if(a!==void 0)return a}}function qt(t,e){if(bt(t)){const s=e(t.component,t.name);if(s!==void 0)return s}else return Mt(t,s=>{for(const[n,a]of Object.entries(s.components||{})){const i=e(a,n);if(i!==void 0)return i}})}function dn(t,e){return qt(t,(s,n)=>e(s,n)?!0:void 0)===!0}function K(t){return o.isObject(t)&&o.isString(t.type)}function hn(t){return K(t)&&t.type==="form"}function It(t){return K(t)&&t.type==="view"}function At(t){return t.name||t.label||t.type}async function _t(t,e=!1){if(o.isFunction(t)&&(t=t()),o.isPromise(t)&&(t=await t),o.isModule(t)&&(t={...t},!t.name&&(e||t.default))){const s=Object.keys(t);if(s.length===1){const n=s[0];t=t[n],n!=="default"&&(t.name=n)}}return t}async function gt(t,e=_t){let s=o.isFunction(t)?t():t;return s=await _t(s,!1),o.isArray(s)?s=Object.fromEntries(await o.mapConcurrently(s,async n=>{const a=await e(n,!0);return[a.name,a]})):o.isObject(s)&&(s=Object.fromEntries(await o.mapConcurrently(Object.entries(s),async([n,a])=>{const i=await e(a,!0);return[n,i]}))),s}async function Nt(t){const{panels:e}=t;e&&(t.panels=await gt(e))}async function pn(t,e,s,n,a){const i=[];if(Ut(e,s,n),await Nt(s),It(s))bt(s)?await zt(e,s.component,n,i,0):await vt(e,s,i,1);else throw new Error(`Invalid view schema: '${At(s)}'`);a.push({path:`/${s.path}`,children:i,component:t,meta:{api:e,schema:s}})}function zt(t,e,s,n,a){var i,r;return e.level=a,(r=(i=R(e))==null?void 0:i.processSchema)==null?void 0:r.call(i,t,e,s,n,a)}function Ut(t,e,s){e.name=s,e.path||(e.path=t.normalizePath(s))}async function vt(t,e,s,n){const a=[];qt(e,(i,r)=>{a.push(zt(t,i,r,s,n))}),await Promise.all(a)}async function fn(t,e,s){let{form:n,forms:a,components:i}=e;a?a=e.forms=await gt(a,Ht):n?n=e.form=await Ht(n):i&&o.isObject(i)&&(n={components:i}),a||(a={default:n});const r=[];for(const l of Object.values(a))await vt(t,l,r,s+1);return r}async function Ht(t){if(t=await _t(t,!0),!hn(t))throw new Error(`Invalid form schema: '${At(t)}'`);return t&&await Nt(t),t}function M(t){return K(t)&&o.isObject(t.form||t.forms||t.components)}function mn(t){return K(t)&&Object.keys((t==null?void 0:t.forms)||{}).length>1}function bt(t){return It(t)&&o.isObject(t.component)}function yt(t,e){const{view:s}=t,n=s&&e.views[s];return n?M(n)?n:Mt(n,a=>{var r;const i=(r=a.components)==null?void 0:r[s];if(M(i))return i}):null}function _n(t,e){const s=yt(t,e);return s?s.level===0?`/${s.path}`:`/${s.path}/${s.path}`:null}function A(t,e,s){const n=yt(t,e);if(n)t=n;else if(t.view)throw new Error(`Unknown view: '${t.view}'`);let{form:a,forms:i,components:r,compact:l}=t;if(!a&&!i)if(r)a={components:r,compact:l};else return{};return i||(i={default:a}),Object.fromEntries(Object.entries(i).map(([c,u])=>(o.isFunction(u.components)&&(u={...u,components:u.components(e)}),[c,(s==null?void 0:s(u))??u])))}function Wt(t,e){return t[e==null?void 0:e.type]||t.default||null}function $t(t,e,s){return Wt(A(t,s),e)}function gn(t){return t.label!==!1}function Yt(t){return!!t.compact}function Ct(t){return!!(t.inlined||t.components)}function Kt(t){var e;return!!(t.nested||((e=R(t))==null?void 0:e.defaultNested)===!0)}function vn(t){var e;return!!((e=R(t))!=null&&e.omitPadding)}function Jt(t){var n;const e=t.default,s=e!==void 0?e:(n=R(t))==null?void 0:n.defaultValue;return o.isFunction(s)?s(t):o.clone(s)}function Qt(t){var s;const e=R(t);return!!(e!=null&&e.excludeValue||(s=e==null?void 0:e.ignoreMissingValue)!=null&&s.call(e,t))}function bn(t){const e=s=>Object.values(s||{}).some(gn);return e(t.components)||Object.values(t.tabs||{}).some(e)}function Xt(t,e={},s){return J(t,e,null,null,(i,r,l)=>{!(l in r)&&!Qt(i)&&(r[l]=Jt(i))},null,{component:s,rootData:e})}function Gt(t,e,s,n,{component:a=null,rootData:i=a==null?void 0:a.rootData}={}){const{compute:r}=t;if(r){const l=r(S.get(a,{value:e[s],name:s,data:e,dataPath:n,rootData:i}));l!==void 0&&v.set(e,s,l)}return!(s in e)&&!Qt(t)&&v.set(e,s,Jt(t)),e[s]}function Zt(t,e,s){if(s.schemaOnly){const n={},{idKey:a="id",orderKey:i}=t,r=e[a];return r!==void 0&&(n[a]=r),mn(t)&&(n.type=e.type),i&&(n[i]=e[i]),n}else return{...e}}function yn(t,e,s,n,{component:a,schemaOnly:i,target:r}={}){const l={component:a,schemaOnly:i,target:r,rootData:s},c=Zt(e,s,l),u=new cn;return J(t,s,n,c,(m,g,_,y,x)=>{let P=Gt(m,g,_,y,l);if(o.isArray(P)){const{wrapPrimitives:$,orderKey:D,idKey:k="id"}=m;$?P=P.map(O=>({[$]:O})):P=[...P],D&&r==="clipboard"&&P.sort((O,B)=>{const T=O==null?void 0:O[k],kt=B==null?void 0:B[k];return T==null||Y(T)?1:kt==null||Y(kt)?-1:T-kt})}x[_]=P},(m,g,_,y,x)=>{const{wrapPrimitives:P,exclude:$,process:D}=m;let k=x[_];const O=R(m),B=()=>S.get(a,{value:k,name:_,data:g,dataPath:y,rootData:l.rootData,processedData:x});if(P&&o.isArray(k)&&(k=k.map(T=>T[P])),D&&(k=D(B())),O!=null&&O.excludeValue||$===!0||o.isFunction($)&&$(B()))delete x[_];else{const T=O==null?void 0:O.processValue;T&&(k=T(m,k,y,u)),x[_]=k}},l),u.process(e,c,l)}function J(t,e,s,n,a,i,r){const l=c=>{const u=(d,h)=>d!=null?j(d,h):null;if(c)for(const[d,h]of Object.entries(c))if(!Kt(h))J(h,e,s,n,a,i,r);else{const m=u(s,d),g=(y,x=null)=>{var B;const P=x!==null?u(m,x):m,$=S.get(r.component,{data:e,value:y,dataPath:P,index:x,rootData:r.rootData}),k=(((B=R(h))==null?void 0:B.getFormSchemasForProcessing)||A)(h,$),O=Wt(k,y);if(O){const T=n?Zt(h,y,r):null;return J(O,y,P,T,a,i,r)}else return{...y}};a==null||a(h,e,d,m,n);let _=n?n[d]:e[d];_!=null&&M(h)&&(o.isArray(_)?_=n?_.map(g):_.forEach(g):_=g(_),n&&(n[d]=_)),i==null||i(h,e,d,m,n)}};if(l(t.components),t.tabs)for(const c of Object.values(t.tabs))l(c.components);for(const c of ae(t,s))l(c.schema.components);return n||e}function q(t,e){const s=(n,a)=>n.length>0?n.reduce((i,r)=>{const l=a(r);return l&&(i[l.name]=l&&e?{...e,...l}:l),i},{}):null;return o.isArray(t)?s(t,n=>o.isObject(n)?n:{name:o.camelize(n,!1)}):o.isObject(t)?s(Object.entries(t),([n,a])=>o.isObject(a)?{name:n,...a}:o.isString(a)?{name:n,label:a}:null):null}function Q(t){return q(t,{type:"button"})}function te(t){return o.isObject(t)?t.type:t}function R(t){var e;return((e=mt(te(t),!0))==null?void 0:e.options)??null}function ee(t){var e,s;return((s=(e=R(t))==null?void 0:e.getSourceType)==null?void 0:s.call(e,te(t)))??null}function se(t,e,s){return t?{schema:t,dataPath:t.name?j(e,t.name):e,tabComponent:s}:null}function ne(t,e,s,n=[]){if(t)for(const[a,i]of Object.entries(t)){const r=se(i,j(e,a),s);r&&n.push(r)}return n}function ae(t,e,s=null,n=null){var r,l;const a=(l=(r=R(t))==null?void 0:r.getPanelSchema)==null?void 0:l.call(r,t,e,s),i=a?[se(a,e,n)]:[];return ne(t.panels,e,n,i),i}function N(t){return ee(t)==="object"}function z(t){return ee(t)==="list"}function ie(t,e){const s=e[t.idKey||"id"];return s!=null?String(s):void 0}function $n(t,e){return ln(e,ie(t,e))}const X={mixins:[rn],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},data(){return{parsedValue:null,focused:!1}},computed:{name(){return this.schema.name},type(){return this.schema.type},component(){return this.resolveTypeComponent(this.schema.component)},context(){return new S(this,{nested:this.nested})},value:{get(){const t=Gt(this.schema,this.data,this.name,this.dataPath,{component:this}),{format:e}=this.schema;return e?e.call(this,new S(this,{value:t})):t},set(t){const{parse:e}=this.schema;this.parsedValue=e?e.call(this,new S(this,{value:t})):t,this.$set(this.data,this.name,this.parsedValue)}},item(){return rt(this.rootItem,this.dataPath,this.nested)},parentItem(){return ot(this.rootItem,this.dataPath,this.nested)},rootItem(){return this.rootData},processedItem(){const{schemaComponent:t}=this;return rt(t.processedItem,this.dataPath.slice(t.dataPath.length),this.nested)},label:f("label",{type:[String,Boolean],get(t){return o.isString(t)?t:t!==!1&&this.$options.generateLabel?this.getLabel(this.schema):null}}),width:f("width",{type:[String,Number]}),visible:f("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),exclude:f("exclude",{type:Boolean,default:!1}),required:f("required",{type:Boolean,default:!1}),readonly:f("readonly",{type:Boolean,default:!1}),autofocus:f("autofocus",{type:Boolean,default:!1}),clearable:f("clearable",{type:Boolean,default:!1}),placeholder:f("placeholder",{type:String}),autocomplete:f("autocomplete",{type:String}),attributes(){const{nativeField:t,textField:e}=this.$options,s={disabled:this.disabled};return t&&(s.name=this.name,this.label&&(s.title=this.label),s.readonly=this.readonly,s.autofocus=this.autofocus,e&&(s.placeholder=this.placeholder,s.autocomplete=this.autocomplete)),s},listeners(){const t=this.getListeners(),{events:e={}}=this.schema;if(e)for(const s of Object.keys(e))t[s]||(t[s]=()=>this.emitEvent(s));return t},validations(){const t={...this.getValidations()};this.required&&(t.required=!0);for(const[e,s]of Object.entries(this.schema.rules||{}))s===void 0?delete t[e]:t[e]=s;return t},providesData(){return!1},showClearButton(){return this.clearable&&this.value!=null}},created(){this._register(!0),this.setupSchemaFields()},beforeDestroy(){this._register(!1)},methods:{_register(t){this.nested&&(this.schemaComponent._registerComponent(this,t),this[t?"on":"off"](this.events))},getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onInput,change:this.onChange}},getValidations(){return null},focusElement(){const[t]=o.asArray(this.$refs.element);t&&this.$nextTick(()=>{var e,s;t.focus(),this.disabled&&((s=(e=t.$el||t).scrollIntoView)==null||s.call(e))})},focus(){var t;this.schemaComponent.focus(),(t=this.tabComponent)==null||t.focus(),this.focusElement()},clear(){this.value=null,this.onChange()},onFocus(){this.focused=!0,this.emitEvent("focus")},onBlur(){this.focused=!1,this.emitEvent("blur")},onInput(){this.emitEvent("input")},onChange(){this.emitEvent("change",{context:this.parsedValue!==void 0?{value:this.parsedValue}:null,parent:this.schemaComponent})}}},G={},b=v.extend({components:G,mixins:[pt],methods:{getTypeComponent:mt,resolveComponent(t,e=[]){return t&&(async()=>{let s=o.isFunction(t)?await t():o.isPromise(t)?await t:t;return s=(s==null?void 0:s.default)||s,s.mixins=e,s.components=G,s})},resolveDitoComponent(t){return this.resolveComponent(t,[pt])},resolveTypeComponent(t){return this.resolveComponent(t,[pt,X])}}});b.component=function(t,e){if(e){e={name:t,...e};const s=this.extend(e);return G[t]=s,s}else return G[t]||v.component(t)};class Cn{hasRole(...e){if(this.roles){for(const s of e)if(this.roles.includes(s))return!0}return!1}}const re={provide(){return{$schemaParentComponent:()=>this}},data(){return{schemaComponents:[]}},computed:{mainSchemaComponent(){return this.schemaComponents[0]}},methods:{_registerSchemaComponent(t,e){const{schemaComponents:s}=this;e?s.push(t):s.splice(s.indexOf(t),1)}}},oe={mixins:[re],computed:{errors(){return this.schemaComponents.reduce((t,{errors:e})=>e&&t?t.concat(e):e,null)},isTouched(){return this.schemaComponents.some(t=>t.isTouched)},isDirty(){return this.schemaComponents.some(t=>t.isDirty)},isValid(){return this.schemaComponents.every(t=>t.isValid)},isValidated(){return this.schemaComponents.every(t=>t.isValid)}},methods:{validateAll(t,e=!0){return this.schemaComponents.every(s=>s.validateAll(t,e))},verifyAll(t){return this.schemaComponents.every(e=>e.verifyAll(t))},resetValidation(){this.schemaComponents.forEach(t=>t.resetValidation())},clearErrors(){this.schemaComponents.forEach(t=>t.clearErrors())},showValidationErrors(t,e){this.schemaComponents.forEach(s=>s.showValidationErrors(t,e))}}},le={mixins:[oe],provide(){return{$routeComponent:()=>this}},beforeRouteUpdate(t,e,s){this.beforeRouteChange(t,e,s)},beforeRouteLeave(t,e,s){this.beforeRouteChange(t,e,s)},data(){return{reload:!1,store:{},loadCache:{}}},computed:{routeComponent(){return this},routeRecord(){return this.$route.matched[this.$vnode.data.routerViewDepth]},isLastRoute(){const{matched:t}=this.$route;return this.routeRecord===t[t.length-1]},isLastUnnestedRoute(){const{matched:t}=this.$route;for(let e=t.length-1;e>=0;e--){const s=t[e];if(!s.meta.nested)return this.routeRecord===s}return!1},isNestedRoute(){return this.meta.nested},meta(){var t;return(t=this.routeRecord)==null?void 0:t.meta},path(){return this.getRoutePath(this.routeRecord.path)},label(){return this.getLabel(this.schema)},breadcrumb(){const{breadcrumb:t}=this.schema||{};return t||`${this.breadcrumbPrefix} ${this.label}`},breadcrumbPrefix(){return""},param(){var t;return this.$route.params[(t=this.meta)==null?void 0:t.param]||null},doesMutate(){return!1}},created(){this.appState.routeComponents.push(this)},destroyed(){const{routeComponents:t}=this.appState;t.splice(t.indexOf(this),1)},methods:{beforeRouteChange(t,e,s){let n=!0;e.path.startsWith(this.path)&&!t.path.startsWith(this.path)&&e.path!==t.path&&(this.isFullRouteChange(t,e)||t.path.length<=e.path.length)&&(this.doesMutate?n=this.isValidated||this.validateAll():this.isDirty&&(n=window.confirm(`You have unsaved changes. Do you really want to ${this.verbs.cancel}?`))),s(n)},getRoutePath(t){return this.$route.path.split("/").slice(0,t.split("/").length).join("/")},getChildPath(t){return`${this.path}/${t}`},isFullRouteChange(t,e){const s=this.path.match(/^(\/[^/]*)/)[1];return!o.getCommonPrefix(t.path,e.path).startsWith(s)}}};var wn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isLastRoute?t.shouldRender(t.viewSchema)?s("div",{staticClass:"dito-view dito-scroll-parent",attrs:{"data-resource":t.sourceSchema.path}},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.viewSchema,data:t.data,meta:t.meta,store:t.getChildStore(t.name),disabled:t.isLoading,generateLabels:!1,menuHeader:!0}})],1):t._e():s("router-view",{key:t.name})},Pn=[];function p(t,e,s,n,a,i,r,l){var c=typeof t=="function"?t.options:t;e&&(c.render=e,c.staticRenderFns=s,c._compiled=!0),n&&(c.functional=!0),i&&(c._scopeId="data-v-"+i);var u;if(r?(u=function(m){m=m||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!m&&typeof __VUE_SSR_CONTEXT__<"u"&&(m=__VUE_SSR_CONTEXT__),a&&a.call(this,m),m&&m._registeredComponents&&m._registeredComponents.add(r)},c._ssrRegister=u):a&&(u=l?function(){a.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:a),u)if(c.functional){c._injectStyles=u;var d=c.render;c.render=function(g,_){return u.call(_),d(g,_)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,u):[u]}return{exports:t,options:c}}const Sn=b.component("dito-view",{mixins:[le],provide(){return{$sourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.sourceComponent)||null},$resourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.resourceComponent)||null}}},data(){return{isView:!0,isLoading:!1,data:{}}},computed:{schema(){return this.meta.schema},name(){return this.schema.name},isSingleComponentView(){return bt(this.schema)},mainComponent(){return this.mainSchemaComponent.getComponentByDataPath(this.name)},viewSchema(){const{component:t,...e}=this.schema;return this.isSingleComponentView?{...e,components:{[e.name]:{name:e.name,label:!1,...t}}}:e},providesData(){return dn(this.viewSchema,t=>Rt(t))}},watch:{$route(t,e){this.isFullRouteChange(t,e)&&(this.isLoading=!1,this.data={})}},methods:{setData(t){this.data=t},getChildPath(t){return this.isSingleComponentView?this.path:`${this.path}/${t}`},setLoading(t){this.isLoading=!!t}}}),ce={};var Dn=p(Sn,wn,Pn,!1,xn,null,null,null);function xn(t){for(let e in ce)this[e]=ce[e]}const ue=function(){return Dn.exports}(),dd="";function Z(t,{year:e=(t==null?void 0:t.getFullYear())??0,month:s=(t==null?void 0:t.getMonth())??0,day:n=(t==null?void 0:t.getDate())??0,hour:a=(t==null?void 0:t.getHours())??0,minute:i=(t==null?void 0:t.getMinutes())??0,second:r=(t==null?void 0:t.getSeconds())??0,millisecond:l=(t==null?void 0:t.getMilliseconds())??0}={}){return new Date(e,s,n,a,i,r,l)}var On=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-calendar"},[s("div",{staticClass:"dito-calendar-popup"},[s("div",{staticClass:"dito-calendar-inner"},[t.currentMode==="day"?[s("div",{staticClass:"dito-calendar-header"},[s("a",{staticClass:"dito-calendar-step-prev dito-calendar-step-year",on:{click:function(n){return t.stepYear(-1)}}}),s("a",{staticClass:"dito-calendar-step-prev dito-calendar-step-month",on:{click:function(n){return t.stepMonth(-1)}}}),s("span",[s("a",{staticClass:"dito-calendar-select-year",on:{click:function(n){return t.setMode("year")}}},[t._v(t._s(t.dateToString(t.currentValue,{year:1})))]),s("a",{staticClass:"dito-calendar-select-month",on:{click:function(n){return t.setMode("month")}}},[t._v(t._s(t.dateToString(t.currentValue,{month:1})))])]),s("a",{staticClass:"dito-calendar-step-next dito-calendar-step-month",on:{click:function(n){return t.stepMonth(1)}}}),s("a",{staticClass:"dito-calendar-step-next dito-calendar-step-year",on:{click:function(n){return t.stepYear(1)}}})]),s("div",{staticClass:"dito-calendar-body"},[s("div",{staticClass:"dito-calendar-weekdays"},t._l(t.weekdayNames,function(n){return s("span",[t._v(t._s(n.short))])}),0),s("div",{staticClass:"dito-calendar-dates"},t._l(t.dateRange,function(n){return s("span",{class:n.state&&`dito-calendar-item-${n.state}`,on:{click:function(a){return t.selectDate(n.date,n.state,!0)}}},[t._v(t._s(n.text))])}),0)]),s("div",{staticClass:"dito-calendar-footer"},[s("a",{staticClass:"dito-calendar-select-today",attrs:{role:"button",title:t.dateToString(new Date,{year:1,month:1,day:1})},on:{click:function(n){t.selectDate(new Date)}}})])]:t.currentMode==="month"?[s("div",{staticClass:"dito-calendar-header"},[s("a",{staticClass:"dito-calendar-step-prev",on:{click:function(n){return t.stepYear(-1)}}}),s("span",[s("a",{staticClass:"dito-calendar-select-year",on:{click:function(n){return t.setMode("year")}}},[t._v(t._s(t.dateToString(t.currentValue,{year:1})))])]),s("a",{staticClass:"dito-calendar-step-next",on:{click:function(n){return t.stepYear(1)}}})]),s("div",{staticClass:"dito-calendar-body"},[s("div",{staticClass:"dito-calendar-months"},t._l(t.monthNames,function(n,a){return s("span",{class:t.getMonthClass(a),on:{click:function(i){return t.selectMonth(a)}}},[t._v(t._s(n.short))])}),0)])]:t.currentMode==="year"?[s("div",{staticClass:"dito-calendar-header"},[s("a",{staticClass:"dito-calendar-step-prev",on:{click:function(n){return t.stepDecade(-1)}}}),s("span",[t._v(t._s(t.decadeToString(t.currentValue)))]),s("a",{staticClass:"dito-calendar-step-next",on:{click:function(n){return t.stepDecade(1)}}})]),s("div",{staticClass:"dito-calendar-body"},[s("div",{staticClass:"dito-calendar-years"},t._l(t.yearRange,function(n){return s("span",{class:t.getYearClass(n),on:{click:function(a){return t.selectYear(n)}}},[t._v(t._s(n))])}),0)])]:t._e()],2)])])},kn=[];const hd="",Fn={props:{value:{type:Date,default:null},locale:{type:String,default:"en-US"},disabledDate:{type:Function,default:()=>!1},mode:{type:String,default:"day"}},data(){const{weekdayNames:t,monthNames:e}=jn(this.locale);return{weekdayNames:t,monthNames:e,dateRange:[],yearRange:[],currentValue:this.value||Z(new Date,{hour:0,minute:0,second:0,millisecond:0}),currentMode:this.mode}},watch:{currentValue:"updateDateRange",disabledDate:"updateDateRange",value(t,e){+t!=+e&&(this.currentValue=t||new Date)},mode(t){this.currentMode=t}},mounted(){this.updateDateRange()},methods:{getMonthClass(t){return{"dito-calendar-item-active":this.value&&t===this.value.getMonth()&&this.currentValue.getFullYear()===this.value.getFullYear(),"dito-calendar-item-current":t===this.currentValue.getMonth()}},getYearClass(t){return{"dito-calendar-item-active":this.value&&t===this.value.getFullYear(),"dito-calendar-item-current":t===this.currentValue.getFullYear()}},setDate(t){this.currentValue=Z(this.currentValue,t)},stepDecade(t){this.setDate({year:this.currentValue.getFullYear()+t*10})},setMode(t){this.currentMode=t},stepMonth(t){const{currentValue:e}=this,{year:s,month:n}=this.getYearMonth(e.getFullYear(),e.getMonth()+t);this.setDate({month:n,day:Math.min(this.getDaysInMonth(s,n),this.currentValue.getDate())})},stepYear(t){this.setDate({year:this.currentValue.getFullYear()+t})},selectDate(t,e,s=!1){e!=="disabled"&&(s?this.setDate({year:t.getFullYear(),month:t.getMonth(),day:t.getDate()}):this.currentValue=t,this.$emit("input",this.currentValue))},selectMonth(t){this.setMode("day"),this.setDate({month:t,day:1})},selectYear(t){this.setMode("month"),this.setDate({year:t})},getYearMonth(t,e){return e>11?(t++,e=0):e<0&&(t--,e=11),{year:t,month:e}},dateToString(t,{year:e,month:s,day:n}){return t.toLocaleString(this.locale,{year:e&&"numeric",month:s&&"long",day:n&&"numeric"})},decadeToString(t){const e=this.getFirstYearOfDecade(t.getFullYear());return`${e} – ${e+9}`},getDaysInMonth(t,e){return new Date(t,e+1,0).getDate()},getFirstYearOfDecade(t){return+`${t.toString().slice(0,-1)}0`},navigate({hor:t,ver:e,enter:s}){const{currentMode:n,currentValue:a}=this;if(t||e){switch(n){case"day":this.setDate({day:a.getDate()+t+e*7});break;case"month":this.setDate({month:a.getMonth()+t+e*6});break;case"year":this.setDate({year:a.getFullYear()+t+e*5});break}return!0}else if(s){switch(n){case"day":this.selectDate(a);break;case"month":this.setMode("day");break;case"year":this.setMode("month");break}return!0}},updateDateRange(){this.dateRange=[],this.yearRange=[];const{currentValue:t}=this,e=t.getFullYear(),s=t.getMonth(),n=this.getFirstYearOfDecade(e);for(let u=0;u<10;u++)this.yearRange.push(n+u);let i=new Date(e,s,1).getDay()+1;i===0&&(i=7);const r=this.getDaysInMonth(e,s);if(i>1){const u=this.getYearMonth(e,s-1),d=this.getDaysInMonth(u.year,u.month);for(let h=1;h<i;h++){const m=d-i+h+1,g=new Date(u.year,u.month,m);this.dateRange.push({text:m,date:g,state:this.disabledDate(g)?"disabled":"gray"})}}const l=new Date;for(let u=1;u<=r;u++){const d=new Date(e,s,u),h=g=>g&&g.getDate()===u&&g.getFullYear()===e&&g.getMonth()===s,m=h(this.value)?"active":h(l)?"today":this.disabledDate(d)?"disabled":h(t)?"current":null;this.dateRange.push({text:u,date:d,state:m})}const c=42-this.dateRange.length;if(c>0){const u=this.getYearMonth(e,s+1);for(let d=1;d<=c;d++){const h=new Date(u.year,u.month,d),m=this.disabledDate(h)?"disabled":"gray";this.dateRange.push({text:d,date:h,state:m})}}}}},de={};function jn(t){let e=de[t];if(!e){const s=[];for(let a=0;a<7;a++){const i=new Date(0,0,a);s.push({long:i.toLocaleString(t,{weekday:"long"}),short:i.toLocaleString(t,{weekday:"short"})})}const n=[];for(let a=1;a<=12;a++){const i=new Date(0,a,0);n.push({long:i.toLocaleString(t,{month:"long"}),short:i.toLocaleString(t,{month:"short"})})}e=de[t]={weekdayNames:s,monthNames:n}}return e}const he={};var Vn=p(Fn,On,kn,!1,En,null,null,null);function En(t){for(let e in he)this[e]=he[e]}const Rn=function(){return Vn.exports}();function tt(t,e){for(const s in e)t.addEventListener(s,e[s],!1);return{remove(){for(const s in e)t.removeEventListener(s,e[s],!1)}}}function Tn(t){return{37:"left",38:"up",39:"right",40:"down",13:"enter"}[t.keyCode]}function pe(t){const e=Tn(t);return{hor:{left:-1,right:1}[e]||0,ver:{up:-1,down:1}[e]||0,enter:e==="enter"}}var Bn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-trigger-container"},[t.alwaysShow?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass},[t._t("trigger")],2):t.trigger==="click"?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass,on:{click:t.onClick}},[t._t("trigger")],2):t.trigger==="hover"?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass,on:{mouseenter:function(n){return t.onHover(!0)},mouseleave:function(n){return t.onHover(!1)}}},[t._t("trigger")],2):t.trigger==="focus"||t.trigger==="always"?s("div",{ref:"trigger",staticClass:"dito-trigger",class:t.triggerClass},[t._t("trigger")],2):t._e(),s("transition",{attrs:{name:t.transition}},[t.trigger==="hover"?s("div",{directives:[{name:"show",rawName:"v-show",value:t.showPopup,expression:"showPopup"}],ref:"popup",staticClass:"dito-popup",class:t.popupClass,style:t.popupStyle,on:{mouseenter:function(n){return t.onHover(!0)},mouseleave:function(n){return t.onHover(!1)}}},[t.showPopup?t._t("popup"):t._e()],2):s("div",{directives:[{name:"show",rawName:"v-show",value:t.showPopup,expression:"showPopup"}],ref:"popup",staticClass:"dito-popup",class:t.popupClass,style:t.popupStyle},[t.showPopup?t._t("popup"):t._e()],2)])],1)},Ln=[];const pd="",Mn={props:{trigger:{type:String,default:"click"},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom"},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:null},customClass:{type:String,default:null},zIndex:{type:Number,default:0},keepInView:{type:Boolean,default:!0},hideWhenClickOutside:{type:Boolean,default:!0},alwaysShow:{type:Boolean,default:!1},cover:{type:Boolean,default:!1},hideDelay:{type:Number,default:0}},data(){return{showPopup:this.show,popupPlacement:this.placement}},computed:{triggerClass(){return{"dito-trigger-disabled":this.disabled}},popupClass(){const t={[`dito-popup-${o.hyphenate(this.placement)}`]:!0};return this.customClass&&(t[this.customClass]=!0),t},popupStyle(){return this.zIndex?`z-index: ${this.zIndex}`:""}},watch:{show(t){this.showPopup=t||this.alwaysShow},showPopup(t,e){!t!=!e&&(this.$emit("update:show",t),t&&this.$nextTick(()=>this.updatePosition()))}},mounted(){const{trigger:t,popup:e}=this.$refs;if(this.trigger==="focus"){const s=t.querySelector("input, textarea");s&&(this.focusEvents=tt(s,{focus:()=>{this.showPopup=!0},blur:()=>{this.showPopup=!1}}))}this.hideWhenClickOutside&&!this.alwaysShow&&(this.closeEvents=tt(window,{mouseup:s=>{this.showPopup&&!e.contains(s.target)&&!t.contains(s.target)&&(this.showPopup=!1)},blur:()=>{this.showPopup=!1}})),this.alwaysShow&&(this.showPopup=!0)},created(){this.showPopup=this.show},beforeDestroy(){var t,e;(t=this.focusEvents)==null||t.remove(),(e=this.closeEvents)==null||e.remove(),this.mouseLeaveTimer=null},methods:{updatePosition(){const{trigger:t,popup:e}=this.$refs;if(this.show&&e.offsetWidth===0){setTimeout(()=>this.updatePosition(),0);return}const s=o.isString(this.target)?this.$refs[this.target]:this.target;if(s){const _=s===e?t:e.firstChild;_.style.width=getComputedStyle(s).width}const n=(s||t).getBoundingClientRect(),a=n.left+window.scrollX,i=n.top+window.scrollY,r=n.width,l=n.height,c=e.offsetWidth,u=e.offsetHeight;let[d,h]=this.popupPlacement.split("-")||[];if(this.keepInView){const _=window.innerWidth,y=window.innerHeight;d==="top"?i<u&&(d="bottom"):d==="bottom"?y-i-l<u&&(d="top"):d==="left"?a<c&&(d="right"):d==="right"&&_-a-r<c&&(d="left"),h==="top"?y-i<u&&(h="bottom"):h==="bottom"?i+l<u&&(h="top"):h==="left"?_-a<c&&(h="right"):h==="right"&&a+r<c&&(h="left")}let m=0,g=0;switch(d){case"top":g-=u;break;case"left":m-=c;break;case"right":m+=r;break;case"bottom":g+=l;break}switch(h){case"right":m-=c-r;break;case"bottom":g-=u-l;break}if(this.cover&&(d==="top"?g+=l:d==="bottom"&&(g-=l)),s&&s!==t){const _=t.getBoundingClientRect();m+=a-_.left,g+=i-_.top}e.style.left=`${m}px`,e.style.top=`${g}px`,this.$emit("update-position",{trigger:t,popup:e,placement:this.popupPlacement})},onClick(){this.disabled||(this.showPopup=!this.showPopup)},onHover(t){this.disabled||(clearTimeout(this.mouseLeaveTimer),t?this.showPopup=!0:this.hideDelay?this.mouseLeaveTimer=setTimeout(()=>{this.showPopup=!1},this.hideDelay):this.showPopup=!1)}}},fe={};var qn=p(Mn,Bn,Ln,!1,In,null,null,null);function In(t){for(let e in fe)this[e]=fe[e]}const wt=function(){return qn.exports}();var An=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-input"},[t.attributes.type==="checkbox"?s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.currentValue,expression:"currentValue"}],ref:"input",attrs:{"aria-label":t.title,type:"checkbox"},domProps:{checked:Array.isArray(t.currentValue)?t._i(t.currentValue,null)>-1:t.currentValue},on:{change:function(n){var a=t.currentValue,i=n.target,r=!!i.checked;if(Array.isArray(a)){var l=null,c=t._i(a,l);i.checked?c<0&&(t.currentValue=a.concat([l])):c>-1&&(t.currentValue=a.slice(0,c).concat(a.slice(c+1)))}else t.currentValue=r}}},"input",t.attributes,!1),t.listeners)):t.attributes.type==="radio"?s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.currentValue,expression:"currentValue"}],ref:"input",attrs:{"aria-label":t.title,type:"radio"},domProps:{checked:t._q(t.currentValue,null)},on:{change:function(n){t.currentValue=null}}},"input",t.attributes,!1),t.listeners)):s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.currentValue,expression:"currentValue"}],ref:"input",attrs:{"aria-label":t.title,type:t.attributes.type},domProps:{value:t.currentValue},on:{input:function(n){n.target.composing||(t.currentValue=n.target.value)}}},"input",t.attributes,!1),t.listeners))])},Nn=[];const fd="",zn={props:{type:{type:String,default:"text"},value:{type:[String,Number],default:null},id:{type:String,default:null},name:{type:String,default:null},title:{type:String,default:null},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},placeholder:{type:String,default:null},autocomplete:{type:String,default:"off"}},data(){return{currentValue:this.value,hovering:!1,focused:!1}},computed:{attributes(){const{id:t,name:e,type:s,size:n,title:a,disabled:i,readonly:r,placeholder:l,autocomplete:c,$attrs:u}=this;return{id:t,name:e,type:s,size:n,title:a,disabled:i,readonly:r,placeholder:l,autocomplete:c,...u}},listeners(){const{input:t,...e}=this.$listeners;return e},size(){const{size:t,min:e,max:s}=this.$attrs,n=a=>a!=null?`${a}`.length:0;return t||n(e)||n(s)||void 0}},watch:{value(t,e){t!==e&&(this.currentValue=t)},currentValue(t){t!==this.value&&this.$emit("input",t)}},methods:{focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},me={};var Un=p(zn,An,Nn,!1,Hn,null,null,null);function Hn(t){for(let e in me)this[e]=me[e]}const U=function(){return Un.exports}();var Wn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",t._b({ref:"trigger",staticClass:"dito-date-picker",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},"trigger",{transition:t.transition,placement:t.placement,disabled:t.disabled,target:t.target},!1),[s("input-field",t._b({ref:"input",staticClass:"dito-date-picker-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger",type:"text",value:t.currentText,readonly:""},on:{focus:function(n){t.inputFocused=!0},blur:function(n){t.inputFocused=!1},keydown:t.onKeyDown},slot:"trigger"},"input-field",{placeholder:t.placeholder,disabled:t.disabled},!1)),s("calendar",t._b({ref:"calendar",staticClass:"dito-date-picker-popup",attrs:{slot:"popup",value:t.currentValue},on:{input:t.selectDate},slot:"popup"},"calendar",{locale:t.locale,disabledDate:t.disabledDate},!1))],1)},Yn=[];const md="",Kn={components:{Trigger:wt,Calendar:Rn,InputField:U},props:{value:{type:Date,default:null},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom-left"},placeholder:{type:String,default:null},locale:{type:String,default:"en-US"},dateFormat:{type:Object,default:()=>o.defaultFormats.date},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:"trigger"},disabledDate:{type:Function,default:()=>!1}},data(){return{currentValue:this.value,showPopup:this.show,inputFocused:!1,changed:!1}},computed:{focused(){return this.inputFocused||this.showPopup},currentText(){return o.format(this.currentValue,{locale:this.locale,date:this.dateFormat,time:!1})||""}},watch:{value(t,e){+t!=+e&&(this.currentValue=t)},currentValue(t){+t!=+this.value&&(this.changed=!0,this.$emit("input",t))},show(t){this.showPopup=t},showPopup(t,e){!t!=!e&&this.$emit("update:show",t)},focused(t,e){!t!=!e&&this.$emit(t?"focus":"blur")}},mounted(){this.$on("blur",()=>{this.changed&&(this.changed=!1,this.$emit("change",this.currentValue))})},methods:{selectDate(t){this.currentValue=t,this.showPopup=!1},onKeyDown(t){var e;(e=this.$refs.calendar)!=null&&e.navigate(pe(t))&&t.preventDefault()},focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},_e={};var Jn=p(Kn,Wn,Yn,!1,Qn,null,null,null);function Qn(t){for(let e in _e)this[e]=_e[e]}const ge=function(){return Jn.exports}();function ve(t,e,s){const n=window.requestAnimationFrame||function(){return setTimeout(arguments[0],10)};if(s<=0)t.scrollTop=e;else{const i=(e-t.scrollTop)/s*10;n(()=>{t.scrollTop=t.scrollTop+i,t.scrollTop!==e&&ve(t,e,s-10)})}}function Xn(t,e,s){if(t.createTextRange){const n=t.createTextRange();n.collapse(!0),n.moveStart("character",e),n.moveEnd("character",s),n.select(),t.focus()}else t.setSelectionRange?(t.focus(),t.setSelectionRange(e,s)):"selectionStart"in t&&(t.selectionStart=e,t.selectionEnd=s,t.focus())}var Gn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",t._b({ref:"trigger",staticClass:"dito-time-picker",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},"trigger",{transition:t.transition,placement:t.placement,disabled:t.disabled,target:t.target},!1),[s("input-field",t._b({ref:"input",staticClass:"dito-time-picker-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger",type:"text",value:t.currentText,readonly:""},on:{focus:function(n){t.inputFocused=!0},blur:function(n){t.inputFocused=!1},keydown:t.onKeyDown},slot:"trigger"},"input-field",{placeholder:t.placeholder,disabled:t.disabled},!1)),s("div",{staticClass:"dito-time-picker-popup",attrs:{slot:"popup"},slot:"popup"},[s("div",{staticClass:"dito-time-picker-panel"},[s("ul",{ref:"hour",staticClass:"dito-time-picker-hour",on:{mouseover:function(n){t.selection=0}}},t._l(24,function(n){return t.disabledHour(n-1)?t._e():s("li",{class:{selected:t.hour===n-1},on:{click:function(a){t.hour=n-1}}},[t._v(t._s(t.leftPad(n-1)))])}),0)]),s("div",{staticClass:"dito-time-picker-panel"},[s("ul",{ref:"minute",staticClass:"dito-time-picker-minute",on:{mouseover:function(n){t.selection=1}}},t._l(60,function(n){return t.disabledMinute(n-1)?t._e():s("li",{class:{selected:t.minute===n-1},on:{click:function(a){t.minute=n-1}}},[t._v(t._s(t.leftPad(n-1)))])}),0)]),s("div",{staticClass:"dito-time-picker-panel"},[s("ul",{ref:"second",staticClass:"dito-time-picker-second",on:{mouseover:function(n){t.selection=2}}},t._l(60,function(n){return t.disabledSecond(n-1)?t._e():s("li",{class:{selected:t.second===n-1},on:{click:function(a){t.second=n-1}}},[t._v(t._s(t.leftPad(n-1)))])}),0)])])],1)},Zn=[];const _d="",ta={components:{Trigger:wt,InputField:U},props:{value:{type:Date,default:null},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom-left"},placeholder:{type:String,default:null},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:"trigger"},disabledHour:{type:Function,default:()=>!1},disabledMinute:{type:Function,default:()=>!1},disabledSecond:{type:Function,default:()=>!1}},data(){return{currentValue:this.value,showPopup:this.show,inputFocused:!1,selection:0,changed:!1}},computed:{focused(){return this.inputFocused||this.showPopup},currentText(){return this.currentValue?`${this.leftPad(this.hour)}:${this.leftPad(this.minute)}:${this.leftPad(this.second)}`:""},currentDate(){return this.currentValue||Z(new Date,{hour:0,minute:0,second:0,millisecond:0})},hour:{get(){return this.currentDate.getHours()},set(t){this.setTime({hour:t})}},minute:{get(){return this.currentDate.getMinutes()},set(t){this.setTime({minute:t})}},second:{get(){return this.currentDate.getSeconds()},set(t){this.setTime({second:t})}}},watch:{value(t,e){+t!=+e&&(this.currentValue=t)},currentValue(t){+t!=+this.value&&(this.changed=!0,this.$emit("input",t),this.scrollAll())},currentText:"updateSelection",selection:"updateSelection",show(t){this.showPopup=t},showPopup(t,e){t&&(this.updateSelection(),this.scrollAll(0)),!t!=!e&&this.$emit("update:show",t)},focused(t,e){!t!=!e&&this.$emit(t?"focus":"blur")}},mounted(){this.$on("blur",()=>{this.changed&&(this.changed=!1,this.$emit("change",this.currentValue))})},methods:{leftPad(t){return("0"+t).slice(-2)},setTime(t){this.currentValue=Z(this.currentDate,{...t,millisecond:0})},updateSelection(t=!1){if(this.showPopup||t){const e=3*this.selection;this.$nextTick(()=>Xn(this.$refs.input,e,e+2))}},scrollAll(t=100){const e=(s,n)=>{const a=this.$refs[s];if(a){const i=a.scrollHeight/(a.children.length+6);ve(a,Math.round(n*i),t)}};this.$nextTick(()=>{e("hour",this.hour),e("minute",this.minute),e("second",this.second)})},onKeyDown(t){const e=["hour","minute","second"][this.selection];if(e){const{hor:s,ver:n,enter:a}=pe(t);if(s){const i=this.selection+s;this.selection=i<0?2:i>2?0:i}else if(n){const i=this[e]+n,{length:r}=this.$refs[e].children;this[e]=i<0?i+r:i>=r?i-r:i}a&&(this.showPopup=!1),(s||n||a)&&(this.updateSelection(!0),t.preventDefault())}},focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},be={};var ea=p(ta,Gn,Zn,!1,sa,null,null,null);function sa(t){for(let e in be)this[e]=be[e]}const ye=function(){return ea.exports}();var na=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"picker",staticClass:"dito-date-time-picker"},[s("div",{staticClass:"dito-pickers",class:{"dito-focus":t.focused}},[s("date-picker",t._b({ref:"date",attrs:{placement:"bottom-left",target:t.$refs.picker,show:t.showDate},on:{"update:show":function(n){t.showDate=n},focus:function(n){t.dateFocused=!0},blur:function(n){t.dateFocused=!1}},model:{value:t.currentValue,callback:function(n){t.currentValue=n},expression:"currentValue"}},"date-picker",{transition:t.transition,placeholder:t.placeholder,locale:t.locale,dateFormat:t.dateFormat,disabled:t.disabled},!1)),s("time-picker",t._b({ref:"time",attrs:{placeholder:"",placement:"bottom-right",target:t.$refs.picker,show:t.showTime},on:{"update:show":function(n){t.showTime=n},focus:function(n){t.timeFocused=!0},blur:function(n){t.timeFocused=!1}},model:{value:t.currentValue,callback:function(n){t.currentValue=n},expression:"currentValue"}},"time-picker",{transition:t.transition,disabled:t.disabled},!1))],1)])},aa=[];const gd="",ia={components:{DatePicker:ge,TimePicker:ye},props:{value:{type:Date,default:null},transition:{type:String,default:"slide"},placeholder:{type:String,default:null},dateFormat:{type:Object,default:()=>o.defaultFormats.date},locale:{type:String,default:"en-US"},disabled:{type:Boolean,default:!1}},data(){return{currentValue:this.value,showDate:!1,showTime:!1,dateFocused:!1,timeFocused:!1,changed:!1}},computed:{focused(){return this.dateFocused||this.timeFocused}},watch:{value(t,e){+t!=+e&&(this.currentValue=t)},currentValue(t){+t!=+this.value&&(this.changed=!0,this.$emit("input",t))},focused(t,e){!t!=!e&&this.$emit(t?"focus":"blur")}},mounted(){this.$on("blur",()=>{this.changed&&(this.changed=!1,this.$emit("change",this.currentValue))})},methods:{focus(){this.$refs.date.focus()},blur(){this.$refs.date.blur(),this.$refs.time.blur()}}},$e={};var ra=p(ia,na,aa,!1,oa,null,null,null);function oa(t){for(let e in $e)this[e]=$e[e]}const la=function(){return ra.exports}();var ca=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("i",{staticClass:"dito-icon",class:`dito-icon-${t.name}`})},ua=[];const vd="",da={props:{name:{type:String,required:!0}}},Ce={};var ha=p(da,ca,ua,!1,pa,null,null,null);function pa(t){for(let e in Ce)this[e]=Ce[e]}const fa=function(){return ha.exports}();var ma=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-pagination"},[t.showTotal?s("div",{staticClass:"dito-pagination-total"},[t.total>0?[t._v(t._s(t.first)+" – "+t._s(t.last))]:[t._v("0")],t._v(" / "+t._s(t.total))],2):t._e(),s("div",{staticClass:"dito-buttons dito-buttons-round"},t._l(t.pageRange,function(n){return s("button",{staticClass:"dito-button",class:t.getPageClass(n),attrs:{disabled:n.disabled},on:{click:function(a){return t.onClickPage(n)}}},[n.text?s("span",[t._v(t._s(n.text))]):t._e()])}),0)])},_a=[];const bd="",ga={props:{total:{type:Number,default:0},page:{type:Number,default:1},pageSize:{type:Number,default:10},showTotal:{type:Boolean,default:!0}},data(){return{pageRange:[],showPrev:!0,showNext:!0,numPages:0,currentPageSize:this.pageSize,currentPage:this.page}},computed:{first(){return(this.currentPage-1)*this.currentPageSize+1},last(){return Math.min(this.first+this.currentPageSize-1,this.total)}},watch:{total:"updatePageRange",showPrev:"updatePageRange",showNext:"updatePageRange",page(t){this.currentPage=t},pageSize(t){this.currentPageSize=t},currentPageSize(t){this.numPages=Math.ceil(this.total/t),this.currentPage>this.numPages&&(this.currentPage=this.numPages),this.updatePageRange(),this.$emit("size-change",this.page,t)},currentPage(t,e){t!==e&&(this.updatePageRange(),this.$emit("update:page",t))}},created(){this.currentPage=this.page,this.currentPageSize=this.pageSize},mounted(){this.updatePageRange()},methods:{onClickPage(t){t.index&&!t.disabled&&t.index!==this.currentPage&&(this.currentPage=t.index)},getPageClass(t){const e={"dito-selected":t.active};return t.type&&(e[`dito-button-${t.type}`]=!0),e},updatePageRange(){const{showPrev:t,showNext:e,total:s,currentPageSize:n,currentPage:a}=this,i=t+e+1,r=this.numPages=Math.ceil(s/n);let l=1,c=1;r<=i?c=r:a<=t+1?c=i:a>=r-e?(c=r,l=r-i+1):(l=a-t,c=a+e);const u=[];u.push({index:a-1,type:"prev",disabled:a<=1}),l>=2&&u.push({index:1,text:1}),l>2&&u.push({index:Math.max(1,a-10),type:"ellipsis-prev"});for(let d=l;d<=c;d++)u.push({index:d,text:d,active:d===a});c<r-1&&u.push({index:Math.min(r,a+10),type:"ellipsis-next"}),c<=r-1&&u.push({index:r,text:r}),u.push({index:a+1,type:"next",disabled:a>=r}),this.pageRange=u}}},we={};var va=p(ga,ma,_a,!1,ba,null,null,null);function ba(t){for(let e in we)this[e]=we[e]}const ya=function(){return va.exports}();var $a=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-switch",class:t.classes,style:t.styles},[s("div",{staticClass:"dito-switch-pane"},[s("input",t._b({directives:[{name:"model",rawName:"v-model",value:t.checked,expression:"checked"}],ref:"input",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(t.checked)?t._i(t.checked,null)>-1:t.checked},on:{change:function(n){var a=t.checked,i=n.target,r=!!i.checked;if(Array.isArray(a)){var l=null,c=t._i(a,l);i.checked?c<0&&(t.checked=a.concat([l])):c>-1&&(t.checked=a.slice(0,c).concat(a.slice(c+1)))}else t.checked=r}}},"input",t.attributes,!1)),s("div",{staticClass:"dito-switch-button"}),t.labels?s("span",{staticClass:"dito-switch-label"},[t.checked?t._t("checked",function(){return[t._v(t._s(t.labels.checked||"on"))]}):t._t("unchecked",function(){return[t._v(t._s(t.labels.unchecked||"off"))]})],2):t._e()])])},Ca=[];const yd="",wa={props:{value:{type:Boolean,default:!1},id:{type:String,default:null},name:{type:String,default:null},disabled:{type:Boolean,default:!1},labels:{type:[Object,Boolean],default:!1}},data(){return{checked:this.value}},computed:{classes(){const{checked:t,disabled:e}=this;return{"dito-checked":t,"dito-disabled":e}},styles(){const{labels:{checked:t,unchecked:e}={}}=this,s=Math.max(0,t==null?void 0:t.length,e==null?void 0:e.length);return{"--switch-width":s?`${s*1.5}rem`:null}},attributes(){const{id:t,name:e,disabled:s,$attrs:n}=this;return{id:t,name:e,disabled:s,...n}}},watch:{value(t){this.checked=t},checked(t){t!==this.value&&(this.$emit("input",t),this.$emit("change",t))}},methods:{focus(){this.$refs.input.focus()}}},Pe={};var Pa=p(wa,$a,Ca,!1,Sa,null,null,null);function Sa(t){for(let e in Pe)this[e]=Pe[e]}const Da=function(){return Pa.exports}(),$d="",xa={functional:!0,props:{enabled:{type:Boolean,default:!0}},render:(t,e)=>t("transition",e.props.enabled?{props:{name:"height"},on:Oa}:{},e.children)},I=(t,e)=>Object.assign(t.style,e),Se=t=>getComputedStyle(t).height,Oa={afterEnter(t){setTimeout(()=>I(t,{height:"auto"}))},enter(t){const{width:e}=getComputedStyle(t);I(t,{width:e,position:"absolute",visibility:"hidden",height:"auto"});const{height:s}=getComputedStyle(t);I(t,{width:null,position:null,visibility:null,height:0}),Se(t),setTimeout(()=>I(t,{height:s}))},leave(t){const{height:e}=getComputedStyle(t);I(t,{height:e}),Se(t),setTimeout(()=>I(t,{height:0}))}};let ka,Fa;const De={};var ja=p(xa,ka,Fa,!1,Va,null,null,null);function Va(t){for(let e in De)this[e]=De[e]}const Ea=function(){return ja.exports}(),H={data(){return{domHandlers:[]}},beforeDestroy(){for(const{remove:t}of this.domHandlers)t();this.domHandlers=[]},methods:{domOn(t,e,s){const n=tt(t,o.isObject(e)?e:{[e]:s});return this.domHandlers.push(n),n}}};var Ra=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-root"},[s("notifications",{ref:"notifications",staticClass:"dito-notifications",attrs:{position:"top right",classes:"dito-notification"}}),s("dito-menu"),s("main",{staticClass:"dito-page dito-scroll-parent"},[s("dito-header",{attrs:{spinner:t.options.spinner,isLoading:t.isLoading}},[t.user?s("dito-account"):t.allowLogin?s("a",{staticClass:"dito-login",on:{click:function(n){return t.rootComponent.login()}}},[s("span",[t._v("Login")])]):t._e()],1),s("router-view")],1)],1)},Ta=[];const Cd="",Ba=b.component("dito-root",{mixins:[H],provide(){return{$views:()=>this.resolvedViews}},props:{unresolvedViews:{type:[Object,Function,Promise],required:!0},options:{type:Object,default:()=>({})}},data(){return{resolvedViews:{},allowLogin:!1,loadingCount:0}},computed:{notifications(){return this.$refs.notifications},isLoading(){return this.loadingCount>0}},created(){this.appState.title=document.title||"Dito.js Admin",this.appState.routeComponents=[]},async mounted(){this.domOn(document,{click:t=>{t.target.closest(".dito-label")||(this.appState.activeLabel=null)},keyup:t=>{t.code==="Tab"&&(this.appState.activeLabel=null)}});try{this.allowLogin=!1,await this.fetchUser()?await this.resolveViews():await this.login()}catch(t){console.error(t)}this.allowLogin=!0},methods:{notify({type:t="info",title:e,text:s}={}){e||(e={warning:"Warning",error:"Error",info:"Information",success:"Success"}[t]||"Notification"),s=`<p>${o.asArray(s).join("</p> <p>")}</p>`.replace(/\n|\r\n|\r/g,"<br>");const n={warning:"warn",error:"error",info:"log",success:"log"}[t]||"error";console[n](o.stripTags(s));const{notifications:a=!0}=this.api;if(a){const{durationFactor:i=20}=a,r=(40+s.length+e.length)*i;this.$notify({type:t,title:e,text:s,duration:r})}},closeNotifications(){this.notifications.destroyAll()},registerLoading(t){this.loadingCount+=t?1:-1},async login(){var n,a;this.allowLogin=!0;const{additionalComponents:t,redirectAfterLogin:e}=this.options.login||{},s=await this.showDialog({components:{username:{type:"text",autofocus:!0},password:{type:"password"},...t},buttons:{cancel:{},login:{type:"submit"}}});if(s)try{const i=await this.sendRequest({resource:this.api.users.login,data:s,internal:!0});e?location.replace(e):(this.setUser(i.data.user),await this.resolveViews())}catch(i){const r=(a=(n=i.response)==null?void 0:n.data)==null?void 0:a.error;this.notify({type:"error",title:"Authentication Error",text:r||i}),r||console.error(i,i.response),this.login()}},navigateHome(){return this.navigate("/")},async logout(){try{(await this.sendRequest({resource:this.api.users.logout,internal:!0})).data.success&&(this.setUser(null),this.navigateHome())}catch(t){console.error(t)}},async fetchUser(){let t=null;try{t=(await this.sendRequest({resource:this.api.users.session,internal:!0})).data.user||null}catch(e){this.notify({type:"error",title:"Authentication Error",text:e})}return this.setUser(t),t},setUser(t){this.appState.user=t&&Object.setPrototypeOf(t,Cn.prototype),t||(this.resolvedViews={},this.navigateHome())},async ensureUser(){await this.fetchUser()||await this.login()},async resolveViews(){try{this.resolvedViews=await gt(this.unresolvedViews)}catch(s){return s.request||console.error(s),this.login()}const t=[],e=[];for(const[s,n]of Object.entries(this.resolvedViews))e.push(pn(ue,this.api,n,s,t));await Promise.all(e);for(const s of t)this.$router.addRoute(s)}}}),xe={};var La=p(Ba,Ra,Ta,!1,Ma,null,null,null);function Ma(t){for(let e in xe)this[e]=xe[e]}const Pt=function(){return La.exports}();var qa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-menu dito-scroll-parent"},[s("h1",[t._v(t._s(t.appState.title))]),s("ul",{staticClass:"dito-scroll"},t._l(t.views,function(n){return s("li",[t.shouldRender(n)?s("router-link",{staticClass:"dito-link",attrs:{to:`/${n.path}`,"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n)))]):t._e()],1)}),0)])},Ia=[];const wd="",Aa=b.component("dito-menu",{}),Oe={};var Na=p(Aa,qa,Ia,!1,za,null,null,null);function za(t){for(let e in Oe)this[e]=Oe[e]}const Ua=function(){return Na.exports}();var Ha=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.loading,expression:"loading"}],staticClass:"v-spinner"},[s("div",{staticClass:"v-pulse v-pulse1",style:[t.spinnerStyle,t.spinnerDelay1]}),s("div",{staticClass:"v-pulse v-pulse2",style:[t.spinnerStyle,t.spinnerDelay2]}),s("div",{staticClass:"v-pulse v-pulse3",style:[t.spinnerStyle,t.spinnerDelay3]})])},Wa=[];const Pd="",Ya={name:"PulseLoader",props:{loading:{type:Boolean,default:!0},color:{type:String,default:"#5dc596"},size:{type:String,default:"15px"},margin:{type:String,default:"2px"},radius:{type:String,default:"100%"}},data(){return{spinnerStyle:{backgroundColor:this.color,width:this.size,height:this.size,margin:this.margin,borderRadius:this.radius,display:"inline-block",animationName:"v-pulseStretchDelay",animationDuration:"0.75s",animationIterationCount:"infinite",animationTimingFunction:"cubic-bezier(.2,.68,.18,1.08)",animationFillMode:"both"},spinnerDelay1:{animationDelay:"0.12s"},spinnerDelay2:{animationDelay:"0.24s"},spinnerDelay3:{animationDelay:"0.36s"}}}},ke={};var Ka=p(Ya,Ha,Wa,!1,Ja,null,null,null);function Ja(t){for(let e in ke)this[e]=ke[e]}const Qa=function(){return Ka.exports}();var Xa=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-header"},[s("div",{staticClass:"dito-trail"},[s("ul",t._l(t.trail,function(n,a){return s("li",[a===t.trail.length-1?[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])]:s("router-link",{staticClass:"dito-breadcrumb",attrs:{to:n.path}},[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])])],2)}),0),t.isLoading?s("spinner",{staticClass:"dito-spinner"}):t._e()],1),t._t("default")],2)},Ga=[];const Sd="",Fe=b.component("spinner",Qa),Za=b.component("dito-header",{components:{Spinner:Fe},props:{spinner:{type:Object,default:null},isLoading:{type:Boolean,default:!1}},computed:{trail(){return this.appState.routeComponents.filter(t=>!!t.routeRecord)}},created(){const{size:t="8px",color:e="#999"}=this.spinner||{},{props:s}=Fe.options;s.size.default=t,s.color.default=e},methods:{getBreadcrumbClass(t){return{"dito-dirty":t.isDirty}}}}),je={};var ti=p(Za,Xa,Ga,!1,ei,null,null,null);function ei(t){for(let e in je)this[e]=je[e]}const si=function(){return ti.exports}(),Ve={mixins:[H],data(){return{pulldown:{open:!1,startTime:0,checkTime:!0,events:{mousedown:()=>{this.setPulldownOpen(!1),this.pulldown.handlers.remove()},mouseup:()=>{this.onPulldownMouseUp(null)&&this.pulldown.handlers.remove()}},handlers:null}}},methods:{onPulldownMouseDown(t){t?this.checkTime=!1:(this.setPulldownOpen(!0),this.checkTime=!0)},onPulldownMouseUp(t){const{startTime:e}=this.pulldown;if(!this.checkTime||e&&Date.now()-e>250)return this.setPulldownOpen(!1),t&&this.onPulldownSelect(t),!0},onPulldownSelect(){},setPulldownOpen(t){this.pulldown.open=t,this.pulldown.startTime=t?Date.now():0,t&&(this.pulldown.handlers=this.domOn(document,this.pulldown.events))}}};var ni=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-account"},[s("a",{on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[s("span",[t._v(t._s(t.user.username))])]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.items,function(n,a){return s("li",[s("a",{on:{mousedown:function(i){return i.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(i){return t.onPulldownMouseUp(a)}}},[t._v(t._s(n))])])}),0)])},ai=[];const Dd="",ii=b.component("dito-account",{mixins:[Ve],data(){return{items:{settings:"Settings",logout:"Logout"}}},methods:{onPulldownSelect(t){switch(t){case"logout":this.rootComponent.logout();break;case"settings":console.info("TODO: Implement Settings");break}}}}),Ee={};var ri=p(ii,ni,ai,!1,oi,null,null,null);function oi(t){for(let e in Ee)this[e]=Ee[e]}const li=function(){return ri.exports}();var ci=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("form",{staticClass:"dito-dialog",on:{submit:function(n){return n.preventDefault(),t.submit.apply(null,arguments)}}},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.schema,data:t.dialogData}},[s("dito-buttons",{staticClass:"dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,data:t.dialogData},slot:"buttons"})],1)],1)},ui=[];const xd="",di=b.component("dito-dialog",{provide(){return{$dialogComponent:()=>this}},props:{components:{type:Object,required:!0},buttons:{type:Object,required:!0},promise:{type:Object,required:!0},data:{type:Object,default:()=>({})}},data(){const t=o.clone(this.data);for(const e in this.components)e in t||(t[e]=null);return{windowEvents:null,dialogData:t}},computed:{dialogComponent(){return this},name(){return this.$parent.name},schema(){return{components:this.components}},buttonSchemas(){return Object.fromEntries(Object.entries(Q(this.buttons)).map(([t,e])=>(t==="cancel"&&!e.events&&(e={...e,events:{click:()=>this.cancel()}}),[t,e])))},hasCancel(){return!!this.buttonSchemas.cancel}},mounted(){this.windowEvents=tt(window,{keyup:t=>{this.hasCancel&&t.keyCode===27&&this.cancel()}})},destroyed(){this.windowEvents.remove()},methods:{hide(){this.$modal.hide(this.name)},resolve(t){this.promise.resolve(t),this.hide()},reject(t){this.promise.reject(t),this.hide()},submit(){this.resolve(this.dialogData)},cancel(){this.resolve(null)}}}),Re={};var hi=p(di,ci,ui,!1,pi,null,null,null);function pi(t){for(let e in Re)this[e]=Re[e]}const fi=function(){return hi.exports}();var mi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.content?s(t.options.tag||t.tag,{tag:"component",class:t.classes,style:t.styles},[t._v(t._s(t.options.text))]):t._e()},_i=[];const gi=b.component("dito-element",{props:{tag:{type:String,default:"span"},content:{type:[String,Object]}},computed:{options(){const{content:t}=this;return o.isObject(t)?t:{text:t}},classes(){return{...this.$attrs.class,...Te(this.options.class)}},styles(){return{...this.$attrs.style,...Te(this.options.style)}}}});function Te(t){return o.asArray(t).reduce((e,s)=>(o.isString(s)?e[s]=!0:o.isObject(s)&&Object.assign(e,s),e),{})}const Be={};var vi=p(gi,mi,_i,!1,bi,null,null,null);function bi(t){for(let e in Be)this[e]=Be[e]}const yi=function(){return vi.exports}();var $i=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.text||t.collapsible?s(t.tag,t._g({tag:"component",staticClass:"dito-label",class:{"dito-active":t.isActive}},t.listeners),[t.collapsible?s("div",{staticClass:"dito-chevron",class:{"dito-opened":!t.collapsed}}):t._e(),t._l(t.prefixes,function(n,a){return s("dito-element",{key:`prefix-${a}`,staticClass:"dito-label-prefix",attrs:{tag:"span",content:n}})}),s("label",{attrs:{for:t.dataPath},domProps:{innerHTML:t._s(t.text)}}),t._l(t.suffixes,function(n,a){return s("dito-element",{key:`suffix-${a}`,staticClass:"dito-label-suffix",attrs:{tag:"span",content:n}})}),t._t("edit-buttons")],2):t._e()},Ci=[];const Od="",wi=b.component("dito-label",{props:{label:{type:[String,Object],default:null},dataPath:{type:String,default:null},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1}},computed:{tag(){return this.collapsible?"a":"div"},text(){const{label:t}=this;return o.isObject(t)?t==null?void 0:t.text:t},prefixes(){var t;return o.asArray((t=this.label)==null?void 0:t.prefix)},suffixes(){var t;return o.asArray((t=this.label)==null?void 0:t.suffix)},listeners(){return{...this.collapsible&&{click:this.onClick}}},isActive(){return this.appState.activeLabel===this}},methods:{onClick(){this.appState.activeLabel=this,this.$emit("expand",this.collapsed)}}}),Le={};var Pi=p(wi,$i,Ci,!1,Si,null,null,null);function Si(t){for(let e in Le)this[e]=Le[e]}const Di=function(){return Pi.exports}(),St={methods:{getItemFormSchema:$t,getItemUid:$n,getItemId(t,e,s=null){return this.isTransient&&s!==null?String(s):ie(t,e)},getItemDataPath(t,e){let{dataPath:s}=this;return t!==this.schema&&(s=j(s,t.name)),e!=null&&(s=j(s,e)),s},findItemIdIndex(t,e,s){const n=this.isTransient?s:e==null?void 0:e.findIndex((a,i)=>this.getItemId(t,a,i)===s);return n!==-1?n:null},getItemLabel(t,e,{index:s=null,extended:n=!1,asObject:a=!1}={}){const{itemLabel:i}=t;if(!e||!n&&i===!1)return null;let r;const l=()=>r||(r=this.getItemDataPath(t,s));let c;const u=()=>c||(c=this.getLabel($t(t,e,this.context)));let d,h,m;if(o.isFunction(i)){const _=i.call(this,new S(this,{nested:!1,data:e,value:e,index:s,get dataPath(){return l()},get formLabel(){return u()}}));o.isObject(_)?{text:d,prefix:h,suffix:m}=_:d=_,n=!1}else{const{columns:_}=t,y=o.isString(i)&&i||z(t)&&_&&Object.keys(_)[0]||"name";d=e[y]}const g=!!d;if(d||(d=""),d||(n=!0,z(t)&&s!==null&&(d=`${s+1}`)),n){const _=u();_&&(d=`${_} ${g?`'${d}'`:d}`)}return a?{text:d,prefix:h,suffix:m}:d}}};var xi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-schema"},[s("div",{staticClass:"dito-schema-content"},[t.hasLabel||t.hasTabs||t.clipboard?s("div",{staticClass:"dito-schema-header",class:{"dito-schema-menu-header":t.menuHeader}},[t.hasLabel?s("dito-label",{attrs:{label:t.label,dataPath:t.dataPath,collapsible:t.collapsible,collapsed:!t.opened},on:{expand:t.onExpand},scopedSlots:t._u([t.inlined?{key:"edit-buttons",fn:function(){return[t._t("edit-buttons")]},proxy:!0}:null],null,!0)}):t._e(),t.tabs?s("dito-tabs",{attrs:{tabs:t.tabs,selectedTab:t.selectedTab}}):t._e(),s("dito-clipboard",{attrs:{clipboard:t.clipboard,dataPath:t.dataPath,data:t.data}})],1):t._e(),t._l(t.tabs,function(n,a){return t.hasTabs?s("dito-pane",{key:a,ref:"tabs",refInFor:!0,staticClass:"dito-pane-tab",attrs:{visible:t.selectedTab===a,tab:a,schema:n,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasMainPane,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()}),s("transition-height",{attrs:{enabled:t.inlined}},[t.hasMainPane&&t.opened?s("dito-pane",{ref:"components",staticClass:"dito-pane-main",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasTabs,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()],1),!t.inlined&&t.isPopulated?t._t("buttons"):t._e()],2),t.inlined?[t.hasLabel?t._e():t._t("edit-buttons")]:t.isPopulated?[s("dito-panels",{attrs:{panels:t.panelSchemas,data:t.data,meta:t.meta,store:t.store,disabled:t.disabled}})]:t._e()],2)},Oi=[];const kd="",ki=b.component("dito-schema",{components:{TransitionHeight:Ea},mixins:[St],provide(){return{$schemaComponent:()=>this}},inject:["$schemaParentComponent"],props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},label:{type:[String,Object],default:null},inlined:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0},hasOwnData:{type:Boolean,default:!1},menuHeader:{type:Boolean,default:!1}},data(){const{data:t}=this.schema;return{...t&&o.isFunction(t)?t.call(this,this.context):t,componentsRegistry:{},panesRegistry:{},panelsRegistry:{}}},computed:{schemaComponent(){return this},parentSchemaComponent(){return this.hasOwnData?null:this.$parent.schemaComponent},panelSchemas(){const t=ne(this.schema.panels,"");for(const e of this.panes)t.push(...e.panelSchemas);return t},tabs(){return q(this.schema.tabs)},selectedTab(){var s,n;const t=((s=this.$route.hash)==null?void 0:s.slice(1))||null,e=t&&this.shouldRender(this.tabs[t])?t:((n=this.defaultTab)==null?void 0:n.name)||null;return e!==t&&this.$router.replace({hash:e}),e},defaultTab(){if(this.tabs){let t=null;for(const e of Object.values(this.tabs)){const{defaultTab:s}=e;if(o.isFunction(s)?s.call(this,this.context):s)return e;t||(t=e)}return t}},clipboard(){var t;return(t=this.schema)==null?void 0:t.clipboard},processedData(){return this.processData({target:"server",schemaOnly:!0})},clipboardData(){return{$schema:this.schema.name,...this.processData({target:"clipboard",schemaOnly:!0})}},item(){return this.data},rootItem(){return this.rootData},processedItem(){return this.processedData},clipboardItem(){return this.clipboardData},parentItem(){return ot(this.rootData,this.dataPath,!1)},formLabel(){return this.getLabel(this.getItemFormSchema(this.sourceSchema,this.data,this.context))},isDirty(){return this.someComponent(t=>t.isDirty)},isTouched(){return this.someComponent(t=>t.isTouched)},isValid(){return this.everyComponent(t=>t.isValid)},isValidated(){return this.everyComponent(t=>t.isValidated)},hasData(){return!!this.data},hasLabel(){return!!this.label||this.collapsible},hasTabs(){return!this.inlined&&!!this.tabs},hasMainPane(){const{components:t}=this.schema;return!!t&&Object.keys(t).length>0},opened:ft("opened",{default(){return!this.collapsed}}),components(){return Object.values(this.componentsRegistry)},panes(){return Object.values(this.panesRegistry)},panels(){return Object.values(this.panelsRegistry)},componentsByDataPath(){return this._listEntriesByDataPath(this.componentsRegistry)},panesByDataPath(){return this._listEntriesByDataPath(this.panesRegistry)},panelsByDataPath(){return this._listEntriesByDataPath(this.panelsRegistry)}},created(){this._register(!0),this.setupSchemaFields(),this.delegate("change",this.parentSchemaComponent),this.emitEvent("initialize")},beforeDestroy(){this.emitEvent("destroy"),this._register(!1)},methods:{getComponentsByDataPath(t,e){return this._getEntriesByDataPath(this.componentsByDataPath,t,e)},getComponentByDataPath(t,e){return this.getComponentsByDataPath(t,e)[0]||null},getComponentsByName(t,e){return this._getEntriesByName(this.componentsByDataPath,t,e)},getComponentByName(t,e){return this.getComponentsByName(t,e)[0]||null},getComponents(t,e){return this._getEntries(this.componentsByDataPath,t,e)},getComponent(t,e){return this.getComponents(t,e)[0]||null},getPanelsByDataPath(t,e){return this._getEntriesByDataPath(this.panelsByDataPath,t,e)},getPanelByDataPath(t,e){return this.getPanelsByDataPath(t,e)[0]||null},getPanels(t,e){return this._getEntries(this.panelsByDataPath,t,e)},getPanel(t,e){return this.getPanels(t,e)[0]||null},someComponent(t){return this.isPopulated&&this.components.some(t)},everyComponent(t){return this.isPopulated&&this.components.every(t)},onExpand(t){this.emitEvent("expand",{context:{expand:t}}),(!this.opened||t||this.validateAll())&&(this.opened=t)},onChange(){this.emitEvent("change")},resetValidation(){for(const t of this.components)t.resetValidation()},clearErrors(){for(const t of this.components)t.clearErrors()},focus(){var t;(t=this.parentSchemaComponent)==null||t.focus(),this.opened=!0},validateAll(t,e=!0){const{componentsByDataPath:s}=this;let n;if(t){const r=o.isFunction(t)?t:o.isRegExp(t)?l=>t.test(l):null;n=r?Object.keys(s).filter(r):o.isArray(t)?t:[t]}e&&this.clearErrors();let a=!0,i=!0;n||(n=Object.keys(s));for(const r of n){const l=this.getComponentsByDataPath(r);for(const c of l)c.validate(e)||(e&&i&&c.focus(),i=!1,a=!1)}return e&&!a&&this.notifyErrors(),a},verifyAll(t){return this.validateAll(t,!1)},async showValidationErrors(t,e){var a;this.clearErrors();let s=!0;const n=[];for(const[i,r]of Object.entries(t)){const l=this.hasOwnData?j(this.dataPath,i):i,c=o.parseDataPath(l);let u=!1;const d=this.getComponentsByDataPath(c);for(const h of d)h.showValidationErrors(r,s&&e)&&(u=!0,s=!1);if(!u){const h=c.pop();for(;c.length>0;){const g=this.getComponentsByDataPath(c);for(const _ of g)if(await((a=_.navigateToComponent)==null?void 0:a.call(_,l,y=>{let x=!1;for(const P of y){const $=t[P.dataPath];$&&P.showValidationErrors($,s&&e)&&(x=!0,s=!1)}return x})))return;c.pop()}const m=o.labelize(h);for(const g of r){const _=m?`The field ${m}`:`The ${this.formLabel}`;n.push(`${_} ${g.message}`)}}s=!1}s||this.notifyErrors(n.join(`
2
- `))},notifyErrors(t){this.notify({type:"error",title:"Validation Errors",text:t||"Please correct the highlighted errors."})},resetData(){Object.assign(this.data,Xt(this.schema,{},this)),this.clearErrors()},setData(t){for(const e in t)if(e in this.data){this.$set(this.data,e,t[e]);for(const s of this.getComponentsByName(e))s.markDirty()}},filterData(t){const e={};for(const[s,n]of Object.entries(t))(o.isArray(n)||o.isObject(n))&&this.getComponentsByName(s).some(i=>i.providesData)||(e[s]=n);return e},processData({target:t="clipboard",schemaOnly:e=!0}={}){return yn(this.schema,this.sourceSchema,this.data,this.dataPath,{component:this,schemaOnly:e,target:t})},_register(t){var e;(e=this.$schemaParentComponent())==null||e._registerSchemaComponent(this,t)},_registerComponent(t,e){var s;this._registerEntry(this.componentsRegistry,t,e),(s=this.parentSchemaComponent)==null||s._registerComponent(t,e)},_registerPane(t,e){this._registerEntry(this.panesRegistry,t,e)},_registerPanel(t,e){this._registerEntry(this.panelsRegistry,t,e)},_registerEntry(t,e,s){const n=e.$uid;s?this.$set(t,n,e):this.$delete(t,n)},_listEntriesByDataPath(t){return Object.values(t).reduce((e,s)=>{const{dataPath:n}=s;return(e[n]||(e[n]=[])).push(s),e},{})},_getEntries(t,e,s){return o.normalizeDataPath(e).startsWith(this.dataPath)?this._getEntriesByDataPath(t,e,s):this._getEntriesByName(t,e,s)},_getEntriesByDataPath(t,e,s){return this._filterEntries(t[o.normalizeDataPath(e)]||[],s)},_getEntriesByName(t,e,s){return this._filterEntries(t[j(this.dataPath,e)]||[],s)},_filterEntries(t,e){return e?t.filter(e):t}}}),Me={};var Fi=p(ki,xi,Oi,!1,ji,null,null,null);function ji(t){for(let e in Me)this[e]=Me[e]}const Vi=function(){return Fi.exports}();var Ei=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-schema",{staticClass:"dito-schema-inlined",class:{"dito-schema-compact":t.isCompact},attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,label:t.isCompact?null:t.label,inlined:!0,disabled:t.disabled,collapsed:t.collapsed,collapsible:t.collapsible},scopedSlots:t._u([{key:"edit-buttons",fn:function(){return[t.deletable||t.draggable||t.editable?s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.editPath,schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{delete:function(n){return t.$emit("delete")}}}):t._e()]},proxy:!0}])})},Ri=[];const Fd="",Ti=b.component("dito-schema-inlined",{props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},label:{type:[String,Object],default:null},disabled:{type:Boolean,required:!0},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null}},computed:{isCompact(){return Yt(this.schema)},hasLabel(){return!this.isCompact&&!!this.label}}}),qe={};var Bi=p(Ti,Ei,Ri,!1,Li,null,null,null);function Li(t){for(let e in qe)this[e]=qe[e]}const Mi=function(){return Bi.exports}();var qi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isPopulated&&t.componentSchemas.length>0?s("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],staticClass:"dito-pane"},[t._l(t.componentSchemas,function(n){var a=n.schema,i=n.dataPath,r=n.nestedDataPath,l=n.nested,c=n.store;return[a.break==="before"?s("div",{staticClass:"dito-break"}):t._e(),t.shouldRender(a)?s("dito-container",{key:r,attrs:{schema:a,dataPath:i,data:t.data,meta:t.meta,store:c,single:t.isSingleComponent,nested:l,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e(),a.break==="after"?s("div",{staticClass:"dito-break"}):t._e()]})],2):t._e()},Ii=[];const jd="",Ai=b.component("dito-pane",{provide(){return{$tabComponent:()=>this.tabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0},tab:{type:String,default:null},single:{type:Boolean,default:!1},visible:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0}},computed:{tabComponent(){return this.tab?this:this.$tabComponent()},componentSchemas(){var e,s;const t=(e=this.sourceSchema)==null?void 0:e.wrapPrimitives;return Object.entries(((s=this.schema)==null?void 0:s.components)||{}).map(([n,a])=>{a.name=n;const i=Kt(a),r=j(this.dataPath,n);return{schema:a,dataPath:i&&!t?r:this.dataPath,nestedDataPath:r,nested:i,store:i?this.getChildStore(n):this.store}})},panelSchemas(){return this.componentSchemas.flatMap(({schema:t,nestedDataPath:e})=>ae(t,e,this.schemaComponent,this.tabComponent))},isSingleComponent(){return this.single&&this.componentSchemas.length===1}},created(){this._register(!0)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPane(this,t)},focus(){this.tab&&this.$router.push({hash:this.tab})}}}),Ie={};var Ni=p(Ai,qi,Ii,!1,zi,null,null,null);function zi(t){for(let e in Ie)this[e]=Ie[e]}const Ui=function(){return Ni.exports}();function Hi(t){const e=o.isString(t)&&t.match(/^\s*([+-]?\d+)\s*\/\s*([+-]?\d+)\s*$/);if(e){const[,s,n]=e;return parseFloat(s)/parseFloat(n)}else return parseFloat(t)}var Wi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.componentVisible,expression:"componentVisible"}],staticClass:"dito-container",class:t.containerClass,style:t.containerStyle},[t.label?s("dito-label",{class:t.componentClass,attrs:{label:t.label,dataPath:t.labelDataPath}}):t._e(),s(t.getTypeComponent(t.schema.type),{tag:"component",staticClass:"dito-component",class:t.componentClass,attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:t.single,nested:t.nested,disabled:t.componentDisabled},on:{errors:t.onErrors}}),s("dito-errors",{attrs:{errors:t.errors}})],1)},Yi=[];const Vd="",Ki=b.component("dito-container",{props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,required:!0},generateLabels:{type:Boolean,default:!0}},data(){return{errors:null}},computed:{context(){return new S(this,{nested:this.nested})},typeOptions(){return R(this.schema)||{}},hasLabel(){const{schema:t}=this,{label:e}=t;return e!==!1&&(!!e||this.typeOptions.generateLabel&&this.generateLabels)},label(){return this.hasLabel?this.getLabel(this.schema):null},labelDataPath(){return this.nested?this.dataPath:null},componentWidth:f("width",{type:[String,Number],default(){return this.typeOptions.defaultWidth},get(t){return t===void 0?1:o.isString(t)?t.match(/^\s*[<>]?\s*(.*)$/)[1]:t}}),componentWidthOperator:f("width",{type:String,get(t){return o.isString(t)&&t.match(/^\s*([<>]?)/)[1]||null}}),componentVisible:f("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),componentDisabled:f("disabled",{type:Boolean,default:!1,get(t){return t||this.disabled}}),containerClass(){const{class:t}=this.schema;return{"dito-single":this.single,"dito-omit-padding":vn(this.schema),...o.isString(t)?{[t]:!0}:t}},componentBasis(){const t=this.componentWidth,e=[null,"auto","fill"].includes(t)?"auto":/%$/.test(t)?parseFloat(t):/[a-z]/.test(t)?t:Hi(t)*100;return o.isNumber(e)?`${e}%`:e},containerStyle(){const t=this.componentWidthOperator===">"||this.componentWidth==="fill",e=this.componentWidthOperator==="<";return{flex:`${t?1:0} ${e?1:0} ${this.componentBasis}`}},componentClass(){const t=this.componentBasis==="auto";return{"dito-single":this.single,"dito-disabled":this.componentDisabled,"dito-width-fill":!t||this.componentWidth==="fill","dito-width-auto":t,"dito-has-errors":!!this.errors}}},methods:{onErrors(t){this.errors=t}}}),Ae={};var Ji=p(Ki,Wi,Yi,!1,Qi,null,null,null);function Qi(t){for(let e in Ae)this[e]=Ae[e]}const Xi=function(){return Ji.exports}();var Gi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tabs"},t._l(t.tabs,function(n,a){return t.shouldRender(n)?s("router-link",{key:a,staticClass:"dito-link",attrs:{to:{hash:a},"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n,a)))]):t._e()}),1)},Zi=[];const Ed="",tr=b.component("dito-tabs",{props:{tabs:{type:Object,default:null},selectedTab:{type:String,default:null}}}),Ne={};var er=p(tr,Gi,Zi,!1,sr,null,null,null);function sr(t){for(let e in Ne)this[e]=Ne[e]}const nr=function(){return er.exports}();var ar=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.panelTag,{directives:[{name:"show",rawName:"v-show",value:t.visible&&(!t.panelTabComponent||t.panelTabComponent.visible),expression:"visible && (!panelTabComponent || panelTabComponent.visible)"}],tag:"component",staticClass:"dito-panel",on:{submit:function(n){n.preventDefault()}}},[s("label",{staticClass:"dito-panel-title"},[t._v(t._s(t.getLabel(t.schema)))]),s("dito-schema",{staticClass:"dito-panel-schema",attrs:{schema:t.panelSchema,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled,hasOwnData:t.hasOwnData}},[s("dito-buttons",{attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled},slot:"buttons"})],1)],1)},ir=[];const Rd="",rr=b.component("dito-panel",{mixins:[oe],provide(){return{$panelComponent:()=>this,$tabComponent:()=>this.panelTabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0},panelTabComponent:{type:b,default:null}},data(){return{ownData:null}},computed:{panelComponent(){return this},tabComponent(){return this.panelTabComponent},buttonSchemas(){return Q(this.schema.buttons)},target(){return this.schema.target||this.dataPath},hasOwnData(){return!!this.ownData},panelData(){return this.ownData||this.data},panelSchema(){if(this.hasOwnData)return this.schema;{const{data:t,...e}=this.schema;return e}},panelTag(){return this.hasOwnData?"form":"div"},panelDataPath(){return this.hasOwnData?this.dataPath:this.schemaComponent.dataPath},visible:f("visible",{type:Boolean,default:!0})},created(){this._register(!0);const{data:t}=this.schema;t&&(this.ownData=o.isFunction(t)?t.call(this,this.context):t)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPanel(this,t)}}}),ze={};var or=p(rr,ar,ir,!1,lr,null,null,null);function lr(t){for(let e in ze)this[e]=ze[e]}const cr=function(){return or.exports}();var ur=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.panels.length>0?s("div",{staticClass:"dito-panels"},t._l(t.panels,function(n){var a=n.schema,i=n.dataPath,r=n.tabComponent;return t.shouldRender(a)?s("dito-panel",{key:t.getPanelKey(i,r),attrs:{schema:a,dataPath:i,data:t.data,meta:t.meta,store:t.getChildStore(a.name),disabled:a.disabled!=null?a.disabled:t.disabled,panelTabComponent:r}}):t._e()}),1):t._e()},dr=[];const Td="",hr=b.component("dito-panels",{props:{panels:{type:Array,default:null},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0}},methods:{getPanelKey(t,e){return e?`${e.tab}_${t}`:t}}}),Ue={};var pr=p(hr,ur,dr,!1,fr,null,null,null);function fr(t){for(let e in Ue)this[e]=Ue[e]}const mr=function(){return pr.exports}();var _r=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.buttonSchemas||t.$slots.default?s("div",t._g({staticClass:"dito-buttons"},t.$listeners),[t._l(t.buttonSchemas,function(n,a){return t.shouldRender(n)?s("dito-container",{key:a,attrs:{schema:n,dataPath:a,data:t.data,meta:t.meta,store:t.getChildStore(n.name),disabled:t.disabled,generateLabels:!1}}):t._e()}),t._l(t.$slots.default,function(n){return n.tag?s("div",{staticClass:"dito-container"},[s("dito-vnode",{attrs:{node:n}})],1):t._e()})],2):t._e()},gr=[];const Bd="",vr=b.component("dito-buttons",{provide:{$tabComponent:()=>null},props:{buttons:{type:Object,default:null},dataPath:{type:String,default:""},data:{type:[Object,Array],default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},disabled:{type:Boolean,default:!1}},computed:{buttonSchemas(){const{dataPath:t,buttons:e}=this;return e?Object.values(e).reduce((s,n)=>(s[j(t,n.name)]=n,s),{}):null}}}),He={};var br=p(vr,_r,gr,!1,yr,null,null,null);function yr(t){for(let e in He)this[e]=He[e]}const $r=function(){return br.exports}();var Cr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-buttons",{staticClass:"dito-edit-buttons dito-buttons-round",attrs:{buttons:t.buttons,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{click:function(n){n.stopPropagation()}}},[t.isDraggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.isEditable?s("router-link",t._b({staticClass:"dito-button",attrs:{to:{path:t.editPath},append:""}},"router-link",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.isCreatable?s("dito-create-button",{attrs:{schema:t.schema,path:t.createPath,verb:t.verbs.create,text:t.createButtonText}}):t._e(),t.isDeletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){return t.$emit("delete")}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()],1)},wr=[];const Ld="",Pr=b.component("dito-edit-buttons",{props:{draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},creatable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null},createPath:{type:String,default:null},buttons:{type:Object,default:null},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0}},computed:{formLabel(){return this.getLabel(this.schema.form)},isDraggable(){return this.hasOption("draggable")},isEditable(){return this.hasOption("editable")&&!!this.editPath},isCreatable(){return this.hasOption("creatable")&&!!this.createPath},isDeletable(){return this.hasOption("deletable")},createButtonText(){var t;return((t=this.schema.creatable)==null?void 0:t.label)||this.formLabel&&`${o.capitalize(this.verbs.create)} ${this.formLabel}`||null}},methods:{hasOption(t){return!!(this[t]&&this.schema[t]!==!1)}}}),We={};var Sr=p(Pr,Cr,wr,!1,Dr,null,null,null);function Dr(t){for(let e in We)this[e]=We[e]}const xr=function(){return Sr.exports}();var Or=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-create-button"},[t.showPulldown?[s("button",{staticClass:"dito-button",class:`dito-button-${t.verb}`,attrs:{type:"button",title:t.labelize(t.verb)},on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[t._v(t._s(t.text))]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.forms,function(n,a){return s("li",[t.isCreatable(n)?s("a",{class:`dito-type-${a}`,on:{mousedown:function(i){return i.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(i){return t.onPulldownMouseUp(a)}}},[t._v(t._s(t.getLabel(n)))]):t._e()])}),0)]:s("button",{staticClass:"dito-button",class:`dito-button-${t.verb}`,attrs:{type:t.isInlined?"button":"submit",title:t.labelize(t.verb)},on:{click:function(n){return t.createItem(t.forms.default)}}},[t._v(t._s(t.text))])],2)},kr=[];const Md="",Fr=b.component("dito-create-button",{mixins:[Ve],props:{schema:{type:Object,required:!0},path:{type:String,required:!0},verb:{type:String,required:!0},text:{type:String,default:null}},computed:{forms(){return A(this.schema,this.context)},isInlined(){return Ct(this.schema)},showPulldown(){return Object.keys(this.forms).length>1||!this.forms.default}},methods:{isCreatable(t){return t.creatable!==!1},createItem(t,e=null){if(this.isCreatable(t))this.isInlined?this.sourceComponent.createItem(t,e):this.$router.push({path:`${this.path}/create`,query:{type:e},append:!0});else throw new Error("Not allowed to create item for given form")},onPulldownSelect(t){this.createItem(this.forms[t],t),this.setPulldownOpen(!1)}}}),Ye={};var jr=p(Fr,Or,kr,!1,Vr,null,null,null);function Vr(t){for(let e in Ye)this[e]=Ye[e]}const Er=function(){return jr.exports}();var Rr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.clipboard?s("div",{staticClass:"dito-clipboard dito-buttons dito-buttons-round"},[s("button",{ref:"copyData",staticClass:"dito-button dito-button-copy",attrs:{type:"button",title:"Copy Data",disabled:!t.copyEnabled},on:{click:t.onCopy}}),s("button",{staticClass:"dito-button dito-button-paste",attrs:{type:"button",title:"Paste Data",disabled:!t.pasteEnabled},on:{click:t.onPaste}})]):t._e()},Tr=[];const Br=b.component("dito-clipboard",{mixins:[H],props:{clipboard:{type:[Boolean,Object],default:!1},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null}},data(){return{copyEnabled:!1,pasteEnabled:!1,fixClipboard:!0}},computed:{clipboardOptions(){return o.isObject(this.clipboard)?this.clipboard:{}},copyData(){const{copy:t}=this.clipboardOptions;return t?e=>t.call(this,new S(this,{clipboardData:e})):e=>o.clone(e)},pasteData(){const{paste:t}=this.clipboardOptions;return t?e=>t.call(this,new S(this,{clipboardData:e})):e=>e}},mounted(){this.domOn(document,{copy:this.checkClipboard}),this.domOn(window,{focus:this.checkClipboard}),this.$watch("data",{immediate:!0,handler:(t,e)=>{t!==e&&this.checkClipboard()}})},methods:{async getClipboardData(t){var a,i,r,l,c;let{clipboardData:e}=this.appState;try{const u=await((i=(a=navigator.clipboard)==null?void 0:a.readText)==null?void 0:i.call(a));this.fixClipboard&&u&&(await((l=(r=navigator.clipboard)==null?void 0:r.writeText)==null?void 0:l.call(r,u)),this.fixClipboard=!1),u&&(e=JSON.parse(u))}catch(u){t&&(console.error(u,u.name,u.message),u.name==="SyntaxError"&&alert(o.deindent`
1
+ (function(n,O){typeof exports=="object"&&typeof module<"u"?module.exports=O(require("vue"),require("vue-router"),require("@kyvg/vue3-notification"),require("@ditojs/utils"),require("nanoid"),require("sortablejs-vue3"),require("codeflask"),require("tinycolor2"),require("@lk77/vue3-color"),require("@tiptap/vue-3"),require("@tiptap/extension-document"),require("@tiptap/extension-text"),require("@tiptap/extension-bold"),require("@tiptap/extension-code"),require("@tiptap/extension-italic"),require("@tiptap/extension-link"),require("@tiptap/extension-strike"),require("@tiptap/extension-underline"),require("@tiptap/extension-blockquote"),require("@tiptap/extension-code-block"),require("@tiptap/extension-hard-break"),require("@tiptap/extension-heading"),require("@tiptap/extension-paragraph"),require("@tiptap/extension-horizontal-rule"),require("@tiptap/extension-ordered-list"),require("@tiptap/extension-bullet-list"),require("@tiptap/extension-list-item"),require("@tiptap/extension-history"),require("vue-multiselect"),require("vue-upload-component"),require("filesize-parser"),require("filesize")):typeof define=="function"&&define.amd?define(["vue","vue-router","@kyvg/vue3-notification","@ditojs/utils","nanoid","sortablejs-vue3","codeflask","tinycolor2","@lk77/vue3-color","@tiptap/vue-3","@tiptap/extension-document","@tiptap/extension-text","@tiptap/extension-bold","@tiptap/extension-code","@tiptap/extension-italic","@tiptap/extension-link","@tiptap/extension-strike","@tiptap/extension-underline","@tiptap/extension-blockquote","@tiptap/extension-code-block","@tiptap/extension-hard-break","@tiptap/extension-heading","@tiptap/extension-paragraph","@tiptap/extension-horizontal-rule","@tiptap/extension-ordered-list","@tiptap/extension-bullet-list","@tiptap/extension-list-item","@tiptap/extension-history","vue-multiselect","vue-upload-component","filesize-parser","filesize"],O):(n=typeof globalThis<"u"?globalThis:n||self,n["dito-admin"]=O(n.vue,n["vue-router"],n["@kyvg/vue3-notification"],n["@ditojs/utils"],n.nanoid,n["sortablejs-vue3"],n.codeflask,n.tinycolor2,n["@lk77/vue3-color"],n["@tiptap/vue-3"],n["@tiptap/extension-document"],n["@tiptap/extension-text"],n["@tiptap/extension-bold"],n["@tiptap/extension-code"],n["@tiptap/extension-italic"],n["@tiptap/extension-link"],n["@tiptap/extension-strike"],n["@tiptap/extension-underline"],n["@tiptap/extension-blockquote"],n["@tiptap/extension-code-block"],n["@tiptap/extension-hard-break"],n["@tiptap/extension-heading"],n["@tiptap/extension-paragraph"],n["@tiptap/extension-horizontal-rule"],n["@tiptap/extension-ordered-list"],n["@tiptap/extension-bullet-list"],n["@tiptap/extension-list-item"],n["@tiptap/extension-history"],n["vue-multiselect"],n["vue-upload-component"],n["filesize-parser"],n.filesize))})(this,function(n,O,M,c,Lt,ae,Tt,re,jt,Y,Mt,Rt,qt,It,zt,At,Ut,Ht,Kt,Wt,Yt,Jt,Qt,Gt,Xt,Zt,vt,xt,en,tn,nn,on){"use strict";var Zl=Object.defineProperty;var vl=(n,O,M)=>O in n?Zl(n,O,{enumerable:!0,configurable:!0,writable:!0,value:M}):n[O]=M;var Oe=(n,O,M)=>(vl(n,typeof O!="symbol"?O+"":O,M),M);const _e=n.reactive({title:"",routeComponents:[],user:null,loadCache:{},activeLabel:null,clipboardData:null});function _(e,t){return e?`${e}/${t}`:t}function sn(e){const t=c.parseDataPath(e);return t==null||t.pop(),t}function ie(e,t=!1){return t?sn(e):c.parseDataPath(e)}function an(e,t=!1){return c.normalizeDataPath(ie(e,t))}function Fe(e,t=!1){const o=ie(e,t);if(o){let s;do s=o.pop();while(s!=null&&c.isInteger(+s));if(s!=null)return o}return null}function rn(e,t=!1){return c.normalizeDataPath(Fe(e,t))}function le(e,t,o=!1){const s=ie(t,o);return s?c.getValueAtDataPath(e,s):null}function de(e,t,o=!1){const s=Fe(t,o);return s?c.getValueAtDataPath(e,s):null}function Le(e){const t=c.parseDataPath(e);return t[t.length-1]}function ln(e){const t=Le(e);return t==null||c.isInteger(+t)?null:t}function ce(e){const t=Le(e),o=t==null?null:+t;return c.isInteger(o)?o:null}let dn=0;function cn(e,t="id"){e[t]=`@${++dn}`}function J(e){return/^@/.test(e)}function hn(e,t="id"){return(e==null?void 0:e[t])!=null&&Object.keys(e).length===1}const{hasOwnProperty:pn}=Object.prototype,he=new WeakMap;function B(e,t,o){const s=he.get(n.toRaw(e)),a=s[t];return a!==void 0||pn.call(s,t)?a:c.isFunction(o)?o():o}function un(e,t,o){he.get(n.toRaw(e))[t]=o}class D{constructor(t,o){o=o?c.isFunction(o)?o():{...o}:{},o.nested??(o.nested=!0),o.component=t;const s=Object.setPrototypeOf(o,t);he.set(this,s)}static get(t,o){return o instanceof D?o:new D(t,o)}get nested(){return B(this,"nested",!0)}get value(){return B(this,"value",void 0)}get dataPath(){return B(this,"dataPath","")}get name(){return B(this,"name",()=>ln(this.dataPath))}get index(){return B(this,"index",()=>ce(this.dataPath))}get itemDataPath(){return an(this.dataPath,this.nested)}get parentItemDataPath(){return rn(this.dataPath,this.nested)}get itemIndex(){return ce(this.itemDataPath)}get parentItemIndex(){return ce(this.parentItemDataPath)}get item(){return B(this,"data",()=>le(this.rootItem,this.dataPath,this.nested))}get parentItem(){const t=de(this.rootItem,this.dataPath,this.nested)||null;return t!==this.item?t:null}get rootItem(){return B(this,"rootData",null)}get processedItem(){return B(this,"processedData",null)}get clipboardItem(){return B(this,"clipboardData",null)}get user(){return B(this,"user",null)}get api(){return B(this,"api",null)}get views(){return B(this,"views",null)}get itemLabel(){return B(this,"itemLabel",null)}get formLabel(){return B(this,"formLabel",null)}get component(){return B(this,"component",null)}get schemaComponent(){return B(this,"schemaComponent",null)}get formComponent(){return B(this,"formComponent",null)}get viewComponent(){return B(this,"viewComponent",null)}get dialogComponent(){return B(this,"dialogComponent",null)}get panelComponent(){return B(this,"panelComponent",null)}get resourceComponent(){return B(this,"resourceComponent",null)}get sourceComponent(){return B(this,"sourceComponent",null)}get option(){return B(this,"option",void 0)}get options(){return B(this,"options",void 0)}get query(){return B(this,"query",void 0)}get error(){return B(this,"error",void 0)}get wasNotified(){return B(this,"wasNotified",!1)}get request(){return t=>this.component.request(t)}get format(){return(t,o)=>this.component.format(t,o)}get navigate(){return t=>this.component.navigate(t)}get download(){return t=>this.component.download(t)}get getResourceUrl(){return t=>this.component.getResourceUrl(t)}get notify(){return t=>{this.component.notify(t),un(this,"wasNotified",!0)}}}const mn={data(){return{listeners:null}},methods:{on(e,t){if(c.isArray(e))for(const o of e)this.on(o,t);else if(c.isPlainObject(e))for(const o in e)this.on(o,e[o]);else{const o=this.listeners||(this.listeners=Object.create(null)),{callbacks:s}=o[e]||(o[e]={callbacks:[],queue:[]});s.push(t)}return this},once(e,t){const o=(...s)=>(this.off(e,o),t.apply(this,s));return o.callback=t,this.on(e,o)},off(e,t){var o;if(!arguments.length)delete this.listeners;else if(c.isArray(e))for(const s of e)this.off(s,t);else if(c.isPlainObject(e))for(const s in e)this.off(s,e[s]);else{const s=(o=this.listeners)==null?void 0:o[e];if(s)if(!t)delete this.listeners[e];else{const{callbacks:a}=s,r=a.findIndex(i=>i===t||i.callback===t);r!==-1&&a.splice(r,1)}}return this},emit(e,...t){var s;const o=(s=this.listeners)==null?void 0:s[e];if(o){const{queue:a,callbacks:r}=o;return new Promise(i=>{const l=async()=>{const d=a.shift();if(d){let h;for(const p of r)try{const u=await p.apply(this,d.args);u!==void 0&&(h=u)}catch(u){console.error(`Error during event handler for '${e}':`,u)}d.resolve(h),l()}};a.push({args:t,resolve:i}),a.length===1&&l()})}},hasListeners(e){var t;if(c.isArray(e)){for(const o of e)if(!this.hasListeners(o))return!1;return e.length>0}else return!!((t=this.listeners)!=null&&t[e])},delegate(e,t){if(t)if(c.isArray(e))for(const o of e)this.delegate(o,t);else this.on(e,(...o)=>t.emit(e,...o));return this}}},pe={Boolean:c.isBoolean,Number:c.isNumber,String:c.isString,Date:c.isDate,Array:c.isArray,Object:c.isObject,RegExp:c.isRegExp,Function:c.isFunction},fn={Boolean:e=>!!e,Number:e=>+e,String:e=>String(e),Date:e=>c.isDate(e)?e:new Date(e),Array:e=>c.isArray(e)?e:c.isString(e)?e.split(","):c.asArray(e),Object:e=>c.isObject(e)?e:e===!0?{}:null,RegExp:e=>c.isRegExp(e)?e:new RegExp(e)};function ue(e,t){var o;if(e&&t!=null){for(const s of e)if((o=pe[s.name])!=null&&o.call(pe,t))return!0}return!1}function gn(e,t){const o=e&&fn[e.name||e];return o?o(t):t}function Te(e){return!!F(e.resource)}function F(e,t={}){var a;const{parent:o,...s}=t;return e=c.isObject(e)?{...s,...e}:c.isString(e)?{...s,path:e}:null,e&&o!==void 0&&e.parent===void 0&&!((a=e.path)!=null&&a.startsWith("/"))&&(e.parent=o,e.path||(e.path=".")),e}function me(e,t){return e!=null&&(t==null?void 0:t.type)==="collection"?{type:"member",...c.pickBy(t,(o,s)=>["method","path","parent"].includes(s)),id:`${e}`}:null}const je={mixins:[mn],inject:["api","$verbs","$views","$isPopulated","$parentComponent","$schemaComponent","$routeComponent","$dataComponent","$sourceComponent","$resourceComponent","$dialogComponent","$panelComponent","$tabComponent"],provide(){return this.providesData?{$parentComponent:()=>this,$dataComponent:()=>this}:{$parentComponent:()=>this}},data(){return{appState:_e,overrides:null}},computed:{providesData(){return!1},sourceSchema(){var e;return(e=this.meta)==null?void 0:e.schema},user(){return _e.user},verbs(){return this.$verbs()},views(){return this.$views()},isPopulated(){return this.$isPopulated()},locale(){return this.api.locale},context(){return new D(this,{nested:!1})},rootComponent(){return this.$root.$refs.root},parentComponent(){return this.$parentComponent()},schemaComponent(){return this.$schemaComponent()},routeComponent(){return this.$routeComponent()},formComponent(){const e=this.routeComponent;return e!=null&&e.isForm?e:null},viewComponent(){const e=this.routeComponent;return e!=null&&e.isView?e:null},dataComponent(){return this.providesData?this:this.$dataComponent()},sourceComponent(){return this.$sourceComponent()},resourceComponent(){return this.$resourceComponent()},dialogComponent(){return this.$dialogComponent()},panelComponent(){return this.$panelComponent()},tabComponent(){return this.$tabComponent()},parentSchemaComponent(){var e;return(e=this.schemaComponent)==null?void 0:e.parentComponent.schemaComponent},parentRouteComponent(){var e;return(e=this.routeComponent)==null?void 0:e.parentComponent.routeComponent},parentFormComponent(){var e;return(e=this.formComponent)==null?void 0:e.parentComponent.formComponent},rootData(){var e;return(e=this.dataComponent)==null?void 0:e.data}},beforeCreate(){const e=bn++;Object.defineProperty(this,"$uid",{get(){return e}})},methods:{getStore(e){return this.store[e]},setStore(e,t){return this.store[e]=t,t},getChildStore(e){return this.getStore(e)||this.setStore(e,n.reactive({}))},getSchemaValue(e,{type:t,default:o,schema:s=this.schema,callback:a=!0}={}){const r=t&&c.asArray(t);let i=s?c.isArray(e)?c.getValueAtDataPath(s,e,()=>{}):s[e]:void 0;if(i===void 0&&o!==void 0)return a&&c.isFunction(o)&&!ue(r,o)&&(o=o.call(this,this.context)),o;if(ue(r,i))return i;if(a&&c.isFunction(i)&&(i=i.call(this,this.context)),r&&i!=null&&!ue(r,i))for(const l of r){const d=gn(l,i);if(d!==i)return d}return i},getLabel(e,t){return e?this.getSchemaValue("label",{type:String,schema:e})||c.labelize(t||e.name):c.labelize(t)||""},labelize:c.labelize,getButtonAttributes(e,t){const o=this.verbs[e]||e;return{class:`dito-button-${o}`,title:(t==null?void 0:t.text)||c.labelize(o)}},getDragOptions(e,t=!1){return{animation:150,disabled:!e,handle:".dito-button-drag",dragClass:"dito-drag-active",chosenClass:"dito-drag-chosen",ghostClass:"dito-drag-ghost",fallbackClass:"dito-drag-fallback",forceFallback:t}},getQueryLink(e){return{query:e,hash:this.$route.hash}},shouldRender(e=null){return!!e&&this.getSchemaValue("if",{type:Boolean,default:!0,schema:e})},getResourcePath(e){var t;return e=F(e),e.parent===void 0&&(e.parent=(t=this.dataComponent)==null?void 0:t.resource),this.api.resources.any(F(e))},getResourceUrl(e){const t=this.getResourcePath(e);return t?this.api.getApiUrl({url:t,query:e.query}):null},async sendRequest({method:e,url:t,resource:o,query:s,data:a,internal:r}){t||(t=this.getResourcePath(o)),e||(e=o==null?void 0:o.method);const i=!r&&this.api.isApiUrl(t);i&&await this.rootComponent.ensureUser();const l=await this.api.request({method:e,url:t,data:a,query:s});return i&&e==="patch"&&c.equals(o,me(this.user.id,this.api.users))&&await this.rootComponent.fetchUser(),l},showDialog({components:e,buttons:t,data:o,settings:s}){return this.rootComponent.showDialog({components:e,buttons:t,data:o,settings:s})},request({cache:e,...t}){const o=e&&{global:this.appState,local:this.dataComponent}[e],s=o==null?void 0:o.loadCache,a=s&&`${t.method||"get"} ${t.url} ${JSON.stringify(t.query||t.params||"")} ${JSON.stringify(t.data||"")}`;if(s&&a in s)return s[a];const r=this.sendRequest(t).then(i=>i.data).catch(i=>{var d;const l=(d=i.response)==null?void 0:d.data;throw l?Object.assign(new Error(l.message),l):i});return s&&(s[a]=r),r},format(e,{locale:t=this.api.locale,defaults:o=this.api.formats,...s}={}){return c.format(e,{locale:t,defaults:o,...s})},async navigate(e){return this.$router.push(e)},download(e={}){c.isString(e)&&(e={url:e});const t=document.createElement("a");t.href=this.api.getApiUrl(e),t.download=e.filename??null;const{body:o}=document;o.appendChild(t),t.click(),o.removeChild(t)},notify(e){this.rootComponent.notify(e)},closeNotifications(){this.rootComponent.closeNotifications()},setupSchemaFields(){this.setupMethods(),this.setupComputed(),this.setupEvents()},setupMethods(){for(const[e,t]of Object.entries(this.schema.methods||{}))c.isFunction(t)?this[e]=t:console.error(`Invalid method definition: ${e}: ${t}`)},setupComputed(){for(const[e,t]of Object.entries(this.schema.computed||{})){const o=c.isFunction(t)?{get:t}:c.isObject(t)&&c.isFunction(t.get)?t:null;o?Object.defineProperty(this,e,o):console.error(`Invalid computed property definition: ${e}: ${t}`)}},setupEvents(){const{watch:e,events:t}=this.schema;if(e){const s=c.isFunction(e)?e.call(this):e;c.isObject(s)&&this.$nextTick(()=>{for(const[a,r]of Object.entries(s)){const i=this.schemaComponent.getComponentByName(a)?`data.${a}`:a;this.$watch(i,r)}})}const o=(s,a,r)=>{c.isFunction(r)?this.on(c.hyphenate(a),r):console.error(`Invalid event definition: ${s}: ${r}`)};if(t)for(const[s,a]of Object.entries(t))o(s,s,a);for(const[s,a]of Object.entries(this.schema))/^on[A-Z]/.test(s)&&o(s,s.slice(2),a)},async emitEvent(e,{context:t=null,parent:o=null}={}){const s=this.hasListeners(e),a=o==null?void 0:o.hasListeners(e);if(s||a){["load","change"].includes(e)&&await this.$nextTick();const r=()=>t=D.get(this,t),i=s?await this.emit(e,r()):void 0;return a&&i!==!1&&o.emit(e,r()),i}},emitSchemaEvent(e,t){return this.schemaComponent.emitEvent(e,t)}}};let bn=0;const yn=Object.freeze(Object.defineProperty({__proto__:null,creditcard:{validate:e=>c.isCreditCard(e),message:"is invalid"},decimals:{validate:(e,t)=>{const o=t==="*"?"+":`{1,${t}}`;return new RegExp(`^[-+]?\\d*(\\.\\d${o})?$`).test(e)},message:(e,t)=>`must be numeric and may contain ${!t||t==="*"?"":t} decimal points`},domain:{validate:e=>c.isDomain(e),message:"is not a domain"},email:{validate:e=>c.isEmail(e),message:"must be a valid email"},hostname:{validate:e=>c.isHostname(e),message:"is not a host name"},integer:{validate:e=>c.isInteger(e),message:"must be whole number"},max:{validate:(e,t)=>e<=t,message(e,t){return`must be ${t} or less`}},min:{validate:(e,t)=>e>=t,message(e,t){return`must be ${t} or more`}},password:{validate:()=>!0},range:{validate:(e,[t,o])=>e>=t&&e<=o,message(e,[t,o]){return`must be between ${t} and ${o}`}},required:{validate:(e,t,{password:o})=>e!=null&&e!==""||o&&e===void 0,message:"is required",nullish:!0},url:{validate:e=>c.isUrl(e),message:"is not a valid URL"}},Symbol.toStringTag,{value:"Module"})),kn={data(){return{isTouched:!1,isDirty:!1,isValidated:!1,isValid:!1,errors:null}},methods:{resetValidation(){this.isTouched=!1,this.isDirty=!1,this.isValidated=!1,this.isValid=!1,this.clearErrors()},validate(e=!0){let t=!0;e&&this.clearErrors();const{value:o}=this;for(const[s,a]of Object.entries(this.validations)){const r=yn[s];if(r&&(r.nullish||o!=null)){const{validate:i,message:l}=r;if(!i(o,a,this.validations)&&(t=!1,e)){const d=c.isFunction(l)?l(o,a,this):l;this.addError(d,!0)}}}return e&&(this.isValidated=!0,this.isValid=t),t},verify(){return this.validate(!1)},markTouched(){this.isTouched=!0},markDirty(){this.isDirty=!0,this.isValidated=!1,this.isValid=!1,this.clearErrors()},addError(e,t=!1){this.errors||(this.errors=[]),t&&(e=`The ${this.label||this.placeholder||this.name} field ${e}.`),this.errors.push(e),this.$emit("errors",this.errors)},showValidationErrors(e,t){this.errors=[];for(const{message:o}of e)this.addError(o,!0);return t&&this.focus(),!0},getErrors(){return this.errors?[...this.errors]:null},clearErrors(){this.errors=null,this.$emit("errors",this.errors)}}};function y(e,{type:t,default:o,get:s,set:a,callback:r=!0}={}){c.isString(e)&&e.includes(".")&&(e=c.parseDataPath(e));const i=c.normalizeDataPath(e);return{get(){const l=!s||s.length>0?this.overrides&&i in this.overrides?this.overrides[i]:this.getSchemaValue(e,{type:t,default:o,callback:r}):void 0;return s?s.call(this,l):l},set(l){a?a.call(this,l):(this.overrides||(this.overrides={}),this.overrides[i]=l)}}}function fe(e,{default:t,get:o,set:s}={}){return{get(){let a=this.getStore(e);return a===void 0&&t!==void 0&&(a=c.isFunction(t)?t.call(this,this.context):t,this[e]=a,this.getStore(e)),o?o.call(this,a):a},set(a){(!s||(a=s.call(this,a))!==void 0)&&this.setStore(e,a)}}}const Q={mixins:[kn],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},data(){return{parsedValue:null,focused:!1}},computed:{name(){return this.schema.name},type(){return this.schema.type},context(){return new D(this,{nested:this.nested})},value:{get(){const e=et(this.schema,this.data,this.name,this.dataPath,{component:this}),{format:t}=this.schema;return t?t.call(this,new D(this,{value:e})):e},set(e){const{parse:t}=this.schema;this.parsedValue=t?t.call(this,new D(this,{value:e})):e,this.data[this.name]=this.parsedValue}},item(){return le(this.rootItem,this.dataPath,this.nested)},parentItem(){return de(this.rootItem,this.dataPath,this.nested)},rootItem(){return this.rootData},processedItem(){const{schemaComponent:e}=this;return le(e.processedItem,this.dataPath.slice(e.dataPath.length),this.nested)},label:y("label",{type:[String,Boolean],get(e){return c.isString(e)?e:e!==!1&&this.$options.generateLabel?this.getLabel(this.schema):null}}),width:y("width",{type:[String,Number]}),visible:y("visible",{type:Boolean,default(){return this.$options.defaultVisible}}),exclude:y("exclude",{type:Boolean,default:!1}),required:y("required",{type:Boolean,default:!1}),readonly:y("readonly",{type:Boolean,default:!1}),autofocus:y("autofocus",{type:Boolean,default:!1}),clearable:y("clearable",{type:Boolean,default:!1}),placeholder:y("placeholder",{type:String}),autocomplete:y("autocomplete",{type:String}),attributes(){const{nativeField:e,textField:t}=this.$options,o={disabled:this.disabled};return e&&(o.name=this.name,this.label&&(o.title=this.label),o.readonly=this.readonly,o.autofocus=this.autofocus,t&&(o.placeholder=this.placeholder,o.autocomplete=this.autocomplete)),{...Object.fromEntries(Object.entries(this.$attrs).filter(([s])=>s.startsWith("on"))),...this.events,...o}},events(){var t;const e=this.getEvents();for(const o of Object.keys(this.schema.events||{}))e[t=`on${c.camelize(o,!0)}`]||(e[t]=()=>this.emitEvent(o));return e},validations(){const e={...this.getValidations()};this.required&&(e.required=!0);for(const[t,o]of Object.entries(this.schema.rules||{}))o===void 0?delete e[t]:e[t]=o;return e},showClearButton(){return this.clearable&&this.value!=null}},created(){this._register(!0),this.setupSchemaFields()},beforeUnmount(){this._register(!1)},methods:{_register(e){this.nested&&this.schemaComponent._registerComponent(this,e)},getEvents(){const{onFocus:e,onBlur:t,onInput:o,onChange:s}=this;return{onFocus:e,onBlur:t,onInput:o,onChange:s}},getValidations(){return null},focusElement(){const[e]=c.asArray(this.$refs.element);e&&this.$nextTick(()=>{var t,o;e.focus(),this.disabled&&((o=(t=e.$el||e).scrollIntoView)==null||o.call(t))})},focus(){var e;this.schemaComponent.focus(),(e=this.tabComponent)==null||e.focus(),this.focusElement()},clear(){this.value=null,this.onChange()},onFocus(){this.focused=!0,this.markTouched(),this.emitEvent("focus")},onBlur(){this.focused=!1,this.validate(),this.emitEvent("blur")},onInput(){this.markDirty(),this.emitEvent("input")},onChange(){this.markDirty(),this.emitEvent("change",{context:this.parsedValue!==void 0?{value:this.parsedValue}:null,parent:this.schemaComponent})}}},Me=new WeakMap;let Cn=0;function $n(e,t){let o=Me.get(e);return o||(o=t||`@${++Cn}`,Me.set(e,o)),o}class Bn{constructor(){Oe(this,"graph",{});Oe(this,"references",{})}set(t,o,s){t=c.parseDataPath(t);let a=this.graph;for(const r of t){const i=c.isInteger(+r)?"*":r;a=a[i]??(a[i]={})}a.$settings={...s,...a.$settings,...o}}addSource(t,o){this.set(t,{type:"source",schema:o},{related:!1})}setSourceRelated(t){this.set(t,{related:!0,reference:this.getReferencePrefix(t)})}addRelation(t,o,s){this.set(t,{type:"relation",schema:s,internal:!!o,reference:this.getReferencePrefix(o)})}getReferencePrefix(t){var o;return t?(o=this.references)[t]??(o[t]=Lt.nanoid(6)):null}flatten(){const t=o=>{const s=[];for(const[a,{$settings:r,...i}]of Object.entries(o)){r&&s.push([a,r]);for(const[l,d]of t(i))s.push([`${a}/${l}`,d])}return s};return t(this.graph)}process(t,o,{target:s}){const a=s==="clipboard";a&&delete o[t.idKey||"id"];for(const[r,i]of this.flatten()){const{type:l,schema:d,internal:h,related:p,reference:u}=i,g=l==="source",f=l==="relation";if(g||f&&h){const m=c.getValueAtDataPath(o,r,()=>null),k=a&&g&&!p,P=a&&(f&&h||g&&p);for(const V of c.asArray(m).flat()){const $=g&&d.idKey||f&&d.relateBy||"id";let S=V==null?void 0:V[$];if(S!=null&&(k&&delete V[$],P||J(S))){J(S)&&(S=S.slice(1));const N=a?$:g?"#id":"#ref",E=a?`@${S}`:u?`${u}-${S}`:S;V[N]=E,N!==$&&delete V[$]}}}}return o}}const Re={},qe={};function wn(e,t){Re[e]=t}function G(e,t=!1){const o=Re[e]||null;if(!o&&!t&&!qe[e])throw qe[e]=!0,new Error(`Unknown Dito component type: '${e}'`);return o}function ge(e,t){if(ye(e)){const o=t(e.component,e.name);if(o!==void 0)return o}else{const o=e?[...Object.values(e.tabs||{}),e]:[];for(const s of o)for(const[a,r]of Object.entries(s.components||{})){const i=t(r,a);if(i!==void 0)return i}}}function Vn(e,t){return ge(e,(o,s)=>t(o,s)?!0:void 0)===!0}function X(e){return c.isObject(e)&&c.isString(e.type)}function Dn(e){return X(e)&&e.type==="form"}function Ie(e){return X(e)&&e.type==="view"}function ze(e){return e.name||e.label||e.type}async function Z(e,t=!1){if(c.isFunction(e)&&(e=e()),c.isPromise(e)&&(e=await e),c.isModule(e)&&(e={...e},!e.name&&(t||e.default))){const o=Object.keys(e);if(o.length===1){const s=o[0];e=e[s],s!=="default"&&(e.name=s)}}return e}async function be(e,t=Z){let o=c.isFunction(e)?e():e;return o=await Z(o,!1),c.isArray(o)?o=Object.fromEntries(await c.mapConcurrently(o,async s=>{const a=await t(s,!0);return[a.name,a]})):c.isObject(o)&&(o=Object.fromEntries(await c.mapConcurrently(Object.entries(o),async([s,a])=>{const r=await t(a,!0);return[s,r]}))),o}async function Ae(e){const{panels:t}=e;t&&(e.panels=await be(t))}async function v(e){let{component:t}=e;t&&(t=await Z(t,!0),t&&(e.component=n.markRaw({...t,mixins:[je,Q,...t.mixins||[]]})))}async function Ue(e){await c.mapConcurrently(Object.values(e||{}),v)}async function Sn(e,t,o,s){const a=[];if(Ke(t,o,s),await Ae(o),Ie(o)){let r=0;ye(o)?await He(t,o.component,s,a,r):await x(t,o,a,++r),o.level=r}else throw new Error(`Invalid view schema: '${ze(o)}'`);return{path:`/${o.path}`,children:a,component:e,meta:{api:t,schema:o}}}async function He(e,t,o,s,a){var r,i;t.level=a,await((i=(r=T(t))==null?void 0:r.processSchema)==null?void 0:i.call(r,e,t,o,s,a))}function Ke(e,t,o){t.name=o,t.path||(t.path=e.normalizePath(o))}async function x(e,t,o,s){const a=[];ge(t,(r,i)=>{a.push(He(e,r,i,o,s))}),await Promise.all(a)}async function Pn(e,t,o){let{form:s,forms:a,components:r}=t;a?a=t.forms=await be(a,We):s?s=t.form=await We(s):r&&c.isObject(r)&&(s={components:r}),a||(a={default:s});const i=[];for(const l of Object.values(a))await x(e,l,i,o+1);return i}async function We(e){if(e=await Z(e,!0),!Dn(e))throw new Error(`Invalid form schema: '${ze(e)}'`);return e&&await Ae(e),e}function R(e){return X(e)&&c.isObject(e.form||e.forms||e.components)}function En(e){return X(e)&&Object.keys((e==null?void 0:e.forms)||{}).length>1}function ye(e){return Ie(e)&&c.isObject(e.component)}function Ye(e,t){const{view:o}=e,s=o&&t.views[o];return s&&ge(s,a=>{if(R(a))return a})||null}function Je(e,t){return Ye(e,t)?t.views[e.view]:null}function Nn(e,t){const o=Je(e,t);return o?o.level===0?`/${o.path}`:`/${o.path}/${o.path}`:null}function A(e,t,o){const s=Ye(e,t);if(s)e=s;else if(e.view)throw new Error(`Unknown view: '${e.view}'`);let{form:a,forms:r,components:i,compact:l}=e;if(!a&&!r)if(i)a={components:i,compact:l};else return{};return r||(r={default:a}),Object.fromEntries(Object.entries(r).map(([d,h])=>(c.isFunction(h.components)&&(h={...h,components:h.components(t)}),[d,(o==null?void 0:o(h))??h])))}function Qe(e,t){return e[t==null?void 0:t.type]||e.default||null}function ke(e,t,o){return Qe(A(e,o),t)}function On(e){return e.label!==!1}function Ge(e){return!!e.compact}function Ce(e){return!!(e.inlined||e.components)}function Xe(e){var t;return!!(e.nested||((t=T(e))==null?void 0:t.defaultNested)===!0)}function _n(e){var t;return!!((t=T(e))!=null&&t.omitPadding)}function Ze(e){var s;const t=e.default,o=t!==void 0?t:(s=T(e))==null?void 0:s.defaultValue;return c.isFunction(o)?o(e):c.clone(o)}function ve(e){var o;const t=T(e);return!!(t!=null&&t.excludeValue||(o=t==null?void 0:t.ignoreMissingValue)!=null&&o.call(t,e))}function Fn(e){const t=o=>Object.values(o||{}).some(On);return t(e.components)||Object.values(e.tabs||{}).some(t)}function xe(e,t={},o){return ee(e,t,null,null,(r,i,l)=>{!(l in i)&&!ve(r)&&(i[l]=Ze(r))},null,{component:o,rootData:t})}function et(e,t,o,s,{component:a=null,rootData:r=a==null?void 0:a.rootData}={}){const{compute:i}=e;if(i){const l=i(D.get(a,{value:t[o],name:o,data:t,dataPath:s,rootData:r}));l!==void 0&&(t[o]=l)}return!(o in t)&&!ve(e)&&(t[o]=Ze(e)),t[o]}function tt(e,t,o){if(o.schemaOnly){const s={},{idKey:a="id",orderKey:r}=e,i=t[a];return i!==void 0&&(s[a]=i),En(e)&&(s.type=t.type),r&&(s[r]=t[r]),s}else return{...t}}function Ln(e,t,o,s,{component:a,schemaOnly:r,target:i}={}){const l={component:a,schemaOnly:r,target:i,rootData:o},d=tt(t,o,l),h=new Bn;return ee(e,o,s,d,(g,f,m,k,P)=>{let V=et(g,f,m,k,l);if(c.isArray(V)){const{wrapPrimitives:$,orderKey:S,idKey:N="id"}=g;$?V=V.map(E=>({[$]:E})):V=[...V],S&&i==="clipboard"&&V.sort((E,j)=>{const L=E==null?void 0:E[N],Ne=j==null?void 0:j[N];return L==null||J(L)?1:Ne==null||J(Ne)?-1:L-Ne})}P[m]=V},(g,f,m,k,P)=>{const{wrapPrimitives:V,exclude:$,process:S}=g;let N=P[m];const E=T(g),j=()=>D.get(a,{value:N,name:m,data:f,dataPath:k,rootData:l.rootData,processedData:P});if(V&&c.isArray(N)&&(N=N.map(L=>L[V])),S&&(N=S(j())),E!=null&&E.excludeValue||$===!0||c.isFunction($)&&$(j()))delete P[m];else{const L=E==null?void 0:E.processValue;L&&(N=L(g,N,k,h)),P[m]=N}},l),h.process(t,d,l)}function ee(e,t,o,s,a,r,i){const l=d=>{const h=(p,u)=>p!=null?_(p,u):null;if(d)for(const[p,u]of Object.entries(d))if(!Xe(u))ee(u,t,o,s,a,r,i);else{const g=h(o,p),f=(k,P=null)=>{var j;const V=P!==null?h(g,P):g,$=D.get(i.component,{data:t,value:k,dataPath:V,index:P,rootData:i.rootData}),N=(((j=T(u))==null?void 0:j.getFormSchemasForProcessing)||A)(u,$),E=Qe(N,k);if(E){const L=s?tt(u,k,i):null;return ee(E,k,V,L,a,r,i)}else return{...k}};a==null||a(u,t,p,g,s);let m=s?s[p]:t[p];m!=null&&R(u)&&(c.isArray(m)?m=s?m.map(f):m.forEach(f):m=f(m),s&&(s[p]=m)),r==null||r(u,t,p,g,s)}};if(l(e.components),e.tabs)for(const d of Object.values(e.tabs))l(d.components);for(const d of rt(e,o))l(d.schema.components);return s||t}function q(e,t){const o=(s,a)=>s.length>0?s.reduce((r,i)=>{const l=a(i);return l&&(r[l.name]=l&&t?{...t,...l}:l),r},{}):null;return c.isArray(e)?o(e,s=>c.isObject(s)?s:{name:c.camelize(s,!1)}):c.isObject(e)?o(Object.entries(e),([s,a])=>c.isObject(a)?{name:s,...a}:c.isString(a)?{name:s,label:a}:null):null}function te(e){return q(e,{type:"button"})}function nt(e){return c.isObject(e)?e.type:e}function T(e){return G(nt(e),!0)??null}function ot(e){var t,o;return((o=(t=T(e))==null?void 0:t.getSourceType)==null?void 0:o.call(t,nt(e)))??null}function st(e,t,o){return e?{schema:e,dataPath:e.name?_(t,e.name):t,tabComponent:o}:null}function at(e,t,o,s=[]){if(e)for(const[a,r]of Object.entries(e)){const i=st(r,_(t,a),o);i&&s.push(i)}return s}function rt(e,t,o=null,s=null){var i,l;const a=(l=(i=T(e))==null?void 0:i.getPanelSchema)==null?void 0:l.call(i,e,t,o),r=a?[st(a,t,s)]:[];return at(e.panels,t,s,r),r}function U(e){return ot(e)==="object"}function H(e){return ot(e)==="list"}function it(e,t){const o=t[e.idKey||"id"];return o!=null?String(o):void 0}function Tn(e,t){return $n(t,it(e,t))}function jn(e){const{mixins:t}=e;return t||e.extends?$e({...e},e):e}function $e(e,t){if(t.extends&&$e(e,t.extends),t.mixins)for(const o of t.mixins)$e(e,o);for(const o of Mn)o in t&&(e[o]=t[o]);return e}const Mn=["defaultValue","defaultNested","defaultVisible","generateLabel","excludeValue","ignoreMissingValue","omitPadding","processValue","processSchema","getPanelSchema","getFormSchemasForProcessing","beforeRouteUpdate","beforeRouteLeave"],Be={},C={components:Be,mixins:[je],component(e,t){return t&&(c.isPlainObject(t)&&(t=jn({extends:this,name:e,...t})),Be[e]=t),Be[e]},methods:{getTypeComponent:G}};class Rn{hasRole(...t){if(this.roles){for(const o of t)if(this.roles.includes(o))return!0}return!1}}const lt={provide(){return{$schemaParentComponent:()=>this}},data(){return{schemaComponents:[]}},computed:{mainSchemaComponent(){return this.schemaComponents[0]}},methods:{_registerSchemaComponent(e,t){const{schemaComponents:o}=this;t?o.push(e):o.splice(o.indexOf(e),1)}}},dt={mixins:[lt],computed:{errors(){return this.schemaComponents.reduce((e,{errors:t})=>t&&e?e.concat(t):t,null)},isTouched(){return this.schemaComponents.some(e=>e.isTouched)},isDirty(){return this.schemaComponents.some(e=>e.isDirty)},isValid(){return this.schemaComponents.every(e=>e.isValid)},isValidated(){return this.schemaComponents.every(e=>e.isValid)}},methods:{validateAll(e,t=!0){return this.schemaComponents.every(o=>o.validateAll(e,t))},verifyAll(e){return this.schemaComponents.every(t=>t.verifyAll(e))},resetValidation(){this.schemaComponents.forEach(e=>e.resetValidation())},clearErrors(){this.schemaComponents.forEach(e=>e.clearErrors())},showValidationErrors(e,t){this.schemaComponents.forEach(o=>o.showValidationErrors(e,t))}}},ct={mixins:[dt],provide(){return{$routeComponent:()=>this}},beforeRouteUpdate(e,t,o){this==null||this.beforeRouteChange(e,t,o)},beforeRouteLeave(e,t,o){this==null||this.beforeRouteChange(e,t,o)},data(){return{reload:!1,store:{},loadCache:{}}},computed:{routeComponent(){return this},routeLevel(){let e=0,t=this;for(;t=t.parentComponent.routeComponent;)e++;return e},routeRecord(){return this.$route.matched[this.routeLevel]},isLastRoute(){const{matched:e}=this.$route;return this.routeRecord===e[e.length-1]},isLastUnnestedRoute(){const{matched:e}=this.$route;for(let t=e.length-1;t>=0;t--){const o=e[t];if(!o.meta.nested)return this.routeRecord===o}return!1},isNestedRoute(){return this.meta.nested},isView(){return!1},meta(){return this.routeRecord.meta},path(){return this.getRoutePath(this.routeRecord.path)},label(){return this.getLabel(this.schema)},breadcrumb(){const{breadcrumb:e}=this.schema||{};return e||`${this.breadcrumbPrefix} ${this.label}`},breadcrumbPrefix(){return""},param(){var e;return this.$route.params[(e=this.meta)==null?void 0:e.param]||null},isMutating(){return!1}},created(){this.appState.routeComponents.push(this)},unmounted(){const{routeComponents:e}=this.appState;e.splice(e.indexOf(this),1)},methods:{beforeRouteChange(e,t,o){let s=!0;t.path.startsWith(this.path)&&!e.path.startsWith(this.path)&&t.path!==e.path&&(this.isFullRouteChange(e,t)||e.path.length<=t.path.length)&&(this.isMutating?s=this.isValidated||this.validateAll():this.isDirty&&(s=window.confirm(`You have unsaved changes. Do you really want to ${this.verbs.cancel}?`))),o(s)},getRoutePath(e){return this.$route.path.split("/").slice(0,e.split("/").length).join("/")},getChildPath(e){return`${this.path}/${e}`},isFullRouteChange(e,t){const o=this.path.match(/^(\/[^/]*)/)[1];return!c.getCommonPrefix(e.path,t.path).startsWith(o)}}},qn=["data-resource"];function In(e,t,o,s,a,r){const i=n.resolveComponent("router-view"),l=n.resolveComponent("dito-schema");return e.user?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[e.isLastRoute?e.shouldRender(e.viewSchema)?(n.openBlock(),n.createElementBlock("div",{key:1,class:"dito-view dito-scroll-parent","data-resource":e.sourceSchema.path},[n.createVNode(l,{class:"dito-scroll",schema:e.viewSchema,data:e.data,meta:e.meta,store:e.getChildStore(e.name),disabled:e.isLoading,generateLabels:!1,menuHeader:!0},null,8,["schema","data","meta","store","disabled"])],8,qn)):n.createCommentVNode("",!0):(n.openBlock(),n.createBlock(i,{key:e.name}))],64)):n.createCommentVNode("",!0)}const b=(e,t)=>{const o=e.__vccOpts||e;for(const[s,a]of t)o[s]=a;return o},zn=C.component("dito-view",{mixins:[ct],provide(){return{$sourceComponent:()=>{var e;return((e=this.mainComponent)==null?void 0:e.sourceComponent)||null},$resourceComponent:()=>{var e;return((e=this.mainComponent)==null?void 0:e.resourceComponent)||null}}},data(){return{isLoading:!1,data:{}}},computed:{schema(){return this.meta.schema},name(){return this.schema.name},isView(){return!0},isSingleComponentView(){return ye(this.schema)},mainComponent(){return this.mainSchemaComponent.getComponentByDataPath(this.name)},viewSchema(){const{component:e,...t}=this.schema;return this.isSingleComponentView?{...t,components:{[t.name]:{name:t.name,label:!1,...e}}}:t},providesData(){return Vn(this.viewSchema,e=>Te(e))}},watch:{$route(e,t){this.isFullRouteChange(e,t)&&(this.isLoading=!1,this.data={})}},methods:{setData(e){this.data=e},getChildPath(e){return this.isSingleComponentView?this.path:`${this.path}/${e}`},setLoading(e){this.isLoading=!!e}}}),ht=b(zn,[["render",In]]),yd="";function ne(e,{year:t=(e==null?void 0:e.getFullYear())??0,month:o=(e==null?void 0:e.getMonth())??0,day:s=(e==null?void 0:e.getDate())??0,hour:a=(e==null?void 0:e.getHours())??0,minute:r=(e==null?void 0:e.getMinutes())??0,second:i=(e==null?void 0:e.getSeconds())??0,millisecond:l=(e==null?void 0:e.getMilliseconds())??0}={}){return new Date(t,o,s,a,r,i,l)}const An={class:"dito-calendar"},Un={class:"dito-calendar-popup"},Hn={class:"dito-calendar-inner"},Kn={class:"dito-calendar-header"},Wn={class:"dito-calendar-body"},Yn={class:"dito-calendar-weekdays"},Jn={class:"dito-calendar-dates"},Qn=["onClick"],Gn={class:"dito-calendar-footer"},Xn=["title"],Zn={class:"dito-calendar-header"},vn={class:"dito-calendar-body"},xn={class:"dito-calendar-months"},eo=["onClick"],to={class:"dito-calendar-header"},no={class:"dito-calendar-body"},oo={class:"dito-calendar-years"},so=["onClick"];function ao(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",An,[n.createElementVNode("div",Un,[n.createElementVNode("div",Hn,[a.currentMode==="day"?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createElementVNode("div",Kn,[n.createElementVNode("a",{class:"dito-calendar-step-prev dito-calendar-step-year",onClick:t[0]||(t[0]=i=>r.stepYear(-1))}),n.createElementVNode("a",{class:"dito-calendar-step-prev dito-calendar-step-month",onClick:t[1]||(t[1]=i=>r.stepMonth(-1))}),n.createElementVNode("span",null,[n.createElementVNode("a",{class:"dito-calendar-select-year",onClick:t[2]||(t[2]=i=>r.setMode("year"))},n.toDisplayString(r.dateToString(a.currentValue,{year:1})),1),n.createElementVNode("a",{class:"dito-calendar-select-month",onClick:t[3]||(t[3]=i=>r.setMode("month"))},n.toDisplayString(r.dateToString(a.currentValue,{month:1})),1)]),n.createElementVNode("a",{class:"dito-calendar-step-next dito-calendar-step-month",onClick:t[4]||(t[4]=i=>r.stepMonth(1))}),n.createElementVNode("a",{class:"dito-calendar-step-next dito-calendar-step-year",onClick:t[5]||(t[5]=i=>r.stepYear(1))})]),n.createElementVNode("div",Wn,[n.createElementVNode("div",Yn,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(a.weekdayNames,i=>(n.openBlock(),n.createElementBlock("span",null,n.toDisplayString(i.short),1))),256))]),n.createElementVNode("div",Jn,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(a.dateRange,i=>(n.openBlock(),n.createElementBlock("span",{class:n.normalizeClass(i.state&&`dito-calendar-item-${i.state}`),onClick:l=>r.selectDate(i.date,i.state,!0)},n.toDisplayString(i.text),11,Qn))),256))])]),n.createElementVNode("div",Gn,[n.createElementVNode("a",{class:"dito-calendar-select-today",role:"button",onClick:t[6]||(t[6]=i=>r.selectDate(new Date)),title:r.dateToString(new Date,{year:1,month:1,day:1})},null,8,Xn)])],64)):a.currentMode==="month"?(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createElementVNode("div",Zn,[n.createElementVNode("a",{class:"dito-calendar-step-prev",onClick:t[7]||(t[7]=i=>r.stepYear(-1))}),n.createElementVNode("span",null,[n.createElementVNode("a",{class:"dito-calendar-select-year",onClick:t[8]||(t[8]=i=>r.setMode("year"))},n.toDisplayString(r.dateToString(a.currentValue,{year:1})),1)]),n.createElementVNode("a",{class:"dito-calendar-step-next",onClick:t[9]||(t[9]=i=>r.stepYear(1))})]),n.createElementVNode("div",vn,[n.createElementVNode("div",xn,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(a.monthNames,(i,l)=>(n.openBlock(),n.createElementBlock("span",{class:n.normalizeClass(r.getMonthClass(l)),onClick:d=>r.selectMonth(l)},n.toDisplayString(i.short),11,eo))),256))])])],64)):a.currentMode==="year"?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[n.createElementVNode("div",to,[n.createElementVNode("a",{class:"dito-calendar-step-prev",onClick:t[10]||(t[10]=i=>r.stepDecade(-1))}),n.createElementVNode("span",null,n.toDisplayString(r.decadeToString(a.currentValue)),1),n.createElementVNode("a",{class:"dito-calendar-step-next",onClick:t[11]||(t[11]=i=>r.stepDecade(1))})]),n.createElementVNode("div",no,[n.createElementVNode("div",oo,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(a.yearRange,i=>(n.openBlock(),n.createElementBlock("span",{class:n.normalizeClass(r.getYearClass(i)),onClick:l=>r.selectYear(i)},n.toDisplayString(i),11,so))),256))])])],64)):n.createCommentVNode("",!0)])])])}const kd="",ro={props:{modelValue:{type:Date,default:null},locale:{type:String,default:"en-US"},disabledDate:{type:Function,default:()=>!1},mode:{type:String,default:"day"}},data(){const{weekdayNames:e,monthNames:t}=io(this.locale);return{weekdayNames:e,monthNames:t,dateRange:[],yearRange:[],currentValue:this.modelValue||ne(new Date,{hour:0,minute:0,second:0,millisecond:0}),currentMode:this.mode}},watch:{modelValue(e,t){+e!=+t&&(this.currentValue=e||new Date,this.updateDateRange())},currentValue(e,t){+e!=+t&&this.updateDateRange()},disabledDate:"updateDateRange",mode(e){this.currentMode=e}},mounted(){this.updateDateRange()},methods:{getMonthClass(e){return{"dito-calendar-item-active":this.modelValue&&e===this.modelValue.getMonth()&&this.currentValue.getFullYear()===this.modelValue.getFullYear(),"dito-calendar-item-current":e===this.currentValue.getMonth()}},getYearClass(e){return{"dito-calendar-item-active":this.modelValue&&e===this.modelValue.getFullYear(),"dito-calendar-item-current":e===this.currentValue.getFullYear()}},setDate(e){this.currentValue=ne(this.currentValue,e)},stepDecade(e){this.setDate({year:this.currentValue.getFullYear()+e*10})},setMode(e){this.currentMode=e},stepMonth(e){const{currentValue:t}=this,{year:o,month:s}=this.getYearMonth(t.getFullYear(),t.getMonth()+e);this.setDate({month:s,day:Math.min(this.getDaysInMonth(o,s),this.currentValue.getDate())})},stepYear(e){this.setDate({year:this.currentValue.getFullYear()+e})},selectDate(e,t,o=!1){t!=="disabled"&&(o?this.setDate({year:e.getFullYear(),month:e.getMonth(),day:e.getDate()}):this.currentValue=e,this.$emit("update:modelValue",this.currentValue))},selectMonth(e){this.setMode("day"),this.setDate({month:e,day:1})},selectYear(e){this.setMode("month"),this.setDate({year:e})},getYearMonth(e,t){return t>11?(e++,t=0):t<0&&(e--,t=11),{year:e,month:t}},dateToString(e,{year:t,month:o,day:s}){return e.toLocaleString(this.locale,{year:t&&"numeric",month:o&&"long",day:s&&"numeric"})},decadeToString(e){const t=this.getFirstYearOfDecade(e.getFullYear());return`${t} – ${t+9}`},getDaysInMonth(e,t){return new Date(e,t+1,0).getDate()},getFirstYearOfDecade(e){return+`${e.toString().slice(0,-1)}0`},navigate({hor:e,ver:t,enter:o}){const{currentMode:s,currentValue:a}=this;if(e||t){switch(s){case"day":this.setDate({day:a.getDate()+e+t*7});break;case"month":this.setDate({month:a.getMonth()+e+t*6});break;case"year":this.setDate({year:a.getFullYear()+e+t*5});break}return!0}else if(o){switch(s){case"day":this.selectDate(a);break;case"month":this.setMode("day");break;case"year":this.setMode("month");break}return!0}},updateDateRange(){this.dateRange=[],this.yearRange=[];const{currentValue:e}=this,t=e.getFullYear(),o=e.getMonth(),s=this.getFirstYearOfDecade(t);for(let h=0;h<10;h++)this.yearRange.push(s+h);let r=new Date(t,o,1).getDay()+1;r===0&&(r=7);const i=this.getDaysInMonth(t,o);if(r>1){const h=this.getYearMonth(t,o-1),p=this.getDaysInMonth(h.year,h.month);for(let u=1;u<r;u++){const g=p-r+u+1,f=new Date(h.year,h.month,g);this.dateRange.push({text:g,date:f,state:this.disabledDate(f)?"disabled":"gray"})}}const l=new Date;for(let h=1;h<=i;h++){const p=new Date(t,o,h),u=f=>f&&f.getDate()===h&&f.getFullYear()===t&&f.getMonth()===o,g=u(this.modelValue)?"active":u(l)?"today":this.disabledDate(p)?"disabled":u(e)?"current":null;this.dateRange.push({text:h,date:p,state:g})}const d=42-this.dateRange.length;if(d>0){const h=this.getYearMonth(t,o+1);for(let p=1;p<=d;p++){const u=new Date(h.year,h.month,p),g=this.disabledDate(u)?"disabled":"gray";this.dateRange.push({text:p,date:u,state:g})}}}}},pt={};function io(e){let t=pt[e];if(!t){const o=[];for(let a=0;a<7;a++){const r=new Date(0,0,a);o.push({long:r.toLocaleString(e,{weekday:"long"}),short:r.toLocaleString(e,{weekday:"short"})})}const s=[];for(let a=1;a<=12;a++){const r=new Date(0,a,0);s.push({long:r.toLocaleString(e,{month:"long"}),short:r.toLocaleString(e,{month:"short"})})}t=pt[e]={weekdayNames:o,monthNames:s}}return t}const lo=b(ro,[["render",ao]]);function oe(e,t){for(const o in t)e.addEventListener(o,t[o],!1);return{remove(){for(const o in t)e.removeEventListener(o,t[o],!1)}}}function co(e){return{37:"left",38:"up",39:"right",40:"down",13:"enter"}[e.keyCode]}function ut(e){const t=co(e);return{hor:{left:-1,right:1}[t]||0,ver:{up:-1,down:1}[t]||0,enter:t==="enter"}}const ho={class:"dito-trigger-container"};function po(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",ho,[o.alwaysShow?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-trigger",r.triggerClass]),ref:"trigger"},[n.renderSlot(e.$slots,"trigger")],2)):o.trigger==="click"?(n.openBlock(),n.createElementBlock("div",{key:1,class:n.normalizeClass(["dito-trigger",r.triggerClass]),ref:"trigger",onClick:t[0]||(t[0]=(...i)=>r.onClick&&r.onClick(...i))},[n.renderSlot(e.$slots,"trigger")],2)):o.trigger==="hover"?(n.openBlock(),n.createElementBlock("div",{key:2,class:n.normalizeClass(["dito-trigger",r.triggerClass]),ref:"trigger",onMouseenter:t[1]||(t[1]=i=>r.onHover(!0)),onMouseleave:t[2]||(t[2]=i=>r.onHover(!1))},[n.renderSlot(e.$slots,"trigger")],34)):o.trigger==="focus"||o.trigger==="always"?(n.openBlock(),n.createElementBlock("div",{key:3,class:n.normalizeClass(["dito-trigger",r.triggerClass]),ref:"trigger"},[n.renderSlot(e.$slots,"trigger")],2)):n.createCommentVNode("",!0),n.createVNode(n.Transition,{name:o.transition},{default:n.withCtx(()=>[o.trigger==="hover"?n.withDirectives((n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-popup",r.popupClass]),ref:"popup",style:n.normalizeStyle(r.popupStyle),onMouseenter:t[3]||(t[3]=i=>r.onHover(!0)),onMouseleave:t[4]||(t[4]=i=>r.onHover(!1))},[a.showPopup?n.renderSlot(e.$slots,"popup",{key:0}):n.createCommentVNode("",!0)],38)),[[n.vShow,a.showPopup]]):n.withDirectives((n.openBlock(),n.createElementBlock("div",{key:1,class:n.normalizeClass(["dito-popup",r.popupClass]),ref:"popup",style:n.normalizeStyle(r.popupStyle)},[a.showPopup?n.renderSlot(e.$slots,"popup",{key:0}):n.createCommentVNode("",!0)],6)),[[n.vShow,a.showPopup]])]),_:3},8,["name"])])}const Cd="",we=b({props:{trigger:{type:String,default:"click"},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom"},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:null},customClass:{type:String,default:null},zIndex:{type:Number,default:0},keepInView:{type:Boolean,default:!0},hideWhenClickOutside:{type:Boolean,default:!0},alwaysShow:{type:Boolean,default:!1},cover:{type:Boolean,default:!1},hideDelay:{type:Number,default:0}},data(){return{showPopup:this.show,popupPlacement:this.placement}},computed:{triggerClass(){return{"dito-trigger-disabled":this.disabled}},popupClass(){const e={[`dito-popup-${c.hyphenate(this.placement)}`]:!0};return this.customClass&&(e[this.customClass]=!0),e},popupStyle(){return this.zIndex?`z-index: ${this.zIndex}`:""}},watch:{show(e){this.showPopup=e||this.alwaysShow},showPopup(e,t){e^t&&(this.$emit("update:show",e),e&&this.$nextTick(()=>this.updatePosition()))}},mounted(){const{trigger:e,popup:t}=this.$refs;if(this.trigger==="focus"){const o=e.querySelector("input, textarea");o&&(this.focusEvents=oe(o,{focus:()=>{this.showPopup=!0},blur:()=>{this.showPopup=!1}}))}this.hideWhenClickOutside&&!this.alwaysShow&&(this.closeEvents=oe(window,{mouseup:o=>{this.showPopup&&!t.contains(o.target)&&!e.contains(o.target)&&(this.showPopup=!1)},blur:()=>{this.showPopup=!1}})),this.alwaysShow&&(this.showPopup=!0)},created(){this.showPopup=this.show},beforeUnmount(){var e,t;(e=this.focusEvents)==null||e.remove(),(t=this.closeEvents)==null||t.remove(),this.mouseLeaveTimer=null},methods:{updatePosition(){const{trigger:e,popup:t}=this.$refs;if(this.show&&t.offsetWidth===0){setTimeout(()=>this.updatePosition(),0);return}const o=c.isString(this.target)?this.$refs[this.target]:this.target;if(o){const m=o===t?e:t.firstElementChild;m&&(m.style.width=getComputedStyle(o).width)}const s=(o||e).getBoundingClientRect(),a=s.left+window.scrollX,r=s.top+window.scrollY,i=s.width,l=s.height,d=t.offsetWidth,h=t.offsetHeight;let[p,u]=this.popupPlacement.split("-")||[];if(this.keepInView){const m=window.innerWidth,k=window.innerHeight;p==="top"?r<h&&(p="bottom"):p==="bottom"?k-r-l<h&&(p="top"):p==="left"?a<d&&(p="right"):p==="right"&&m-a-i<d&&(p="left"),u==="top"?k-r<h&&(u="bottom"):u==="bottom"?r+l<h&&(u="top"):u==="left"?m-a<d&&(u="right"):u==="right"&&a+i<d&&(u="left")}let g=0,f=0;switch(p){case"top":f-=h;break;case"left":g-=d;break;case"right":g+=i;break;case"bottom":f+=l;break}switch(u){case"right":g-=d-i;break;case"bottom":f-=h-l;break}if(this.cover&&(p==="top"?f+=l:p==="bottom"&&(f-=l)),o&&o!==e){const m=e.getBoundingClientRect();g+=a-m.left,f+=r-m.top}t.style.left=`${g}px`,t.style.top=`${f}px`,this.$emit("update-position",{trigger:e,popup:t,placement:this.popupPlacement})},onClick(){this.disabled||(this.showPopup=!this.showPopup)},onHover(e){this.disabled||(clearTimeout(this.mouseLeaveTimer),e?this.showPopup=!0:this.hideDelay?this.mouseLeaveTimer=setTimeout(()=>{this.showPopup=!1},this.hideDelay):this.showPopup=!1)}}},[["render",po]]),uo={class:"dito-input"},mo=["type","id","name","title","aria-label"];function fo(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",uo,[n.withDirectives(n.createElementVNode("input",n.mergeProps({ref:"input",type:o.type,id:o.id,name:o.name,title:o.title,"aria-label":o.title},r.attributes,{"onUpdate:modelValue":t[0]||(t[0]=i=>a.currentValue=i)}),null,16,mo),[[n.vModelDynamic,a.currentValue]])])}const Bd="",K=b({props:{modelValue:{type:[String,Number],default:null},type:{type:String,default:"text"},id:{type:String,default:null},name:{type:String,default:null},title:{type:String,default:null},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},placeholder:{type:String,default:null},autocomplete:{type:String,default:"off"}},data(){return{currentValue:this.modelValue,hovering:!1,focused:!1}},computed:{attributes(){const{onInput:e,...t}=this.$attrs;return t},size(){const{size:e,min:t,max:o}=this.$attrs,s=a=>a!=null?`${a}`.length:0;return e||s(t)||s(o)||void 0}},watch:{modelValue(e,t){e!==t&&(this.currentValue=e)},currentValue(e){e!==this.modelValue&&this.$emit("update:modelValue",e)}},methods:{focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},[["render",fo]]);function go(e,t,o,s,a,r){const i=n.resolveComponent("input-field"),l=n.resolveComponent("calendar"),d=n.resolveComponent("trigger");return n.openBlock(),n.createBlock(d,n.mergeProps({class:"dito-date-picker",ref:"trigger",trigger:"click",show:a.showPopup,"onUpdate:show":t[4]||(t[4]=h=>a.showPopup=h)},{transition:o.transition,placement:o.placement,disabled:o.disabled,target:o.target}),{trigger:n.withCtx(()=>[n.createVNode(i,n.mergeProps({class:["dito-date-picker-input",{"dito-focus":a.showPopup}],ref:"input",type:"text",modelValue:r.currentText,"onUpdate:modelValue":t[0]||(t[0]=h=>r.currentText=h),readonly:"",onFocus:t[1]||(t[1]=h=>a.inputFocused=!0),onBlur:t[2]||(t[2]=h=>a.inputFocused=!1),onKeydown:r.onKeyDown},{placeholder:o.placeholder,disabled:o.disabled}),null,16,["modelValue","class","onKeydown"])]),popup:n.withCtx(()=>[n.createVNode(l,n.mergeProps({class:"dito-date-picker-popup",ref:"calendar",onInput:r.selectDate,modelValue:a.currentValue,"onUpdate:modelValue":t[3]||(t[3]=h=>a.currentValue=h)},{locale:o.locale,disabledDate:o.disabledDate}),null,16,["onInput","modelValue"])]),_:1},16,["show"])}const Vd="",mt=b({components:{Trigger:we,Calendar:lo,InputField:K},props:{modelValue:{type:Date,default:null},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom-left"},placeholder:{type:String,default:null},locale:{type:String,default:"en-US"},dateFormat:{type:Object,default:()=>c.defaultFormats.date},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:"trigger"},disabledDate:{type:Function,default:()=>!1}},data(){return{currentValue:this.modelValue,showPopup:this.show,inputFocused:!1,changed:!1}},computed:{focused(){return this.inputFocused||this.showPopup},currentText(){return c.format(this.currentValue,{locale:this.locale,date:this.dateFormat,time:!1})||""}},watch:{modelValue(e,t){+e!=+t&&(this.currentValue=e)},currentValue(e){+e!=+this.modelValue&&(this.changed=!0,this.$emit("update:modelValue",e))},show(e){this.showPopup=e},showPopup(e,t){e^t&&this.$emit("update:show",e)},focused(e,t){e^t&&(this.$emit(e?"focus":"blur"),!e&&this.changed&&(this.changed=!1,this.$emit("change",this.currentValue)))}},methods:{selectDate(e){this.currentValue=e,this.showPopup=!1},onKeyDown(e){var t;(t=this.$refs.calendar)!=null&&t.navigate(ut(e))&&e.preventDefault()},focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},[["render",go]]);function ft(e,t,o){const s=window.requestAnimationFrame||function(){return setTimeout(arguments[0],10)};if(o<=0)e.scrollTop=t;else{const r=(t-e.scrollTop)/o*10;s(()=>{e.scrollTop=e.scrollTop+r,e.scrollTop!==t&&ft(e,t,o-10)})}}function bo(e,t,o){if(e.createTextRange){const s=e.createTextRange();s.collapse(!0),s.moveStart("character",t),s.moveEnd("character",o),s.select(),e.focus()}else e.setSelectionRange?(e.focus(),e.setSelectionRange(t,o)):"selectionStart"in e&&(e.selectionStart=t,e.selectionEnd=o,e.focus())}const yo={class:"dito-time-picker-popup"},ko={class:"dito-time-picker-panel"},Co=["onClick"],$o={class:"dito-time-picker-panel"},Bo=["onClick"],wo={class:"dito-time-picker-panel"},Vo=["onClick"];function Do(e,t,o,s,a,r){const i=n.resolveComponent("input-field"),l=n.resolveComponent("trigger");return n.openBlock(),n.createBlock(l,n.mergeProps({class:"dito-time-picker",ref:"trigger",trigger:"click",show:a.showPopup,"onUpdate:show":t[6]||(t[6]=d=>a.showPopup=d)},{transition:o.transition,placement:o.placement,disabled:o.disabled,target:o.target}),{trigger:n.withCtx(()=>[n.createVNode(i,n.mergeProps({class:["dito-time-picker-input",{"dito-focus":a.showPopup}],ref:"input",type:"text",modelValue:r.currentText,"onUpdate:modelValue":t[0]||(t[0]=d=>r.currentText=d),readonly:"",onFocus:t[1]||(t[1]=d=>a.inputFocused=!0),onBlur:t[2]||(t[2]=d=>a.inputFocused=!1),onKeydown:r.onKeyDown},{placeholder:o.placeholder,disabled:o.disabled}),null,16,["modelValue","class","onKeydown"])]),popup:n.withCtx(()=>[n.createElementVNode("div",yo,[n.createElementVNode("div",ko,[n.createElementVNode("ul",{class:"dito-time-picker-hour",ref:"hour",onMouseover:t[3]||(t[3]=d=>a.selection=0)},[(n.openBlock(),n.createElementBlock(n.Fragment,null,n.renderList(24,d=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[o.disabledHour(d-1)?n.createCommentVNode("",!0):(n.openBlock(),n.createElementBlock("li",{key:0,class:n.normalizeClass({selected:r.hour===d-1}),onClick:h=>r.hour=d-1},n.toDisplayString(r.leftPad(d-1)),11,Co))],64))),64))],544)]),n.createElementVNode("div",$o,[n.createElementVNode("ul",{class:"dito-time-picker-minute",ref:"minute",onMouseover:t[4]||(t[4]=d=>a.selection=1)},[(n.openBlock(),n.createElementBlock(n.Fragment,null,n.renderList(60,d=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[o.disabledMinute(d-1)?n.createCommentVNode("",!0):(n.openBlock(),n.createElementBlock("li",{key:0,class:n.normalizeClass({selected:r.minute===d-1}),onClick:h=>r.minute=d-1},n.toDisplayString(r.leftPad(d-1)),11,Bo))],64))),64))],544)]),n.createElementVNode("div",wo,[n.createElementVNode("ul",{class:"dito-time-picker-second",ref:"second",onMouseover:t[5]||(t[5]=d=>a.selection=2)},[(n.openBlock(),n.createElementBlock(n.Fragment,null,n.renderList(60,d=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[o.disabledSecond(d-1)?n.createCommentVNode("",!0):(n.openBlock(),n.createElementBlock("li",{key:0,class:n.normalizeClass({selected:r.second===d-1}),onClick:h=>r.second=d-1},n.toDisplayString(r.leftPad(d-1)),11,Vo))],64))),64))],544)])])]),_:1},16,["show"])}const Sd="",gt=b({components:{Trigger:we,InputField:K},props:{modelValue:{type:Date,default:null},transition:{type:String,default:"slide"},placement:{type:String,default:"bottom-left"},placeholder:{type:String,default:null},show:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},target:{type:[String,HTMLElement],default:"trigger"},disabledHour:{type:Function,default:()=>!1},disabledMinute:{type:Function,default:()=>!1},disabledSecond:{type:Function,default:()=>!1}},data(){return{currentValue:this.modelValue,showPopup:this.show,inputFocused:!1,selection:0,changed:!1}},computed:{focused(){return this.inputFocused||this.showPopup},currentText(){return this.currentValue?`${this.leftPad(this.hour)}:${this.leftPad(this.minute)}:${this.leftPad(this.second)}`:""},currentDate(){return this.currentValue||ne(new Date,{hour:0,minute:0,second:0,millisecond:0})},hour:{get(){return this.currentDate.getHours()},set(e){this.setTime({hour:e})}},minute:{get(){return this.currentDate.getMinutes()},set(e){this.setTime({minute:e})}},second:{get(){return this.currentDate.getSeconds()},set(e){this.setTime({second:e})}}},watch:{modelValue(e,t){+e!=+t&&(this.currentValue=e)},currentValue(e){+e!=+this.modelValue&&(this.changed=!0,this.$emit("update:modelValue",e),this.scrollAll())},currentText:"updateSelection",selection:"updateSelection",show(e){this.showPopup=e},showPopup(e,t){e&&(this.updateSelection(),this.scrollAll(0)),e^t&&this.$emit("update:show",e)},focused(e,t){e^t&&(this.$emit(e?"focus":"blur"),!e&&this.changed&&(this.changed=!1,this.$emit("change",this.currentValue)))}},methods:{leftPad(e){return("0"+e).slice(-2)},setTime(e){this.currentValue=ne(this.currentDate,{...e,millisecond:0})},updateSelection(e=!1){if(this.showPopup||e){const t=3*this.selection;this.$nextTick(()=>bo(this.$refs.input,t,t+2))}},scrollAll(e=100){const t=(o,s)=>{const a=this.$refs[o];if(a){const r=a.scrollHeight/(a.children.length+6);ft(a,Math.round(s*r),e)}};this.$nextTick(()=>{t("hour",this.hour),t("minute",this.minute),t("second",this.second)})},onKeyDown(e){const t=["hour","minute","second"][this.selection];if(t){const{hor:o,ver:s,enter:a}=ut(e);if(o){const r=this.selection+o;this.selection=r<0?2:r>2?0:r}else if(s){const r=this[t]+s,{length:i}=this.$refs[t].children;this[t]=r<0?r+i:r>=i?r-i:r}a&&(this.showPopup=!1),(o||s||a)&&(this.updateSelection(!0),e.preventDefault())}},focus(){this.$refs.input.focus()},blur(){this.$refs.input.blur()}}},[["render",Do]]),So={class:"dito-date-time-picker",ref:"picker"};function Po(e,t,o,s,a,r){const i=n.resolveComponent("date-picker"),l=n.resolveComponent("time-picker");return n.openBlock(),n.createElementBlock("div",So,[n.createElementVNode("div",{class:n.normalizeClass(["dito-pickers",{"dito-focus":r.focused}])},[n.createVNode(i,n.mergeProps({ref:"date",modelValue:a.currentValue,"onUpdate:modelValue":t[0]||(t[0]=d=>a.currentValue=d),show:a.showDate,"onUpdate:show":t[1]||(t[1]=d=>a.showDate=d),placement:"bottom-left",target:e.$refs.picker,onFocus:t[2]||(t[2]=d=>a.dateFocused=!0),onBlur:t[3]||(t[3]=d=>a.dateFocused=!1)},{transition:o.transition,placeholder:o.placeholder,locale:o.locale,dateFormat:o.dateFormat,disabled:o.disabled}),null,16,["modelValue","show","target"]),n.createVNode(l,n.mergeProps({ref:"time",modelValue:a.currentValue,"onUpdate:modelValue":t[4]||(t[4]=d=>a.currentValue=d),show:a.showTime,"onUpdate:show":t[5]||(t[5]=d=>a.showTime=d),placeholder:"",placement:"bottom-right",target:e.$refs.picker,onFocus:t[6]||(t[6]=d=>a.timeFocused=!0),onBlur:t[7]||(t[7]=d=>a.timeFocused=!1)},{transition:o.transition,disabled:o.disabled}),null,16,["modelValue","show","target"])],2)],512)}const Ed="",Eo=b({components:{DatePicker:mt,TimePicker:gt},props:{modelValue:{type:Date,default:null},transition:{type:String,default:"slide"},placeholder:{type:String,default:null},dateFormat:{type:Object,default:()=>c.defaultFormats.date},locale:{type:String,default:"en-US"},disabled:{type:Boolean,default:!1}},data(){return{currentValue:this.modelValue,showDate:!1,showTime:!1,dateFocused:!1,timeFocused:!1,changed:!1}},computed:{focused(){return this.dateFocused||this.timeFocused}},watch:{modelValue(e,t){+e!=+t&&(this.currentValue=e)},currentValue(e){+e!=+this.modelValue&&(this.changed=!0,this.$emit("update:modelValue",e))},focused(e,t){e^t&&(this.$emit(e?"focus":"blur"),!e&&this.changed&&(this.changed=!1,this.$emit("change",this.currentValue)))}},methods:{focus(){this.$refs.date.focus()},blur(){this.$refs.date.blur(),this.$refs.time.blur()}}},[["render",Po]]);function No(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("i",{class:n.normalizeClass(["dito-icon",`dito-icon-${o.name}`])},null,2)}const Od="",Oo=b({props:{name:{type:String,required:!0}}},[["render",No]]),_o={class:"dito-pagination"},Fo={key:0,class:"dito-pagination-total"},Lo={class:"dito-buttons dito-buttons-round"},To=["onClick","disabled"],jo={key:0};function Mo(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",_o,[o.showTotal?(n.openBlock(),n.createElementBlock("div",Fo,[o.total>0?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createTextVNode(n.toDisplayString(r.first)+" – "+n.toDisplayString(r.last),1)],64)):(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createTextVNode("0")],64)),n.createTextVNode(" / "+n.toDisplayString(o.total),1)])):n.createCommentVNode("",!0),n.createElementVNode("div",Lo,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(a.pageRange,i=>(n.openBlock(),n.createElementBlock("button",{class:n.normalizeClass(["dito-button",r.getPageClass(i)]),onClick:l=>r.onClickPage(i),disabled:i.disabled},[i.text?(n.openBlock(),n.createElementBlock("span",jo,n.toDisplayString(i.text),1)):n.createCommentVNode("",!0)],10,To))),256))])])}const Fd="",Ro=b({props:{total:{type:Number,default:0},page:{type:Number,default:1},pageSize:{type:Number,default:10},showTotal:{type:Boolean,default:!0}},data(){return{pageRange:[],showPrev:!0,showNext:!0,numPages:0,currentPageSize:this.pageSize,currentPage:this.page}},computed:{first(){return(this.currentPage-1)*this.currentPageSize+1},last(){return Math.min(this.first+this.currentPageSize-1,this.total)}},watch:{total:"updatePageRange",showPrev:"updatePageRange",showNext:"updatePageRange",page(e){this.currentPage=e},pageSize(e){this.currentPageSize=e},currentPageSize(e){this.numPages=Math.ceil(this.total/e),this.currentPage>this.numPages&&(this.currentPage=this.numPages),this.updatePageRange(),this.$emit("size-change",this.page,e)},currentPage(e,t){e!==t&&(this.updatePageRange(),this.$emit("update:page",e))}},created(){this.currentPage=this.page,this.currentPageSize=this.pageSize},mounted(){this.updatePageRange()},methods:{onClickPage(e){e.index&&!e.disabled&&e.index!==this.currentPage&&(this.currentPage=e.index)},getPageClass(e){const t={"dito-selected":e.active};return e.type&&(t[`dito-button-${e.type}`]=!0),t},updatePageRange(){const{showPrev:e,showNext:t,total:o,currentPageSize:s,currentPage:a}=this,r=e+t+1,i=this.numPages=Math.ceil(o/s);let l=1,d=1;i<=r?d=i:a<=e+1?d=r:a>=i-t?(d=i,l=i-r+1):(l=a-e,d=a+t);const h=[];h.push({index:a-1,type:"prev",disabled:a<=1}),l>=2&&h.push({index:1,text:1}),l>2&&h.push({index:Math.max(1,a-10),type:"ellipsis-prev"});for(let p=l;p<=d;p++)h.push({index:p,text:p,active:p===a});d<i-1&&h.push({index:Math.min(i,a+10),type:"ellipsis-next"}),d<=i-1&&h.push({index:i,text:i}),h.push({index:a+1,type:"next",disabled:a>=i}),this.pageRange=h}}},[["render",Mo]]),qo={class:"dito-switch-pane"},Io=["id","name","disabled"],zo=n.createElementVNode("div",{class:"dito-switch-button"},null,-1),Ao={key:0,class:"dito-switch-label"};function Uo(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-switch",r.classes]),style:n.normalizeStyle(r.styles)},[n.createElementVNode("div",qo,[n.withDirectives(n.createElementVNode("input",n.mergeProps({ref:"input",type:"checkbox",id:o.id,name:o.name,disabled:o.disabled},e.$attrs,{"onUpdate:modelValue":t[0]||(t[0]=i=>a.checked=i)}),null,16,Io),[[n.vModelCheckbox,a.checked]]),zo,o.labels?(n.openBlock(),n.createElementBlock("span",Ao,[a.checked?n.renderSlot(e.$slots,"checked",{key:0},()=>[n.createTextVNode(n.toDisplayString(o.labels.checked||"on"),1)]):n.renderSlot(e.$slots,"unchecked",{key:1},()=>[n.createTextVNode(n.toDisplayString(o.labels.unchecked||"off"),1)])])):n.createCommentVNode("",!0)])],6)}const Td="",Ho=b({props:{modelValue:{type:Boolean,default:!1},id:{type:String,default:null},name:{type:String,default:null},disabled:{type:Boolean,default:!1},labels:{type:[Object,Boolean],default:!1}},data(){return{checked:this.modelValue}},computed:{classes(){const{checked:e,disabled:t}=this;return{"dito-checked":e,"dito-disabled":t}},styles(){const{labels:{checked:e,unchecked:t}={}}=this,o=Math.max(0,e==null?void 0:e.length,t==null?void 0:t.length);return{"--switch-width":o?`${o*1.5}rem`:null}}},watch:{modelValue(e){this.checked=e},checked(e){e!==this.modelValue&&(this.$emit("update:modelValue",e),this.$emit("change",e))}},methods:{focus(){this.$refs.input.focus()}}},[["render",Uo]]),Md="";function bt({enabled:e},{slots:t}){return e?n.h(n.Transition,Wo,t):t.default()}bt.props={enabled:{type:Boolean,default:!0}};const Ko=bt,I=(e,t)=>Object.assign(e.style,t),yt=e=>getComputedStyle(e).height,Wo={name:"height",onAfterEnter(e){setTimeout(()=>I(e,{height:"auto"}))},onEnter(e){const{width:t}=getComputedStyle(e);I(e,{width:t,position:"absolute",visibility:"hidden",height:"auto"});const{height:o}=getComputedStyle(e);I(e,{width:null,position:null,visibility:null,height:0}),yt(e),setTimeout(()=>I(e,{height:o}))},onLeave(e){const{height:t}=getComputedStyle(e);I(e,{height:t}),yt(e),setTimeout(()=>I(e,{height:0}))}};function Yo(e,t,o,s,a,r){const i=n.resolveComponent("dito-buttons"),l=n.resolveComponent("dito-schema");return n.openBlock(),n.createElementBlock("div",{class:"dito-dialog",role:"dialog","aria-expanded":"true","aria-modal":"true",style:n.normalizeStyle({"--width":`${e.settings.width}px`}),onClick:t[1]||(t[1]=d=>e.settings.clickToClose&&e.close())},[n.createElementVNode("form",{class:"dito-scroll-parent",onSubmit:t[0]||(t[0]=n.withModifiers((...d)=>e.submit&&e.submit(...d),["prevent"]))},[n.createVNode(l,{class:"dito-scroll",schema:e.schema,data:e.dialogData},{buttons:n.withCtx(()=>[n.createVNode(i,{class:"dito-buttons-large",buttons:e.buttonSchemas,data:e.dialogData},null,8,["buttons","data"])]),_:1},8,["schema","data"])],32)],4)}const Rd="",Jo=C.component("dito-dialog",{provide(){return{$dialogComponent:()=>this}},props:{components:{type:Object,required:!0},buttons:{type:Object,required:!0},promise:{type:Object,required:!0},data:{type:Object,default:()=>({})},settings:{type:Object,default:()=>({width:480,clickToClose:!1})}},data(){const e=c.clone(this.data);for(const t in this.components)t in e||(e[t]=null);return{windowEvents:null,dialogData:e}},computed:{dialogComponent(){return this},schema(){return{components:this.components}},buttonSchemas(){return Object.fromEntries(Object.entries(te(this.buttons)).map(([e,t])=>(e==="cancel"&&!t.events&&(t={...t,events:{click:()=>this.cancel()}}),[e,t])))},hasButtons(){return Object.keys(this.buttonSchemas).length>0},hasCancel(){return!!this.buttonSchemas.cancel}},mounted(){this.windowEvents=oe(window,{keyup:e=>{(this.hasCancel||!this.hasButtons)&&e.keyCode===27&&this.cancel()}})},unmounted(){this.windowEvents.remove()},methods:{remove(){this.$emit("remove")},resolve(e){this.promise.resolve(e),this.remove()},reject(e){this.promise.reject(e),this.remove()},submit(){this.resolve(this.dialogData)},cancel(){this.resolve(null)},close(){this.cancel()}}}),kt=b(Jo,[["render",Yo]]),W={data(){return{domHandlers:[]}},beforeUnmount(){for(const{remove:e}of this.domHandlers)e();this.domHandlers=[]},methods:{domOn(e,t,o){const s=oe(e,c.isObject(t)?t:{[t]:o});return this.domHandlers.push(s),s}}},Qo={class:"dito-root"},Go={class:"dito-page dito-scroll-parent"},Xo=[n.createElementVNode("span",null,"Login",-1)];function Zo(e,t,o,s,a,r){const i=n.resolveComponent("vue-notifications"),l=n.resolveComponent("dito-dialog"),d=n.resolveComponent("dito-menu"),h=n.resolveComponent("dito-account"),p=n.resolveComponent("dito-header"),u=n.resolveComponent("router-view");return n.openBlock(),n.createElementBlock("div",Qo,[n.createVNode(i,{class:"dito-notifications",ref:"notifications",position:"top right",classes:"dito-notification"},null,512),n.createVNode(n.TransitionGroup,{name:"dito-dialog"},{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.dialogs,(g,f)=>(n.openBlock(),n.createBlock(l,{key:f,components:g.components,buttons:g.buttons,promise:g.promise,data:g.data,settings:g.settings,onRemove:m=>e.removeDialog(f)},null,8,["components","buttons","promise","data","settings","onRemove"]))),128))]),_:1}),n.createVNode(d),n.createElementVNode("main",Go,[n.createVNode(p,{spinner:e.options.spinner,isLoading:e.isLoading},{default:n.withCtx(()=>[e.user?(n.openBlock(),n.createBlock(h,{key:0})):e.allowLogin?(n.openBlock(),n.createElementBlock("a",{key:1,class:"dito-login",onClick:t[0]||(t[0]=g=>e.rootComponent.login())},Xo)):n.createCommentVNode("",!0)]),_:1},8,["spinner","isLoading"]),n.createVNode(u)])])}const Id="",vo=C.component("dito-root",{components:{DitoDialog:kt},mixins:[W],provide(){return{$views:()=>this.resolvedViews}},props:{unresolvedViews:{type:[Object,Function,Promise],required:!0},options:{type:Object,default:()=>({})}},data(){return{resolvedViews:{},removeRoutes:null,dialogs:{},allowLogin:!1,loadingCount:0}},computed:{notifications(){return this.$refs.notifications},isLoading(){return this.loadingCount>0}},created(){this.appState.title=document.title||"Dito.js Admin",this.appState.routeComponents=[]},async mounted(){this.domOn(document,{click:e=>{e.target.closest(".dito-label")||(this.appState.activeLabel=null)},keyup:e=>{e.code==="Tab"&&(this.appState.activeLabel=null)}});try{this.allowLogin=!1,await this.fetchUser()?await this.resolveViews():await this.login()}catch(e){console.error(e)}this.allowLogin=!0},methods:{notify({type:e="info",title:t,text:o}={}){t||(t={warning:"Warning",error:"Error",info:"Information",success:"Success"}[e]||"Notification"),o=`<p>${c.asArray(o).join("</p> <p>")}</p>`.replace(/\n|\r\n|\r/g,"<br>");const s={warning:"warn",error:"error",info:"log",success:"log"}[e]||"error";console[s](c.stripTags(o));const{notifications:a=!0}=this.api;if(a){const{durationFactor:r=20}=a,i=(40+o.length+t.length)*r;this.$notify({type:e,title:t,text:o,duration:i})}},closeNotifications(){this.notifications.destroyAll()},registerLoading(e){this.loadingCount+=e?1:-1},showDialog({components:e,buttons:t,data:o,settings:s}){return new Promise(async(a,r)=>{const i=[];if(await x(this.api,{components:e},i,0),i.length>0)throw new Error("Dialog components cannot contain routes, only components with schemas.");const l=`dialog-${++xo}`;this.dialogs[l]={components:e,buttons:t,data:o,settings:s,promise:{resolve:a,reject:r}}})},removeDialog(e){delete this.dialogs[e]},async login(){var s,a;this.allowLogin=!0;const{additionalComponents:e,redirectAfterLogin:t}=this.options.login||{},o=await this.showDialog({components:{username:{type:"text",autofocus:!0},password:{type:"password"},...e},buttons:{cancel:{},login:{type:"submit"}}});if(o)try{const r=await this.sendRequest({resource:this.api.users.login,data:o,internal:!0});t?location.replace(t):(this.setUser(r.data.user),await this.resolveViews())}catch(r){const i=(a=(s=r.response)==null?void 0:s.data)==null?void 0:a.error;this.notify({type:"error",title:"Authentication Error",text:i||r}),i||console.error(r,r.response),this.login()}},navigateHome(){return this.navigate("/")},async logout(){try{(await this.sendRequest({resource:this.api.users.logout,internal:!0})).data.success&&(this.setUser(null),this.navigateHome())}catch(e){console.error(e)}},async fetchUser(){let e=null;try{e=(await this.sendRequest({resource:this.api.users.session,internal:!0})).data.user||null}catch(t){this.notify({type:"error",title:"Authentication Error",text:t})}return this.setUser(e),e},setUser(e){this.appState.user=e&&Object.setPrototypeOf(e,Rn.prototype),e||(this.resolvedViews={},this.navigateHome())},async ensureUser(){await this.fetchUser()||await this.login()},async resolveViews(){var o;try{this.resolvedViews=await be(this.unresolvedViews)}catch(s){return s.request||console.error(s),this.login()}const e=await c.mapConcurrently(Object.entries(this.resolvedViews),([s,a])=>Sn(ht,this.api,a,s)),{fullPath:t}=this.$route;(o=this.removeRoutes)==null||o.call(this),this.removeRoutes=es(this.$router,[{name:"root",path:"/",components:{}},...e]),this.$router.replace(t)}}});let xo=0;function es(e,t){const o=[];for(const s of t){const a=e.addRoute(s);o.push(a)}return()=>{for(const s of o)s()}}const Ve=b(vo,[["render",Zo]]),ts={class:"dito-menu dito-scroll-parent"},ns={class:"dito-scroll"};function os(e,t,o,s,a,r){const i=n.resolveComponent("router-link");return n.openBlock(),n.createElementBlock("nav",ts,[n.createElementVNode("h1",null,n.toDisplayString(e.appState.title),1),n.createElementVNode("ul",ns,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.views,l=>(n.openBlock(),n.createElementBlock("li",null,[e.shouldRender(l)?(n.openBlock(),n.createBlock(i,{key:0,class:"dito-link",to:`/${l.path}`,"active-class":"dito-active"},{default:n.withCtx(()=>[n.createTextVNode(n.toDisplayString(e.getLabel(l)),1)]),_:2},1032,["to"])):n.createCommentVNode("",!0)]))),256))])])}const zd="",ss=C.component("dito-menu",{}),as=b(ss,[["render",os]]),rs={class:"dito-spinner"};function is(e,t,o,s,a,r){return n.withDirectives((n.openBlock(),n.createElementBlock("div",rs,[n.createElementVNode("div",{class:"v-pulse v-pulse1",style:n.normalizeStyle([a.spinnerStyle,a.spinnerDelay1])},null,4),n.createElementVNode("div",{class:"v-pulse v-pulse2",style:n.normalizeStyle([a.spinnerStyle,a.spinnerDelay2])},null,4),n.createElementVNode("div",{class:"v-pulse v-pulse3",style:n.normalizeStyle([a.spinnerStyle,a.spinnerDelay3])},null,4)],512)),[[n.vShow,o.loading]])}const Ad="",Ct=b({props:{loading:{type:Boolean,default:!0},color:{type:String,default:"#5dc596"},size:{type:String,default:"15px"},margin:{type:String,default:"2px"},radius:{type:String,default:"100%"}},data(){return{spinnerStyle:{backgroundColor:this.color,width:this.size,height:this.size,margin:this.margin,borderRadius:this.radius,display:"inline-block",animationName:"v-pulseStretchDelay",animationDuration:"0.75s",animationIterationCount:"infinite",animationTimingFunction:"cubic-bezier(.2,.68,.18,1.08)",animationFillMode:"both"},spinnerDelay1:{animationDelay:"0.12s"},spinnerDelay2:{animationDelay:"0.24s"},spinnerDelay3:{animationDelay:"0.36s"}}}},[["render",is]]),ls={class:"dito-header"},ds={class:"dito-trail"};function cs(e,t,o,s,a,r){const i=n.resolveComponent("router-link"),l=n.resolveComponent("dito-spinner");return n.openBlock(),n.createElementBlock("nav",ls,[n.createElementVNode("div",ds,[n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.trail,(d,h)=>(n.openBlock(),n.createElementBlock("li",null,[h===e.trail.length-1?(n.openBlock(),n.createElementBlock("span",{key:0,class:n.normalizeClass(e.getBreadcrumbClass(d))},n.toDisplayString(d.breadcrumb),3)):(n.openBlock(),n.createBlock(i,{key:1,class:"dito-breadcrumb",to:d.path},{default:n.withCtx(()=>[n.createElementVNode("span",{class:n.normalizeClass(e.getBreadcrumbClass(d))},n.toDisplayString(d.breadcrumb),3)]),_:2},1032,["to"]))]))),256))]),e.isLoading?(n.openBlock(),n.createBlock(l,{key:0})):n.createCommentVNode("",!0)]),n.renderSlot(e.$slots,"default")])}const Hd="",hs=C.component("dito-header",{components:{DitoSpinner:Ct},props:{spinner:{type:Object,default:null},isLoading:{type:Boolean,default:!1}},computed:{trail(){return this.appState.routeComponents.filter(e=>!!e.routeRecord)}},created(){const{size:e="8px",color:t="#999"}=this.spinner||{},{props:o}=Ct;o.size.default=e,o.color.default=t},methods:{getBreadcrumbClass(e){return{"dito-dirty":e.isDirty}}}}),ps=b(hs,[["render",cs]]),$t={mixins:[W],data(){return{pulldown:{open:!1,startTime:0,checkTime:!0,events:{mousedown:()=>{this.setPulldownOpen(!1),this.pulldown.handlers.remove()},mouseup:()=>{this.onPulldownMouseUp(null)&&this.pulldown.handlers.remove()}},handlers:null}}},methods:{onPulldownMouseDown(e){e?this.checkTime=!1:(this.setPulldownOpen(!0),this.checkTime=!0)},onPulldownMouseUp(e){const{startTime:t}=this.pulldown;if(!this.checkTime||t&&Date.now()-t>250)return this.setPulldownOpen(!1),e&&this.onPulldownSelect(e),!0},onPulldownSelect(){},setPulldownOpen(e){this.pulldown.open=e,this.pulldown.startTime=e?Date.now():0,e&&(this.pulldown.handlers=this.domOn(document,this.pulldown.events))}}},us={class:"dito-account"},ms=["onMousedown","onMouseup"];function fs(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",us,[n.createElementVNode("a",{onMousedown:t[0]||(t[0]=n.withModifiers(i=>e.onPulldownMouseDown(),["stop"]))},[n.createElementVNode("span",null,n.toDisplayString(e.user.username),1)],32),n.createElementVNode("ul",{class:n.normalizeClass(["dito-pulldown",{"dito-open":e.pulldown.open}])},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.items,(i,l)=>(n.openBlock(),n.createElementBlock("li",null,[n.createElementVNode("a",{onMousedown:n.withModifiers(d=>e.onPulldownMouseDown(l),["stop"]),onMouseup:d=>e.onPulldownMouseUp(l)},n.toDisplayString(i),41,ms)]))),256))],2)])}const Kd="",gs=C.component("dito-account",{mixins:[$t],data(){return{items:{settings:"Settings",logout:"Logout"}}},methods:{onPulldownSelect(e){switch(e){case"logout":this.rootComponent.logout();break;case"settings":console.info("TODO: Implement Settings");break}}}}),bs=b(gs,[["render",fs]]);function ys(e,t,o,s,a,r){return e.content?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.options.tag||e.tag),{key:0,class:n.normalizeClass(e.classes),style:n.normalizeStyle(e.styles)},{default:n.withCtx(()=>[n.createTextVNode(n.toDisplayString(e.options.text),1)]),_:1},8,["class","style"])):n.createCommentVNode("",!0)}const ks=C.component("dito-element",{props:{tag:{type:String,default:"span"},content:{type:[String,Object]}},computed:{options(){const{content:e}=this;return c.isObject(e)?e:{text:e}},classes(){return{...this.$attrs.class,...Bt(this.options.class)}},styles(){return{...this.$attrs.style,...Bt(this.options.style)}}}});function Bt(e){return c.asArray(e).reduce((t,o)=>(c.isString(o)?t[o]=!0:c.isObject(o)&&Object.assign(t,o),t),{})}const Cs=b(ks,[["render",ys]]),$s=["for","innerHTML"];function Bs(e,t,o,s,a,r){const i=n.resolveComponent("dito-element");return e.text||e.collapsible?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.tag),n.mergeProps({key:0,class:"dito-label"},e.attributes,{class:{"dito-active":e.isActive}}),{default:n.withCtx(()=>[e.collapsible?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-chevron",{"dito-opened":!e.collapsed}])},null,2)):n.createCommentVNode("",!0),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.prefixes,(l,d)=>(n.openBlock(),n.createBlock(i,{class:"dito-label-prefix",tag:"span",key:`prefix-${d}`,content:l},null,8,["content"]))),128)),n.createElementVNode("label",{for:e.dataPath,innerHTML:e.text},null,8,$s),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.suffixes,(l,d)=>(n.openBlock(),n.createBlock(i,{class:"dito-label-suffix",tag:"span",key:`suffix-${d}`,content:l},null,8,["content"]))),128)),n.renderSlot(e.$slots,"edit-buttons")]),_:3},16,["class"])):n.createCommentVNode("",!0)}const Wd="",ws=C.component("dito-label",{props:{label:{type:[String,Object],default:null},dataPath:{type:String,default:null},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1}},computed:{tag(){return this.collapsible?"a":"div"},text(){const{label:e}=this;return c.isObject(e)?e==null?void 0:e.text:e},prefixes(){var e;return c.asArray((e=this.label)==null?void 0:e.prefix)},suffixes(){var e;return c.asArray((e=this.label)==null?void 0:e.suffix)},attributes(){return{...this.collapsible&&{onClick:this.onClick}}},isActive(){return this.appState.activeLabel===this}},methods:{onClick(){this.appState.activeLabel=this,this.$emit("expand",this.collapsed)}}}),Vs=b(ws,[["render",Bs]]),De={methods:{getItemFormSchema:ke,getItemUid:Tn,getItemId(e,t,o=null){return this.isTransient&&o!==null?String(o):it(e,t)},getItemDataPath(e,t){let{dataPath:o}=this;return e!==this.schema&&(o=_(o,e.name)),t!=null&&(o=_(o,t)),o},findItemIdIndex(e,t,o){const s=this.isTransient?o:t==null?void 0:t.findIndex((a,r)=>this.getItemId(e,a,r)===o);return s!==-1?s:null},getItemLabel(e,t,{index:o=null,extended:s=!1,asObject:a=!1}={}){const{itemLabel:r}=e;if(!t||!s&&r===!1)return null;let i;const l=()=>i||(i=this.getItemDataPath(e,o));let d;const h=()=>d||(d=this.getLabel(ke(e,t,this.context)));let p,u,g;if(c.isFunction(r)){const m=r.call(this,new D(this,{nested:!1,data:t,value:t,index:o,get dataPath(){return l()},get formLabel(){return h()}}));c.isObject(m)?{text:p,prefix:u,suffix:g}=m:p=m,s=!1}else if(c.isString(r)&&!(r in t))p=r;else{const{columns:m}=e,k=c.isString(r)&&r||H(e)&&m&&Object.keys(m)[0]||"name";p=t[k]}const f=!!p;if(p==null&&(s=!0,p=H(e)&&o!==null?p=`${o+1}`:""),s){const m=h();m&&(p=`${m} ${f?`'${p}'`:p}`)}return a?{text:p,prefix:u,suffix:g}:p}}},Ds={class:"dito-schema"},Ss={class:"dito-schema-content"};function Ps(e,t,o,s,a,r){const i=n.resolveComponent("dito-label"),l=n.resolveComponent("dito-tabs"),d=n.resolveComponent("dito-clipboard"),h=n.resolveComponent("dito-pane"),p=n.resolveComponent("transition-height"),u=n.resolveComponent("dito-panels");return n.openBlock(),n.createElementBlock("div",Ds,[n.createElementVNode("div",Ss,[e.hasLabel||e.hasTabs||e.clipboard?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-schema-header",{"dito-schema-menu-header":e.menuHeader}])},[e.hasLabel?(n.openBlock(),n.createBlock(i,{key:0,label:e.label,dataPath:e.dataPath,collapsible:e.collapsible,collapsed:!e.opened,onExpand:e.onExpand},n.createSlots({_:2},[e.inlined?{name:"edit-buttons",fn:n.withCtx(()=>[n.renderSlot(e.$slots,"edit-buttons")]),key:"0"}:void 0]),1032,["label","dataPath","collapsible","collapsed","onExpand"])):n.createCommentVNode("",!0),e.tabs?(n.openBlock(),n.createBlock(l,{key:1,tabs:e.tabs,selectedTab:e.selectedTab},null,8,["tabs","selectedTab"])):n.createCommentVNode("",!0),n.createVNode(d,{clipboard:e.clipboard,dataPath:e.dataPath,data:e.data},null,8,["clipboard","dataPath","data"])],2)):n.createCommentVNode("",!0),e.hasTabs?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:1},n.renderList(e.tabs,(g,f)=>(n.openBlock(),n.createBlock(h,{class:"dito-pane-tab",ref_for:!0,ref:"tabs",key:f,visible:e.selectedTab===f,tab:f,schema:g,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,single:!e.inlined&&!e.hasMainPane,disabled:e.disabled,generateLabels:e.generateLabels},null,8,["visible","tab","schema","dataPath","data","meta","store","single","disabled","generateLabels"]))),128)):n.createCommentVNode("",!0),n.createVNode(p,{enabled:e.inlined},{default:n.withCtx(()=>[e.hasMainPane&&e.opened?(n.openBlock(),n.createBlock(h,{key:0,class:"dito-pane-main",ref:"components",schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,single:!e.inlined&&!e.hasTabs,disabled:e.disabled,generateLabels:e.generateLabels},null,8,["schema","dataPath","data","meta","store","single","disabled","generateLabels"])):n.createCommentVNode("",!0)]),_:1},8,["enabled"]),!e.inlined&&e.isPopulated?n.renderSlot(e.$slots,"buttons",{key:2}):n.createCommentVNode("",!0)]),e.inlined?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[e.hasLabel?n.createCommentVNode("",!0):n.renderSlot(e.$slots,"edit-buttons",{key:0})],64)):e.isPopulated?(n.openBlock(),n.createBlock(u,{key:1,panels:e.panelSchemas,data:e.data,meta:e.meta,store:e.store,disabled:e.disabled},null,8,["panels","data","meta","store","disabled"])):n.createCommentVNode("",!0)])}const Yd="",Es=C.component("dito-schema",{components:{TransitionHeight:Ko},mixins:[De],provide(){return{$schemaComponent:()=>this}},inject:["$schemaParentComponent"],props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},label:{type:[String,Object],default:null},inlined:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0},hasOwnData:{type:Boolean,default:!1},menuHeader:{type:Boolean,default:!1}},data(){const{data:e}=this.schema;return{...e&&c.isFunction(e)?e.call(this,this.context):e,componentsRegistry:{},panesRegistry:{},panelsRegistry:{}}},computed:{schemaComponent(){return this},parentSchemaComponent(){return this.hasOwnData?null:this.parentComponent.schemaComponent},panelSchemas(){const e=at(this.schema.panels,"");for(const t of this.panes)e.push(...t.panelSchemas);return e},tabs(){return q(this.schema.tabs)},selectedTab(){var o,s;const e=((o=this.$route.hash)==null?void 0:o.slice(1))||null,t=e&&this.shouldRender(this.tabs[e])?e:((s=this.defaultTab)==null?void 0:s.name)||null;return t!==e&&this.$router.replace({hash:`#${t}`}),t},defaultTab(){if(this.tabs){let e=null;for(const t of Object.values(this.tabs)){const{defaultTab:o}=t;if(c.isFunction(o)?o.call(this,this.context):o)return t;e||(e=t)}return e}},clipboard(){var e;return(e=this.schema)==null?void 0:e.clipboard},processedData(){return this.processData({target:"server",schemaOnly:!0})},clipboardData(){return{$schema:this.schema.name,...this.processData({target:"clipboard",schemaOnly:!0})}},item(){return this.data},rootItem(){return this.rootData},processedItem(){return this.processedData},clipboardItem(){return this.clipboardData},parentItem(){return de(this.rootData,this.dataPath,!1)},formLabel(){return this.getLabel(this.getItemFormSchema(this.sourceSchema,this.data,this.context))},isDirty(){return this.someComponent(e=>e.isDirty)},isTouched(){return this.someComponent(e=>e.isTouched)},isValid(){return this.everyComponent(e=>e.isValid)},isValidated(){return this.everyComponent(e=>e.isValidated)},hasData(){return!!this.data},hasLabel(){return!!this.label||this.collapsible},hasTabs(){return!this.inlined&&!!this.tabs},hasMainPane(){const{components:e}=this.schema;return!!e&&Object.keys(e).length>0},opened:fe("opened",{default(){return!this.collapsed}}),components(){return Object.values(this.componentsRegistry)},panes(){return Object.values(this.panesRegistry)},panels(){return Object.values(this.panelsRegistry)},componentsByDataPath(){return this._listEntriesByDataPath(this.componentsRegistry)},panesByDataPath(){return this._listEntriesByDataPath(this.panesRegistry)},panelsByDataPath(){return this._listEntriesByDataPath(this.panelsRegistry)}},created(){this._register(!0),this.setupSchemaFields(),this.delegate("change",this.parentSchemaComponent),this.emitEvent("initialize")},beforeUnmount(){this.emitEvent("destroy"),this._register(!1)},methods:{getComponentsByDataPath(e,t){return this._getEntriesByDataPath(this.componentsByDataPath,e,t)},getComponentByDataPath(e,t){return this.getComponentsByDataPath(e,t)[0]||null},getComponentsByName(e,t){return this._getEntriesByName(this.componentsByDataPath,e,t)},getComponentByName(e,t){return this.getComponentsByName(e,t)[0]||null},getComponents(e,t){return this._getEntries(this.componentsByDataPath,e,t)},getComponent(e,t){return this.getComponents(e,t)[0]||null},getPanelsByDataPath(e,t){return this._getEntriesByDataPath(this.panelsByDataPath,e,t)},getPanelByDataPath(e,t){return this.getPanelsByDataPath(e,t)[0]||null},getPanels(e,t){return this._getEntries(this.panelsByDataPath,e,t)},getPanel(e,t){return this.getPanels(e,t)[0]||null},someComponent(e){return this.isPopulated&&this.components.some(e)},everyComponent(e){return this.isPopulated&&this.components.every(e)},onExpand(e){this.emitEvent("expand",{context:{expand:e}}),(!this.opened||e||this.validateAll())&&(this.opened=e)},onChange(){this.emitEvent("change")},resetValidation(){for(const e of this.components)e.resetValidation()},clearErrors(){for(const e of this.components)e.clearErrors()},focus(){var e;(e=this.parentSchemaComponent)==null||e.focus(),this.opened=!0},validateAll(e,t=!0){const{componentsByDataPath:o}=this;let s;if(e){const i=c.isFunction(e)?e:c.isRegExp(e)?l=>e.test(l):null;s=i?Object.keys(o).filter(i):c.isArray(e)?e:[e]}t&&this.clearErrors();let a=!0,r=!0;s||(s=Object.keys(o));for(const i of s){const l=this.getComponentsByDataPath(i);for(const d of l)d.validate(t)||(t&&r&&d.focus(),r=!1,a=!1)}return t&&!a&&this.notifyErrors(),a},verifyAll(e){return this.validateAll(e,!1)},async showValidationErrors(e,t){var a;this.clearErrors();let o=!0;const s=[];for(const[r,i]of Object.entries(e)){const l=this.hasOwnData?_(this.dataPath,r):r,d=c.parseDataPath(l);let h=!1;const p=this.getComponentsByDataPath(d);for(const u of p)u.showValidationErrors(i,o&&t)&&(h=!0,o=!1);if(!h){const u=d.pop();for(;d.length>0;){const f=this.getComponentsByDataPath(d);for(const m of f)if(await((a=m.navigateToComponent)==null?void 0:a.call(m,l,k=>{let P=!1;for(const V of k){const $=e[V.dataPath];$&&V.showValidationErrors($,o&&t)&&(P=!0,o=!1)}return P})))return;d.pop()}const g=c.labelize(u);for(const f of i){const m=g?`The field ${g}`:`The ${this.formLabel}`;s.push(`${m} ${f.message}`)}}o=!1}o||this.notifyErrors(s.join(`
2
+ `))},notifyErrors(e){this.notify({type:"error",title:"Validation Errors",text:e||"Please correct the highlighted errors."})},resetData(){Object.assign(this.data,xe(this.schema,{},this)),this.clearErrors()},setData(e){for(const t in e)if(t in this.data){this.data[t]=e[t];for(const o of this.getComponentsByName(t))o.markDirty()}},filterData(e){const t={};for(const[o,s]of Object.entries(e))(c.isArray(s)||c.isObject(s))&&this.getComponentsByName(o).some(r=>r.providesData)||(t[o]=s);return t},processData({target:e="clipboard",schemaOnly:t=!0}={}){return Ln(this.schema,this.sourceSchema,this.data,this.dataPath,{component:this,schemaOnly:t,target:e})},_register(e){var t;(t=this.$schemaParentComponent())==null||t._registerSchemaComponent(this,e)},_registerComponent(e,t){var o;this._registerEntry(this.componentsRegistry,e,t),(o=this.parentSchemaComponent)==null||o._registerComponent(e,t)},_registerPane(e,t){this._registerEntry(this.panesRegistry,e,t)},_registerPanel(e,t){this._registerEntry(this.panelsRegistry,e,t)},_registerEntry(e,t,o){const s=t.$uid;o?e[s]=t:delete e[s]},_listEntriesByDataPath(e){return Object.values(e).reduce((t,o)=>{const{dataPath:s}=o;return(t[s]||(t[s]=[])).push(o),t},{})},_getEntries(e,t,o){return c.normalizeDataPath(t).startsWith(this.dataPath)?this._getEntriesByDataPath(e,t,o):this._getEntriesByName(e,t,o)},_getEntriesByDataPath(e,t,o){return this._filterEntries(e[c.normalizeDataPath(t)]||[],o)},_getEntriesByName(e,t,o){return this._filterEntries(e[_(this.dataPath,t)]||[],o)},_filterEntries(e,t){return t?e.filter(t):e}}}),Ns=b(Es,[["render",Ps]]);function Os(e,t,o,s,a,r){const i=n.resolveComponent("dito-edit-buttons"),l=n.resolveComponent("dito-schema");return n.openBlock(),n.createBlock(l,{class:n.normalizeClass(["dito-schema-inlined",{"dito-schema-compact":e.isCompact}]),schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,label:e.isCompact?null:e.label,inlined:!0,disabled:e.disabled,collapsed:e.collapsed,collapsible:e.collapsible},{"edit-buttons":n.withCtx(()=>[e.deletable||e.draggable||e.editable?(n.openBlock(),n.createBlock(i,{key:0,deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.editPath,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,onDelete:t[0]||(t[0]=d=>e.$emit("delete"))},null,8,["deletable","draggable","editable","editPath","schema","dataPath","data","meta","store"])):n.createCommentVNode("",!0)]),_:1},8,["schema","dataPath","data","meta","store","label","disabled","collapsed","collapsible","class"])}const Jd="",_s=C.component("dito-schema-inlined",{props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},label:{type:[String,Object],default:null},disabled:{type:Boolean,required:!0},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null}},computed:{isCompact(){return Ge(this.schema)},hasLabel(){return!this.isCompact&&!!this.label}}}),Fs=b(_s,[["render",Os]]),Ls={key:0,class:"dito-pane"},Ts={key:0,class:"dito-break"},js={key:2,class:"dito-break"};function Ms(e,t,o,s,a,r){const i=n.resolveComponent("dito-container");return e.isPopulated&&e.componentSchemas.length>0?n.withDirectives((n.openBlock(),n.createElementBlock("div",Ls,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.componentSchemas,({schema:l,dataPath:d,nestedDataPath:h,nested:p,store:u})=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[l.break==="before"?(n.openBlock(),n.createElementBlock("div",Ts)):n.createCommentVNode("",!0),e.shouldRender(l)?(n.openBlock(),n.createBlock(i,{key:h,schema:l,dataPath:d,data:e.data,meta:e.meta,store:u,single:e.isSingleComponent,nested:p,disabled:e.disabled,generateLabels:e.generateLabels},null,8,["schema","dataPath","data","meta","store","single","nested","disabled","generateLabels"])):n.createCommentVNode("",!0),l.break==="after"?(n.openBlock(),n.createElementBlock("div",js)):n.createCommentVNode("",!0)],64))),256))],512)),[[n.vShow,e.visible]]):n.createCommentVNode("",!0)}const Qd="",Rs=C.component("dito-pane",{provide(){return{$tabComponent:()=>this.tabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0},tab:{type:String,default:null},single:{type:Boolean,default:!1},visible:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0}},computed:{tabComponent(){return this.tab?this:this.$tabComponent()},componentSchemas(){var t,o;const e=(t=this.sourceSchema)==null?void 0:t.wrapPrimitives;return Object.entries(((o=this.schema)==null?void 0:o.components)||{}).map(([s,a])=>{a.name=s;const r=Xe(a),i=_(this.dataPath,s);return{schema:a,dataPath:r&&!e?i:this.dataPath,nestedDataPath:i,nested:r,store:r?this.getChildStore(s):this.store}})},panelSchemas(){return this.componentSchemas.flatMap(({schema:e,nestedDataPath:t})=>rt(e,t,this.schemaComponent,this.tabComponent))},isSingleComponent(){return this.single&&this.componentSchemas.length===1}},created(){this._register(!0)},beforeUnmount(){this._register(!1)},methods:{_register(e){this.schemaComponent._registerPane(this,e)},focus(){this.tab&&this.$router.push({hash:`#${this.tab}`})}}}),qs=b(Rs,[["render",Ms]]);function Is(e){const t=c.isString(e)&&e.match(/^\s*([+-]?\d+)\s*\/\s*([+-]?\d+)\s*$/);if(t){const[,o,s]=t;return parseFloat(o)/parseFloat(s)}else return parseFloat(e)}function zs(e,t,o,s,a,r){const i=n.resolveComponent("dito-label"),l=n.resolveComponent("dito-errors");return n.withDirectives((n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-container",e.containerClass]),style:n.normalizeStyle(e.containerStyle)},[e.label?(n.openBlock(),n.createBlock(i,{key:0,label:e.label,dataPath:e.labelDataPath,class:n.normalizeClass(e.componentClass)},null,8,["label","dataPath","class"])):n.createCommentVNode("",!0),(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.typeComponent),{class:n.normalizeClass(["dito-component",e.componentClass]),schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,single:e.single,nested:e.nested,disabled:e.componentDisabled,onErrors:e.onErrors},null,40,["schema","dataPath","data","meta","store","single","nested","disabled","class","onErrors"])),n.createVNode(l,{errors:e.errors},null,8,["errors"])],6)),[[n.vShow,e.componentVisible]])}const Gd="",As=C.component("dito-container",{props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,required:!0},generateLabels:{type:Boolean,default:!0}},data(){return{errors:null}},computed:{context(){return new D(this,{nested:this.nested})},typeComponent(){return G(this.schema.type)},hasLabel(){var o;const{schema:e}=this,{label:t}=e;return t!==!1&&(!!t||((o=this.typeComponent)==null?void 0:o.generateLabel)&&this.generateLabels)},label(){return this.hasLabel?this.getLabel(this.schema):null},labelDataPath(){return this.nested?this.dataPath:null},componentWidth:y("width",{type:[String,Number],default(){var e;return(e=this.typeComponent)==null?void 0:e.defaultWidth},get(e){return e===void 0?1:c.isString(e)?e.match(/^\s*[<>]?\s*(.*)$/)[1]:e}}),componentWidthOperator:y("width",{type:String,get(e){return c.isString(e)&&e.match(/^\s*([<>]?)/)[1]||null}}),componentVisible:y("visible",{type:Boolean,default(){var e;return(e=this.typeComponent)==null?void 0:e.defaultVisible}}),componentDisabled:y("disabled",{type:Boolean,default:!1,get(e){return e||this.disabled}}),containerClass(){const{class:e}=this.schema;return{"dito-single":this.single,"dito-omit-padding":_n(this.schema),...c.isString(e)?{[e]:!0}:e}},componentBasis(){const e=this.componentWidth,t=[null,"auto","fill"].includes(e)?"auto":/%$/.test(e)?parseFloat(e):/[a-z]/.test(e)?e:Is(e)*100;return c.isNumber(t)?`${t}%`:t},containerStyle(){const e=this.componentWidthOperator===">"||this.componentWidth==="fill",t=this.componentWidthOperator==="<";return{flex:`${e?1:0} ${t?1:0} ${this.componentBasis}`}},componentClass(){const e=this.componentBasis==="auto";return{"dito-single":this.single,"dito-disabled":this.componentDisabled,"dito-width-fill":!e||this.componentWidth==="fill","dito-width-auto":e,"dito-has-errors":!!this.errors}}},methods:{onErrors(e){this.errors=e}}}),Us=b(As,[["render",zs]]),Hs={class:"dito-tabs"};function Ks(e,t,o,s,a,r){const i=n.resolveComponent("router-link");return n.openBlock(),n.createElementBlock("div",Hs,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.tabs,(l,d)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRender(l)?(n.openBlock(),n.createBlock(i,{class:n.normalizeClass(["dito-link",{"dito-active":e.selectedTab===d}]),key:d,to:{hash:`#${d}`}},{default:n.withCtx(()=>[n.createTextVNode(n.toDisplayString(e.getLabel(l,d)),1)]),_:2},1032,["to","class"])):n.createCommentVNode("",!0)],64))),256))])}const Xd="",Ws=C.component("dito-tabs",{props:{tabs:{type:Object,default:null},selectedTab:{type:String,default:null}}}),Ys=b(Ws,[["render",Ks]]),Js={class:"dito-panel-title"};function Qs(e,t,o,s,a,r){const i=n.resolveComponent("dito-buttons"),l=n.resolveComponent("dito-schema");return n.withDirectives((n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.panelTag),{class:"dito-panel",onSubmit:t[0]||(t[0]=n.withModifiers(()=>{},["prevent"]))},{default:n.withCtx(()=>[n.createElementVNode("label",Js,n.toDisplayString(e.getLabel(e.schema)),1),n.createVNode(l,{class:"dito-panel-schema",schema:e.panelSchema,dataPath:e.panelDataPath,data:e.panelData,meta:e.meta,store:e.store,disabled:e.disabled,hasOwnData:e.hasOwnData},{buttons:n.withCtx(()=>[n.createVNode(i,{buttons:e.buttonSchemas,dataPath:e.panelDataPath,data:e.panelData,meta:e.meta,store:e.store,disabled:e.disabled},null,8,["buttons","dataPath","data","meta","store","disabled"])]),_:1},8,["schema","dataPath","data","meta","store","disabled","hasOwnData"])]),_:1},544)),[[n.vShow,e.visible&&(!e.panelTabComponent||e.panelTabComponent.visible)]])}const Zd="",Gs=C.component("dito-panel",{mixins:[dt],provide(){return{$panelComponent:()=>this,$tabComponent:()=>this.panelTabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0},panelTabComponent:{type:Object,default:null}},data(){return{ownData:null}},computed:{panelComponent(){return this},tabComponent(){return this.panelTabComponent},buttonSchemas(){return te(this.schema.buttons)},target(){return this.schema.target||this.dataPath},hasOwnData(){return!!this.ownData},panelData(){return this.ownData||this.data},panelSchema(){if(this.hasOwnData)return this.schema;{const{data:e,...t}=this.schema;return t}},panelTag(){return this.hasOwnData?"form":"div"},panelDataPath(){return this.hasOwnData?this.dataPath:this.schemaComponent.dataPath},visible:y("visible",{type:Boolean,default:!0})},created(){this._register(!0);const{data:e}=this.schema;e&&(this.ownData=c.isFunction(e)?e.call(this,this.context):e)},beforeUnmount(){this._register(!1)},methods:{_register(e){this.schemaComponent._registerPanel(this,e)}}}),Xs=b(Gs,[["render",Qs]]),Zs={key:0,class:"dito-panels"};function vs(e,t,o,s,a,r){const i=n.resolveComponent("dito-panel");return e.panels.length>0?(n.openBlock(),n.createElementBlock("div",Zs,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.panels,({schema:l,dataPath:d,tabComponent:h})=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRender(l)?(n.openBlock(),n.createBlock(i,{key:e.getPanelKey(d,h),schema:l,dataPath:d,data:e.data,meta:e.meta,store:e.getChildStore(l.name),disabled:l.disabled!=null?l.disabled:e.disabled,panelTabComponent:h},null,8,["schema","dataPath","data","meta","store","disabled","panelTabComponent"])):n.createCommentVNode("",!0)],64))),256))])):n.createCommentVNode("",!0)}const vd="",xs=C.component("dito-panels",{props:{panels:{type:Array,default:null},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0}},methods:{getPanelKey(e,t){return t?`${t.tab}_${e}`:e}}}),ea=b(xs,[["render",vs]]);function wt(e){return e&&c.asArray(e).some(t=>t.type!==n.Comment)}function ta(e,t={}){return e=c.isString(e)?n.useSlots()[e]:e,wt(e==null?void 0:e(t))}const na={key:0,class:"dito-buttons"},oa={key:0,class:"dito-container"};function sa(e,t,o,s,a,r){var d,h;const i=n.resolveComponent("dito-container"),l=n.resolveComponent("dito-vnode");return e.buttonSchemas||e.hasSlotContent(e.$slots.default)?(n.openBlock(),n.createElementBlock("div",na,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.buttonSchemas,(p,u)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRender(p)?(n.openBlock(),n.createBlock(i,{key:u,schema:p,dataPath:u,data:e.data,meta:e.meta,store:e.getChildStore(p.name),disabled:e.disabled,generateLabels:!1},null,8,["schema","dataPath","data","meta","store","disabled"])):n.createCommentVNode("",!0)],64))),256)),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList((h=(d=e.$slots).default)==null?void 0:h.call(d),p=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.hasVNodeContent(p)?(n.openBlock(),n.createElementBlock("div",oa,[n.createVNode(l,{vnode:p},null,8,["vnode"])])):n.createCommentVNode("",!0)],64))),256))])):n.createCommentVNode("",!0)}const xd="",aa=C.component("dito-buttons",{provide:{$tabComponent:()=>null},props:{buttons:{type:Object,default:null},dataPath:{type:String,default:""},data:{type:[Object,Array],default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},disabled:{type:Boolean,default:!1}},computed:{buttonSchemas(){const{dataPath:e,buttons:t}=this;return t?Object.values(t).reduce((o,s)=>(o[_(e,s.name)]=s,o),{}):null}},methods:{hasSlotContent:ta,hasVNodeContent:wt}}),ra=b(aa,[["render",sa]]);function ia(e,t,o,s,a,r){const i=n.resolveComponent("router-link"),l=n.resolveComponent("dito-create-button"),d=n.resolveComponent("dito-buttons");return n.openBlock(),n.createBlock(d,{class:"dito-edit-buttons dito-buttons-round",buttons:e.buttons,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,onClick:t[1]||(t[1]=n.withModifiers(()=>{},["stop"]))},{default:n.withCtx(()=>[e.isDraggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:0,class:"dito-button"},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.isEditable?(n.openBlock(),n.createBlock(i,n.mergeProps({key:1,class:"dito-button",to:{path:e.editPath}},e.getButtonAttributes(e.verbs.edit)),null,16,["to"])):n.createCommentVNode("",!0),e.isCreatable?(n.openBlock(),n.createBlock(l,{key:2,schema:e.schema,path:e.createPath,verb:e.verbs.create,text:e.createButtonText},null,8,["schema","path","verb","text"])):n.createCommentVNode("",!0),e.isDeletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:3,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.delete),{onClick:t[0]||(t[0]=h=>e.$emit("delete"))}),null,16)):n.createCommentVNode("",!0)]),_:1},8,["buttons","dataPath","data","meta","store"])}const ec="",la=C.component("dito-edit-buttons",{props:{draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},creatable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null},createPath:{type:String,default:null},buttons:{type:Object,default:null},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0}},computed:{formLabel(){return this.getLabel(this.schema.form)},isDraggable(){return this.hasOption("draggable")},isEditable(){return this.hasOption("editable")&&!!this.editPath},isCreatable(){return this.hasOption("creatable")&&!!this.createPath},isDeletable(){return this.hasOption("deletable")},createButtonText(){var e;return((e=this.schema.creatable)==null?void 0:e.label)||this.formLabel&&`${c.capitalize(this.verbs.create)} ${this.formLabel}`||null}},methods:{hasOption(e){return!!(this[e]&&this.schema[e]!==!1)}}}),da=b(la,[["render",ia]]),ca={class:"dito-create-button"},ha=["title"],pa=["onMousedown","onMouseup"],ua=["type","title"];function ma(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",ca,[e.showPulldown?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createElementVNode("button",{class:n.normalizeClass(["dito-button",`dito-button-${e.verb}`]),type:"button",onMousedown:t[0]||(t[0]=n.withModifiers(i=>e.onPulldownMouseDown(),["stop"])),title:e.labelize(e.verb)},n.toDisplayString(e.text),43,ha),n.createElementVNode("ul",{class:n.normalizeClass(["dito-pulldown",{"dito-open":e.pulldown.open}])},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.forms,(i,l)=>(n.openBlock(),n.createElementBlock("li",null,[e.isCreatable(i)?(n.openBlock(),n.createElementBlock("a",{key:0,class:n.normalizeClass(`dito-type-${l}`),onMousedown:n.withModifiers(d=>e.onPulldownMouseDown(l),["stop"]),onMouseup:d=>e.onPulldownMouseUp(l)},n.toDisplayString(e.getLabel(i)),43,pa)):n.createCommentVNode("",!0)]))),256))],2)],64)):(n.openBlock(),n.createElementBlock("button",{key:1,class:n.normalizeClass(["dito-button",`dito-button-${e.verb}`]),type:e.isInlined?"button":"submit",onClick:t[1]||(t[1]=i=>e.createItem(e.forms.default)),title:e.labelize(e.verb)},n.toDisplayString(e.text),11,ua))])}const tc="",fa=C.component("dito-create-button",{mixins:[$t],props:{schema:{type:Object,required:!0},path:{type:String,required:!0},verb:{type:String,required:!0},text:{type:String,default:null}},computed:{forms(){return A(this.schema,this.context)},isInlined(){return Ce(this.schema)},showPulldown(){return Object.keys(this.forms).length>1||!this.forms.default}},methods:{isCreatable(e){return e.creatable!==!1},createItem(e,t=null){if(this.isCreatable(e))this.isInlined?this.sourceComponent.createItem(e,t):this.$router.push({path:`${this.path}/create`,query:{type:t}});else throw new Error("Not allowed to create item for given form")},onPulldownSelect(e){this.createItem(this.forms[e],e),this.setPulldownOpen(!1)}}}),ga=b(fa,[["render",ma]]),ba={key:0,class:"dito-clipboard dito-buttons dito-buttons-round"},ya=["disabled"],ka=["disabled"];function Ca(e,t,o,s,a,r){return e.clipboard?(n.openBlock(),n.createElementBlock("div",ba,[n.createElementVNode("button",{class:"dito-button dito-button-copy",type:"button",ref:"copyData",title:"Copy Data",disabled:!e.copyEnabled,onClick:t[0]||(t[0]=(...i)=>e.onCopy&&e.onCopy(...i))},null,8,ya),n.createElementVNode("button",{class:"dito-button dito-button-paste",type:"button",title:"Paste Data",disabled:!e.pasteEnabled,onClick:t[1]||(t[1]=(...i)=>e.onPaste&&e.onPaste(...i))},null,8,ka)])):n.createCommentVNode("",!0)}const $a=C.component("dito-clipboard",{mixins:[W],props:{clipboard:{type:[Boolean,Object],default:!1},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null}},data(){return{copyEnabled:!1,pasteEnabled:!1,fixClipboard:!0}},computed:{clipboardOptions(){return c.isObject(this.clipboard)?this.clipboard:{}},copyData(){const{copy:e}=this.clipboardOptions;return e?t=>e.call(this,new D(this,{clipboardData:t})):t=>c.clone(t)},pasteData(){const{paste:e}=this.clipboardOptions;return e?t=>e.call(this,new D(this,{clipboardData:t})):t=>t}},mounted(){this.domOn(document,{copy:this.checkClipboard}),this.domOn(window,{focus:this.checkClipboard}),this.$watch("data",{immediate:!0,handler:(e,t)=>{e!==t&&this.checkClipboard()}})},methods:{async getClipboardData(e){var a,r,i,l,d;let{clipboardData:t}=this.appState;try{const h=await((r=(a=navigator.clipboard)==null?void 0:a.readText)==null?void 0:r.call(a));this.fixClipboard&&h&&(await((l=(i=navigator.clipboard)==null?void 0:i.writeText)==null?void 0:l.call(i,h)),this.fixClipboard=!1),h&&(t=JSON.parse(h))}catch(h){e&&(console.error(h,h.name,h.message),h.name==="SyntaxError"&&alert(c.deindent`
3
3
  The data in the clipboard appears to be malformed:
4
- ${u.message}
5
- `))}const{$schema:s,...n}=e||{};return s===((c=this.schemaComponent)==null?void 0:c.schema.name)?n:null},async checkClipboard(){this.copyEnabled=!!this.data,this.pasteEnabled=!!await this.getClipboardData(!1)},async onCopy(){var e,s,n;let t=(e=this.schemaComponent)==null?void 0:e.clipboardData;try{t=t&&this.copyData(t),this.appState.clipboardData=t;try{const a=JSON.stringify(t,null,2);await((n=(s=navigator.clipboard)==null?void 0:s.writeText)==null?void 0:n.call(s,a)),await this.checkClipboard()}catch(a){console.error(a,a.name,a.message)}}catch(a){console.error(a),alert(a.message)}},async onPaste(){let t=await this.getClipboardData(!0);try{t=t&&this.pasteData(t),t&&this.schemaComponent.setData(t)}catch(e){console.error(e),alert(e.message)}}}}),Ke={};var Lr=p(Br,Rr,Tr,!1,Mr,null,null,null);function Mr(t){for(let e in Ke)this[e]=Ke[e]}const qr=function(){return Lr.exports}(),Je={data(){return{isLoading:!1}},methods:{setLoading(t,{updateRoot:e=!1,updateView:s=!1}={}){!this.isLoading^!t&&(this.isLoading=!!t,e&&this.rootComponent.registerLoading(t),s&&this.viewComponent.setLoading(this.isLoading))}}},Qe={mixins:[St,Je],provide(){return{$resourceComponent:()=>this,$verbs:()=>this.verbs,$isPopulated:()=>this.hasData}},data(){return{loadedData:null}},computed:{resourceComponent(){return this},resource(){return this.getResource()},providesData(){return!!this.resource},linksToView(){return!1},isTransient(){const t=this.formComponent;return!this.providesData&&!this.linksToView||t&&(t.isTransient||t.isCreating)},transientNote(){return this.isTransient&&"<b>Note</b>: the parent still needs to be saved in order to persist this change."},shouldLoad(){return!this.isTransient&&!this.isLoading},hasData(){return!!this.loadedData},verbs(){return this.getVerbs()},paginationRange(){const{paginate:t}=this.sourceSchema;if(this.isListSource&&t){const{page:e=0}=this.query||{},s=e*t;return[s,s+t-1]}},queryParams(){const t=this.paginationRange,{page:e,...s}=this.query||{};return{...s,...t&&{range:t.join(",")}}}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var t,e;return E((t=this.sourceSchema)==null?void 0:t.resource,{type:"collection",parent:((e=this.parentFormComponent)==null?void 0:e.resource)??null})},getVerbs(){const t=this.$verbs();return this.isTransient?{...t,create:"add",created:"added",save:"apply",saved:"applied",delete:"remove",deleted:"removed"}:t},clearData(){this.loadedData=null},setData(t){this.loadedData=t},setupData(){this.ensureData()},ensureData(){this.shouldLoad&&(this.hasData?this.reloadData():this.loadData(!0))},reloadData(){this.loadData(!1)},loadData(t){this.isTransient||(t&&this.clearData(),this.requestData())},createData(t,e){return Xt(t,e?{type:e}:{},this)},requestData(){const t=this.queryParams;this.handleRequest({method:"get",query:t},(e,s)=>{var n;if(e){if(s){const{data:a}=s;if((a==null?void 0:a.type)==="FilterValidation"&&((n=this.onFilterErrors)!=null&&n.call(this,a.errors)))return!0;if(this.isUnauthorizedError(s))return!0}}else this.setData(s.data),this.emitSchemaEvent("load")})},isValidationError(t){return(t==null?void 0:t.status)===400},isUnauthorizedError(t){return(t==null?void 0:t.status)===401},async handleRequest({method:t,resource:e=this.resource,query:s,data:n},a){const i={updateRoot:!0,updateView:this.isInView};this.setLoading(!0,i);const r={method:t,resource:e,data:n,query:s};try{const l=await this.sendRequest(r);a(null,l)}catch(l){const{response:c}=l;if(!a(l,c)){const u=c==null?void 0:c.data,d=o.isString(u==null?void 0:u.type)?o.labelize(u.type):"Error",h=(u==null?void 0:u.message)??l;this.notify({type:"error",title:d,text:h})}}this.setLoading(!1,i)},getPayloadData(t,e){return["post","put","patch"].includes(e)&&(t.getSchemaValue(["resource","data"])||t.processedItem)},async submit(t){const e=E(t.schema.resource,{parent:this.resource});if(e){const{method:s}=e,n=this.getPayloadData(t,s);return this.submitResource(t,e,s,n)}return!1},async submitResource(t,e,s,n,{setData:a=!1,onSuccess:i,onError:r,notifySuccess:l=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:c=u=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${u?":":""}`,(u==null?void 0:u.message)||u]})}={}){return new Promise(u=>{this.handleRequest({method:s,resource:e,data:n},async(d,h)=>{const m=h==null?void 0:h.data;if(d){const g=this.isValidationError(h)&&m.errors;if(g)await this.showValidationErrors(g,!0);else{const _=o.isObject(m)?m:d;r==null||r(_),await this.emitButtonEvent(t,"error",{notify:c,error:_})}u(!1)}else a&&m&&this.setData(m),i==null||i(),await this.emitButtonEvent(t,"success",{notify:l}),u(!0)})})},async emitButtonEvent(t,e,{notify:s,error:n}){const a=new S(t,{nested:!1,data:this.data,itemLabel:this.itemLabel,error:n}),i=await t.emitEvent(e,{context:a});return s&&i===void 0&&!a.wasNotified&&s(n),i}}};var Ir=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-form dito-scroll-parent",class:{"dito-form-nested":t.isNestedRoute},attrs:{"data-resource":t.sourceSchema.path}},[t.isLastUnnestedRoute||t.isNestedRoute?t._e():s("router-view",{directives:[{name:"show",rawName:"v-show",value:!t.isActive,expression:"!isActive"}]}),s(t.isNestedRoute?"div":"form",{directives:[{name:"show",rawName:"v-show",value:t.isActive,expression:"isActive"}],tag:"component",staticClass:"dito-scroll",on:{submit:function(n){n.preventDefault()}}},[s("button",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],attrs:{type:"submit",disabled:"true","aria-hidden":"true"}}),s("dito-schema",{attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading,menuHeader:!0}},[s("dito-buttons",{staticClass:"dito-buttons-round dito-buttons-main dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading},slot:"buttons"})],1)],1)],1)},Ar=[];const Nr=b.component("dito-form",{mixins:[le,Qe],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const t=this.getVerbs(),{isCreating:e,providesData:s}=this;return{...t,submit:e?t.create:t.save,submitted:e?t.created:t.saved,cancel:s?t.cancel:t.close,cancelled:s?t.cancelled:t.closed}},schema(){return this.getItemFormSchema(this.sourceSchema,this.data||{type:this.type},this.context)||{}},buttonSchemas(){return Q(o.merge({cancel:{type:"button",events:{click:()=>this.cancel()}},submit:!this.doesMutate&&{type:"submit",closeForm:!0,events:{click:({component:t})=>t.submit()}}},this.schema.buttons))},isActive(){return this.isLastRoute||this.isLastUnnestedRoute},isTransient(){return!this.providesData},isCreating(){return this.param==="create"},isDirty(){var t;return!this.doesMutate&&!!((t=this.mainSchemaComponent)!=null&&t.isDirty)},selectedTab(){var t;return((t=this.mainSchemaComponent)==null?void 0:t.selectedTab)||null},doesMutate(){return this.sourceSchema.mutate},type(){return this.$route.query.type},itemId(){return this.isCreating?null:this.param??null},method(){return this.isCreating?"post":"patch"},resource(){const t=this.getResource();return ht(this.itemId,t)||t},breadcrumbPrefix(){return o.capitalize(this.isCreating?this.verbs.create:this.verbs.edit)},data(){return this.createdData||this.loadedData||this.inheritedData||null},dataPath(){return this.getDataPathFrom(this.dataComponent)},sourceData(){let{data:t}=this.parentRouteComponent;if(t){const e=o.parseDataPath(this.getDataPathFrom(this.parentRouteComponent)),s=this.routeRecord.path.split("/"),n=s.slice(s.length-e.length);this.sourceKey=null;const a=e[e.length-1];N(this.sourceSchema)&&a==="create"&&e.length--;for(let i=0,r=e.length;i<r&&t;i++){const l=e[i],c=/^:id/.test(n[i])?l==="create"?null:this.findItemIdIndex(this.sourceSchema,t,l):l;i===r-1?this.sourceKey=c:t=t[c]}}return t},inheritedData(){if(this.isTransient&&this.clonedData===void 0&&this.sourceData&&this.sourceKey!==null){let t=this.sourceData[this.sourceKey];return this.doesMutate||(this.clonedData=t=o.clone(t)),t===null&&!this.isCreating&&N(this.sourceSchema)&&this.$router.push({path:"create",append:!0}),t}return this.clonedData},hasData(){return!!this.data},itemLabel(){return this.getItemLabel(this.sourceSchema,this.data,{extended:!0})}},watch:{sourceData:"clearClonedData",create:"setupData"},methods:{emitSchemaEvent(t,e){return this.mainSchemaComponent.emitEvent(t,e)},getDataPathFrom(t){return this.api.denormalizePath(this.path.slice((t.isView?0:t.path.length)+1))},setupData(){this.isCreating?this.createdData||(this.createdData=this.createData(this.schema,this.type)):this.ensureData()},setSourceData(t){if(this.sourceData&&this.sourceKey!==null){const{mainSchemaComponent:e}=this;return this.$set(this.sourceData,this.sourceKey,e.filterData(t)),e.onChange(),!0}return!1},addSourceData(t){var e;return N(this.sourceSchema)?this.setSourceData(t):!!((e=this.sourceData)!=null&&e.push(t))},clearData(){this.setData(null)},setData(t){this.isTransient?this.setSourceData(t):(this.createdData=null,this.loadedData=t)},clearClonedData(t,e){t!==e&&(this.clonedData=void 0)},async cancel(){return this.close()},async close(){return this.navigate(this.parentRouteComponent.path)},getSubmitVerb(t=!0){return this.isCreating?t?"create":"created":t?"submit":"submitted"},async submit(t,{validate:e=!0,closeForm:s=!1}={}){if(e&&!this.validateAll())return!1;const n=u=>this.verbs[this.getSubmitVerb(u)],a=E(t.schema.resource,{parent:this.resource}),i=a||this.resource,r=(i==null?void 0:i.method)||this.method,l=this.getPayloadData(t,r);let c;if(!a&&this.isTransient?c=await this.submitTransient(t,i,r,l,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:u=>this.emitSchemaEvent("error",{context:{error:u}}),notifySuccess:()=>{const u=n(!1);this.notify({type:"info",title:this.isCreating?`Item ${o.capitalize(u)}`:`Change ${o.capitalize(u)}`,text:[this.isCreating?`${this.itemLabel} was ${u}.`:`Changes to ${this.itemLabel} were ${u}.`,this.transientNote]})},notifyError:()=>{const u=n(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${u} ${this.itemLabel}.`})}}):c=await this.submitResource(t,i,r,l,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:u=>this.emitSchemaEvent("error",{context:{error:u}}),notifySuccess:()=>{const u=n(!1);this.notify({type:"success",title:`Successfully ${o.capitalize(u)}`,text:`${this.itemLabel} was ${u}.`})},notifyError:u=>{const d=n(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${d} ${this.itemLabel}${u?":":""}`,(u==null?void 0:u.message)||u]})}}),c){if(this.resetValidation(),s||t.closeForm)this.close();else if(this.isCreating){const u=this.getItemId(this.schema,this.data);this.$router.replace({path:`../${u}`,append:!0})}}return c},async submitTransient(t,e,s,n,{onSuccess:a,onError:i,notifySuccess:r,notifyError:l}){const c=this.isCreating?this.addSourceData(n):this.setSourceData(n);if(c)a==null||a(),await this.emitButtonEvent(t,"success",{notify:r});else{const u="Could not submit transient item";i==null||i(u),await this.emitButtonEvent(t,"error",{notify:l,error:u})}return c}}}),Xe={};var zr=p(Nr,Ir,Ar,!1,Ur,null,null,null);function Ur(t){for(let e in Xe)this[e]=Xe[e]}const Ge=function(){return zr.exports}(),qd="",Hr=Ge.component("dito-form-nested",{});let Wr,Yr;const Ze={};var Kr=p(Hr,Wr,Yr,!1,Jr,null,null,null);function Jr(t){for(let e in Ze)this[e]=Ze[e]}const Qr=function(){return Kr.exports}();var Xr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.errors?s("div",{staticClass:"dito-errors"},[s("ul",t._l(t.errors,function(n){return s("li",[t._v(t._s(n))])}),0)]):t._e()},Gr=[];const Id="",Zr=b.component("dito-errors",{props:{errors:{type:Array,default:null}}}),ts={};var to=p(Zr,Xr,Gr,!1,eo,null,null,null);function eo(t){for(let e in ts)this[e]=ts[e]}const so=function(){return to.exports}();var no=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-scopes"},t._l(t.scopes,function(n,a){return s("router-link",{key:a,attrs:{to:t.getScopeLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(i){var r=i.navigate;return[s("button",{staticClass:"dito-button",class:{"dito-selected":n.name===t.query.scope},attrs:{type:"button",title:n.hint||t.getLabel(n)},on:{click:r}},[t._v(t._s(t.getLabel(n)))])]}}],null,!0)})}),1)},ao=[];const Ad="",io=b.component("dito-scopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(t){const e={...this.query,scope:t.name};return e.page&&(e.page=0),this.getQueryLink(e)}}}),es={};var ro=p(io,no,ao,!1,oo,null,null,null);function oo(t){for(let e in es)this[e]=es[e]}const lo=function(){return ro.exports}();var co=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("pagination",{attrs:{pageSize:t.limit,total:t.total,page:t.page},on:{"update:page":function(n){t.page=n}}})},uo=[];const ho=b.component("dito-pagination",{components:{Pagination:ya},props:{query:{type:Object,required:!0},limit:{type:Number,required:!0},total:{type:Number,required:!0}},computed:{page:{get(){return(+this.query.page||0)+1},set(t){this.page!==t&&this.$router.push(this.getQueryLink({...this.query,page:t-1}))}}}}),ss={};var po=p(ho,co,uo,!1,fo,null,null,null);function fo(t){for(let e in ss)this[e]=ss[e]}const mo=function(){return po.exports}(),Dt={mixins:[St],data(){return{dragging:!1}},methods:{onStartDrag(){this.dragging=!0},onEndDrag({oldIndex:t,newIndex:e}){this.dragging=!1,t!==e&&this.onChange()},updateOrder(t,e,s){const{orderKey:n}=t;if(n){const a=(s==null?void 0:s[0])||0;for(let i=0;i<e.length;i++)e[i][n]=i+a}return e}}};var _o=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-item",class:{"dito-dragging":t.dragging,"dito-active":t.active},style:t.level>0&&{"--level":t.level},attrs:{id:t.dataPath}},[t.label?s("div",{staticClass:"dito-tree-header"},[t.numEntries?s("div",{staticClass:"dito-tree-branch",on:{click:function(n){n.stopPropagation(),t.opened=!t.opened}}},[t.numEntries?s("div",{staticClass:"dito-chevron",class:{"dito-opened":t.opened}}):t._e(),s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}}),t.details?s("div",{staticClass:"dito-tree-info"},[t._v(t._s(t.details))]):t._e()]):s("div",{staticClass:"dito-tree-leaf"},[s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}})]),t.hasEditButtons?s("div",{staticClass:"dito-buttons dito-buttons-small"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.editable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onEdit}},"button",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onDelete}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()]):t._e()]):t._e(),t.properties?s("table",{directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],staticClass:"dito-properties"},t._l(t.properties,function(n){return s("tr",[s("td",[n.label!==!1?s("dito-label",{attrs:{dataPath:t.getPropertyDataPath(n),label:t.getLabel(n)}}):t._e()],1),s("dito-table-cell",{attrs:{cell:n,schema:n,dataPath:t.getPropertyDataPath(n),data:t.data,meta:t.nestedMeta,store:t.store,disabled:t.disabled}})],1)}),0):t._e(),t.childrenSchema?s("vue-draggable",t._b({directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],attrs:{list:t.updateOrder(t.childrenSchema,t.childrenList)},on:{start:t.onStartDrag,end:function(n){return t.onEndDrag(n,t.childrenSchema)}}},"vue-draggable",t.getDragOptions(t.childrenDraggable,!0),!1),t._l(t.childrenItems,function(n,a){return s("dito-tree-item",{key:t.getItemUid(t.childrenSchema,n.data),attrs:{schema:t.childrenSchema,dataPath:t.getItemDataPath(t.childrenSchema,a),data:n.data,path:n.path,open:n.open,active:n.active,draggable:t.childrenDraggable,label:t.getItemLabel(t.childrenSchema,n.data,{index:a}),level:t.level+1}})}),1):t._e()],1)},go=[];const Nd="",vo=b.component("dito-tree-item",{components:{VueDraggable:nt},mixins:[Dt],inject:["container"],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Array,Object],default:null},path:{type:String,default:""},open:{type:Boolean,default:!1},active:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},label:{type:String,default:null},level:{type:Number,default:0}},data(){return{opened:this.open||this.schema.open}},computed:{meta(){return this.container.meta},store(){return this.container.store},disabled(){return this.container.disabled},nestedMeta(){return{...this.meta,schema:this.schema}},properties(){return q(this.schema.properties)},childrenSchema(){return this.schema.children},childrenList(){var e;const t=(e=this.childrenSchema)==null?void 0:e.name;return t&&this.data[t]},childrenDraggable(){var t;return((t=this.childrenList)==null?void 0:t.length)>1&&this.getSchemaValue("draggable",{type:Boolean,default:!1,schema:this.childrenSchema})},numChildren(){var t;return((t=this.childrenList)==null?void 0:t.length)||0},numProperties(){var t;return((t=this.properties)==null?void 0:t.length)||0},numEntries(){return this.numProperties+this.numChildren},childrenItems(){var e;const{childrenSchema:t}=this;if(t){const{editPath:s}=this.container,n=!this.path&&t.open;return((e=this.childrenList)==null?void 0:e.map((a,i)=>{const r=t.path&&`${this.path}/${t.path}/${i}`,l=n||s.startsWith(r)&&r.length<s.length;return{data:a,path:r,open:l,active:s===r}}))||[]}},details(){const{numChildren:t}=this;return t&&`${t} ${t===1?"item":"items"}`},hasEditButtons(){return this.draggable||this.editable||this.deletable},creatable:f("creatable",{type:Boolean,default:!1,get(t){return t&&M(this.schema)}}),editable:f("editable",{type:Boolean,default:!1,get(t){return t&&M(this.schema)}}),deletable:f("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(t){return j(this.dataPath,t.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),ns={};var bo=p(vo,_o,go,!1,yo,null,null,null);function yo(t){for(let e in ns)this[e]=ns[e]}const $o=function(){return bo.exports}();var Co=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[t._l(t.columns,function(n,a){return t.shouldRender(n)?s("th",{class:t.getColumnClass(n)},[n.sortable?s("router-link",{attrs:{to:t.getSortLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(i){var r=i.navigate;return[s("button",{staticClass:"dito-button",class:t.getSortClass(n),attrs:{type:"button"},on:{click:r}},[s("div",{staticClass:"dito-order-arrows"}),s("span",[t._v(t._s(t.getLabel(n)))])])]}}],null,!0)}):s("span",[t._v(t._s(t.getLabel(n)))])],1):t._e()}),t.hasEditButtons?s("th",[s("span")]):t._e()],2)])},wo=[];const zd="",Po=b.component("dito-table-head",{props:{query:{type:Object,required:!0},columns:{type:Object,required:!0},hasEditButtons:{type:Boolean,required:!0}},computed:{sort(){const t=(this.query.order||"").split(/\s+/);return{name:t[0],order:t[1]}}},methods:{getColumnClass(t){return`dito-column-${o.hyphenate(t.name)}`},getSortClass(t){return this.sort.name===t.name?`dito-selected dito-order-${this.sort.order}`:null},getSortLink(t){const e=this.sort.name===t.name&&this.sort.order==="asc"?"desc":"asc";return this.getQueryLink({...this.query,order:`${t.name} ${e}`})}}}),as={};var So=p(Po,Co,wo,!1,Do,null,null,null);function Do(t){for(let e in as)this[e]=as[e]}const xo=function(){return So.exports}();var Oo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("td",{class:t.cell.class,style:t.cell.style},[t.component?s(t.component,{tag:"component",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,nested:t.nested,disabled:t.disabled}}):s("span",{domProps:{innerHTML:t._s(t.renderCell(t.data))}})],1)},ko=[];const Fo=b.component("dito-table-cell",{props:{cell:{type:Object,required:!0},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},computed:{component(){return this.resolveTypeComponent(this.cell.component)}},methods:{renderCell(t){const{name:e,render:s}=this.cell,n=t[e];return s?s.call(this,new S(this,{name:e,value:n,data:t,dataPath:j(this.dataPath,e)})):o.escapeHtml(n)}}}),is={};var jo=p(Fo,Oo,ko,!1,Vo,null,null,null);function Vo(t){for(let e in is)this[e]=is[e]}const Eo=function(){return jo.exports}(),Ro=b.component("dito-vnode",{functional:!0,render:(t,e)=>e.props.node});let To,Bo;const rs={};var Lo=p(Ro,To,Bo,!1,Mo,null,null,null);function Mo(t){for(let e in rs)this[e]=rs[e]}const qo=Object.freeze(Object.defineProperty({__proto__:null,DitoAccount:li,DitoButtons:$r,DitoClipboard:qr,DitoContainer:Xi,DitoCreateButton:Er,DitoDialog:fi,DitoEditButtons:xr,DitoElement:yi,DitoErrors:so,DitoForm:Ge,DitoFormNested:Qr,DitoHeader:si,DitoLabel:Di,DitoMenu:Ua,DitoPagination:mo,DitoPane:Ui,DitoPanel:cr,DitoPanels:mr,DitoRoot:Pt,DitoSchema:Vi,DitoSchemaInlined:Mi,DitoScopes:lo,DitoTableCell:Eo,DitoTableHead:xo,DitoTabs:nr,DitoTreeItem:$o,DitoVNode:function(){return Lo.exports}(),DitoView:ue},Symbol.toStringTag,{value:"Module"})),C=b.extend({mixins:[X],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitPadding:!1});C.register=function(t,e={}){t=o.asArray(t);const s=this.component(`dito-type-${t[0]}`,e);for(const n of t)un(n,s);return s},C.get=mt;var Io=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("button",t._g(t._b({ref:"element",staticClass:"dito-button",class:`dito-button-${t.verb}`,attrs:{id:t.dataPath,type:t.type,title:t.text}},"button",t.attributes,!1),t.listeners),[t._v(t._s(t.text))])},Ao=[];const No=C.register(["button","submit"],{defaultValue:()=>{},excludeValue:!0,defaultWidth:"auto",computed:{verb(){return this.verbs[this.name]||this.name},text:f("text",{type:String,get(t){return t||o.labelize(this.verb)}}),closeForm:f("closeForm",{type:Boolean,default:!1})},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,click:this.onClick}},async submit(t){var e;return(e=this.resourceComponent)==null?void 0:e.submit(this,t)},async onClick(){await this.emitEvent("click",{parent:this.schemaComponent})===void 0&&Rt(this.schema)&&await this.submit()}}}),os={};var zo=p(No,Io,Ao,!1,Uo,null,null,null);function Uo(t){for(let e in os)this[e]=os[e]}const Ho=function(){return zo.exports}();var Wo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-checkbox",attrs:{id:t.dataPath,type:"checkbox"},domProps:{checked:Array.isArray(t.value)?t._i(t.value,null)>-1:t.value},on:{change:function(n){var a=t.value,i=n.target,r=!!i.checked;if(Array.isArray(a)){var l=null,c=t._i(a,l);i.checked?c<0&&(t.value=a.concat([l])):c>-1&&(t.value=a.slice(0,c).concat(a.slice(c+1)))}else t.value=r}}},"input",t.attributes,!1),t.listeners))},Yo=[];const Hd="",Ko=C.register("checkbox",{nativeField:!0}),ls={};var Jo=p(Ko,Wo,Yo,!1,Qo,null,null,null);function Qo(t){for(let e in ls)this[e]=ls[e]}const Xo=function(){return Jo.exports}(),cs={mixins:[Je],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(t,e,{resolveCounter:s=1,...n}={}){var l;o.isObject(t)||(t={data:t});let{data:a=void 0,dataPath:i=null}=t;const r=this.asyncDataEntries[e]||this.$set(this.asyncDataEntries,e,{dependencyFunction:null,resolveCounter:0,resolvedData:null,resolving:!1});if((l=r.dependencyFunction)==null||l.call(this,this.context),r.resolveCounter>0){const{resolvedData:c}=r;return--r.resolveCounter===0&&(r.resolvedData=null),c}if(r.resolving)a=null;else if(a){if(o.isFunction(a)){const c=a.call(this,this.context);o.isFunction(c)?(r.dependencyFunction=a,a=c.call(this,this.context)):a=c}o.isPromise(a)&&(r.resolving=!0,this.resolveData(a,n).then(c=>{r.resolveCounter=s,r.resolvedData=c,r.resolving=!1}),a=null)}else i&&(a=o.getValueAtDataPath(this.rootData,o.normalizeDataPath(`${this.dataPath}/${i}`)));return a},async resolveData(t,e={}){this.setLoading(!0,e);let s=null;try{s=await(o.isFunction(t)?t():t)}catch(n){this.addError(n.message||n)}return this.setLoading(!1,e),s}}},et={mixins:[cs],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const t=s=>this.relate?this.hasOption(s)?this.getValueForOption(s):null:s,e=o.isArray(this.value)?this.value.map(t).filter(s=>s!==null):t(this.value);return this.relate&&this.hasOptions&&(e===null&&this.value!==null||Gs(this.value))&&(this.selectedValue=e),e},set(t){const e=s=>this.relate?this.getOptionForValue(s):s;this.value=o.isArray(t)?t.map(e):e(t)}},selectedOption(){return this.getOptionForValue(this.selectedValue)},options(){const t=this.handleDataSchema(this.schema.options,"options",{resolveCounter:1})??[];if(!o.isArray(t))throw new Error(`Invalid options data, should be array: ${t}`);return this.hasOptions=t.length>0,this.processOptions(t)},activeOptions(){return this.options},relate:f("relate",{type:Boolean,default:!1,callback:!1}),groupBy:f("groupBy",{type:String,default:null}),optionLabel:f("options.label",{type:[String,Function],default:null,get(t){return t||this.getOptionKey("label")||null}}),optionValue:f("options.value",{type:[String,Function],default:null,get(t){return t||this.relate&&"id"||this.getOptionKey("value")||null}}),searchFilter:f("search",{type:[Object,Function],default:null,get(t){if(t){const{filter:e,debounce:s}=o.isFunction(t)?{filter:t}:t;return s?o.debounceAsync(e,s):e}}}),groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(t){const[e]=this.activeOptions;return o.isObject(e)&&t in e?t:null},processOptions(t){if(t.length){if(this.relate)for(const e of t)"id"in e||Xs(e,"id");if(this.groupBy){const e={};t=t.reduce((s,n)=>{const a=n[this.groupBy];let i=e[a];return i||(i=e[a]={[this.groupByLabel]:a,[this.groupByOptions]:[]},s.push(i)),i.options.push(n),s},[])}}return t},hasOption(t){return!!this.getOptionForValue(this.getValueForOption(t))},getOptionForValue(t){const e=(s,n,a)=>{for(const i of s)if(a){const r=e(i.options,n,null);if(r)return r}else if(n===this.getValueForOption(i))return i};return this.optionValue?e(this.activeOptions,t,this.groupBy):t},getValueForOption(t){const{optionValue:e}=this;return o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new S(this,{option:t})):t},getLabelForOption(t){const{optionLabel:e}=this;return o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new S(this,{option:t})):o.labelize(`${t}`)}},processValue(t,e,s,n){var a;if(t.relate){const i=(a=t.options)==null?void 0:a.dataPath,r=i?o.normalizeDataPath(`${s}/${i}`):null;n.addRelation(s,r,t),r&&n.setSourceRelated(r);const l=c=>c&&{id:c.id};e=o.isArray(e)?e.map(l):l(e)}return e}};var Go=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-checkboxes",class:`dito-layout-${t.schema.layout||"vertical"}`,attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedOptions,expression:"selectedOptions"}],ref:"element",refInFor:!0,staticClass:"dito-checkbox",attrs:{type:"checkbox"},domProps:{value:t.getValueForOption(n),checked:Array.isArray(t.selectedOptions)?t._i(t.selectedOptions,t.getValueForOption(n))>-1:t.selectedOptions},on:{change:function(a){var i=t.selectedOptions,r=a.target,l=!!r.checked;if(Array.isArray(i)){var c=t.getValueForOption(n),u=t._i(i,c);r.checked?u<0&&(t.selectedOptions=i.concat([c])):u>-1&&(t.selectedOptions=i.slice(0,u).concat(i.slice(u+1)))}else t.selectedOptions=l}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},Zo=[];const Wd="",tl=C.register("checkboxes",{mixins:[et],nativeField:!0,defaultValue:[],computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(t=>t)},set(t){this.selectedValue=t||[]}}}}),us={};var el=p(tl,Go,Zo,!1,sl,null,null,null);function sl(t){for(let e in us)this[e]=us[e]}const nl=function(){return el.exports}();var al=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"code",staticClass:"dito-code",style:t.style,attrs:{id:t.dataPath}})},il=[];const Yd="",rl=C.register("code",{mixins:[H],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const t=new qs(this.$refs.code,{language:this.schema.language||"javascript",tabSize:this.schema.indentSize||2,lineNumbers:!1});let e=!1,s=!1,n=!1;const a=()=>{!this.focused&&e&&(e=!1,this.onChange())},i=()=>this.onFocus(),r=()=>{this.onBlur(),a()};this.domOn(this.$refs.code.querySelector("textarea"),{focus:i,blur:r});const l=u=>{u!==t.code&&(n=!0,t.updateCode(u))},c=u=>{u!==this.value&&(s=!0,this.value=u,e=!0,a())};t.onUpdate(u=>{n?n=!1:c(u)}),this.$watch("value",u=>{s?s=!1:l(u||"")}),l(this.value||"")},methods:{focusElement(){var t;(t=this.$el.querySelector("textarea"))==null||t.focus()}}}),ds={};var ol=p(rl,al,il,!1,ll,null,null,null);function ll(t){for(let e in ds)this[e]=ds[e]}const cl=function(){return ol.exports}();var ul=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",{staticClass:"dito-color",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},[s("div",{staticClass:"dito-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger"},slot:"trigger"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.hexValue,expression:"hexValue"}],ref:"element",attrs:{id:t.dataPath,type:"input",size:"8"},domProps:{value:t.hexValue},on:{input:function(n){n.target.composing||(t.hexValue=n.target.value)}}},"input",t.attributes,!1),t.listeners)),t.value?s("div",{staticClass:"dito-color-preview dito-inherit-focus"},[s("div",{style:{background:`#${t.hexValue||"00000000"}`}})]):t._e(),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:function(n){return n.stopPropagation(),t.clear.apply(null,arguments)}}}):t._e()]),s("sketch-picker",{staticClass:"dito-color-picker",attrs:{slot:"popup","disable-alpha":!t.alpha,"disable-fields":!t.inputs,"preset-colors":t.presets},slot:"popup",model:{value:t.colorValue,callback:function(n){t.colorValue=n},expression:"colorValue"}})],1)},dl=[];const Kd="",hl=C.register("color",{components:{Trigger:wt,SketchPicker:Is.Sketch},data(){return{showPopup:!1,convertedHexValue:null}},computed:{colorValue:{get(){return this.value||{}},set(t){const e=this.colorFormat,s={hex:(t==null?void 0:t.a)<1?"hex8":"hex",rgb:"rgba"}[e]||e;s?this.value=t[s]:this.value=at(t).toString(e),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused){const t=at(this.value);t.isValid()&&(this.convertedHexValue=t.toString(t.getAlpha()<1?"hex8":"hex6").slice(1).toUpperCase())}return this.convertedHexValue},set(t){this.convertedHexValue=t}},colorFormat:f("format",{type:String,default:"hex"}),alpha:f("alpha",{type:Boolean,default:!1}),inputs:f("inputs",{type:Boolean,default:!0}),presets:f("presets",{type:Array,default:["#ffffff","#c3c3c3","#7f7f7f","#000000","#880015","#ed1c24","#ff7f27","#fff200","#22b14c","#00a2e8","#3f48cc","#a349a4","#b97a57","#ffaec9","#ffc90e","#00000000"]})},watch:{focused(t){if(!t&&this.convertedHexValue){const e=at(`#${this.convertedHexValue}`);e!=null&&e.isValid()&&(this.value=e.toString(this.colorFormat),this.onChange())}}}}),hs={};var pl=p(hl,ul,dl,!1,fl,null,null,null);function fl(t){for(let e in hs)this[e]=hs[e]}const ml=function(){return pl.exports}();var _l=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.component,t._b({tag:"component"},"component",t.$props,!1))},gl=[];const vl=C.register("component",{defaultValue:()=>{},ignoreMissingValue:t=>!("default"in t)}),ps={};var bl=p(vl,_l,gl,!1,yl,null,null,null);function yl(t){for(let e in ps)this[e]=ps[e]}const $l=function(){return bl.exports}();var Cl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",{ref:"element",staticClass:"dito-text dito-input",attrs:{id:t.dataPath,name:t.name,type:"text",disabled:t.disabled,readonly:!0},domProps:{value:t.value}})},wl=[];const Pl=C.register(["computed","data","hidden"],{mixins:[cs],defaultValue:()=>{},defaultVisible:!1,computed:{value:{get(){const{schema:t}=this;if(t.data||t.dataPath){const e=this.handleDataSchema(t,"schema",{resolveCounter:2});this.$set(this.data,this.name,e)}return X.computed.value.get.call(this)},set(t){X.computed.value.set.call(this,t)}}}}),fs={};var Sl=p(Pl,Cl,wl,!1,Dl,null,null,null);function Dl(t){for(let e in fs)this[e]=fs[e]}const xl=function(){return Sl.exports}();var Ol=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-date"},[s(t.getComponent(t.type),t._g(t._b({ref:"element",tag:"component",attrs:{id:t.dataPath,locale:t.locale,dateFormat:Object.assign({},t.api.formats.date,t.dateFormat)},model:{value:t.dateValue,callback:function(n){t.dateValue=n},expression:"dateValue"}},"component",t.attributes,!1),t.listeners))],1)},kl=[];const Fl=C.register(["date","datetime","time"],{components:{DatePicker:ge,TimePicker:ye,DateTimePicker:la},nativeField:!0,textField:!0,computed:{dateValue:{get(){const{value:t}=this;return t&&new Date(t)},set(t){this.value=t}},dateFormat:f("dateFormat",{type:Object,default:null})},methods:{getComponent(t){return{date:"date-picker",time:"time-picker",datetime:"date-time-picker"}[t]}},processValue(t,e){return o.isDate(e)?e.toISOString():e}}),ms={};var jl=p(Fl,Ol,kl,!1,Vl,null,null,null);function Vl(t){for(let e in ms)this[e]=ms[e]}const El=function(){return jl.exports}(),st={mixins:[Qe,re],defaultValue(t){return z(t)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1,ignoreRouteChange:!1}},computed:{sourceComponent(){return this},isObjectSource(){return N(this.type)},isListSource(){return z(this.type)},hasData(){return!!this.value},isReady(){return this.hasData||!this.providesData},isInView(){return!!this.viewComponent},wrapPrimitives(){return this.schema.wrapPrimitives},listData:{get(){let t=this.value;this.isObjectSource?t=t!=null?[t]:[]:t=this.unwrapListData(t)||t,t||(t=[]);const{wrapPrimitives:e}=this;return e?(this.unwrappingPrimitives?this.unwrappingPrimitives=!1:this.wrappedPrimitives=t.map(s=>({[e]:s})),this.wrappedPrimitives):t},set(t){this.wrapPrimitives?this.wrappedPrimitives=t:this.value=this.isObjectSource?t&&t.length>0?t[0]:null:t}},objectData:{get(){return this.listData[0]||null},set(t){this.listData=t?[t]:[]}},sourceSchema(){return this.schema},path(){return this.routeComponent.getChildPath(this.schema.path)},defaultQuery(){const{defaultOrder:t}=this;return t?{order:t}:{}},query:ft("query",{get(t){return{...this.defaultQuery,...t}},set(t){var n;const{scope:e=(n=this.defaultScope)==null?void 0:n.name,page:s=this.schema.page}=this.query;return t={...this.query,...e!=null&&{scope:e},...s!=null&&{page:s},...t},o.equals(t,this.$route.query)||(this.ignoreRouteChange=!0,this.$router.replace({query:t,hash:this.$route.hash})),t}}),total:ft("total"),columns(){return q(this.schema.columns)},scopes(){return q(this.schema.scopes)},defaultScope(){if(this.scopes){let t=null;for(const e of Object.values(this.scopes)){if(e.defaultScope)return e;t||(t=e)}return t}},defaultOrder(){if(this.columns)for(const t of Object.values(this.columns)){const{defaultSort:e}=t;if(e){const s=o.isString(e)?e:"asc";return`${t.name} ${s}`}}},nestedMeta(){return{...this.meta,schema:this.schema}},forms(){return Object.values(A(this.schema,this.context))},view(){return yt(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return Q(this.schema.buttons)},hasLabels(){return this.forms.some(bn)},isCompact(){return this.forms.every(Yt)},isInlined(){return Ct(this.schema)},paginate:f("paginate",{type:Number}),render:f("render",{type:Function,default:null}),creatable:f("creatable",{type:Boolean,default:!1,get(t){return t&&M(this.schema)?this.isObjectSource?!this.value:!0:!1}}),editable:f("editable",{type:Boolean,default:!1,get(t){return t&&!this.isInlined}}),deletable:f("deletable",{type:Boolean,default:!1}),draggable:f("draggable",{type:Boolean,default:!1,get(t){return this.isListSource&&this.listData.length>1&&t}}),collapsible:f("collapsible",{type:Boolean,default:null,get(t){return this.isInlined&&!!(t??this.collapsed!==null)}}),collapsed:f("collapsed",{type:Boolean,default:null})},watch:{$route(t,e){if(this.ignoreRouteChange){this.ignoreRouteChange=!1;return}e.path===t.path&&e.hash===t.hash&&(this.query=t.query,this.loadData(!1))},wrappedPrimitives:{deep:!0,handler(t,e){const{wrapPrimitives:s}=this;s&&e!==null&&(this.unwrappingPrimitives=!0,this.value=t.map(n=>n[s]))}}},methods:{setupData(){this.query=this.$route.query,this.ensureData()},clearData(){this.total=0,this.value=null},setData(t){!t||this.isListSource&&o.isArray(t)||this.isObjectSource&&o.isObject(t)?this.value=t:this.unwrapListData(t)||o.isObject(t)&&this.isInView&&this.viewComponent.setData(t)},unwrapListData(t){if(this.isListSource&&o.isObject(t)&&o.isNumber(t.total)&&o.isArray(t.results))return this.total=t.total,this.value=t.results,this.value},createItem(t,e){const s=this.createData(t,e);return this.isObjectSource?this.objectData=s:this.listData.push(s),this.collapsible&&this.$nextTick(()=>this.openSchemaComponent(-1)),this.onChange(),s},removeItem(t){if(this.isObjectSource)this.objectData=null,this.onChange();else{const{listData:e}=this,s=e&&e.indexOf(t);s>=0&&(e.splice(s,1),this.onChange())}},deleteItem(t,e){const s=t&&this.getItemLabel(this.schema,t,{index:e,extended:!0}),n=()=>this.notify({type:this.isTransient?"info":"success",title:"Successfully Removed",text:[`${s} was ${this.verbs.deleted}.`,this.transientNote]});if(t&&window.confirm(`Do you really want to ${this.verbs.delete} ${s}?`))if(this.isTransient)this.removeItem(t),n();else{const a=this.getItemId(this.schema,t),i=ht(a,this.resource);i&&this.handleRequest({method:"delete",resource:i},r=>{r||(this.removeItem(t),n()),this.reloadData()})}},getSchemaComponent(t){const{schemaComponents:e}=this,{length:s}=e;return e[(t%s+s)%s]},openSchemaComponent(t){const e=this.getSchemaComponent(t);e&&(e.opened=!0)},async navigateToComponent(t,e){if(this.collapsible){const s=t.startsWith(this.dataPath)?this.isListSource?o.parseDataPath(t.slice(this.dataPath.length+1))[0]??null:0:null;if(s!==null&&o.isNumber(+s)){const n=this.getSchemaComponent(+s);if(n){const{opened:a}=n;a||(n.opened=!0,await this.$nextTick());const i=n.getComponentsByDataPath(t);if(i.length>0&&((e==null?void 0:e(i))??!0))return!0;n.opened=a}}}return this.navigateToRouteComponent(t,e)},navigateToRouteComponent(t,e){return new Promise((s,n)=>{const a=()=>{const{routeComponents:r}=this.appState,l=r[r.length-1];s((e==null?void 0:e([l]))??!0)},i=o.parseDataPath(t);for(;i.length>0;){const r=this.routeComponent.getChildPath(this.api.normalizePath(o.normalizeDataPath(i))),{matched:l}=this.$router.match(r);l.length&&(this.$route.path===r?a():this.$router.push({path:r},()=>{this.$nextTick(a)},n)),i.pop()}s(!1)})}},async processSchema(t,e,s,n,a,i=!1,r=!1,l=null){Ut(t,e,s);const c=Ct(e);if(c&&e.resource)throw new Error("Lists with nested forms cannot load data from their own resources");const u=`id${a+1}`,d={api:t,schema:e},h={...d,flatten:r,nested:i,param:u},m=await fn(t,e,a);if(l&&await l(m,a+1),M(e)&&!c){const g=($,D)=>D?$?`${$}/:${D}`:`:${D}`:$,_=a===0?"":e.path,y={path:g(_,z(e)&&u),component:b.component(i?"dito-form-nested":"dito-form"),meta:h};N(e)&&n.push({...y,path:g(_,u)}),_&&n.push({path:_,redirect:".",meta:d});const[x,P]=m.reduce(($,D)=>($[D.meta.flatten?0:1].push(D),$),[[],[]]);if(P.length&&(y.children=P),n.push(y),x.length)for(const $ of x)n.push({...$.redirect?$:y,path:`${y.path}/${$.path}`,meta:{...$.meta,flatten:r}})}},processValue(t,e,s,n){return n.addSource(s,t),e}},xt={text(t){const e=[{label:"contains",value:"contains"},{label:"equals",value:"equals"},{label:"starts with",value:"starts-with"},{label:"ends with",value:"ends-with"}];return{operator:t.operators?{type:"select",options:o.isArray(t.operators)?e.filter(s=>t.operators.includes(s.value)):e,width:"40%"}:null,text:{type:"text",width:t.operators?"60%":"fill"}}},"date-range"(){const t={day:"2-digit",month:"2-digit",year:"numeric"};return{from:{type:"datetime",width:"50%",dateFormat:t},to:{type:"datetime",width:"50%",dateFormat:t}}}};function Rl(t,e,s){const n={label:"Filters",name:"$filters",target:e,disabled:!1,data(){return Ll(n,s.query)},components:Tl(t),buttons:{clear:{text:"Clear",events:{click({schemaComponent:a}){a.resetData(),a.applyFilters()}}},filter:{type:"submit",text:"Filter",events:{click({schemaComponent:a}){a.applyFilters()}}}},methods:{applyFilters(){s.query={...s.query,filter:Bl(this.schema,this.data),page:void 0}}}};return n}function Tl(t){var s;const e={};for(const n of Object.values(t||{})){const{filter:a,...i}=n,r=a?(s=xt[a])==null?void 0:s.call(xt,n):n.components;if(r){i.components={};for(const[l,c]of Object.entries(r))if(c){const u=c.label||o.labelize(c.name||l);i.components[l]={...c,label:!1,placeholder:u}}e[n.name]={label:i.label,type:"object",default:()=>({}),form:i,inlined:!0}}else throw new Error(`Invalid filter '${n.name}': Unknown filter type '${a}'.`)}return e}function _s(t,e){var n;const s=t.components[e];return(n=s==null?void 0:s.form)==null?void 0:n.components}function Bl(t,e){const s=[];for(const n in e){const a=e[n];if(a){const i=Object.keys(_s(t,n)).map(r=>a[r]??null);i.some(r=>r!==null)&&s.push(`${n}:${i.map(JSON.stringify).join(",")}`)}}return s.length?s:void 0}function Ll(t,e){const s={};if(e)for(const a of o.asArray(e.filter)){const[,i,r]=a.match(/^(\w+):(.*)$/);try{s[i]=o.asArray(JSON.parse(`[${r}]`))}catch{}}const n={};for(const a in t.components){const i={},r=s[a];if(r){const l=_s(t,a);if(l){let c=0;for(const u in l)i[u]=r[c++]}}n[a]=i}return n}var Ml=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-list",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[t.scopes||t.hasPagination?s("div",{staticClass:"dito-navigation"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t.hasPagination?s("div",{staticClass:"dito-spacer"}):t._e(),t.hasPagination?s("dito-pagination",{attrs:{query:t.query,limit:t.paginate,total:t.total||0}}):t._e()],1):t._e(),s("table",{staticClass:"dito-table",class:{"dito-table-separators":t.isInlined,"dito-table-larger-padding":t.hasEditButtons&&!t.isInlined,"dito-table-alternate-colors":!t.isInlined,"dito-table-even-count":t.hasEvenCount}},[t.columns?s("dito-table-head",{attrs:{query:t.query,columns:t.columns,hasEditButtons:t.hasEditButtons}}):t._e(),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.updateOrder(t.sourceSchema,t.listData,t.paginationRange)},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.listData,function(n,a){return s("tr",{key:t.getItemUid(t.schema,n),attrs:{id:t.getDataPath(a)}},[t.columns?t._l(t.columns,function(i){return t.shouldRender(i)?s("dito-table-cell",{key:i.name,class:t.getCellClass(i),attrs:{cell:i,schema:t.schema,dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.store,nested:!1,disabled:t.disabled||t.isLoading}}):t._e()}):[s("td",[t.isInlined?s("dito-schema-inlined",{attrs:{label:t.getItemLabel(t.schema,n,{index:a,asObject:!0}),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a),disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible,deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a)},on:{delete:function(i){return t.deleteItem(n,a)}}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.getDataPath(a),data:n,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext(n,a)))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,n,{index:a}))}})],1)],t.hasCellEditButtons?s("td",{staticClass:"dito-cell-edit-buttons"},[s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a)},on:{delete:function(i){return t.deleteItem(n,a)}}})],1):t._e()],2)}),0),t.hasListButtons&&!t.single?s("tfoot",[s("tr",[s("td",{staticClass:"dito-cell-edit-buttons",attrs:{colspan:t.numColumns}},[s("dito-edit-buttons",{attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}})],1)])]):t._e()],1),t.hasListButtons&&t.single?s("dito-edit-buttons",{staticClass:"dito-buttons-main dito-buttons-large",attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}}):t._e()],1):t._e()},ql=[];const Jd="",Il=C.register("list",{components:{VueDraggable:nt},mixins:[st,Dt],getSourceType(t){return t},getPanelSchema(t,e,s){const{filters:n}=t;if(n){const a=()=>s.getComponentByDataPath(e,i=>i.type==="list");return Rl(q(n),e,{get query(){var i;return(i=a())==null?void 0:i.query},set query(i){const r=a();if(r){const l=c=>o.pickBy(c,u=>u!==void 0);o.equals(l(i),l(r.query))||(r.query=i,r.loadData(!1))}}})}},computed:{hasPagination(){return this.paginate&&this.total>this.paginate},hasListButtons(){return!!(this.buttonSchemas||this.creatable)},hasEditButtons(){const{listData:t}=this;return t.length>0&&(this.editable||this.deletable||this.draggable)},hasCellEditButtons(){return!this.isInlined&&this.hasEditButtons},hasEvenCount(){return!(this.listData.length%2)},numColumns(){return(this.columns?Object.keys(this.columns).length:1)+(this.hasCellEditButtons?1:0)}},methods:{getDataPath(t){return j(this.dataPath,t)},getEditPath(t,e){if(this.editable){const s=_n(this.schema,this.context)||this.path,n=this.getItemId(this.schema,t,e);return`${s}/${n}`}return null},getCellClass(t){return`dito-cell-${o.hyphenate(t.name)}`},getContext(t,e){return new S(this,{data:t,value:t,index:e,dataPath:this.getDataPath(e)})},onFilterErrors(t){const e=j(this.dataPath,"$filters"),s=this.schemaComponent.getPanelByDataPath(e);if(s)return s.showValidationErrors(t,!0),!0}}}),gs={};var Al=p(Il,Ml,ql,!1,Nl,null,null,null);function Nl(t){for(let e in gs)this[e]=gs[e]}const zl=function(){return Al.exports}();var Ul=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-label",{staticClass:"dito-label-component",attrs:{label:t.value,dataPath:t.dataPath}})},Hl=[];const Qd="",Wl=C.register("label",{excludeValue:!0,generateLabel:!1}),vs={};var Yl=p(Wl,Ul,Hl,!1,Kl,null,null,null);function Kl(t){for(let e in vs)this[e]=vs[e]}const Jl=function(){return Yl.exports}();var Ql=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-markup",attrs:{id:t.dataPath}},[s("editor-menu-bar",{staticClass:"dito-markup-toolbar",attrs:{editor:t.editor}},[t.groupedButtons.length>0?s("div",{staticClass:"dito-buttons dito-buttons-toolbar"},t._l(t.groupedButtons,function(n){return s("div",{staticClass:"dito-button-group"},t._l(n,function(a){a.name;var i=a.icon,r=a.isActive,l=a.onClick;return s("button",{staticClass:"dito-button",class:{"dito-active":r},on:{click:l}},[s("icon",{attrs:{name:i}})],1)}),0)}),0):t._e()]),s("editor-content",{ref:"editor",staticClass:"dito-markup-editor",style:t.styles,attrs:{editor:t.editor}}),t.resizable?s("div",{staticClass:"dito-resize",on:{mousedown:function(n){return n.stopPropagation(),n.preventDefault(),t.onDragResize.apply(null,arguments)}}}):t._e()],1)},Xl=[];const Xd="",Gl=C.register("markup",{components:{EditorContent:W.EditorContent,EditorMenuBar:W.EditorMenuBar,Icon:fa},mixins:[H],data(){return{editor:null,height:null}},computed:{lines(){return this.schema.lines||10},styles(){return{height:this.height||`calc(${this.lines}em * var(--line-height))`}},markButtons(){return this.getButtons("marks",{bold:!0,italic:!0,underline:!0,strike:!0,small:!0,code:!0,link:{onClick:t=>this.onClickLink(t)}})},basicNodeButtons(){return this.getButtons("nodes",{paragraph:{ignoreActive:()=>this.otherNodeButtons.some(t=>t.isActive)},heading:{attr:"level",values:[1,2,3,4,5,6]}})},otherNodeButtons(){return this.getButtons("nodes",{bulletList:!0,orderedList:!0,blockquote:!0,codeBlock:!0})},toolButtons(){return this.getButtons("tools",{undo:!0,redo:!0})},groupedButtons(){const{markButtons:t,basicNodeButtons:e,otherNodeButtons:s,toolButtons:n}=this;return[t,e,s,n].filter(a=>a.length>0)},parseOptions(){return{preserveWhitespace:{collapse:!1,preserve:!0,"preserve-all":"full"}[this.whitespace]}},editorOptions(){return{editable:!this.readyonly,autoFocus:this.autofocus,disableInputRules:!this.enableRules.input,disablePasteRules:!this.enableRules.paste,parseOptions:this.parseOptions}},resizable:f("resizable",{type:Boolean,default:!1}),whitespace:f("whitespace",{type:String,default:"collapse"}),enableRules:f("enableRules",{type:[Object,Boolean],default:!1,get(t){return o.isObject(t)?t:{input:!!t,paste:!!t}}})},watch:{readyonly:"updateEditorOptions",autofocus:"updateEditorOptions",enableRules:"updateEditorOptions"},created(){let t=!1,e=!1;const s=()=>{!this.focused&&t&&(t=!1,this.onChange())},n=()=>this.onFocus(),a=()=>{this.onBlur(),s()},i=o.debounce(l=>{e=!0,this.value=l(),t=!0,s()},100),r=({getHTML:l})=>{i(l),this.onInput()};this.$watch("value",l=>{e?e=!1:this.editor.setContent(l,!1,this.parseOptions)}),this.editor=new W.Editor({...this.editorOptions,onFocus:n,onBlur:a,onUpdate:r,extensions:this.createExtensions(),content:this.value||""})},beforeDestroy(){this.editor.destroy()},methods:{onDragResize(t){const e=({clientX:r,clientY:l})=>({x:r,y:l});let s=e(t).y,n=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=r=>{const{y:l}=e(r);n+=l-s,s=l,this.height=`${Math.max(n,0)}px`},i=this.domOn(document,{mousemove:a,mouseup(r){a(r),i.remove()}})},updateEditorOptions(){this.editor.setOptions(this.editorOptions)},async onClickLink(t){const e=await this.showDialog({components:{href:{type:"url",label:"Link",autofocus:!0},title:{type:"text",label:"Title"}},buttons:{cancel:{},apply:{type:"submit"},remove:{events:{click({dialogComponent:s}){s.resolve({href:null,title:null})}}}},data:this.editor.getMarkAttrs("link")});if(e){let{href:s,title:n}=e;if(s)try{new URL(s)}catch{s=`http://${s}`}t({href:s,title:n})}},createExtensions(){const{marks:t={},nodes:e={},tools:s={}}=this.schema;return[t.bold&&new F.Bold,t.italic&&new F.Italic,t.underline&&new F.Underline,t.strike&&new F.Strike,t.small&&new Zl,t.code&&new F.Code,t.link&&new tc,e.blockquote&&new F.Blockquote,e.codeBlock&&new F.CodeBlock,new F.HardBreak,e.heading&&new F.Heading({levels:e.heading}),e.horizontalRule&&new F.HorizontalRule,(e.orderedList||e.bulletList)&&new F.ListItem,e.bulletList&&new F.BulletList,e.orderedList&&new F.OrderedList,s.history&&new F.History].filter(n=>!!n)},getButtons(t,e){const s=[],n=({name:i,icon:r,attrs:l,ignoreActive:c,onClick:u})=>{const d=this.editor.isActive[i],h=this.editor.commands[i];s.push({name:i,icon:r,isActive:(d==null?void 0:d(l))&&(c==null||!c()),onClick:()=>u?u(h,l):h(l)})},a=this.schema[t];if(a)for(const[i,r]of Object.entries(e)){const l=["undo","redo"].includes(i)?"history":i,c=a[l],u=o.underscore(i),d=o.hyphenate(i);if(c){if(r===!0)n({name:u,icon:d});else if(o.isObject(r)){const{attr:h,values:m,ignoreActive:g,onClick:_}=r;if(h){if(o.isArray(m)&&o.isArray(c))for(const y of m)c.includes(y)&&n({name:u,icon:`${d}-${y}`,attrs:{[h]:y},ignoreActive:g,onClick:_})}else n({name:u,icon:d,ignoreActive:g,onClick:_})}}}return s},focusElement(){var t,e;(e=(t=this.$el).scrollIntoView)==null||e.call(t),this.editor.focus()}}});class Zl extends W.Mark{get name(){return"small"}get schema(){return{parseDOM:[{tag:"small"}],toDOM:()=>["small",0]}}commands({type:e}){return()=>As.toggleMark(e)}}class tc extends F.Link{get schema(){return{attrs:{href:{default:null},title:{default:null}},inclusive:!1,parseDOM:[{tag:"a",getAttrs:e=>({href:e.getAttribute("href"),title:e.getAttribute("title")})}],toDOM:e=>["a",e.attrs,0]}}}const bs={};var ec=p(Gl,Ql,Xl,!1,sc,null,null,null);function sc(t){for(let e in bs)this[e]=bs[e]}const nc=function(){return ec.exports}();var ac=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-multiselect",class:{"dito-multiselect-single":!t.multiple,"dito-multiselect-multiple":t.multiple}},[s("vue-multiselect",t._g(t._b({ref:"element",attrs:{"show-labels":!1,placeholder:t.placeholder,"tag-placeholder":"Press enter to add new tag",options:t.populate&&t.activeOptions||[],"custom-label":t.getLabelForOption,"track-by":t.optionValue,"group-label":t.groupByLabel,"group-values":t.groupByOptions,multiple:t.multiple,taggable:t.taggable,searchable:t.searchable,"internal-search":!t.searchFilter,"preserve-search":!!t.searchFilter,"clear-on-select":!t.searchFilter,"close-on-select":!t.stayOpen,loading:t.isLoading},on:{open:function(n){t.populate=!0},tag:t.onAddTag,"search-change":t.onSearchChange},model:{value:t.selectedOptions,callback:function(n){t.selectedOptions=n},expression:"selectedOptions"}},"vue-multiselect",t.attributes,!1),t.listeners)),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{type:"button",disabled:t.disabled},on:{click:t.clear}}):t._e()],1)},ic=[];const Gd="",rc=C.register("multiselect",{components:{VueMultiselect:Ns},mixins:[et],data(){return{searchedOptions:null,populate:!1}},computed:{selectedOptions:{get(){return this.multiple?(this.selectedValue||[]).map(t=>this.getOptionForValue(t)||this.addTagOption(t)).filter(t=>t):this.selectedOption},set(t){this.selectedValue=this.multiple?(t||[]).map(e=>this.getValueForOption(e)):this.getValueForOption(t)}},activeOptions(){return this.searchedOptions||this.options},multiple:f("multiple",{type:Boolean,default:!1}),searchable:f("searchable",{type:Boolean,default:!1}),taggable:f("taggable",{type:Boolean,default:!1}),stayOpen:f("stayOpen",{type:Boolean,default:!1}),placeholder(){const{placeholder:t,searchable:e,taggable:s}=this.schema;return t||(e&&s?`Search or add a ${this.label}`:e?`Select or search ${this.label}`:void 0)}},mounted(){this.autofocus&&this.focus()},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onChange}},addTagOption(t){if(this.taggable){const{optionLabel:e,optionValue:s}=this,n=e&&s?{[e]:t,[s]:t}:t;return this.options.push(n),n}},focusElement(){this.$refs.element.activate()},onAddTag(t){const e=this.addTagOption(t);e&&this.value.push(this.getValueForOption(e))},async onSearchChange(t){this.searchFilter&&(t?(this.searchedOptions=[],this.searchedOptions=await this.resolveData(()=>this.searchFilter(new S(this,{query:t})))):this.searchedOptions=null)}}}),ys={};var oc=p(rc,ac,ic,!1,lc,null,null,null);function lc(t){for(let e in ys)this[e]=ys[e]}const cc=function(){return oc.exports}(),Ot={computed:{inputValue:{get(){return this.value!==null?this.value:""},set(t){this.value=t!==""?this.isInteger?parseInt(t,10):parseFloat(t):null}},isInteger(){return!1},stepValue(){return this.step==null&&!this.isInteger?"any":this.step},decimals:f("decimals",{type:Number}),step:f("step",{type:Number,get(t){return this.isInteger&&t!=null?Math.ceil(t):t}}),min:f("min",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[0]:t,this.isInteger&&t!=null?Math.floor(t):t}}),max:f("max",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[1]:t,this.isInteger&&t!=null?Math.ceil(t):t}}),range:f("range",{type:Array,get(){const{min:t,max:e}=this;return t!=null&&e!=null?[t,e]:void 0},set(t){o.isArray(t)&&([this.min,this.max]=t)}})},methods:{getValidations(){const t={},{range:e,min:s,max:n,decimals:a,step:i}=this;if(e?t.range=e:(s!=null&&(t.min=s),n!=null&&(t.max=n)),a!=null)t.decimals=a;else if(i){const r=(`${i}`.split(".")[1]||"").length;r>0?t.decimals=r:t.integer=!0}return this.isInteger&&(t.integer=!0),t}}};var uc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-number",attrs:{id:t.dataPath,type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},dc=[];const Zd="",hc=C.register(["number","integer"],{components:{InputField:U},mixins:[Ot],nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),$s={};var pc=p(hc,uc,dc,!1,fc,null,null,null);function fc(t){for(let e in $s)this[e]=$s[e]}const mc=function(){return pc.exports}();var _c=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-object",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[t.objectData?s("div",{staticClass:"dito-object-content"},[t.isInlined?s("dito-schema-inlined",{attrs:{schema:t.getItemFormSchema(t.schema,t.objectData,t.context),dataPath:t.dataPath,data:t.objectData,meta:t.nestedMeta,store:t.store,disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.dataPath,data:t.objectData,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext()))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,t.objectData))}})],1):t._e(),s("dito-edit-buttons",{attrs:{creatable:t.creatable,deletable:t.objectData&&t.deletable,editable:t.objectData&&t.editable,createPath:t.path,editPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.objectData,path:t.path,meta:t.meta,store:t.store},on:{delete:function(n){return t.deleteItem(t.objectData)}}})],1):t._e()},gc=[];const th="",vc=C.register("object",{mixins:[st],getSourceType(t){return t},methods:{getContext(){return new S(this,{data:this.objectData})}}}),Cs={};var bc=p(vc,_c,gc,!1,yc,null,null,null);function yc(t){for(let e in Cs)this[e]=Cs[e]}const $c=function(){return bc.exports}(),Cc=C.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitPadding:!0,getPanelSchema(t){const{name:e,...s}=t;return s}});let wc,Pc;const ws={};var Sc=p(Cc,wc,Pc,!1,Dc,null,null,null);function Dc(t){for(let e in ws)this[e]=ws[e]}const xc=function(){return Sc.exports}();var Oc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("progress",t._g(t._b({ref:"element",staticClass:"dito-progress",attrs:{id:t.dataPath,max:t.progressMax},domProps:{value:t.progressValue}},"progress",t.attributes,!1),t.listeners))},kc=[];const Fc=C.register("progress",{mixins:[Ot],computed:{progressValue(){let{value:t,range:e,step:s}=this;return t!==null?(e&&(t-=e[0]),s&&(t=Math.round(t/s)*s)):t="",t},progressMax(){const{range:t}=this;if(t)return t[1]-t[0]}}}),Ps={};var jc=p(Fc,Oc,kc,!1,Vc,null,null,null);function Vc(t){for(let e in Ps)this[e]=Ps[e]}const Ec=function(){return jc.exports}();var Rc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-radio-buttons",class:`dito-layout-${t.schema.layout||"vertical"}`,attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",refInFor:!0,staticClass:"dito-radio-button",attrs:{type:"radio"},domProps:{value:t.getValueForOption(n),checked:t._q(t.selectedValue,t.getValueForOption(n))},on:{change:function(a){t.selectedValue=t.getValueForOption(n)}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},Tc=[];const eh="",Bc=C.register("radio",{mixins:[et],nativeField:!0}),Ss={};var Lc=p(Bc,Rc,Tc,!1,Mc,null,null,null);function Mc(t){for(let e in Ss)this[e]=Ss[e]}const qc=function(){return Lc.exports}();var Ic=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-section",class:{"dito-section-labelled":!!t.schema.label}},[s("dito-pane",{staticClass:"dito-section-pane",attrs:{schema:t.getItemFormSchema(t.schema,t.item,t.context),dataPath:t.dataPath,data:t.item,meta:t.meta,store:t.store,disabled:t.disabled}})],1)},Ac=[];const sh="",Nc=C.register("section",{defaultValue:()=>{},ignoreMissingValue:t=>!t.nested&&!("default"in t),defaultNested:!1,generateLabel:!1,omitFlexGrow:!0,computed:{item(){return this.nested?this.value:this.data}},methods:{getItemFormSchema:$t},async processSchema(t,e,s,n,a){await vt(t,e,n,a)}}),Ds={};var zc=p(Nc,Ic,Ac,!1,Uc,null,null,null);function Uc(t){for(let e in Ds)this[e]=Ds[e]}const Hc=function(){return zc.exports}();var Wc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-select"},[s("select",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",attrs:{id:t.dataPath},on:{mousedown:function(n){t.populate=!0},focus:function(n){t.populate=!0},change:function(n){var a=Array.prototype.filter.call(n.target.options,function(i){return i.selected}).map(function(i){var r="_value"in i?i._value:i.value;return r});t.selectedValue=n.target.multiple?a:a[0]}}},"select",t.attributes,!1),t.listeners),[t.populate?[t._l(t.options,function(n){return[t.groupBy?s("optgroup",{attrs:{label:n[t.groupByLabel]}},t._l(n[t.groupByOptions],function(a){return s("option",{domProps:{value:t.getValueForOption(a)}},[t._v(t._s(t.getLabelForOption(a)))])}),0):s("option",{domProps:{value:t.getValueForOption(n)}},[t._v(t._s(t.getLabelForOption(n)))])]})]:t.selectedOption?[s("option",{domProps:{value:t.selectedValue}},[t._v(t._s(t.getLabelForOption(t.selectedOption)))])]:t._e()],2),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:t.clear}}):t._e()])},Yc=[];const nh="",Kc=C.register("select",{mixins:[et],nativeField:!0,data(){return{populate:!0}}}),xs={};var Jc=p(Kc,Wc,Yc,!1,Qc,null,null,null);function Qc(t){for(let e in xs)this[e]=xs[e]}const Xc=function(){return Jc.exports}();var Gc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-slider"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.inputValue,expression:"inputValue"}],ref:"element",staticClass:"dito-range",attrs:{id:t.dataPath,type:"range",min:t.min,max:t.max,step:t.stepValue},domProps:{value:t.inputValue},on:{__r:function(n){t.inputValue=n.target.value}}},"input",t.attributes,!1),t.listeners)),t.input?s("input-field",t._g(t._b({staticClass:"dito-number",attrs:{type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners)):t._e()],1)},Zc=[];const ah="",tu=C.register("slider",{components:{InputField:U},mixins:[Ot],nativeField:!0,computed:{input:f("input",{type:Boolean,default:!0})}}),Os={};var eu=p(tu,Gc,Zc,!1,su,null,null,null);function su(t){for(let e in Os)this[e]=Os[e]}const nu=function(){return eu.exports}();var au=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("switch-button",t._g(t._b({ref:"element",staticClass:"dito-switch",attrs:{id:t.dataPath,sync:!0,labels:t.labels},model:{value:t.value,callback:function(n){t.value=n},expression:"value"}},"switch-button",t.attributes,!1),t.listeners))},iu=[];const ih="",ru=C.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:Da},computed:{labels(){return this.schema.labels}}}),ks={};var ou=p(ru,au,iu,!1,lu,null,null,null);function lu(t){for(let e in ks)this[e]=ks[e]}const cu=function(){return ou.exports}();var uu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-text",attrs:{id:t.dataPath,type:t.inputType},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},du=[];const hu="****************",pu=C.register(["text","email","url","hostname","domain","tel","password","creditcard"],{components:{InputField:U},nativeField:!0,textField:!0,ignoreMissingValue:t=>t.type==="password",computed:{inputType(){return{creditcard:"text",hostname:"text",domain:"text"}[this.type]||this.type},inputValue:{get(){return this.type==="password"&&this.value===void 0&&!this.focused?hu:this.value},set(t){this.value=t}}},methods:{getValidations(){const t={email:"email",url:"url",hostname:"hostname",domain:"domain",password:"password",creditcard:"creditcard"}[this.type];return t?{[t]:!0}:{}}}}),Fs={};var fu=p(pu,uu,du,!1,mu,null,null,null);function mu(t){for(let e in Fs)this[e]=Fs[e]}const _u=function(){return fu.exports}();var gu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("textarea",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-textarea dito-input",class:{"dito-resizable":t.resizable},attrs:{id:t.dataPath,rows:t.lines},domProps:{value:t.value},on:{input:function(n){n.target.composing||(t.value=n.target.value)}}},"textarea",t.attributes,!1),t.listeners))},vu=[];const rh="",bu=C.register("textarea",{nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:f("resizable",{type:Boolean,default:!1})}}),js={};var yu=p(bu,gu,vu,!1,$u,null,null,null);function $u(t){for(let e in js)this[e]=js[e]}const Cu=function(){return yu.exports}();var wu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-list"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t._e(),s("div",{staticClass:"dito-tree-panel"},[s("dito-tree-item",{attrs:{schema:t.treeSchema,dataPath:t.treeDataPath,data:t.treeData,draggable:t.draggable,open:!0}}),t.hasEditableForms?s("div",{staticClass:"dito-tree-form-container"},[s("router-view")],1):t._e()],1)],1)},Pu=[];const oh="",Su=C.register(["tree-list","tree-object"],{mixins:[st],provide(){return{container:this}},getSourceType(t){return t==="tree-object"?"object":"list"},computed:{path(){var t;return(t=this.formComponent)==null?void 0:t.path},editPath(){var t;return this.$route.path.slice((t=this.path)==null?void 0:t.length)},treeData(){return this.isListSource?{[this.name]:this.value}:this.value},treeDataPath(){return this.isListSource?this.dataPath.slice(0,this.dataPath.length-this.name.length):this.dataPath},treeSchema(){return this.isListSource?{children:{name:this.name,...this.schema}}:this.schema},hasEditableForms(){const t=e=>M(e)&&(this.getSchemaValue("editable",{type:Boolean,default:!1,schema:e})||e.children&&t(e.children));return t(this.schema)}},async processSchema(t,e,s,n,a,i=!0,r=!1,l=null){return st.processSchema(t,e,s,n,a,i,r,(c,u)=>{const{children:d}=e;if(d)return d.type="tree-list",this.processSchema(t,d,d.name,c,u,i,!0,l)})},getFormSchemasForProcessing(t,e){const{children:s}=t;return A(t,e,s?n=>({...n,components:{...n.components,[s.name]:s}}):null)}}),Vs={};var Du=p(Su,wu,Pu,!1,xu,null,null,null);function xu(t){for(let e in Vs)this[e]=Vs[e]}const Ou=function(){return Du.exports}();function Es(t){return Hs.filesize(t,{base:10})}var ku=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-upload"},[s("table",{staticClass:"dito-table dito-table-separators dito-table-background"},[t._m(0),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.files},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.files,function(n,a){return s("tr",{key:n.key},[s("td",{domProps:{innerHTML:t._s(t.renderFile(n,a))}}),s("td",[t._v(t._s(t._f("formatFileSize")(n.size)))]),s("td",[n.upload?[n.upload.error?[t._v("Error: "+t._s(n.upload.error))]:n.upload.active?[t._v("Uploading...")]:n.upload.success?[t._v("Uploaded")]:t._e()]:[t._v("Stored")]],2),s("td",{staticClass:"dito-cell-edit-buttons"},[s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(i){return t.deleteFile(n,a)}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()])])])}),0),s("tfoot",[s("tr",[s("td",{attrs:{colspan:4}},[s("div",{staticClass:"dito-upload-footer"},[t.isUploadActive?s("progress",{staticClass:"dito-progress",attrs:{max:"100"},domProps:{value:t.uploadProgress}}):t._e(),s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.isUploadActive?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!1}}},[t._v("Cancel All")]):t.isUploadReady?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!0}}},[t._v("Upload All")]):t._e(),s("vue-upload",{ref:"upload",staticClass:"dito-button dito-button-add-upload",attrs:{"input-id":t.dataPath,name:t.dataPath,disabled:t.disabled,"post-action":t.uploadPath,extensions:t.extensions,accept:t.accept,multiple:t.multiple,size:t.maxSize,title:"Upload Files"},on:{"input-filter":t.inputFilter,"input-file":t.inputFile},model:{value:t.uploads,callback:function(n){t.uploads=n},expression:"uploads"}})],1)])])])])],1)])},Fu=[function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[s("th",[s("span",[t._v("Name")])]),s("th",[s("span",[t._v("Size")])]),s("th",[s("span",[t._v("Status")])]),s("th",[s("span")])])])}];const lh="",ju=C.register("upload",{components:{VueUpload:zs,VueDraggable:nt},filters:{formatFileSize:Es},mixins:[Dt],data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},files(){return Rs(this.value)},multiple:f("multiple",{type:Boolean,default:!1,callback:!1}),extensions:f("extensions",{type:[Array,String,RegExp]}),accept:f("accept",{type:Array,get(t){return o.isArray(t)?t.join(","):t}}),maxSize:f("maxSize",{type:[String,Number],get(t){return t?Us(t):void 0}}),draggable:f("draggable",{type:Boolean,default:!1,get(t){return t&&this.files.length>1}}),deletable:f("deletable",{type:Boolean,default:!1}),isUploadReady(){return this.uploads.length&&!(this.upload.active||this.upload.uploaded)},isUploadActive(){return this.uploads.length&&this.upload.active},uploadProgress(){return this.uploads.reduce((t,e)=>t+e.progress,0)/this.uploads.length},uploadPath(){return this.getResourceUrl({type:"upload",path:this.api.normalizePath(this.dataPath)})}},methods:{renderFile(t,e){const{render:s}=this.schema;return s?s.call(this,new S(this,{value:t,data:this.files,index:e,dataPath:j(this.dataPath,e)})):o.escapeHtml(t.name)},deleteFile(t,e){const{name:s}=t;t&&window.confirm(`Do you really want to ${this.verbs.remove} ${s}?`)&&(this.multiple?this.value.splice(e,1):this.value=null,t.upload&&this.upload.remove(t.upload),this.onChange(),this.notify({type:"info",title:"Successfully Removed",text:`${s} was ${this.verbs.deleted}.`}))},getFileIndex(t){return this.multiple&&this.value?this.value.findIndex(e=>e.id===t.id):-1},addFile(t){this.multiple?this.value?this.value.push(t):this.value=[t]:this.value=t},replaceFile(t,e){if(this.multiple){const s=this.getFileIndex(t);s>=0&&(e?this.$set(this.value,s,e):this.value.splice(s,1))}else this.value=e},removeFile(t){this.replaceFile(t,null)},inputFile(t,e){if(t&&!e){const{id:s,name:n,size:a}=t;this.addFile({id:s,name:n,size:a,upload:t})}if(t&&e){const{success:s,error:n}=t;if(s){this.onChange();const a=t.response[0];a?(a.upload=t,this.replaceFile(t,a)):this.removeFile(t)}else if(n){const a={abort:"Upload aborted",denied:"Upload denied",extension:`Unsupported file-type: ${t.name}`,network:"Network error encountered during upload",server:"Server error occurred during upload",size:`File is too large: ${Es(t.size)}`,timeout:"Timeout occurred during upload"}[n]||`Unknown File Upload Error: '${n}'`;this.notify({type:"error",title:"File Upload Error",text:a}),this.removeFile(t)}}},inputFilter(t){var s;const e=t==null?void 0:t.xhr;(s=this.api.cors)!=null&&s.credentials&&e&&!e.withCredentials&&(e.withCredentials=!0)}},processValue(t,e){const s=Rs(e).map(({upload:n,...a})=>!n||n.success?a:null).filter(n=>n);return t.multiple?s:s[0]||null}});function Rs(t){return t?o.asArray(t):[]}const Ts={};var Vu=p(ju,ku,Fu,!1,Eu,null,null,null);function Eu(t){for(let e in Ts)this[e]=Ts[e]}const Ru=Object.freeze(Object.defineProperty({__proto__:null,TypeButton:Ho,TypeCheckbox:Xo,TypeCheckboxes:nl,TypeCode:cl,TypeColor:ml,TypeComponent:$l,TypeComputed:xl,TypeDate:El,TypeLabel:Jl,TypeList:zl,TypeMarkup:nc,TypeMultiselect:cc,TypeNumber:mc,TypeObject:$c,TypePanel:xc,TypeProgress:Ec,TypeRadio:qc,TypeSection:Hc,TypeSelect:Xc,TypeSlider:nu,TypeSwitch:cu,TypeText:_u,TypeTextarea:Cu,TypeTreeList:Ou,TypeUpload:function(){return Vu.exports}()},Symbol.toStringTag,{value:"Module"})),Bs=new Set;function Tu(t){Bs.has(t)||(Bs.add(t),console.warn(t))}const Bu=["create","created","save","saved","submit","submitted","delete","deleted","edit","edited","close","closed","cancel","cancelled","drag","dragged"].reduce((t,e)=>(t[e]=e,t),{});v.config.productionTip=!1,v.use(L),v.use(V,{dynamic:!0}),v.use(Ls);class Lu{constructor(e,{dito:s={},api:n,views:a={},...i}={}){this.el=e,this.api=n=o.merge({base:"/"},s.api,n),this.options=i,n.locale||(n.locale="en-US"),n.formats=o.merge({},o.defaultFormats,n.formats),n.request||(n.request=l=>qu(n,l)),n.getApiUrl||(n.getApiUrl=l=>Au(n,l)),n.isApiUrl||(n.isApiUrl=l=>Iu(n,l)),n.normalizePath||(n.normalizePath=n.normalizePaths?o.hyphenate:l=>l),n.denormalizePath||(n.denormalizePath=n.normalizePaths?o.camelize:l=>l);const r=n.users=E(n.users,{type:"collection"})||{};r.login=E(r.login||"login",{method:"post",parent:r}),r.logout=E(r.logout||"logout",{method:"post",parent:r}),r.session=E(r.session||"session",{method:"get",parent:r}),n.resources={any(l){const c=this[l==null?void 0:l.type]||this.default;return l&&c.call(this,l)},default(l){const c=this.any(l.parent);return c?`${c}/${l.path}`:l.path},collection(l){return this.default(l)},member(l){return`${l.path}/${l.id}`},upload(l){return`${this.collection(l.parent)}/upload/${l.path}`},...n.resources},n.headers={"Content-Type":"application/json",...n.headers},o.isString(e)&&(e=document.querySelector(e)),this.root=new v({el:e,router:new L({mode:"history",base:s.base,linkActiveClass:"",linkExactActiveClass:""}),components:{DitoRoot:Pt},provide:{api:n,$verbs:()=>Bu,$views:()=>{},$isPopulated:()=>!0,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:l=>l(Pt,{attrs:{id:e.id},props:{unresolvedViews:a,options:i},components:{...qo,...Ru}})})}register(e,s){return C.register(e,s)}}class Mu extends Error{constructor(e){super(`Request failed with status code: ${e.status} (${e.statusText})`),this.response=e}}async function qu(t,{url:e,method:s="get",params:n=null,query:a=n||null,headers:i=null,data:r=null}){var u,d;n&&Tu("request.params is deprecated. Use action.method and action.path instead.");const l=t.isApiUrl(e),c=await fetch(t.getApiUrl({url:e,query:a}),{method:s.toUpperCase(),...r&&{body:JSON.stringify(r)},headers:{...l&&t.headers,...i},credentials:l&&((u=t.cors)!=null&&u.credentials)?"include":"same-origin"});if((d=c.headers.get("Content-Type"))!=null&&d.includes("application/json")&&(c.data=await c.json()),!c.ok)throw new Mu(c);return c}function Iu(t,e){return!o.isAbsoluteUrl(e)||e.startsWith(t.url)}function Au(t,{url:e,query:s}){o.isAbsoluteUrl(e)||(e=Nu(t.url,e));const n=zu(s);return n?`${e}?${n}`:e}function Nu(t,e){return`${t.replace(/\/+$/,"")}/${e.replace(/^\/+/,"")}`}function zu(t){const e=t?o.isArray(t)?t:Object.entries(t):[];return new URLSearchParams(e.reduce((s,[n,a])=>{for(const i of o.asArray(a))s.push([n,i]);return s},[])).toString()}return Lu});
6
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9yZXNvdXJjZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kZWNpbWFscy5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JlcXVpcmVkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvRGl0b0NvbXBvbmVudC5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSW5wdXRGaWVsZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0lucHV0RmllbGQudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JY29uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWUiLCIuLi8uLi91aS9zcmMvdHJhbnNpdGlvbnMvVHJhbnNpdGlvbkhlaWdodC52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL09yZGVyZWRNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTWFya3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTXVsdGlzZWxlY3QudnVlIiwiLi4vc3JjL21peGlucy9OdW1iZXJNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvdXRpbHMvZGVwcmVjYXRlLmpzIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlciwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1RlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICByZXR1cm4gaXNUZW1wb3JhcnlJZChkYXRhPy5baWRLZXldKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLCBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0sIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuLy8gYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCByYXcgYGNvbnRleHRgIG9iamVjdHMsXG4vLyB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkIGBjb21wb25lbnRgIGluc3RhbmNlLCBzb1xuLy8gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgZGlmZmVyZW50IHRoYW5cbi8vIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZSBhbGwgZmllbGRzIGZyb20gdGhlXG4vLyBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQ6XG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gY29udGV4dHMuZ2V0KGNvbnRleHQpXG4gIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldChjb250ZXh0KVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHBhcmFtcyBvYmplY3QgLyBmdW5jdGlvbiwgb3IgY3JlYXRlIGEgbmV3IG9uZTpcbiAgICBjb250ZXh0ID0gY29udGV4dFxuICAgICAgPyAoaXNGdW5jdGlvbihjb250ZXh0KSA/IGNvbnRleHQoKSA6IHsgLi4uY29udGV4dCB9KVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIGNvbnRleHRzLnNldCh0aGlzLCBvYmplY3QpXG4gIH1cblxuICBzdGF0aWMgZ2V0KGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IGluc3RhbmNlb2YgRGl0b0NvbnRleHRcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCBjb250ZXh0KVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmFsdWUnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IGl0ZW0oKSB7XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0czpcbiAgICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGEnLCAoKSA9PlxuICAgICAgZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT05cbiAgLy8gZGF0YS4gIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZVxuICAvLyB1c2Ugb2YgYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdFxuICAvLyBwYXJlbnQuIElmIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbFxuICAvLyBzb3J0cyBvZiBkYXRhIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBwYXJlbnRJdGVtID1cbiAgICAgIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8IG51bGxcbiAgICByZXR1cm4gcGFyZW50SXRlbSAhPT0gdGhpcy5pdGVtID8gcGFyZW50SXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGl0ZW1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpdGVtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogUmVtb3ZlIGV4cG9zdXJlIHNpbmNlIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCBkb2Vzbid0IGFsd2F5cyBleGlzdCxcbiAgLy8gZS5nLiBuZXN0ZWQgZm9ybXMgaW4gYHByb2Nlc3NEYXRhKClgLiBJbnN0ZWFkLCBiaW5kIGNvbXBvbmVudCB0byBgdGhpc2BcbiAgLy8gb25seSB3aGVyZSBhdmFpbGFibGUuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFRPRE86IEFkZCBgY29tcG9uZW50U2NoZW1hYCBnZXR0ZXIgZm9yIHRoZSBzY2hlbWEgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LFxuICAvLyBldmVuIHdoZW4gdGhlIGNvbXBvbmVudCBpc24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIENvbnNpZGVyIGFkZGluZ1xuICAvLyBgc291cmNlU2NoZW1hYCBhcyB3ZWxsP1xuXG4gIC8vIFRPRE86IEZpeCB1bmNsZWFyIG5hbWluZzogV2hpY2ggc2NoZW1hIGlzIHRoaXMsIHRoYXQgb2YgdGhlIGNvbXBvbmVudCBvciBvZlxuICAvLyBpdHMgcGFyZW50PyBJc24ndCBleHBvc2luZyBgZm9ybUNvbXBvbmVudGAgYW5kIGB2aWV3Q29tcG9uZW50YCBlbm91Z2gsIG9uY2VcbiAgLy8gd2Ugb2ZmZXIgYWNjZXNzIHRvIHRoZWlyIGNvbXBvbmVudHMgdGhlcmUgdGhyb3VnaCBgZ2V0Q29tcG9uZW50KClgICYgY28uIG9uXG4gIC8vIGBEaXRvTWl4aW5gIHBlcmhhcHM/ICBBbHNvLCB0aGVyZSBjb3VsZCBiZSBhIGB0YWJDb21wb25lbnRgIGdldHRlciBmb3JcbiAgLy8gc2NoZW1hcyBpbiB0YWJzP1xuICBnZXQgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkaWFsb2dDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHBhbmVsQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3BhbmVsQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyZXNvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBXaGVuIHVzZWQgaW4gT3B0aW9uc01peGluIGZvciBgc2NoZW1hLm9wdGlvbnMudmFsdWUoKWAsXG4gIC8vIGBzY2hlbWEub3B0aW9ucy5sYWJlbCgpYCBhbmQgIGBzY2hlbWEuc2VhcmNoLmZpbHRlcigpYCBjYWxsYmFja3M6XG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9uJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9ucycsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRPRE86IFJlbmFtZSB0aGlzIHRvIGBzZWFyY2hUZXJtYCBvciBgc2VhcmNoUXVlcnlgLCB0byBwZXJoYXBzIGZyZWUgYHF1ZXJ5YFxuICAvLyBmb3IgdGhlIGFjdHVhbCBgcmVzb3VyY2VDb21wb25lbnQucXVlcnlgIG9iamVjdD9cbiAgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3F1ZXJ5JywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVGhlIGVycm9yIGZpZWxkIGlzIG9ubHkgcG9wdWxhdGVkIGluIHRoZSBjb250ZXh0IG9mIGJ1dHRvbnMgdGhhdCBzZW5kXG4gIC8vIHJlcXVlc3RzLCBzZWUgYFJlc291cmNlTWl4aW4uZW1pdEJ1dHRvbkV2ZW50KClgOlxuICBnZXQgZXJyb3IoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZXJyb3InLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgd2FzTm90aWZpZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnd2FzTm90aWZpZWQnLCBmYWxzZSlcbiAgfVxuXG4gIC8vIEhlbHBlciBNZXRob2RzXG5cbiAgZ2V0IHJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQucmVxdWVzdChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGZvcm1hdCgpIHtcbiAgICByZXR1cm4gKHZhbHVlLCBvcHRpb25zKSA9PiB0aGlzLmNvbXBvbmVudC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gIH1cblxuICBnZXQgbmF2aWdhdGUoKSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uID0+IHRoaXMuY29tcG9uZW50Lm5hdmlnYXRlKGxvY2F0aW9uKVxuICB9XG5cbiAgZ2V0IGRvd25sb2FkKCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LmRvd25sb2FkKG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZ2V0UmVzb3VyY2VVcmwoKSB7XG4gICAgcmV0dXJuIHJlc291cmNlID0+IHRoaXMuY29tcG9uZW50LmdldFJlc291cmNlVXJsKHJlc291cmNlKVxuICB9XG5cbiAgZ2V0IG5vdGlmeSgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICAgIHNldCh0aGlzLCAnd2FzTm90aWZpZWQnLCB0cnVlKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRldmVudHM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIHZlcnNpb25zIG9mIFZ1ZSdzICRvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlXG4gICAgLy8gZXZlbnRzIGFkZGVkIC8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3NcbiAgICAvLyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy4kZXZlbnRzIHx8ICh0aGlzLiRldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZXZlbnRzW2V2ZW50XSB8fCAoZXZlbnRzW2V2ZW50XSA9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1xuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoZXYsIGNhbGxiYWNrKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgc3BlY2lmaWMgZXZlbnRcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBjb25zdCB7IHF1ZXVlLCBjYWxsYmFja3MgfSA9IGVudHJ5XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gRW1pdCB0aGUgbmV4dCBldmVudCBpbiB0aGUgcXVldWUgd2l0aCBpdHMgcGFyYW1zLlxuICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IG9ubHkgZ2V0cyByZW1vdmVkIG9uY2UgYG5leHQoKWAgaXMgY2FsbGVkLlxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjYWxsYmFjay5hcHBseSh0aGlzLCBlbnRyeS5hcmdzKVxuICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgZHVyaW5nIGV2ZW50IGhhbmRsZXIgZm9yICcke2V2ZW50fSc6YCwgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgcXVldWUgZm9yIHRoZSBldmVudFxuICAgICAgICAgICAgICAvLyB0aGF0IHdhcyBqdXN0IGNvbXBsZXRlZCBieSB0aGUgd3JhcHBlciB0aGF0IGNhbGxlZCBgbmV4dCgpYFxuICAgICAgICAgICAgICBlbnRyeS5yZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLnB1c2goeyBhcmdzLCByZXNvbHZlIH0pXG4gICAgICAgICAgLy8gRm9yIG5ldyBxdWV1ZXMgKD0gb25seSBvbmUgZW50cnkpIGVtaXQgdGhlIGZpcnN0IGV2ZW50IGltbWVkaWF0ZWx5LFxuICAgICAgICAgIC8vIHRvIGdldCB0aGUgcXVldWUgcnVubmluZy5cbiAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZTpcbiAgICBoYXNMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycyhldikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQubGVuZ3RoID4gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4kZXZlbnRzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Jvb2xlYW4sIGlzTnVtYmVyLCBpc0Z1bmN0aW9uLCBpc0RhdGUsXG4gIGlzUmVnRXhwLCBhc0FycmF5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDaGVja2VycyA9IHtcbiAgQm9vbGVhbjogaXNCb29sZWFuLFxuICBOdW1iZXI6IGlzTnVtYmVyLFxuICBTdHJpbmc6IGlzU3RyaW5nLFxuICBEYXRlOiBpc0RhdGUsXG4gIEFycmF5OiBpc0FycmF5LFxuICBPYmplY3Q6IGlzT2JqZWN0LFxuICBSZWdFeHA6IGlzUmVnRXhwLFxuICBGdW5jdGlvbjogaXNGdW5jdGlvblxufVxuXG4vLyBEZWNsYXJlIHRoZXNlIHNlcGFyYXRlbHkgZnJvbSB0aGUgYHR5cGVDb252ZXJ0ZXJzYCBvYmplY3QsIHRvIHByZXZlbnRcbi8vIEJhYmVsIGlzc3VlcyB3aXRoIGBPYmplY3RgIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBgT2JqZWN0YDpcbmNvbnN0IHRvQm9vbGVhbiA9IHZhbHVlID0+ICEhdmFsdWVcbmNvbnN0IHRvTnVtYmVyID0gdmFsdWUgPT4gK3ZhbHVlXG5jb25zdCB0b1N0cmluZyA9IHZhbHVlID0+IFN0cmluZyh2YWx1ZSlcblxuY29uc3QgdG9EYXRlID0gdmFsdWUgPT4gaXNEYXRlKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IERhdGUodmFsdWUpXG5cbmNvbnN0IHRvQXJyYXkgPSB2YWx1ZSA9PiBpc0FycmF5KHZhbHVlKVxuICA/IHZhbHVlXG4gIDogaXNTdHJpbmcodmFsdWUpXG4gICAgPyB2YWx1ZS5zcGxpdCgnLCcpXG4gICAgOiBhc0FycmF5KHZhbHVlKVxuXG5jb25zdCB0b09iamVjdCA9IHZhbHVlID0+IGlzT2JqZWN0KHZhbHVlKVxuICA/IHZhbHVlXG4gIC8vIElmIGEgT2JqZWN0IGlzIGV4cGVjdGVkIGJ1dCBhIEJvb2xlYW4gcHJvdmlkZSwgY29udmVydCB0byBhbiBlbXB0eVxuICAvLyBvYmplY3QuIFVzZWQgYnkgYGNyZWF0YWJsZWAgJiBjbywgdGhhdCBjYW4gYmUgYm90aC5cbiAgOiB2YWx1ZSA9PT0gdHJ1ZVxuICAgID8ge31cbiAgICA6IG51bGxcblxuY29uc3QgdG9SZWdFeHAgPSB2YWx1ZSA9PiBpc1JlZ0V4cCh2YWx1ZSlcbiAgPyB2YWx1ZVxuICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKSA/IHsgLi4uZGVmcywgLi4ucmVzb3VyY2UgfVxuICAgIDogaXNTdHJpbmcocmVzb3VyY2UpID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgOiBudWxsXG4gIC8vIE9ubHkgc2V0IHBhcmVudCBpZiBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLycsIHNvIHJlbGF0aXZlIFVSTHMgYXJlXG4gIC8vIGRlYWx0IHdpdGggY29ycmVjdGx5LlxuICBpZiAoXG4gICAgcmVzb3VyY2UgJiZcbiAgICBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkICYmXG4gICAgIXJlc291cmNlLnBhdGg/LnN0YXJ0c1dpdGgoJy8nKVxuICApIHtcbiAgICByZXNvdXJjZS5wYXJlbnQgPSBwYXJlbnRcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIHJlc291cmNlLnBhdGggPSAnLidcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1iZXJSZXNvdXJjZShpZCwgcmVzb3VyY2UpIHtcbiAgcmV0dXJuIGlkICE9IG51bGwgJiYgcmVzb3VyY2U/LnR5cGUgPT09ICdjb2xsZWN0aW9uJ1xuICAgID8ge1xuICAgICAgdHlwZTogJ21lbWJlcicsXG4gICAgICAuLi5waWNrQnkoXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICAodmFsdWUsIGtleSkgPT4gWydtZXRob2QnLCAncGF0aCcsICdwYXJlbnQnXS5pbmNsdWRlcyhrZXkpXG4gICAgICApLFxuICAgICAgaWQ6IGAke2lkfWBcbiAgICB9XG4gICAgOiBudWxsXG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sIGFzQXJyYXksIGVxdWFscyxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLCBsYWJlbGl6ZSwgaHlwaGVuYXRlLCBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8geyAkZGF0YUNvbXBvbmVudDogKCkgPT4gdGhpcyB9XG4gICAgICA6IHt9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRjaGlsZHJlblswXVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIFJvdXRlTWl4aW4gY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py4kcGFyZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py4kcGFyZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMuJHVpZCA9ICsrdWlkXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2V0KHRoaXMuc3RvcmUsIGtleSwgdmFsdWUpXG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpIHx8IHRoaXMuc2V0U3RvcmUoa2V5LCB7fSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIHNjaGVtYSA9IHRoaXMuc2NoZW1hLCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHR5cGUgJiYgYXNBcnJheSh0eXBlKVxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gICAgICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgICAgIGxldCB2YWx1ZSA9IHNjaGVtYVxuICAgICAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICA6IHNjaGVtYVtrZXlPckRhdGFQYXRoXVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihkZWYpICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgZGVmKSkge1xuICAgICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgICAgICBkZWYgPSBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgICAgIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBsYWJlbGl6ZSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXMobmFtZSwgYnV0dG9uKSB7XG4gICAgICBjb25zdCB2ZXJiID0gdGhpcy52ZXJic1tuYW1lXSB8fCBuYW1lXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogYnV0dG9uPy50ZXh0IHx8IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldERyYWdPcHRpb25zKGRyYWdnYWJsZSwgZmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiAhZHJhZ2dhYmxlLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogJ2RpdG8tZHJhZy1hY3RpdmUnLFxuICAgICAgICBjaG9zZW5DbGFzczogJ2RpdG8tZHJhZy1jaG9zZW4nLFxuICAgICAgICBnaG9zdENsYXNzOiAnZGl0by1kcmFnLWdob3N0JyxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogJ2RpdG8tZHJhZy1mYWxsYmFjaycsXG4gICAgICAgIGZvcmNlRmFsbGJhY2s6IGZhbGxiYWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIXNjaGVtYSAmJiB0aGlzLmdldFNjaGVtYVZhbHVlKCdpZicsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHtcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBidXR0b25zLFxuICAgICAgZGF0YSxcbiAgICAgIHNldHRpbmdzID0ge1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfVxuICAgIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IHRocm91Z2ggdnVlLWpzLW1vZGFsLCBhbmQgd3JhcHMgaXQgaW4gYVxuICAgICAgLy8gcHJvbWlzZSBzbyB0aGF0IHRoZSBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWBcbiAgICAgIC8vIGFuZCBgZGlhbG9nLnJlamVjdCgpYCB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0XG4gICAgICAvLyB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy4kbW9kYWwuc2hvdyhEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnKSwge1xuICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgfSwgc2V0dGluZ3MpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICByZXR1cm4gdXJsID8gdGhpcy5hcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeTogcmVzb3VyY2UucXVlcnkgfSkgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIHJlc291cmNlLCBxdWVyeSwgZGF0YSwgaW50ZXJuYWwgfSkge1xuICAgICAgdXJsIHx8PSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIGRhdGEsIHF1ZXJ5IH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgcmVxdWVzdCh7IGNhY2hlLCAuLi5vcHRpb25zIH0pIHtcbiAgICAgIC8vIEFsbG93IGNhY2hpbmcgb2YgbG9hZGVkIGRhdGEgb24gdHdvIGxldmVsczpcbiAgICAgIC8vIC0gJ2dsb2JhbCc6IGNhY2hlIGdsb2JhbGx5LCBmb3IgdGhlIGVudGlyZSBhZG1pbiBzZXNzaW9uXG4gICAgICAvLyAtICdsb2NhbCc6IGNhY2hlIGxvY2FsbHkgd2l0aGluIHRoZSBjbG9zZXN0IHJvdXRlIGNvbXBvbmVudCB0aGF0IGlzXG4gICAgICAvLyAgICBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBhbmQgbG9hZHMgaXRzIG93biBkYXRhLlxuICAgICAgY29uc3QgY2FjaGVQYXJlbnQgPSBjYWNoZSAmJiB7XG4gICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgbG9jYWw6IHRoaXMuZGF0YUNvbXBvbmVudFxuICAgICAgfVtjYWNoZV1cbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gbG9hZENhY2hlICYmIGAke1xuICAgICAgICBvcHRpb25zLm1ldGhvZCB8fCAnZ2V0J30gJHtcbiAgICAgICAgb3B0aW9ucy51cmx9ICR7XG4gICAgICAgIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb25cbiAgICAgICAgLy8gMjAyMi0xMS0wMSwgcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdGhpcy5hcGkuZ2V0QXBpVXJsKG9wdGlvbnMpXG4gICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5maWxlbmFtZSA/PyBudWxsXG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXByZWNhdGUgb25lIGZvcm1hdCBvciB0aGUgb3RoZXIsIGluIGZhdm91ciBvZiBvbmx5IG9uZSB3YXkgb2ZcbiAgICAgIC8vIGRvaW5nIHRoaW5ncy4gRGVjaWRlIHdoaWNoIG9uZSB0byByZW1vdmUuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKC9eb25bQS1aXS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXkuc2xpY2UoMiksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRFdmVudChldmVudCwge1xuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXJlbnQgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCBoYXNMaXN0ZW5lcnMgPSB0aGlzLmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGNvbnN0IHBhcmVudEhhc0xpc3RlbmVycyA9IHBhcmVudD8uaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgaWYgKGhhc0xpc3RlbmVycyB8fCBwYXJlbnRIYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCBzb21lIHRpbWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggVnVlLlxuICAgICAgICAvLyBVc2UgJG5leHRUaWNrKCkgdG8gbWFrZSBzdXJlIG91ciBoYW5kbGVycyBzZWUgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50cyB0aGF0XG4gICAgICAgIC8vIGFyZSBuZXdseSByZW5kZXJlZCBkdWUgdG8gZGF0YSBjaGFuZ2VzIGhhdmUgcmVnaXN0ZXJlZCB0aGVtc2VsdmVzLlxuICAgICAgICBpZiAoWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiAoY29udGV4dCA9IERpdG9Db250ZXh0LmdldCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgY29uc3QgcmVzID0gaGFzTGlzdGVuZXJzXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAvLyBEb24ndCBidWJibGUgdG8gcGFyZW50IGlmIGhhbmRsZWQgZXZlbnQgcmV0dXJuZWQgYGZhbHNlYFxuICAgICAgICBpZiAocGFyZW50SGFzTGlzdGVuZXJzICYmIHJlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBwYXJlbnQuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxubGV0IHVpZCA9IDBcbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT4gKFxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxuICApXG59XG4iLCJpbXBvcnQgeyBpc0RvbWFpbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0RvbWFpbih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBkb21haW4nXG59XG4iLCJpbXBvcnQgeyBpc0VtYWlsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGVtYWlsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNFbWFpbCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIGEgdmFsaWQgZW1haWwnXG59XG4iLCJpbXBvcnQgeyBpc0hvc3RuYW1lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGhvc3RuYW1lID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNIb3N0bmFtZSh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBob3N0IG5hbWUnXG59XG4iLCJpbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaW50ZWdlciA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSW50ZWdlcih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIHdob2xlIG51bWJlcidcbn1cbiIsImV4cG9ydCBjb25zdCBtYXggPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1heCkgPT4gdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBtYXgpIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttYXh9IG9yIGxlc3NgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBtaW4gPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1pbikgPT4gdmFsdWUgPj0gbWluLFxuICBtZXNzYWdlKHZhbHVlLCBtaW4pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttaW59IG9yIG1vcmVgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYXNzd29yZCA9IHtcbiAgLy8gQWxsb3cgYW55IHZhbHVlLiBGb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIGFzIGEgbWFya2VyLCB0byBhbGxvdyB0aGVcbiAgLy8gcmVxdWlyZWQgdmFsaWRhdGlvbiB0byBoYW5kbGUgdW5jaGFuZ2VkIHBhc3N3b3JkcyBzZXBhcmF0ZWx5LlxuICB2YWxpZGF0ZTogKCkgPT4gdHJ1ZVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhbmdlID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBbbWluLCBtYXhdKSA9PiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBbbWluLCBtYXhdKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlIGJldHdlZW4gJHttaW59IGFuZCAke21heH1gXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCByZXF1aXJlZCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgc2V0dGluZ3MsIHsgcGFzc3dvcmQgfSkgPT4gKFxuICAgICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykgfHxcbiAgICAvLyBQYXNzd29yZCBmaWVsZHMgdXNlIGB1bmRlZmluZWRgIGFzIG9wcG9zZWQgdG8gYG51bGxgIHdoZW4gdGhleSdyZSBzZXRcbiAgICAvLyBidXQgdW5jaGFuZ2VkLCBhbGxvdyB0aGlzIHRvIHBhc3MgdGhyb3VnaDpcbiAgICAocGFzc3dvcmQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgKSxcbiAgbWVzc2FnZTogJ2lzIHJlcXVpcmVkJyxcbiAgbnVsbGlzaDogdHJ1ZVxufVxuIiwiaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgdXJsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNVcmwodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgdmFsaWQgVVJMJ1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyB2YWxpZGF0aW9ucyBmcm9tICcuLi92YWxpZGF0aW9ucy9pbmRleC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgIGlzRGlydHk6IGZhbHNlLFxuICAgICAgaXNWYWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBldmVudHMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGUobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5kYXRhUGF0aCwgdmFsdWUsIHRoaXMudmFsaWRhdGlvbnMpXG4gICAgICBmb3IgKGNvbnN0IFtydWxlLCBzZXR0aW5nXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0aW9uc1tydWxlXVxuICAgICAgICBpZiAodmFsaWRhdG9yICYmICh2YWxpZGF0b3IubnVsbGlzaCB8fCB2YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGUsIG1lc3NhZ2UgfSA9IHZhbGlkYXRvclxuICAgICAgICAgIGlmICghdmFsaWRhdGUodmFsdWUsIHNldHRpbmcsIHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlKHZhbHVlLCBzZXR0aW5nLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogbWVzc2FnZVxuICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmlzVmFsaWRhdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBpc1ZhbGlkXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShmYWxzZSlcbiAgICB9LFxuXG4gICAgbWFya0RpcnR5KCkge1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgLy8gQ2xlYXIgY3VycmVudGx5IGRpc3BsYXllZCBlcnJvcnMgb24gbmV3IGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIGFkZEVycm9yKGVycm9yLCBhZGRMYWJlbCA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmVycm9ycyB8fD0gW11cbiAgICAgIGlmIChhZGRMYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCB0aGlzLm5hbWVcbiAgICAgICAgZXJyb3IgPSBgVGhlICR7bGFiZWx9IGZpZWxkICR7ZXJyb3J9LmBcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgLy8gQ29udmVydCBmcm9tIEFKViBlcnJvcnMgb2JqZWN0cyB0byBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UgfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihtZXNzYWdlLCB0cnVlKVxuICAgICAgfVxuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzID8gWy4uLnRoaXMuZXJyb3JzXSA6IG51bGxcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGxcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFBY2Nlc3NvcihcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGdldCwgc2V0LCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4pIHtcbiAgLy8gYGtleU9yRGF0YVBhdGhgIGNhbiBiZSBhIHNpbXBsZSBwcm9wZXJ0eSBrZXksXG4gIC8vIG9yIGEgZGF0YS1wYXRoIGludG8gc3ViLXByb3BlcnRpZXMsIGJvdGggaW4gYXJyYXkgb3Igc3RyaW5nIGZvcm1hdC5cbiAgaWYgKGlzU3RyaW5nKGtleU9yRGF0YVBhdGgpICYmIGtleU9yRGF0YVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgIGtleU9yRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIH1cbiAgLy8gVXNlIHRoZSBub3JtYWxpemVkIGRhdGEgcGF0aCBmb3IgdGhlIGhhbmRsaW5nIG92ZXJyaWRlc1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICAvLyBPbmx5IGRldGVybWluZSBzY2hlbWEgdmFsdWUgaWYgd2UgaGF2ZSBubyBnZXR0ZXIsIG9yIHRoZSBnZXR0ZXJcbiAgICAgIC8vIHdhbnRzIHRvIHJlY2VpdmUgdGhlIHZhbHVlIGFuZCBwcm9jZXNzIGl0IGZ1cnRoZXI6XG4gICAgICBjb25zdCB2YWx1ZSA9ICFnZXQgfHwgZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgLy8gTk9URTogQmVjYXVzZSBgc2NoZW1hYCBvYmplY3RzIGFyZSByZXRyaWV2ZWQgZnJvbSBgbWV0YWAgb2JqZWN0LCB0aGV5XG4gICAgICAgIC8vIGRvbid0IHNlZW0gdG8gYmUgcmVhY3RpdmUuIFRvIGFsbG93IGNoYW5nZWQgaW4gYHNjaGVtYWAgdmFsdWVzLFxuICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICA/IHRoaXMub3ZlcnJpZGVzICYmIG5hbWUgaW4gdGhpcy5vdmVycmlkZXNcbiAgICAgICAgICA/IHRoaXMub3ZlcnJpZGVzW25hbWVdXG4gICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBjYWxsYmFjayB9KVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNldCkge1xuICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzIHx8PSB7fVxuICAgICAgICB0aGlzLiRzZXQodGhpcy5vdmVycmlkZXMsIG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVBY2Nlc3NvcihuYW1lLCB7IGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQgfSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnM6XG4gICAgICAgIHZhbHVlID0gaXNGdW5jdGlvbihkZWYpID8gZGVmLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KSA6IGRlZlxuICAgICAgICAvLyBUcmlnZ2VyIHNldHRlciBieSBzZXR0aW5nIHZhbHVlIGFuZCBhY2Nlc3NvciB0byBkZWZhdWx0OlxuICAgICAgICB0aGlzW25hbWVdID0gdmFsdWVcbiAgICAgICAgLy8gTm93IGFjY2VzcyBzdG9yZSBhZ2FpbiwgZm9yIHJlYWN0aXZpdHkgdHJhY2tpbmdcbiAgICAgICAgdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIGdldHRlciB0byBmdXJ0aGVyIGNoYW5nZSBvciBwcm9jZXNzIHRoZSB2YWx1ZVxuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHN0b3JlOlxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIHNldHRlciB0byByZXR1cm4gYSBuZXcgdmFsdWUgdG8gc2V0LCBvciBkbyB0aGVcbiAgICAgIC8vIHNldHRpbmcgaXRzZWxmLCBhbmQgdGhlbiByZXR1cm4gYHVuZGVmaW5lZGA6XG4gICAgICBpZiAoIXNldCB8fCAodmFsdWUgPSBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yZShuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQob2JqZWN0LCBpdGVtSWQpIHtcbiAgbGV0IGlkID0gdWlkTWFwLmdldChvYmplY3QpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGl0ZW1JZCB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQob2JqZWN0LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsIGFzQXJyYXksIHBhcnNlRGF0YVBhdGgsIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSAoc3ViR3JhcGhba2V5XSA/Pz0ge30pXG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gY2xpcGJvYXJkICYmIChcbiAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH0gaWYgKHJlZmVyZW5jZUlkIHx8IGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZWZLZXkgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YC5cbiAgICAgICAgICAgICAgICA/IGlkS2V5XG4gICAgICAgICAgICAgICAgLy8gU2VydmVyIHdhbnRzIE9iamVjdGlvbi1zdHlsZSAnI2lkJyAvICcjcmVmJyBwYWlycy5cbiAgICAgICAgICAgICAgICA6IHNvdXJjZSA/ICcjaWQnIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAvLyBhY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgY2xvbmUsIGNhbWVsaXplLCBpc01vZHVsZSxcbiAgbWFwQ29uY3VycmVudGx5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDb21wb25lbnRzID0ge31cbmNvbnN0IHVua25vd25UeXBlUmVwb3J0ZWQgPSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudCkge1xuICB0eXBlQ29tcG9uZW50c1t0eXBlXSA9IGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUNvbXBvbmVudCh0eXBlLCBhbGxvd051bGwgPSBmYWxzZSkge1xuICBjb25zdCBjb21wb25lbnQgPSB0eXBlQ29tcG9uZW50c1t0eXBlXSB8fCBudWxsXG4gIGlmICghY29tcG9uZW50ICYmICFhbGxvd051bGwgJiYgIXVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0pIHtcbiAgICAvLyBSZXBvcnQgZWFjaCBtaXNzaW5nIHR5cGUgb25seSBvbmNlLCB0byBhdm9pZCBmbG9vZGluZyB0aGUgY29uc29sZTpcbiAgICB1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdID0gdHJ1ZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBEaXRvIGNvbXBvbmVudCB0eXBlOiAnJHt0eXBlfSdgKVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hTY2hlbWEoc2NoZW1hLCBjYWxsYmFjaykge1xuICBjb25zdCBzY2hlbWFzID0gW1xuICAgIC4uLk9iamVjdC52YWx1ZXMoc2NoZW1hPy50YWJzIHx8IHt9KSxcbiAgICBzY2hlbWFcbiAgXVxuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soc2NoZW1hKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICBpZiAoaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkpIHtcbiAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSlcbiAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZvckVhY2hTY2hlbWEoc2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEuY29tcG9uZW50cyB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKVxuICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBjb21wb25lbnQgOiB1bmRlZmluZWRcbiAgKSB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyB0cnVlIDogdW5kZWZpbmVkXG4gICkgPT09IHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5U2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+ICFjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gZmFsc2UgOiB1bmRlZmluZWRcbiAgKSAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NoZW1hKHNjaGVtYSkge1xuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiBpc1N0cmluZyhzY2hlbWEudHlwZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRm9ybShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdmb3JtJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3ZpZXcnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLm5hbWUgfHwgc2NoZW1hLmxhYmVsIHx8IHNjaGVtYS50eXBlXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYW5lbHMoc2NoZW1hKSB7XG4gIGNvbnN0IHsgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhwYW5lbHMpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcykge1xuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgYXdhaXQgcmVzb2x2ZVBhbmVscyhzY2hlbWEpXG4gIGlmIChpc1ZpZXcoc2NoZW1hKSkge1xuICAgIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgICAgYXdhaXQgcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYS5jb21wb25lbnQsIG5hbWUsIGNoaWxkcmVuLCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3LCBzdGFydCBhdCBsZXZlbCAxXG4gICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDEpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2aWV3IHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHJvdXRlcy5wdXNoKHtcbiAgICBwYXRoOiBgLyR7c2NoZW1hLnBhdGh9YCxcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnQsXG4gICAgbWV0YToge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICBzY2hlbWEubGV2ZWwgPSBsZXZlbFxuICAvLyBEZWxlZ2F0ZSBzY2hlbWEgcHJvY2Vzc2luZyB0byB0aGUgYWN0dWFsIHR5cGUgY29tcG9uZW50cy5cbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgLy8gVXNlZCBmb3IgdmlldyBhbmQgc291cmNlIHNjaGVtYXMsIHNlZSBTb3VyY2VNaXhpblxuICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgc2NoZW1hLnBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbCkge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCAoY29tcG9uZW50LCBuYW1lKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChwcm9jZXNzQ29tcG9uZW50KGFwaSwgY29tcG9uZW50LCBuYW1lLCByb3V0ZXMsIGxldmVsKSlcbiAgfSlcbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKSB7XG4gIC8vIEZpcnN0IHJlc29sdmUgdGhlIGZvcm1zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBiYWNrIG9uIHRoZSBzY2hlbWEuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzIH0gPSBzY2hlbWFcbiAgaWYgKGZvcm1zKSB7XG4gICAgZm9ybXMgPSBzY2hlbWEuZm9ybXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhmb3JtcywgcmVzb2x2ZUZvcm0pXG4gIH0gZWxzZSBpZiAoZm9ybSkge1xuICAgIGZvcm0gPSBzY2hlbWEuZm9ybSA9IGF3YWl0IHJlc29sdmVGb3JtKGZvcm0pXG4gIH0gZWxzZSBpZiAoY29tcG9uZW50cykge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgaWYgKGlzT2JqZWN0KGNvbXBvbmVudHMpKSB7XG4gICAgICBmb3JtID0geyBjb21wb25lbnRzIH1cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsICsgMSlcbiAgfVxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb3JtKGZvcm0pIHtcbiAgZm9ybSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoZm9ybSwgdHJ1ZSlcbiAgaWYgKCFpc0Zvcm0oZm9ybSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoZm9ybSl9J2ApXG4gIH1cbiAgaWYgKGZvcm0pIHtcbiAgICBhd2FpdCByZXNvbHZlUGFuZWxzKGZvcm0pXG4gIH1cbiAgcmV0dXJuIGZvcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuZm9ybSB8fCBzY2hlbWEuZm9ybXMgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzVmlldyhzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB2aWV3IH0gPSBzY2hlbWFcbiAgY29uc3Qgdmlld1NjaGVtYSA9IHZpZXcgJiYgY29udGV4dC52aWV3c1t2aWV3XVxuICByZXR1cm4gdmlld1NjaGVtYVxuICAgID8gaGFzRm9ybVNjaGVtYSh2aWV3U2NoZW1hKVxuICAgICAgPyB2aWV3U2NoZW1hXG4gICAgICAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIDogZm9yRWFjaFNjaGVtYSh2aWV3U2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgICAgICBjb25zdCB2aWV3Q29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHM/Llt2aWV3XVxuICAgICAgICBpZiAoaGFzRm9ybVNjaGVtYSh2aWV3Q29tcG9uZW50KSkge1xuICAgICAgICAgIHJldHVybiB2aWV3Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3RWRpdFBhdGgoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgcmV0dXJuIHZpZXdcbiAgICA/IHZpZXcubGV2ZWwgPT09IDBcbiAgICAgID8gYC8ke3ZpZXcucGF0aH1gIC8vIEEgc2luZ2xlLWNvbXBvbmVudCB2aWV3XG4gICAgICA6IGAvJHt2aWV3LnBhdGh9LyR7dmlldy5wYXRofWAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlld1xuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXcpIHtcbiAgICBzY2hlbWEgPSB2aWV3XG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cywgY29tcGFjdCB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGNvbXBvbmVudHMgdG8gZm9ybXMsIHN1cHBvcnRpbmcgYGNvbXBhY3RgIHNldHRpbmcuXG4gICAgICBmb3JtID0geyBjb21wb25lbnRzLCBjb21wYWN0IH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYGZvcm1zYCwgYGZvcm1gIG9yIGBjb21wb25lbnRzYCwgcmV0dXJuIGFuZCBlbXB0eSBgZm9ybXNgIG9iamVjdC5cbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmb3JtcykubWFwKChbdHlwZSwgZm9ybV0pID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYHNjaGVtYS5jb21wb25lbnRzYCBjYWxsYmFja3MgdG8gY3JlYXRlIGNvbXBvbmVudHMgb24gdGhlIGZseS5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGZvcm0uY29tcG9uZW50cykpIHtcbiAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGZvcm0uY29tcG9uZW50cyhjb250ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0KSwgaXRlbSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVsKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLmxhYmVsICE9PSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wYWN0KHNjaGVtYSkge1xuICByZXR1cm4gISFzY2hlbWEuY29tcGFjdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbmxpbmVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLmlubGluZWQgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKFxuICAgIHNjaGVtYS5uZXN0ZWQgfHxcbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZE9taXRQYWRkaW5nKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5vbWl0UGFkZGluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID0gZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICA/IGRlZmF1bHRWYWx1ZVxuICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgIHR5cGVPcHRpb25zPy5pZ25vcmVNaXNzaW5nVmFsdWU/LihzY2hlbWEpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xhYmVscyhzY2hlbWEpIHtcbiAgY29uc3QgY2hlY2tDb21wb25lbnRzID0gY29tcG9uZW50cyA9PlxuICAgIE9iamVjdC52YWx1ZXMoY29tcG9uZW50cyB8fCB7fSkuc29tZShoYXNMYWJlbClcblxuICByZXR1cm4gKFxuICAgIGNoZWNrQ29tcG9uZW50cyhzY2hlbWEuY29tcG9uZW50cykgfHxcbiAgICBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzIHx8IHt9KS5zb21lKGNoZWNrQ29tcG9uZW50cylcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdHMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLCBkYXRhLCBudWxsLCBudWxsLCBwcm9jZXNzQmVmb3JlLCBudWxsLCBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gc2NoZW1hXG4gIGlmIChjb21wdXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgIC8vIE92ZXJyaWRlIHZhbHVlIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb24gdGhyb3VnaCBjYWxsaW5nIHRoZVxuICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgIHZhbHVlOiBkYXRhW25hbWVdLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhXG4gICAgfSkpXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFVzZSBgJHNldCgpYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGB0aGlzLnZhbHVlID0g4oCmYCB0byB1cGRhdGUgdGhlXG4gICAgICAvLyB2YWx1ZSB3aXRob3V0IGNhbGxpbmcgcGFyc2UoKTpcbiAgICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgdmFsdWUpXG4gICAgfVxuICB9XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBzdGlsbCBtaXNzaW5nIGFmdGVyIGNvbXB1dGUsIHNldCB0aGUgZGVmYXVsdCBmb3IgaXQ6XG4gIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgVnVlLnNldChkYXRhLCBuYW1lLCBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIHRocm91Z2ggYCRzZXQoKWAsIHNlZSBhYm92ZTpcbiAgcmV0dXJuIGRhdGFbbmFtZV1cbn1cblxuZnVuY3Rpb24gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgaXRlbSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5zY2hlbWFPbmx5KSB7XG4gICAgY29uc3QgY29weSA9IHt9XG4gICAgY29uc3QgeyBpZEtleSA9ICdpZCcsIG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICBjb25zdCBpZCA9IGl0ZW1baWRLZXldXG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcHlbaWRLZXldID0gaWRcbiAgICB9XG4gICAgLy8gQ29weSBvdmVyIHR5cGUgaW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgaWYgKGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc291cmNlU2NoZW1hKSkge1xuICAgICAgY29weS50eXBlID0gaXRlbS50eXBlXG4gICAgfVxuICAgIGlmIChvcmRlcktleSkge1xuICAgICAgY29weVtvcmRlcktleV0gPSBpdGVtW29yZGVyS2V5XVxuICAgIH1cbiAgICByZXR1cm4gY29weVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRGF0YShzY2hlbWEsIHNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50LFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCBzY2hlbWFPbmx5LCB0YXJnZXQsIHJvb3REYXRhOiBkYXRhIH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSkgPyAxXG4gICAgICAgICAgICA6IGlkMiA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQyKSA/IC0xXG4gICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gIH1cblxuICBjb25zdCBwcm9jZXNzQWZ0ZXIgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIGV4Y2x1ZGUsIHByb2Nlc3MgfSA9IHNjaGVtYVxuICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGFbbmFtZV1cblxuICAgIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuXG4gICAgLy8gTk9URTogV2UgZG9uJ3QgY2FjaGUgdGhpcyBjb250ZXh0LCBzaW5jZSBgdmFsdWVgIGlzIGNoYW5naW5nLlxuICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiBEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YSxcbiAgICAgIC8vIFBhc3MgdGhlIGFscmVhZHkgcHJvY2Vzc2VkIGRhdGEgdG8gYHByb2Nlc3MoKWAsIHNvIGl0IGNhbiBiZSBtb2RpZmllZFxuICAgICAgLy8gdGhyb3VnaCBgcHJvY2Vzc2VkSXRlbWAgZnJvbSB0aGVyZS5cbiAgICAgIHByb2Nlc3NlZERhdGFcbiAgICB9KVxuXG4gICAgLy8gRmlyc3QgdW53cmFwIHRoZSB3cmFwcGVkIHByaW1pdGl2ZXMgYWdhaW4sIHRvIGJyaW5nIHRoZSBkYXRhIGJhY2sgaW50b1xuICAgIC8vIGl0cyBuYXRpdmUgZm9ybS4gU2UgYHByb2Nlc3NCZWZvcmUoKWAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgdXNlcidzIGBwcm9jZXNzKClgIGNhbGxiYWNrIGZpcnN0LCBpZiBvbmUgaXMgcHJvdmlkZWQsIHNvIHRoYXRcbiAgICAvLyBpdCBjYW4gbW9kaWZ5IGRhdGEgaW4gYHByb2Nlc3NlZERhdGFgIGV2ZW4gaWYgaXQgcHJvdmlkZXMgYGV4Y2x1ZGU6IHRydWVgXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIHZhbHVlID0gcHJvY2VzcyhnZXRDb250ZXh0KCkpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgICAgLy8gU3VwcG9ydCBmdW5jdGlvbnMgbmV4dCB0byBib29sZWFucyBmb3IgYHNjaGVtYS5leGNsdWRlYDpcbiAgICAgIGV4Y2x1ZGUgPT09IHRydWUgfHxcbiAgICAgIGlzRnVuY3Rpb24oZXhjbHVkZSkgJiYgZXhjbHVkZShnZXRDb250ZXh0KCkpXG4gICAgKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzc2VkRGF0YVtuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFYWNoIGNvbXBvbmVudCB0eXBlIGNhbiBwcm92aWRlIGl0cyBvd24gc3RhdGljIGBwcm9jZXNzVmFsdWUoKWAgbWV0aG9kXG4gICAgICAvLyB0byBjb252ZXJ0IHRoZSBkYXRhIGZvciBzdG9yYWdlLlxuICAgICAgY29uc3QgcHJvY2Vzc1ZhbHVlID0gdHlwZU9wdGlvbnM/LnByb2Nlc3NWYWx1ZVxuICAgICAgaWYgKHByb2Nlc3NWYWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpXG4gICAgICB9XG4gICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBkYXRhUGF0aCxcbiAgICBwcm9jZXNzZWREYXRhLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgcHJvY2Vzc0FmdGVyLFxuICAgIG9wdGlvbnNcbiAgKVxuXG4gIHJldHVybiBncmFwaC5wcm9jZXNzKHNvdXJjZVNjaGVtYSwgcHJvY2Vzc2VkRGF0YSwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEYXRhKFxuICBzY2hlbWEsXG4gIGRhdGEsXG4gIGRhdGFQYXRoLFxuICBwcm9jZXNzZWREYXRhLFxuICBwcm9jZXNzQmVmb3JlLFxuICBwcm9jZXNzQWZ0ZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT4ge1xuICAgIGNvbnN0IGdldERhdGFQYXRoID0gKGRhdGFQYXRoLCB0b2tlbikgPT4gZGF0YVBhdGggIT0gbnVsbFxuICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pXG4gICAgICA6IG51bGxcblxuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmICghaXNOZXN0ZWQoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiB1bm5lc3RlZCBjb21wb25lbnRzLlxuICAgICAgICAgIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YSxcbiAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudERhdGFQYXRoID0gZ2V0RGF0YVBhdGgoZGF0YVBhdGgsIG5hbWUpXG5cbiAgICAgICAgICBjb25zdCBwcm9jZXNzSXRlbSA9IChpdGVtLCBpbmRleCA9IG51bGwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFQYXRoID0gaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgPyBnZXREYXRhUGF0aChjb21wb25lbnREYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgICAgIDogY29tcG9uZW50RGF0YVBhdGhcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQob3B0aW9ucy5jb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zdCBnZXRGb3JtcyA9IChcbiAgICAgICAgICAgICAgZ2V0VHlwZU9wdGlvbnMoY29tcG9uZW50U2NoZW1hKT8uZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nIHx8XG4gICAgICAgICAgICAgICBnZXRGb3JtU2NoZW1hc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZm9ybXMgPSBnZXRGb3Jtcyhjb21wb25lbnRTY2hlbWEsIGNvbnRleHQpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pXG4gICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gY2xvbmVJdGVtKGNvbXBvbmVudFNjaGVtYSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRJdGVtLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSXRlbXMgd2l0aG91dCBmb3JtcyBzdGlsbCBnZXQgZnVsbHkgKGJ1dCBzaGFsbG93bHkpIGNsb25lZC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogRmluZCBvdXQgb2YgdGhpcyBpcyBhY3R1YWxseSBuZWVkZWQgLyB1c2VkIGF0IGFsbD9cbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0JlZm9yZT8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhID8gcHJvY2Vzc2VkRGF0YVtuYW1lXSA6IGRhdGFbbmFtZV1cbiAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBoYXNGb3JtU2NoZW1hKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiBuZXN0ZWQgZm9ybSBpdGVtcy5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IE5vIG5lZWQgdG8gY29sbGVjdCB2YWx1ZXMgaWYgd2UncmUgbm90IGNsb25pbmchXG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgICAgIDogdmFsdWUuZm9yRWFjaChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc0l0ZW0odmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzc2VkRGF0YSkge1xuICAgICAgICAgICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsIGRhdGEsIG5hbWUsIGNvbXBvbmVudERhdGFQYXRoLCBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpXG4gIGlmIChzY2hlbWEudGFicykge1xuICAgIGZvciAoY29uc3QgdGFiIG9mIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMpKSB7XG4gICAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBwYW5lbCBvZiBnZXRBbGxQYW5lbFNjaGVtYXMoc2NoZW1hLCBkYXRhUGF0aCkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyhwYW5lbC5zY2hlbWEuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhkZXNjcmlwdGlvbnMsIGRlZmF1bHRzKSB7XG4gIGNvbnN0IHRvT2JqZWN0ID0gKGFycmF5LCB0b1NjaGVtYSkgPT4ge1xuICAgIHJldHVybiBhcnJheS5sZW5ndGggPiAwXG4gICAgICA/IGFycmF5LnJlZHVjZSgob2JqZWN0LCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgaWYgKHNjaGVtYSkge1xuICAgICAgICAgIG9iamVjdFtzY2hlbWEubmFtZV0gPSBzY2hlbWEgJiYgZGVmYXVsdHNcbiAgICAgICAgICAgID8geyAuLi5kZWZhdWx0cywgLi4uc2NoZW1hIH1cbiAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdFxuICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KGRlc2NyaXB0aW9ucylcbiAgICA/IHRvT2JqZWN0KGRlc2NyaXB0aW9ucywgdmFsdWUgPT4gKFxuICAgICAgaXNPYmplY3QodmFsdWUpID8gdmFsdWUgOiB7XG4gICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgIH1cbiAgICApKVxuICAgIDogaXNPYmplY3QoZGVzY3JpcHRpb25zKVxuICAgICAgPyB0b09iamVjdChcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSxcbiAgICAgICAgKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICAgICAgaXNPYmplY3QodmFsdWUpID8ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIDogaXNTdHJpbmcodmFsdWUpID8ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uU2NoZW1hcyhidXR0b25zKSB7XG4gIHJldHVybiBnZXROYW1lZFNjaGVtYXMoXG4gICAgYnV0dG9ucyxcbiAgICB7IHR5cGU6ICdidXR0b24nIH0gLy8gRGVmYXVsdHNcbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hT3JUeXBlKSA/IHNjaGVtYU9yVHlwZS50eXBlIDogc2NoZW1hT3JUeXBlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVDb21wb25lbnQoZ2V0VHlwZShzY2hlbWFPclR5cGUpLCB0cnVlKT8ub3B0aW9ucyA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKFxuICAgIGdldFR5cGUoc2NoZW1hT3JUeXBlKVxuICApID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsU2NoZW1hKHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICBzY2hlbWEsXG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBuYW1lLCBhcHBlbmQgaXQgdG8gdGhlIGRhdGFQYXRoLlxuICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgIGRhdGFQYXRoOiBzY2hlbWEubmFtZVxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgIHRhYkNvbXBvbmVudFxuICAgIH1cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsU2NoZW1hcyhzY2hlbWFzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbHMgPSBbXSkge1xuICBpZiAoc2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWFzKSkge1xuICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbFNjaGVtYShcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwga2V5KSxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWxzLnB1c2gocGFuZWwpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsU2NoZW1hcyhcbiAgc2NoZW1hLFxuICBkYXRhUGF0aCxcbiAgc2NoZW1hQ29tcG9uZW50ID0gbnVsbCxcbiAgdGFiQ29tcG9uZW50ID0gbnVsbFxuKSB7XG4gIGNvbnN0IHBhbmVsID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2V0UGFuZWxTY2hlbWE/LihcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgc2NoZW1hQ29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxzID0gcGFuZWwgPyBbZ2V0UGFuZWxTY2hlbWEocGFuZWwsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXSA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gJGZpbHRlcik6XG4gIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbHMpXG4gIHJldHVybiBwYW5lbHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkpXG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVmFsaWRhdGlvbk1peGluIGZyb20gJy4vVmFsaWRhdGlvbk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGNvbXB1dGVWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldEl0ZW0sIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0aW9uTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBOT1RFOiBXaGlsZSBgZGF0YVBhdGhgIHBvaW50cyB0byB0aGUgYWN0dWFsIGB2YWx1ZWAsIGBkYXRhYCByZXByZXNlbnRzXG4gICAgLy8gdGhlIGBpdGVtYCBpbiB3aGljaCB0aGUgYHZhbHVlYCBpcyBjb250YWluZWQsIHVuZGVyIHRoZSBrZXkgYG5hbWVgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkVmFsdWU6IG51bGwsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVR5cGVDb21wb25lbnQodGhpcy5zY2hlbWEuY29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21wdXRlVmFsdWUoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgIHsgY29tcG9uZW50OiB0aGlzIH1cbiAgICAgICAgKVxuICAgICAgICBjb25zdCB7IGZvcm1hdCB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5mb3JtYXRgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHJldHVybiBmb3JtYXRcbiAgICAgICAgICA/IGZvcm1hdC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCB7IHBhcnNlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLnBhcnNlYCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICB0aGlzLnBhcnNlZFZhbHVlID0gcGFyc2VcbiAgICAgICAgICA/IHBhcnNlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB0aGlzLiRzZXQodGhpcy5kYXRhLCB0aGlzLm5hbWUsIHRoaXMucGFyc2VkVmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICAvLyBXZSBjYW4gb25seSBnZXQgdGhlIHByb2Nlc3NlZCBpdGVtcyB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWRJdGVtLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2xhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgQm9vbGVhbl0sXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKGxhYmVsKVxuICAgICAgICAgID8gbGFiZWxcbiAgICAgICAgICA6IGxhYmVsICE9PSBmYWxzZSAmJiB0aGlzLiRvcHRpb25zLmdlbmVyYXRlTGFiZWxcbiAgICAgICAgICAgID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgd2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl1cbiAgICB9KSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGV4Y2x1ZGVkYCBmb3IgY29uc2lzdGVudCBuYW1pbmdcbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgbmF0aXZlRmllbGQsIHRleHRGaWVsZCB9ID0gdGhpcy4kb3B0aW9uc1xuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5nZXRMaXN0ZW5lcnMoKVxuICAgICAgY29uc3QgeyBldmVudHMgPSB7fSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBhbGwgcHJvdmlkZXMgbm9uLXJlY29nbml6ZWQgZXZlbnRzLFxuICAgICAgICAvLyBhc3N1bWluZyB0aGV5IGFyZSBuYXRpdmUgZXZlbnRzLlxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIE9iamVjdC5rZXlzKGV2ZW50cykpIHtcbiAgICAgICAgICBsaXN0ZW5lcnNbZXZlbnRdIHx8PSAoKSA9PiB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RlbmVyc1xuICAgIH0sXG5cbiAgICB2YWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0geyAuLi50aGlzLmdldFZhbGlkYXRpb25zKCkgfVxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgZGVmYXVsdCBydWxlcyBhbmQgYWRkIGFueSBuZXcgb25lczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLnJ1bGVzIHx8IHt9KSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0aW9uc1trZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gUmVzb3VyY2VNaXhpbiwgdXNlZCBieSBsaXN0cy5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBQcmV2ZW50IHVubmVzdGVkIHR5cGUgY29tcG9uZW50cyBmcm9tIG92ZXJyaWRpbmcgcGFyZW50IGRhdGEgcGF0aHNcbiAgICAgIGlmICh0aGlzLm5lc3RlZCkge1xuICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJDb21wb25lbnQodGhpcywgYWRkKVxuICAgICAgICAvLyBJbnN0YWxsIC8gcmVtb3ZlIHRoZSBmaWVsZCBldmVudHMgdG8gd2F0Y2ggb2YgY2hhbmdlcyBhbmQgaGFuZGxlXG4gICAgICAgIC8vIHZhbGlkYXRpb24gZmxhZ3MuIGBldmVudHNgIGlzIHByb3ZpZGVkIGJ5IGBWYWxpZGF0aW9uTWl4aW4uZXZlbnRzKClgXG4gICAgICAgIHRoaXNbYWRkID8gJ29uJyA6ICdvZmYnXSh0aGlzLmV2ZW50cylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGlucHV0OiB0aGlzLm9uSW5wdXQsXG4gICAgICAgIGNoYW5nZTogdGhpcy5vbkNoYW5nZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIGNvbnN0IFtlbGVtZW50XSA9IGFzQXJyYXkodGhpcy4kcmVmcy5lbGVtZW50KVxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKVxuICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGRpc2FibGVkLCBgZm9jdXMoKWAgd2lsbCBsaWtlbHkgbm90IGhhdmUgdGhlXG4gICAgICAgICAgLy8gZGVzaXJlZCBlZmZlY3QuIFVzZSBgc2Nyb2xsSW50b1ZpZXcoKWAgaWYgYXZhaWxhYmxlOlxuICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAoZWxlbWVudC4kZWwgfHwgZWxlbWVudCkuc2Nyb2xsSW50b1ZpZXc/LigpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIC8vIEFsc28gZm9jdXMgdGhpcyBjb21wb25lbnQncyBzY2hlbWEgYW5kIHBhbmVsIGluIGNhc2UgaXQncyBhIHRhYi5cbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LmZvY3VzKClcbiAgICAgIHRoaXMudGFiQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLmZvY3VzRWxlbWVudCgpXG4gICAgfSxcblxuICAgIGNsZWFyKCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgIH0sXG5cbiAgICBvbkZvY3VzKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2ZvY3VzJylcbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdibHVyJylcbiAgICB9LFxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdpbnB1dCcpXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgY29udGV4dDogdGhpcy5wYXJzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IHZhbHVlOiB0aGlzLnBhcnNlZFZhbHVlIH1cbiAgICAgICAgICA6IG51bGwsXG4gICAgICAgIC8vIFBhc3MgYHNjaGVtYUNvbXBvbmVudGAgYXMgcGFyZW50LCBzbyBjaGFuZ2UgZXZlbnRzIGNhbiBwcm9wYWdhdGUgdXAuXG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzUHJvbWlzZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5jb25zdCBjb21wb25lbnRzID0ge31cblxuY29uc3QgRGl0b0NvbXBvbmVudCA9IFZ1ZS5leHRlbmQoe1xuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG4gIG1peGluczogW0RpdG9NaXhpbl0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFR5cGVDb21wb25lbnQsXG5cbiAgICByZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgbWl4aW5zID0gW10pIHtcbiAgICAgIC8vIEEgaGVscGVyIG1ldGhvZCB0byBhbGxvdyB0aHJlZSB0aGluZ3M6XG4gICAgICAvLyAtIFdoZW4gdXNlZCBpbiBhIGNvbXB1dGVkIHByb3BlcnR5LCBpdCByZW1vdmVzIHRoZSBuZWVkIHRvIGhhdmUgdG9cbiAgICAgIC8vICAgbG9hZCBjb21wb25lbnRzIHdpdGggYXN5bmMgZnVuY3Rpb25zIGBjb21wb25lbnQ6ICgpID0+IGltcG9ydCguLi4pYC5cbiAgICAgIC8vICAgaW5zdGVhZCwgdGhleSBjYW4gYmUgZGlyZWN0bHkgcHJvdmlkZWQ6IGBjb21wb25lbnQ6IGltcG9ydCguLi4pYFxuICAgICAgLy8gLSBUaGUgcHJvcGVydGllcyBwYXNzZWQgdG8gc3VjaCBjb21wb25lbnRzIGRvbid0IG5lZWQgdG8gYmUgZGVmaW5lZC5cbiAgICAgIC8vICAgSW5zdGVhZCwgdGhlIHByb3ZpZGVkIG1peGlucyBhcmUgYXV0b21hdGljYWxseSBpbmhlcml0ZWQuXG4gICAgICAvLyAtIFRoZSBjb21wb25lbnQgY2FuIHVzZSBhbGwgaW50ZXJuYWwgY29tcG9uZW50cyBrbm93biB0byBEaXRvLmpzIEFkbWluLlxuICAgICAgcmV0dXJuIGNvbXBvbmVudFxuICAgICAgICA/IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAvLyBBdCBmaXJzdCwgcmVzb2x2ZSBjb21wb25lbnQgaXMgaXQgaXMgbG9hZGVkIGFzeW5jaHJvbm91c2x5LlxuICAgICAgICAgIGxldCBjb21wID0gaXNGdW5jdGlvbihjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50KClcbiAgICAgICAgICAgIDogaXNQcm9taXNlKGNvbXBvbmVudCkgPyBhd2FpdCBjb21wb25lbnRcbiAgICAgICAgICAgIDogY29tcG9uZW50XG4gICAgICAgICAgY29tcCA9IGNvbXA/LmRlZmF1bHQgfHwgY29tcFxuICAgICAgICAgIGNvbXAubWl4aW5zID0gbWl4aW5zXG4gICAgICAgICAgY29tcC5jb21wb25lbnRzID0gY29tcG9uZW50c1xuICAgICAgICAgIHJldHVybiBjb21wXG4gICAgICAgIH1cbiAgICAgICAgOiBjb21wb25lbnRcbiAgICB9LFxuXG4gICAgcmVzb2x2ZURpdG9Db21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgW0RpdG9NaXhpbl0pXG4gICAgfSxcblxuICAgIHJlc29sdmVUeXBlQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW4sIFR5cGVNaXhpbl0pXG4gICAgfVxuICB9XG59KVxuXG5EaXRvQ29tcG9uZW50LmNvbXBvbmVudCA9IGZ1bmN0aW9uKG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgbmFtZSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9XG4gICAgY29uc3QgY3RvciA9IHRoaXMuZXh0ZW5kKG9wdGlvbnMpXG4gICAgY29tcG9uZW50c1tuYW1lXSA9IGN0b3JcbiAgICByZXR1cm4gY3RvclxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb21wb25lbnRzW25hbWVdIHx8IFZ1ZS5jb21wb25lbnQobmFtZSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvVXNlciB7XG4gIGhhc1JvbGUoLi4ucm9sZXMpIHtcbiAgICBpZiAodGhpcy5yb2xlcykge1xuICAgICAgZm9yIChjb25zdCByb2xlIG9mIHJvbGVzKSB7XG4gICAgICAgIGlmICh0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWFDb21wb25lbnRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1haW5TY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzWzBdXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYERpdG9TY2hlbWEuY3JlYXRlZCgpL2Rlc3Ryb3llZCgpYCBvbiBpdHNcbiAgICAvLyAkcGFyZW50LCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCB7IGVycm9ycyB9KSA9PlxuICAgICAgICAgIGVycm9ycyAmJiByZXN1bHQgPyByZXN1bHQuY29uY2F0KGVycm9ycykgOiBlcnJvcnMsXG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkpKVxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmVyaWZ5QWxsKG1hdGNoKSlcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQucmVzZXRWYWxpZGF0aW9uKCkpXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQuY2xlYXJFcnJvcnMoKSlcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goXG4gICAgICAgIGl0ID0+IGl0LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Q29tbW9uUHJlZml4IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXMuYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgYmVmb3JlUm91dGVMZWF2ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXMuYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZVJlY29yZCgpIHtcbiAgICAgIC8vIFRPRE86IENhbiB0aGlzLiRyb3V0ZS5jdXJyZW50Um91dGUgYmUgb2YgdXNlIHNvbWV3aGVyZSBoZXJlP1xuICAgICAgLy8gUmV0cmlldmUgdGhlIHJvdXRlLXJlY29yZCB0byB3aGljaCB0aGlzIGNvbXBvbmVudCB3YXMgbWFwcGVkIHRvOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzMzgjaXNzdWVjb21tZW50LTI5NjM4MTQ1OVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWRbdGhpcy4kdm5vZGUuZGF0YS5yb3V0ZXJWaWV3RGVwdGhdXG4gICAgfSxcblxuICAgIGlzTGFzdFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhpcyByb3V0ZXIgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdXG4gICAgfSxcblxuICAgIGlzTGFzdFVubmVzdGVkUm91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyByb3V0ZSBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZSB0aGF0XG4gICAgICAvLyBuZWVkcyBpdHMgb3duIHJvdXRlci12aWV3ICg9IGlzIG5vdCBuZXN0ZWQpLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgZm9yIChsZXQgaSA9IG1hdGNoZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gbWF0Y2hlZFtpXVxuICAgICAgICBpZiAoIXJlY29yZC5tZXRhLm5lc3RlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSByZWNvcmRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzTmVzdGVkUm91dGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLm5lc3RlZFxuICAgIH0sXG5cbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlUGF0aCh0aGlzLnJvdXRlUmVjb3JkLnBhdGgpXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWIoKSB7XG4gICAgICBjb25zdCB7IGJyZWFkY3J1bWIgfSA9IHRoaXMuc2NoZW1hIHx8IHt9XG4gICAgICByZXR1cm4gYnJlYWRjcnVtYiB8fCBgJHt0aGlzLmJyZWFkY3J1bWJQcmVmaXh9ICR7dGhpcy5sYWJlbH1gXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9LFxuXG4gICAgcGFyYW0oKSB7XG4gICAgICAvLyBXb3JrYXJvdW5kIGZvciB2dWUtcm91dGVyIG5vdCBiZWluZyBhYmxlIHRvIG1hcCBtdWx0aXBsZSB1cmwgcGFyYW1ldGVyc1xuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBuYW1lIHRvIG11bHRpcGxlIGNvbXBvbmVudHMsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGFyYW1zW3RoaXMubWV0YT8ucGFyYW1dIHx8IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlLCBzZWUgRGl0b0Zvcm1cbiAgICBkb2VzTXV0YXRlKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgLy8gS2VlcCBhIHNoYXJlZCBzdGFjayBvZiByb290IGNvbXBvbmVudHMgZm9yIERpdG9UcmFpbCB0byB1c2UgdG8gcmVuZGVyXG4gICAgLy8gbGFiZWxzLiBDYW4ndCByZWx5IG9uICRyb3V0ZS5tYXRjaGVkW2ldLmluc3RhbmNlcy5kZWZhdWx0IHVuZm9ydHVuYXRlbHksXG4gICAgLy8gYXMgaW5zdGFuY2VzIGFyZW4ndCBpbW1lZGlhdGVseSByZWFkeSwgYW5kIGluc3RhbmNlcyBpcyBub3QgcmVhY3RpdmUuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMucHVzaCh0aGlzKVxuICB9LFxuXG4gIGRlc3Ryb3llZCgpIHtcbiAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgIHJvdXRlQ29tcG9uZW50cy5zcGxpY2Uocm91dGVDb21wb25lbnRzLmluZGV4T2YodGhpcyksIDEpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgICBsZXQgb2sgPSB0cnVlXG4gICAgICBjb25zdCBpc0Nsb3NpbmcgPSAoXG4gICAgICAgIC8vIE9ubHkgaGFuZGxlIHRoaXMgcm91dGUgY2hhbmdlIGlmIHRoZSBmb3JtIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGVcbiAgICAgICAgLy8gYGZyb21gIHJvdXRlLCBidXQgaW5jbHVkZSBwYXJlbnQgZm9ybXMgb2YgY2xvc2luZyBuZXN0ZWQgZm9ybXMgYXMgYXNcbiAgICAgICAgLy8gd2VsbCwgYnkgbWF0Y2hpbmcgdGhlIHRoZSBzdGFydCBvZiBmcm9tL3RvIHBhdGggYWdhaW5zdCBgdGhpcy5wYXRoYDpcbiAgICAgICAgZnJvbS5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAhdG8ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgLy8gRXhjbHVkZSBoYXNoIGNoYW5nZXMgb25seSAoPSB0YWIgY2hhbmdlcyk6XG4gICAgICAgIGZyb20ucGF0aCAhPT0gdG8ucGF0aCAmJiAoXG4gICAgICAgICAgdGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkgfHxcbiAgICAgICAgICAvLyBEZWNpZGUgaWYgd2UncmUgbW92aW5nIHRvd2FyZHMgYSBuZXcgbmVzdGVkIGZvcm0sIG9yIGNsb3NpbmcgL1xuICAgICAgICAgIC8vIHJlcGxhY2luZyBhbiBhbHJlYWR5IG9wZW4gb25lIGJ5IGNvbXBhcmluZyBwYXRoIGxlbmd0aHMuXG4gICAgICAgICAgLy8gVGhlIGNhc2Ugb2YgYD1gIG1hdGNoZXMgdGhlIHJlcGxhY2luZyBvZiBhbiBhbHJlYWR5IG9wZW4gb25lLlxuICAgICAgICAgIHRvLnBhdGgubGVuZ3RoIDw9IGZyb20ucGF0aC5sZW5ndGhcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgaWYgKGlzQ2xvc2luZykge1xuICAgICAgICBpZiAodGhpcy5kb2VzTXV0YXRlKSB7XG4gICAgICAgICAgLy8gRm9yIGFjdGl2ZSBkaXJlY3RseSBtdXRhdGluZyAobmVzdGVkKSBmb3JtcyB0aGF0IHdlcmUgbm90IHZhbGlkYXRlZFxuICAgICAgICAgIC8vIHlldCwgdmFsaWRhdGUgdGhlbSBvbmNlLiBJZiB0aGUgdXNlciB0aGVuIHN0aWxsIHdhbnRzIHRvIGxlYXZlXG4gICAgICAgICAgLy8gdGhlbSwgdGhleSBjYW4gY2xpY2sgY2xvc2UgLyBuYXZpZ2F0ZSBhd2F5IGFnYWluLlxuICAgICAgICAgIG9rID0gKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCB8fFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbCgpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZSBmb3JtIGRvZXNuJ3QgZGlyZWN0bHkgbXV0YXRlIGRhdGEuIElmIGl0IGlzIGRpcnR5LCBhc2sgaWYgdXNlclxuICAgICAgICAgIC8vIHdhbnRzIHRvIHBlcnNpc3QgZGF0YSBmaXJzdC5cbiAgICAgICAgICBpZiAodGhpcy5pc0RpcnR5KSB7XG4gICAgICAgICAgICBvayA9IHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgICAgICBgWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcmJzLmNhbmNlbFxuICAgICAgICAgICAgICB9P2BcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5leHQob2spXG4gICAgfSxcblxuICAgIGdldFJvdXRlUGF0aCh0ZW1wbGF0ZVBhdGgpIHtcbiAgICAgIC8vIE1hcHMgdGhlIHJvdXRlJ3MgYWN0dWFsIHBhdGggdG8gdGhlIG1hdGNoZWQgcm91dGVzIGJ5IGNvdW50aW5nIGl0c1xuICAgICAgLy8gcGFydHMgc2VwYXJhdGVkIGJ5ICcvJywgc3BsaXR0aW5nIHRoZSBwYXRoIGludG8gdGhlIG1hcHBlZCBwYXJ0c1xuICAgICAgLy8gY29udGFpbmluZyBhY3R1YWwgcGFyYW1ldGVycy5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoXG4gICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgIC5zbGljZSgwLCB0ZW1wbGF0ZVBhdGguc3BsaXQoJy8nKS5sZW5ndGgpXG4gICAgICAgIC5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIGlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB7XG4gICAgICAvLyBUaGUgcm91dGUgcGF0aCBpcyB0aGUgcGF0aCB1cCB0byB0aGUgZmlyc3QgLyAoZXhjbHVkaW5nIHRoZSBpbml0aWFsIC8pOlxuICAgICAgY29uc3Qgcm9vdFBhdGggPSB0aGlzLnBhdGgubWF0Y2goL14oXFwvW14vXSopLylbMV1cbiAgICAgIHJldHVybiAhZ2V0Q29tbW9uUHJlZml4KHRvLnBhdGgsIGZyb20ucGF0aCkuc3RhcnRzV2l0aChyb290UGF0aClcbiAgICB9XG4gIH1cbn1cbiIsIlxuLy8gT25seSByZW5kZXIgRGl0b1ZpZXcgd2hlbiBpdCBpcyBhY3RpdmUsIG90aGVyd2lzZSBhIG5vcm1hbCByb3V0ZXItdmlld1xuLy8gaW5zdGVhZCwgdG8gbmVzdCBmdXJ0aGVyIHJvdXRlIGNvbXBvbmVudHMuXG4vLyBOT1RFOiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBoYW5kbGluZyBpbiBEaXRvRm9ybSwgd2hlcmUgYHYtc2hvd2AgaXNcbi8vIHVzZWQgdG8gYWx3YXlzIHJlbmRlciBmb3JtcyBldmVuIHdoZW4gb3RoZXIgbmVzdGVkIGZvcm1zIGFyZSBwcmVzZW50Llxucm91dGVyLXZpZXcoXG4gIHYtaWY9XCIhaXNMYXN0Um91dGVcIlxuICA6a2V5PVwibmFtZVwiXG4pXG4uZGl0by12aWV3LmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyKHZpZXdTY2hlbWEpXCJcbiAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4pXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbi8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4vLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbnJvdXRlci12aWV3KFxuICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgOmtleT1cIm5hbWVcIlxuKVxuLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgeyBzb21lU2NoZW1hQ29tcG9uZW50LCBpc1NpbmdsZUNvbXBvbmVudFZpZXcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdmlldycsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICAvLyBSZWRpcmVjdCAkc291cmNlQ29tcG9uZW50IGFuZCAkcmVzb3VyY2VDb21wb25lbnQgdG8gdGhlIG1haW4gY29tcG9uZW50OlxuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnNvdXJjZUNvbXBvbmVudCB8fCBudWxsLFxuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWaWV3OiB0cnVlLFxuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudCwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIFtzY2hlbWEubmFtZV06IHtcbiAgICAgICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgLi4uY29tcG9uZW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDogc2NoZW1hXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIHJldHVybiBzb21lU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICB0aGlzLnZpZXdTY2hlbWEsXG4gICAgICAgIGNvbXBvbmVudCA9PiBoYXNSZXNvdXJjZShjb21wb25lbnQpXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICAvLyBTZWUgaWYgdGhlIHJvdXRlIGNoYW5nZXMgY29tcGxldGVseSwgYW5kIGNsZWFyIHRoZSBkYXRhIGlmIGl0IGRvZXMuXG4gICAgICBpZiAodGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRhdGEgPSB7fVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICAvLyBMaXN0cyBpbnNpZGUgc2luZ2xlLWNvbXBvbmVudCB2aWV3cyB1c2UgdGhlIHZpZXcncyBwYXRoIGZvciBzdWItcGF0aHM6XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB0aGlzLnBhdGhcbiAgICAgICAgOiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc0RhdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY29weURhdGUoZGF0ZSxcbiAge1xuICAgIHllYXIgPSBkYXRlPy5nZXRGdWxsWWVhcigpID8/IDAsXG4gICAgbW9udGggPSBkYXRlPy5nZXRNb250aCgpID8/IDAsXG4gICAgZGF5ID0gZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gICAgaG91ciA9IGRhdGU/LmdldEhvdXJzKCkgPz8gMCxcbiAgICBtaW51dGUgPSBkYXRlPy5nZXRNaW51dGVzKCkgPz8gMCxcbiAgICBzZWNvbmQgPSBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgICBtaWxsaXNlY29uZCA9IGRhdGU/LmdldE1pbGxpc2Vjb25kcygpID8/IDBcbiAgfSA9IHt9XG4pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREYXRlKGRhdGUpIHtcbiAgcmV0dXJuIGlzRGF0ZShkYXRlKSA/IGRhdGUgOiBkYXRlID8gbmV3IERhdGUoZGF0ZSkgOiBudWxsXG59XG4iLCJcbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jYWxlbmRhclxuICAgIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShkYXRlLmRhdGUsIGRhdGUuc3RhdGUsIHRydWUpXCJcbiAgICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkoXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCksIHsgeWVhcjogMSwgbW9udGg6IDEsIGRheTogMSB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jYWxlbmRhclxuICAgIG1pbi13aWR0aDogMjQwcHhcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG5cbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgei1pbmRleDogMTAwMFxuXG4gIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICBwYWRkaW5nOiAwIDAuNWVtXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNylcbiAgICAgIGhlaWdodDogJGlucHV0LWhlaWdodFxuICAgICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweClcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnRcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXlcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlXG4gICAgICAmLFxuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGNvbG9yOiB3aGl0ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWRcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlXG4gICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheVxuICAgICAgY29sb3I6ICM5OTlcblxuICAuZGl0by1jYWxlbmRhci1tb250aHMsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgc3BhblxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpXG4gICAgICBtYXJnaW46IDAuNWVtIDBcblxuICAuZGl0by1jYWxlbmRhci15ZWFycyBzcGFuXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpXG5cbiAgLmRpdG8tY2FsZW5kYXIgYSxcbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3BhbixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW5cbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgY3Vyc29yOiBwb2ludGVyXG5cbiAgLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW5cbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBhXG4gICAgICBwYWRkaW5nOiAwIDAuMmVtXG5cbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudFxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcblxuICAuZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuXG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXIsXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIEBleHRlbmQgJWlucHV0LWhlaWdodFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIHRleHQtYWxpZ246IGNlbnRlclxuXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGVcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICBmb250LXdlaWdodDogYm9sZFxuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgPiBzcGFuXG4gICAgICBtYXJnaW46IGF1dG9cbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICBhXG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgJjpob3ZlclxuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgd2lkdGg6IDUlXG4gICAgbWluLXdpZHRoOiAyZW1cbiAgICBtYXgtd2lkdGg6IDNlbVxuICAgICY6OmFmdGVyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBmb250LXNpemU6IDEuMjVlbVxuICAuZGl0by1jYWxlbmRhci1zdGVwLXByZXZcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuSdcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8KrJ1xuICAuZGl0by1jYWxlbmRhci1zdGVwLW5leHRcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuidcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8K7J1xuXG4gIC5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheVxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAnTm93J1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIG1vZGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZGF5JyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IHdlZWtkYXlOYW1lcywgbW9udGhOYW1lcyB9ID0gZ2V0TG9jYWxlTmFtZXModGhpcy5sb2NhbGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXMsXG4gICAgICBkYXRlUmFuZ2U6IFtdLFxuICAgICAgeWVhclJhbmdlOiBbXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTpcbiAgICAgICAgdGhpcy52YWx1ZSB8fFxuICAgICAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdXNlIGN1cnJlbnQgZGF0ZSBidXQgY2xlYXIgdGltZSBmaWVsZHM6XG4gICAgICAgIGNvcHlEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGN1cnJlbnRWYWx1ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG4gICAgZGlzYWJsZWREYXRlOiAndXBkYXRlRGF0ZVJhbmdlJyxcblxuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoK25ld1ZhbCAhPT0gK29sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbCB8fCBuZXcgRGF0ZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1vbnRoQ2xhc3MobW9udGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzpcbiAgICAgICAgICB0aGlzLnZhbHVlICYmIG1vbnRoID09PSB0aGlzLnZhbHVlLmdldE1vbnRoKCkgJiZcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6XG4gICAgICAgICAgbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzpcbiAgICAgICAgICB0aGlzLnZhbHVlICYmIHllYXIgPT09IHRoaXMudmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzpcbiAgICAgICAgICB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudFZhbHVlLCBvdmVycmlkZXMpXG4gICAgfSxcblxuICAgIHN0ZXBEZWNhZGUoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiAxMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2V0TW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH0sXG5cbiAgICBzdGVwTW9udGgoc3RlcCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IHRoaXMuZ2V0WWVhck1vbnRoKFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwXG4gICAgICApXG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBtb250aCxcbiAgICAgICAgZGF5OiBNYXRoLm1pbihcbiAgICAgICAgICB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXREYXRlKClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc3RlcFllYXIoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdERhdGUoZGF0ZSwgc3RhdGUsIGNvcHkgPSBmYWxzZSkge1xuICAgICAgaWYgKHN0YXRlICE9PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RNb250aChtb250aCkge1xuICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgLy8gU2V0IGRheSB0byAxIHRvIGF2b2lkIHNlbGVjdGluZyBhIGRhdGUgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZVxuICAgICAgLy8gbmV3IG1vbnRoLCBlLmcuIEZlYiAzMSAtPiBNYXIgMy5cbiAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoLCBkYXk6IDEgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0WWVhcih5ZWFyKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXIgfSlcbiAgICB9LFxuXG4gICAgZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICBpZiAobW9udGggPiAxMSkge1xuICAgICAgICB5ZWFyKytcbiAgICAgICAgbW9udGggPSAwXG4gICAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICB5ZWFyLS1cbiAgICAgICAgbW9udGggPSAxMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGggfVxuICAgIH0sXG5cbiAgICBkYXRlVG9TdHJpbmcoZGF0ZSwgeyB5ZWFyLCBtb250aCwgZGF5IH0pIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IGhvciwgdmVyLCBlbnRlciB9KSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRNb2RlLCBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChob3IgfHwgdmVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgZGF5OiBjdXJyZW50VmFsdWUuZ2V0RGF0ZSgpICsgaG9yICsgdmVyICogN1xuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICBtb250aDogY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBob3IgKyB2ZXIgKiA2XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBob3IgKyB2ZXIgKiA1XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoY3VycmVudFZhbHVlKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVEYXRlUmFuZ2UoKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdXG4gICAgICB0aGlzLnllYXJSYW5nZSA9IFtdXG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB5ZWFyID0gY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIGNvbnN0IG1vbnRoID0gY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICB0aGlzLnllYXJSYW5nZS5wdXNoKHN0YXJ0WWVhciArIGkpXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyTW9udGhGaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgbGV0IGZpcnN0RGF5V2VlayA9IGN1cnJNb250aEZpcnN0RGF5LmdldERheSgpICsgMVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA9PT0gMCkge1xuICAgICAgICBmaXJzdERheVdlZWsgPSA3XG4gICAgICB9XG4gICAgICBjb25zdCBudW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aClcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPiAxKSB7XG4gICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoIC0gMSlcbiAgICAgICAgY29uc3QgcHJldk1vbnRoTnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoXG4gICAgICAgICAgcHJldk1vbnRoLnllYXIsXG4gICAgICAgICAgcHJldk1vbnRoLm1vbnRoXG4gICAgICAgIClcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdERheVdlZWs7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRheSA9IHByZXZNb250aE51bURheXMgLSBmaXJzdERheVdlZWsgKyBpICsgMVxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwcmV2TW9udGgueWVhciwgcHJldk1vbnRoLm1vbnRoLCBkYXkpXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBudW1EYXlzOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKVxuICAgICAgICBjb25zdCBpc0RheSA9IGRhdGUgPT4gZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzRGF5KHRoaXMudmFsdWUpID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KHRvZGF5KSA/ICd0b2RheSdcbiAgICAgICAgICA6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJ1xuICAgICAgICAgIDogaXNEYXkoY3VycmVudFZhbHVlKSA/ICdjdXJyZW50J1xuICAgICAgICAgIDogbnVsbFxuICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE1vbnRoTmVlZCA9IDQyIC0gdGhpcy5kYXRlUmFuZ2UubGVuZ3RoXG4gICAgICBpZiAobmV4dE1vbnRoTmVlZCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggKyAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBuZXh0TW9udGhOZWVkOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobmV4dE1vbnRoLnllYXIsIG5leHRNb250aC5tb250aCwgaSlcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgbG9jYWxlTmFtZXMgPSB7fVxuXG4vLyBDYWxsaW5nIGB0b0xvY2FsZVN0cmluZygpYCB0aGlzIG11Y2ggYXBwZWFycyB0byBiZSBleHBlbnNpdmUsIHNvIGNhY2hlIGl0OlxuZnVuY3Rpb24gZ2V0TG9jYWxlTmFtZXMobG9jYWxlKSB7XG4gIGxldCBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV1cbiAgaWYgKCFuYW1lcykge1xuICAgIGNvbnN0IHdlZWtkYXlOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCAwLCBpKVxuICAgICAgd2Vla2RheU5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBtb250aE5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgaSwgMClcbiAgICAgIG1vbnRoTmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdID0ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lc1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNcbn1cbjwvc2NyaXB0PlxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXQsIGV2ZW50cykge1xuICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCJcbi5kaXRvLXRyaWdnZXItY29udGFpbmVyXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgdHJhbnNpdGlvbig6bmFtZT1cInRyYW5zaXRpb25cIilcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgIClcbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyaWdnZXItY29udGFpbmVyXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICAgIHJlZj1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIC5kaXRvLXRyaWdnZXIoXG4gICAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHJlZj1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICB0cmFuc2l0aW9uKDpuYW1lPVwidHJhbnNpdGlvblwiKVxuICAgICAgLmRpdG8tcG9wdXAoXG4gICAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgICAgKVxuICAgICAgICBzbG90KFxuICAgICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIClcbiAgICAgIC5kaXRvLXBvcHVwKFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcbiAgQGltcG9ydCAnLi4vc3R5bGVzL3RyYW5zaXRpb25zL2luZGV4LnNhc3MnXG5cbiAgLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAuZGl0by10cmlnZ2VyLWRpc2FibGVkXG4gICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICpcbiAgICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZVxuXG4gIC5kaXRvLXBvcHVwXG4gICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgdG9wOiAwXG4gICAgbGVmdDogMFxuICAgIHotaW5kZXg6IDEwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdjbGljaycgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20nIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGN1c3RvbUNsYXNzOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHpJbmRleDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBrZWVwSW5WaWV3OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoaWRlV2hlbkNsaWNrT3V0c2lkZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgYWx3YXlzU2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvdmVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGlkZURlbGF5OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBwb3B1cFBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnRcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmlnZ2VyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by10cmlnZ2VyLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwb3B1cENsYXNzKCkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgW2BkaXRvLXBvcHVwLSR7aHlwaGVuYXRlKHRoaXMucGxhY2VtZW50KX1gXTogdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgY2xhc3Nlc1t0aGlzLmN1c3RvbUNsYXNzXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHBvcHVwU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy56SW5kZXggPyBgei1pbmRleDogJHt0aGlzLnpJbmRleH1gIDogJydcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvdyB8fCB0aGlzLmFsd2F5c1Nob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIG5ld1ZhbClcbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSBhZGRFdmVudHModGFyZ2V0LCB7XG4gICAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlV2hlbkNsaWNrT3V0c2lkZSAmJiAhdGhpcy5hbHdheXNTaG93KSB7XG4gICAgICAvLyBVc2UgJ21vdXNldXAnIGluc3RlYWQgb2YgJ2NsaWNrJywgc2luY2UgY2xpY2sgYXBwZWFycyB0byBoYXBwZW4gYWZ0ZXJcbiAgICAgIC8vIHRoZSBET00gaW5zaWRlIG9mIHBvcHVwcyBjb3VsZCBjaGFuZ2UgaW4gYSB3YXkgc28gdGhhdCB0aGUgY2hlY2tcbiAgICAgIC8vIGBwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpYCB3b3VsZCBmYWlsOlxuICAgICAgdGhpcy5jbG9zZUV2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwICYmXG4gICAgICAgICAgICAhcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRyaWdnZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwID0gdGhpcy5zaG93XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmZvY3VzRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMuY2xvc2VFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBudWxsXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgICAgaWYgKHRoaXMuc2hvdyAmJiBwb3B1cC5vZmZzZXRXaWR0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSwgMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGlzU3RyaW5nKHRoaXMudGFyZ2V0KVxuICAgICAgICA/IHRoaXMuJHJlZnNbdGhpcy50YXJnZXRdXG4gICAgICAgIDogdGhpcy50YXJnZXRcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgLy8gQWN0dWFsbHkgcmVzaXplIHRoZSBwb3B1cCdzIGZpcnN0IGNoaWxkLCBzbyB0aGV5IGNhbiBzZXQgc2l6ZSBsaW1pdHMuXG4gICAgICAgIGNvbnN0IGVsID0gdGFyZ2V0ID09PSBwb3B1cCA/IHRyaWdnZXIgOiBwb3B1cC5maXJzdENoaWxkXG4gICAgICAgIGVsLnN0eWxlLndpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLndpZHRoXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvdW5kcyA9ICh0YXJnZXQgfHwgdHJpZ2dlcikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHRyaWdnZXJMZWZ0ID0gYm91bmRzLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IGJvdW5kcy50b3AgKyB3aW5kb3cuc2Nyb2xsWVxuICAgICAgY29uc3QgdHJpZ2dlcldpZHRoID0gYm91bmRzLndpZHRoXG4gICAgICBjb25zdCB0cmlnZ2VySGVpZ2h0ID0gYm91bmRzLmhlaWdodFxuICAgICAgY29uc3QgcG9wdXBXaWR0aCA9IHBvcHVwLm9mZnNldFdpZHRoXG4gICAgICBjb25zdCBwb3B1cEhlaWdodCA9IHBvcHVwLm9mZnNldEhlaWdodFxuXG4gICAgICBsZXQgW3BhcnQxLCBwYXJ0Ml0gPSB0aGlzLnBvcHVwUGxhY2VtZW50LnNwbGl0KCctJykgfHwgW11cbiAgICAgIGlmICh0aGlzLmtlZXBJblZpZXcpIHtcbiAgICAgICAgY29uc3Qgd2luV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICBjb25zdCB3aW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgLSB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IC0gdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydDIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCArIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbGVmdCA9IDBcbiAgICAgIGxldCB0b3AgPSAwXG4gICAgICBzd2l0Y2ggKHBhcnQxKSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGhcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHBhcnQyKSB7XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aCAtIHRyaWdnZXJXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0IC0gdHJpZ2dlckhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY292ZXIpIHtcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgdG9wIC09IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQgIT09IHRyaWdnZXIpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlckJvdW5kcyA9IHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJCb3VuZHMubGVmdFxuICAgICAgICB0b3AgKz0gdHJpZ2dlclRvcCAtIHRyaWdnZXJCb3VuZHMudG9wXG4gICAgICB9XG4gICAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHBvcHVwLnN0eWxlLnRvcCA9IGAke3RvcH1weGBcblxuICAgICAgdGhpcy4kZW1pdCgndXBkYXRlLXBvc2l0aW9uJywge1xuICAgICAgICB0cmlnZ2VyLFxuICAgICAgICBwb3B1cCxcbiAgICAgICAgcGxhY2VtZW50OiB0aGlzLnBvcHVwUGxhY2VtZW50XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuc2hvd1BvcHVwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1pbnB1dFxuICBpbnB1dChcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWlucHV0XG4gICAgaW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWlucHV0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBpbnB1dFxuICAgICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgICBhbGw6IGluaGVyaXRcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIGJvcmRlcjogMFxuICAgICAgbWFyZ2luOiAwXG4gICAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAndGV4dCcgfSxcbiAgICB2YWx1ZTogeyB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ29mZicgfVxuICAgIC8qXG4gICAgY2xlYXJhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgICBzdWZmaXhJY29uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHByZWZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgICAqL1xuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNpemUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcmVhZG9ubHksXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBhdXRvY29tcGxldGUsXG4gICAgICAgICRhdHRyc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lLFxuICAgICAgICB0eXBlLFxuICAgICAgICBzaXplLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIHJlYWRvbmx5LFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgYXV0b2NvbXBsZXRlLFxuICAgICAgICAuLi4kYXR0cnNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgLy8gUmVtb3ZlICdpbnB1dCcgbGlzdGVuZXIgYmVjYXVzZSB3ZSdyZSBoYW5kbGluZyBpdCBzZXBhcmF0ZWx5IGJlbG93LFxuICAgICAgLy8gYnV0IHBhc3Mgb24gYWxsIG90aGVycyB0byB0aGUgd3JhcHBlZCBuYXRpdmUgZWxlbWVudDpcbiAgICAgIGNvbnN0IHsgaW5wdXQsIC4uLmxpc3RlbmVycyB9ID0gdGhpcy4kbGlzdGVuZXJzXG4gICAgICByZXR1cm4gbGlzdGVuZXJzXG4gICAgfSxcblxuICAgIHNpemUoKSB7XG4gICAgICAvLyBEZXRlcm1pbmUgc2l6ZSBiYXNlZCBvbiBtaW4gJiBtYXggc2V0dGluZ3MsIGlmIHRoZXkncmUgcHJvdmlkZWQuXG4gICAgICBjb25zdCB7IHNpemUsIG1pbiwgbWF4IH0gPSB0aGlzLiRhdHRyc1xuICAgICAgY29uc3QgZ2V0TGVuZ3RoID0gdmFsdWUgPT4gdmFsdWUgIT0gbnVsbCA/IGAke3ZhbHVlfWAubGVuZ3RoIDogMFxuICAgICAgcmV0dXJuIHNpemUgfHwgZ2V0TGVuZ3RoKG1pbikgfHwgZ2V0TGVuZ3RoKG1heCkgfHwgdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwgIT09IG9sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUobmV3VmFsKSB7XG4gICAgICBpZiAobmV3VmFsICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLWRhdGUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICBpbnB1dC1maWVsZC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICByZWFkb25seVxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICApXG4gIC8vIGljb24odHlwZT1cImNhbGVuZGFyXCIgOmNvbG9yPVwiaWNvbkNvbG9yXCIpXG4gIGNhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgQGlucHV0PVwic2VsZWN0RGF0ZVwiXG4gICAgOnZhbHVlPVwiY3VycmVudFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJ7IGxvY2FsZSwgZGlzYWJsZWREYXRlIH1cIlxuICApXG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbiAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgLy8gaWNvbih0eXBlPVwiY2FsZW5kYXJcIiA6Y29sb3I9XCJpY29uQ29sb3JcIilcbiAgICBjYWxlbmRhci5kaXRvLWRhdGUtcGlja2VyLXBvcHVwKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICAgIEBpbnB1dD1cInNlbGVjdERhdGVcIlxuICAgICAgOnZhbHVlPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1kYXRlLXBpY2tlclxuICAgIG1pbi13aWR0aDogMTBlbVxuICAgIC5kaXRvLWlucHV0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIHdpZHRoOiAxMDAlXG4gIC5kaXRvLWRhdGUtcGlja2VyLXBvcHVwXG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4vQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRhdGVGb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiBkZWZhdWx0Rm9ybWF0cy5kYXRlIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwge1xuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICBkYXRlOiB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgIHRpbWU6IGZhbHNlXG4gICAgICB9KSB8fCAnJ1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoK25ld1ZhbCAhPT0gK29sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoZGF0ZSkge1xuICAgICAgaWYgKCtkYXRlICE9PSArdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgZGF0ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZChuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdChuZXdWYWwgPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuJG9uKCdibHVyJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hhbmdlZCkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZWxlY3REYXRlKGRhdGUpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLiRyZWZzLmNhbGVuZGFyPy5uYXZpZ2F0ZShnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbikge1xuICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGFyZ3VtZW50c1swXSwgMTApXG4gIH1cbiAgaWYgKGR1cmF0aW9uIDw9IDApIHtcbiAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHRvXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRvIC0gZWxlbWVudC5zY3JvbGxUb3BcbiAgICBjb25zdCBwZXJUaWNrID0gZGlmZmVyZW5jZSAvIGR1cmF0aW9uICogMTBcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbFRvcCArIHBlclRpY2tcbiAgICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCA9PT0gdG8pIHJldHVyblxuICAgICAgc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uIC0gMTApXG4gICAgfSlcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNldFNlbGVjdGlvbihmaWVsZCwgc3RhcnQsIGVuZCkge1xuICBpZiAoZmllbGQuY3JlYXRlVGV4dFJhbmdlKSB7XG4gICAgY29uc3QgcmFuZ2UgPSBmaWVsZC5jcmVhdGVUZXh0UmFuZ2UoKVxuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydClcbiAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQpXG4gICAgcmFuZ2Uuc2VsZWN0KClcbiAgICBmaWVsZC5mb2N1cygpXG4gIH0gZWxzZSBpZiAoZmllbGQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICBmaWVsZC5mb2N1cygpXG4gICAgZmllbGQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfSBlbHNlIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGZpZWxkKSB7XG4gICAgZmllbGQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydFxuICAgIGZpZWxkLnNlbGVjdGlvbkVuZCA9IGVuZFxuICAgIGZpZWxkLmZvY3VzKClcbiAgfVxufVxuIiwiXG50cmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIGlucHV0LWZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgIHJlYWRvbmx5XG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gIClcbiAgLy8gaWNvbih0eXBlPVwidGltZVwiXG4gIC8vICAgOmNvbG9yPVwiZGlzYWJsZWQgPyAnI2JmYmZiZicgOiAodGV4dCA/ICcjNjY2JyA6ICcjYmZiZmJmJylcIlxuICAvLyApXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwKFxuICAgIHNsb3Q9XCJwb3B1cFwiXG4gIClcbiAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1ob3VyKFxuICAgICAgICByZWY9XCJob3VyXCJcbiAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgKVxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkSG91cihpbmRleCAtIDEpXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBob3VyID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKFxuICAgICAgICByZWY9XCJtaW51dGVcIlxuICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMVwiXG4gICAgICApXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQoXG4gICAgICAgIHJlZj1cInNlY29uZFwiXG4gICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAyXCJcbiAgICAgIClcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4gIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLXRpbWUtcGlja2VyLWlucHV0KFxuICAgICAgc2xvdD1cInRyaWdnZXJcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgICAgcmVhZG9ubHlcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gICAgKVxuICAgIC8vIGljb24odHlwZT1cInRpbWVcIlxuICAgIC8vICAgOmNvbG9yPVwiZGlzYWJsZWQgPyAnI2JmYmZiZicgOiAodGV4dCA/ICcjNjY2JyA6ICcjYmZiZmJmJylcIlxuICAgIC8vIClcbiAgICAuZGl0by10aW1lLXBpY2tlci1wb3B1cChcbiAgICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgKVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1ob3VyKFxuICAgICAgICAgIHJlZj1cImhvdXJcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAwXCJcbiAgICAgICAgKVxuICAgICAgICAgIGxpKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiAyNFwiXG4gICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkSG91cihpbmRleCAtIDEpXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cImhvdXIgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLW1pbnV0ZShcbiAgICAgICAgICByZWY9XCJtaW51dGVcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAxXCJcbiAgICAgICAgKVxuICAgICAgICAgIGxpKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgICByZWY9XCJzZWNvbmRcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAyXCJcbiAgICAgICAgKVxuICAgICAgICAgIGxpKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIHdpZHRoOiAxMDAlXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICBtYXgtd2lkdGg6IDE2MHB4XG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG5cbiAgJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4XG4gIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC5kaXRvLWljb24tdGltZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgdG9wOiAwXG4gICAgICAgIHJpZ2h0OiA3cHhcbiAgICAgICAgaGVpZ2h0OiAxMDAlXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICBsaXN0LXN0eWxlOiBub25lXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvd1xuICAgIG92ZXJmbG93OiBoaWRkZW5cblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cCAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgIGZsb2F0OiBsZWZ0XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXdpZHRoOiAwIDFweCAwXG4gICAgbWFyZ2luLWxlZnQ6IC0xcHhcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpXG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuICAgICY6bGFzdC1jaGlsZFxuICAgICAgYm9yZGVyLXJpZ2h0OiAwXG4gICAgdWxcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlblxuICAgICAgb3ZlcmZsb3cteTogYXV0b1xuICAgICAgbGlzdC1zdHlsZTogbm9uZVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIG1hcmdpbjogMFxuICAgICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveFxuICAgICAgcGFkZGluZzogMCAxN3B4IDAgMFxuICAgICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAmID4gbGlcbiAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3hcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlblxuICAgICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICAmOmhvdmVyXG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgICAmLnNlbGVjdGVkLFxuICAgICAgICAmLnNlbGVjdGVkOmhvdmVyXG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgICAmLmRpc2FibGVkXG4gICAgICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuICAgICAgICAmLmRpc2FibGVkOmhvdmVyXG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IHNjcm9sbFRvIH0gZnJvbSAnLi4vdXRpbHMvc2Nyb2xsLmpzJ1xuaW1wb3J0IHsgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHNlbGVjdGlvbjogMCxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZVxuICAgICAgICA/IGAke1xuICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLmhvdXIpfToke1xuICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLm1pbnV0ZSl9OiR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMuc2Vjb25kKX1gXG4gICAgICAgIDogJydcbiAgICB9LFxuXG4gICAgY3VycmVudERhdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSB8fFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgRGF0ZSgpIG9iamVjdCB3aXRoIHRoZSB0aW1lIHNldCB0byAwLCB0byBiZSB1c2VkIHdoZW5cbiAgICAgICAgLy8gZmlyc3Qgc2V0dGluZyBhbnkgb2YgdGhlIHRpbWVzLCBmb3IgbWVhbmluZ2Z1bCBkYXRlcyBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBvYmplY3QgaXMgc2hhcmVkIHdpdGggYSBEYXRlUGlja2VyLCBlLmcuIHRocm91Z2ggRGF0ZVRpbWVQaWNrZXIuXG4gICAgICAgIGNvcHlEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIGhvdXI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KGhvdXIpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgaG91ciB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtaW51dGU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQobWludXRlKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IG1pbnV0ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWNvbmQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2Vjb25kKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IHNlY29uZCB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoK25ld1ZhbCAhPT0gK29sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoZGF0ZSkge1xuICAgICAgaWYgKCtkYXRlICE9PSArdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgZGF0ZSlcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzZWxlY3Rpb246ICd1cGRhdGVTZWxlY3Rpb24nLFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKClcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoMClcbiAgICAgIH1cbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxlZnRQYWQodmFsdWUpIHtcbiAgICAgIHJldHVybiAoJzAnICsgdmFsdWUpLnNsaWNlKC0yKVxuICAgIH0sXG5cbiAgICBzZXRUaW1lKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBjb3B5RGF0ZSh0aGlzLmN1cnJlbnREYXRlLCB7XG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6IDBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZVNlbGVjdGlvbihmb3JjZSA9IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5zaG93UG9wdXAgfHwgZm9yY2UpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSAzICogdGhpcy5zZWxlY3Rpb25cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuJHJlZnMuaW5wdXQsIHN0YXJ0LCBzdGFydCArIDIpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY3JvbGxBbGwoZHVyYXRpb24gPSAxMDApIHtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IChyZWYsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJHJlZnNbcmVmXVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgLy8gRmlyc3QgYW5kIGxhc3Qgb25lIGFkZCAzIHRpbWVzIHRoZSBtYXJnaW5cbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gdGFyZ2V0LnNjcm9sbEhlaWdodCAvICh0YXJnZXQuY2hpbGRyZW4ubGVuZ3RoICsgNilcbiAgICAgICAgICBzY3JvbGxUbyh0YXJnZXQsIE1hdGgucm91bmQodmFsdWUgKiBsaW5lSGVpZ2h0KSwgZHVyYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsKCdob3VyJywgdGhpcy5ob3VyKVxuICAgICAgICBzY3JvbGwoJ21pbnV0ZScsIHRoaXMubWludXRlKVxuICAgICAgICBzY3JvbGwoJ3NlY29uZCcsIHRoaXMuc2Vjb25kKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IFsnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJ11bdGhpcy5zZWxlY3Rpb25dXG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgeyBob3IsIHZlciwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICAgIGlmIChob3IpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0aW9uICsgaG9yXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPVxuICAgICAgICAgICAgdmFsdWUgPCAwID8gMlxuICAgICAgICAgICAgOiB2YWx1ZSA+IDIgPyAwXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH0gZWxzZSBpZiAodmVyKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW3NlbGVjdGVkXSArIHZlclxuICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSB0aGlzLiRyZWZzW3NlbGVjdGVkXS5jaGlsZHJlblxuICAgICAgICAgIHRoaXNbc2VsZWN0ZWRdID1cbiAgICAgICAgICAgIHZhbHVlIDwgMCA/IHZhbHVlICsgbGVuZ3RoXG4gICAgICAgICAgICA6IHZhbHVlID49IGxlbmd0aCA/IHZhbHVlIC0gbGVuZ3RoXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChob3IgfHwgdmVyIHx8IGVudGVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odHJ1ZSlcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlcihcbiAgcmVmPVwicGlja2VyXCJcbilcbiAgLmRpdG8tcGlja2VycyhcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgKVxuICAgIGRhdGUtcGlja2VyKFxuICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgOnNob3cuc3luYz1cInNob3dEYXRlXCJcbiAgICAgIEBmb2N1cz1cImRhdGVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImRhdGVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZWhvbGRlciwgbG9jYWxlLCBkYXRlRm9ybWF0LCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgdGltZS1waWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgOnNob3cuc3luYz1cInNob3dUaW1lXCJcbiAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cInRpbWVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1kYXRlLXRpbWUtcGlja2VyKFxuICAgIHJlZj1cInBpY2tlclwiXG4gIClcbiAgICAuZGl0by1waWNrZXJzKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgKVxuICAgICAgZGF0ZS1waWNrZXIoXG4gICAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgICAgOnNob3cuc3luYz1cInNob3dEYXRlXCJcbiAgICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgICAgQGJsdXI9XCJkYXRlRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZWhvbGRlciwgbG9jYWxlLCBkYXRlRm9ybWF0LCBkaXNhYmxlZCB9XCJcbiAgICAgIClcbiAgICAgIHRpbWUtcGlja2VyKFxuICAgICAgICByZWY9XCJ0aW1lXCJcbiAgICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICAgIDpzaG93LnN5bmM9XCJzaG93VGltZVwiXG4gICAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICAgIEBibHVyPVwidGltZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgZGlzYWJsZWQgfVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXJcbiAgICAuZGl0by1waWNrZXJzXG4gICAgICBAZXh0ZW5kICVpbnB1dFxuICAgICAgcGFkZGluZzogMFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgLmRpdG8taW5wdXRcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgICBib3JkZXI6IDBcbiAgICAuZGl0by1kYXRlLXBpY2tlclxuICAgICAgd2lkdGg6IDYwJVxuICAgICAgbWluLXdpZHRoOiA2LjllbVxuICAgICAgLmRpdG8taW5wdXRcbiAgICAgICAgcGFkZGluZy1yaWdodDogMFxuICAgIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgICB3aWR0aDogNDAlXG4gICAgICBtaW4td2lkdGg6IDUuNGVtXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDBcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGVGb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiBkZWZhdWx0Rm9ybWF0cy5kYXRlIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93RGF0ZTogZmFsc2UsXG4gICAgICBzaG93VGltZTogZmFsc2UsXG4gICAgICBkYXRlRm9jdXNlZDogZmFsc2UsXG4gICAgICB0aW1lRm9jdXNlZDogZmFsc2UsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlRm9jdXNlZCB8fCB0aGlzLnRpbWVGb2N1c2VkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuZGF0ZS5ibHVyKClcbiAgICAgIHRoaXMuJHJlZnMudGltZS5ibHVyKClcbiAgICB9XG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCJcbmkuZGl0by1pY29uKDpjbGFzcz1cImBkaXRvLWljb24tJHtuYW1lfWBcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGkuZGl0by1pY29uKDpjbGFzcz1cImBkaXRvLWljb24tJHtuYW1lfWBcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLy8gYHlhcm4gYnVpbGQ6aWNvbnNgIGNvbnZlcnRzIHRoZSBpY29uIFNWRyBmaWxlcyB0byBzaWxlbnQgY2xhc3NlcyBpbnNpZGVcbiAgLy8gYHNyYy9zdHlsZXMvbWl4aW5zL19pY29ucy5zYXNzYCwgbWFraW5nIHRoZW0gYXZhaWxhYmxlIHRvIGFsbCBvdGhlciBzYXNzXG4gIC8vIGNvZGUgdGhyb3VnaCBgX2ltcG9ydHNgLlxuICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGFzIG5vcm1hbCBDU1MgY2xhc3NlcywgY29udmVydCB0aGVtIGhlcmU6XG4gIEBlYWNoICRuYW1lIGluICRpY29uc1xuICAgIC5kaXRvLWljb24tI3skbmFtZX1cbiAgICAgIEBleHRlbmQgJWljb24tI3skbmFtZX1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYWdpbmF0aW9uXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgdi1pZj1cInNob3dUb3RhbFwiXG4gIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwidG90YWwgPiAwXCIpIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19XG4gICAgdGVtcGxhdGUodi1lbHNlKSAwXG4gICAgfCAgLyB7eyB0b3RhbCB9fVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhZ2luYXRpb25cbiAgICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgICAgdi1pZj1cInNob3dUb3RhbFwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUodi1pZj1cInRvdGFsID4gMFwiKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgICAgdGVtcGxhdGUodi1lbHNlKSAwXG4gICAgICB8ICAvIHt7IHRvdGFsIH19XG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICAgIEBjbGljaz1cIm9uQ2xpY2tQYWdlKHBhZ2UpXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgICApXG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICAgICkge3sgcGFnZS50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhZ2luYXRpb25cbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbFxuICAgICAgK2VsbGlwc2lzXG4gICAgICBtYXJnaW46IDAgMC41ZW1cbiAgICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICB0cmFuc2l0aW9uOiBhbGwgLjNzIGVhc2UsIGNvbG9yIDBzLCBiYWNrZ3JvdW5kIDBzLCBib3JkZXIgMHNcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICAgICYtcHJldixcbiAgICAgICYtbmV4dFxuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93XG4gICAgICAmLXByZXY6OmJlZm9yZVxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSlcbiAgICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAgICYtZWxsaXBzaXMtbmV4dFxuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzXG4gICAgICAgICY6aG92ZXI6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnNcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICAgICY6Zm9jdXNcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICAmOmFjdGl2ZVxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmVcbiAgICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVJhbmdlOiBbXSxcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBudW1QYWdlczogMCxcbiAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5jdXJyZW50UGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMuY3VycmVudFBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0b3RhbDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd1ByZXY6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dOZXh0OiAndXBkYXRlUGFnZVJhbmdlJyxcblxuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUocGFnZVNpemUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gcGFnZVNpemVcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2VTaXplKGN1cnJlbnRQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgICB0aGlzLiRlbWl0KCdzaXplLWNoYW5nZScsIHRoaXMucGFnZSwgY3VycmVudFBhZ2VTaXplKVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnBhZ2UnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrUGFnZShwYWdlKSB7XG4gICAgICBpZiAocGFnZS5pbmRleCAmJiAhcGFnZS5kaXNhYmxlZCAmJiBwYWdlLmluZGV4ICE9PSB0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlLmluZGV4XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFBhZ2VDbGFzcyhwYWdlKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICAnZGl0by1zZWxlY3RlZCc6IHBhZ2UuYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAocGFnZS50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7cGFnZS50eXBlfWBdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgdXBkYXRlUGFnZVJhbmdlKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIHRvdGFsLCBjdXJyZW50UGFnZVNpemUsIGN1cnJlbnRQYWdlIH0gPSB0aGlzXG4gICAgICBjb25zdCBzaG93TGVuZ3RoID0gc2hvd1ByZXYgKyBzaG93TmV4dCArIDFcbiAgICAgIGNvbnN0IG51bVBhZ2VzID0gdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0b3RhbCAvIGN1cnJlbnRQYWdlU2l6ZSlcblxuICAgICAgbGV0IHN0YXJ0ID0gMVxuICAgICAgbGV0IGVuZCA9IDFcbiAgICAgIGlmIChudW1QYWdlcyA8PSBzaG93TGVuZ3RoKSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlIDw9IHNob3dQcmV2ICsgMSkge1xuICAgICAgICBlbmQgPSBzaG93TGVuZ3RoXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IG51bVBhZ2VzIC0gc2hvd05leHQpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgICAgc3RhcnQgPSBudW1QYWdlcyAtIHNob3dMZW5ndGggKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydCA9IGN1cnJlbnRQYWdlIC0gc2hvd1ByZXZcbiAgICAgICAgZW5kID0gY3VycmVudFBhZ2UgKyBzaG93TmV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlUmFuZ2UgPSBbXVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goeyBpbmRleDogMSwgdGV4dDogMSB9KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ID4gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1pbihudW1QYWdlcywgY3VycmVudFBhZ2UgKyAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLW5leHQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDw9IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMucGFnZVJhbmdlID0gcGFnZVJhbmdlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgIHNwYW4uZGl0by1zd2l0Y2gtbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgIG5hbWU9XCJjaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLmNoZWNrZWQgfHwgJ29uJyB9fVxuICAgICAgc2xvdChcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIG5hbWU9XCJ1bmNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zd2l0Y2goXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgICBpbnB1dChcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICAgIG5hbWU9XCJjaGVja2VkXCJcbiAgICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zd2l0Y2hcbiAgICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgICAvLyB3aXRoIGBjYWxjKClgIHRvIGVuZCB1cCB3aXRoIGV2ZW4gcGl4ZWwgc2l6ZXMuIGByZW1gIGlzIG5lZWRlZCBiZWNhdXNlIHdlXG4gICAgLy8gY2hhbmdlIGBmb250LXNpemVgIGluc2lkZSBgLmRpdG8tc3dpdGNoLWJ1dHRvbmBcbiAgICAtLXN3aXRjaC13aWR0aDogNHJlbVxuICAgIC0tc3dpdGNoLWhlaWdodDogMnJlbVxuICAgIC0tc3dpdGNoLW1hcmdpbjogMnB4XG4gICAgLS1zd2l0Y2gtcGFkZGluZzogM3B4XG4gICAgLS1zd2l0Y2gtc3BlZWQ6IDMwMG1zXG4gICAgLS1sYWJlbC1tYXJnaW46IDAuNWVtXG5cbiAgICAtLXdpZHRoOiBjYWxjKHZhcigtLXN3aXRjaC13aWR0aCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpXG4gICAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpXG4gICAgLS1vZmZzZXQ6IGNhbGModmFyKC0td2lkdGgpIC0gdmFyKC0taGVpZ2h0KSlcblxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIGhlaWdodDogdmFyKC0tc3dpdGNoLWhlaWdodClcbiAgICAvLyBUbyBtYWtlIGlubGluZSBsYWJlbHMgYXBwZWFyIG9uIGNvbnNpc3RlbnQgYmFzZWxpbmU6XG4gICAgdmVydGljYWwtYWxpZ246IC0yNSVcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICB3aWR0aDogdmFyKC0td2lkdGgpXG4gICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodClcbiAgICAuZGl0by1zd2l0Y2gtcGFuZSxcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIHRvcDogNTAlXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSlcbiAgICBpbnB1dFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICBhcHBlYXJhbmNlOiBub25lXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgaGVpZ2h0OiAxMDAlXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodFxuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIC4zcywgYmFja2dyb3VuZC1jb2xvciAuM3NcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIC8vIFNldCBmb250LXNpemUgdG8gaGVpZ2h0LCBzbyB3ZSBjYW4gdXNlIHdpZHRoL2hlaWdodCA9IDFlbSBmb3IgY2lyY2xlOlxuICAgICAgZm9udC1zaXplOiBjYWxjKHZhcigtLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLXBhZGRpbmcpKVxuICAgICAgdG9wOiB2YXIoLS1zd2l0Y2gtcGFkZGluZylcbiAgICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKVxuICAgICAgd2lkdGg6IDFlbVxuICAgICAgaGVpZ2h0OiAxZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6IDAuNWVtXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1zd2l0Y2gtc3BlZWQpXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbilcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2VcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAmLmRpdG8tY2hlY2tlZFxuICAgICAgaW5wdXRcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSlcbiAgICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pXG4gICAgICAgIHJpZ2h0OiB1bnNldFxuICAgICYuZGl0by1kaXNhYmxlZFxuICAgICAgQGV4dGVuZCAlYnV0dG9uLWRpc2FibGVkXG4gICAgJjpmb2N1cy13aXRoaW46bm90KDpob3ZlcilcbiAgICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1c1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLnZhbHVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xhc3NlcygpIHtcbiAgICAgIGNvbnN0IHsgY2hlY2tlZCwgZGlzYWJsZWQgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNoZWNrZWQnOiBjaGVja2VkLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IGNoZWNrZWQsIHVuY2hlY2tlZCB9ID0ge30gfSA9IHRoaXNcbiAgICAgIC8vIENhbGN1bGF0ZSBgLS1zd2l0Y2gtd2lkdGhgIGluIGByZW1gLCBiYXNlZCBvbiBsYWJlbCBsZW5ndGguXG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCBjaGVja2VkPy5sZW5ndGgsIHVuY2hlY2tlZD8ubGVuZ3RoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc3dpdGNoLXdpZHRoJzogbGVuZ3RoID8gYCR7bGVuZ3RoICogMS41fXJlbWAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGlkLCBuYW1lLCBkaXNhYmxlZCwgJGF0dHJzIH0gPSB0aGlzXG4gICAgICByZXR1cm4geyBpZCwgbmFtZSwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUodmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHZhbHVlXG4gICAgfSxcblxuICAgIGNoZWNrZWQoY2hlY2tlZCkge1xuICAgICAgaWYgKGNoZWNrZWQgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBjaGVja2VkKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjaGVja2VkKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAkZHVyYXRpb246IDAuMTVzXG4gIC5oZWlnaHQtZW50ZXItYWN0aXZlLFxuICAuaGVpZ2h0LWxlYXZlLWFjdGl2ZVxuICAgIHRyYW5zaXRpb246IGhlaWdodCAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgLmhlaWdodC1lbnRlci1hY3RpdmVcbiAgICBhbmltYXRpb246IHNsaWRlLWVudGVyICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gIC5oZWlnaHQtbGVhdmUtYWN0aXZlXG4gICAgYW5pbWF0aW9uOiBzbGlkZS1sZWF2ZSAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAuaGVpZ2h0LWVudGVyLFxuICAuaGVpZ2h0LWxlYXZlLXRvXG4gICAgaGVpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuXG4gIHByb3BzOiB7XG4gICAgZW5hYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICByZW5kZXI6IChjcmVhdGVFbGVtZW50LCBjb250ZXh0KSA9PiBjcmVhdGVFbGVtZW50KFxuICAgICd0cmFuc2l0aW9uJyxcbiAgICBjb250ZXh0LnByb3BzLmVuYWJsZWRcbiAgICAgID8ge1xuICAgICAgICBwcm9wczogeyBuYW1lOiAnaGVpZ2h0JyB9LFxuICAgICAgICBvbjogZXZlbnRzXG4gICAgICB9XG4gICAgICA6IHt9LFxuICAgIGNvbnRleHQuY2hpbGRyZW5cbiAgKVxufVxuXG5jb25zdCBzZXRTdHlsZSA9IChlbGVtZW50LCBzdHlsZSkgPT4gT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSlcblxuLy8gRm9yY2UgcmVwYWludCB0byBtYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyB0cmlnZ2VyZWQgY29ycmVjdGx5LlxuY29uc3QgZm9yY2VSZXBhaW50ID0gZWxlbWVudCA9PiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodFxuXG5jb25zdCBldmVudHMgPSB7XG4gIGFmdGVyRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEEgdGltZW91dCBiZWZvcmUgc2V0dGluZyBzdHlsZSBpcyBvbmx5IHJlYWxseSBuZWVkZWQgYWZ0ZXIgY2FsbHMgdG9cbiAgICAvLyBgZm9yY2VSZXBhaW50KClgLCBidXQgdXNpbmcgb25lIGhlcmUgdG9vIHByZXNlcnZlcyBleGVjdXRpb24gc2VxdWVuY2Ugc29cbiAgICAvLyB0aGF0IHRoZSBjYWxsIGZyb20gYGVudGVyKClgIGNhbiBuZXZlciBvdXRydW4gdGhlIG9uZSBmcm9tIGBhZnRlckVudGVyKClgXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogJ2F1dG8nIH0pKVxuICB9LFxuXG4gIGVudGVyKGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGg6IG51bGwsXG4gICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHk6IG51bGwsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSkpXG4gIH0sXG5cbiAgbGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVtb3ZlIH0gb2YgdGhpcy5kb21IYW5kbGVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gICAgdGhpcy5kb21IYW5kbGVycyA9IFtdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGRvbU9uKGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZEV2ZW50cyhcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaXNPYmplY3QodHlwZSkgPyB0eXBlIDogeyBbdHlwZV06IGhhbmRsZXIgfVxuICAgICAgKVxuICAgICAgdGhpcy5kb21IYW5kbGVycy5wdXNoKHJlc3VsdClcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tcm9vdFxuICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBkaXRvLW1lbnVcbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgZGl0by1oZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgIClcbiAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICApXG4gICAgICAgIHNwYW4gTG9naW5cbiAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcm9vdFxuICAgIG5vdGlmaWNhdGlvbnMuZGl0by1ub3RpZmljYXRpb25zKFxuICAgICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgICBjbGFzc2VzPVwiZGl0by1ub3RpZmljYXRpb25cIlxuICAgIClcbiAgICBkaXRvLW1lbnVcbiAgICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICAgIGRpdG8taGVhZGVyKFxuICAgICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICAgIDppc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuICAgICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgICApXG4gICAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgICApXG4gICAgICAgICAgc3BhbiBMb2dpblxuICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvc3R5bGUnXG5cbiAgLmRpdG8tcm9vdFxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdlXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgICAgLy8gc2hvdWxkIGFwcGVhciBsYXllcmVkIG92ZXIgYC5kaXRvLW1lbnVgLCB3aGlsZSBoYXZpbmcgYG92ZXJsYXk6IGhpZGRlbmBcbiAgICAgIC8vIHNldCBieSBgLmRpdG8tc2Nyb2xsLXBhcmVudGAgdG8gZGVsZWdhdGUgc2Nyb2xsaW5nIHRvIGAuZGl0by1zY3JvbGxgLlxuICAgICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgICAgPiAuZGl0by1mb3JtLFxuICAgICAgPiAuZGl0by12aWV3XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWVudS1oZWlnaHRcbiAgICAgICAgcGFkZGluZy10b3A6ICRtZW51LWhlaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IHByb2Nlc3NWaWV3LCByZXNvbHZlU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXJvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBsb2FkaW5nQ291bnQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0ge1xuICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgIH1bdHlwZV0gfHwgJ05vdGlmaWNhdGlvbidcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0ge1xuICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgIH1bdHlwZV0gfHwgJ2Vycm9yJ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgbG9naW46IHsgdHlwZTogJ3N1Ym1pdCcgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpKVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICB0aGlzLiRyb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gICAgdWwuZGl0by1zY3JvbGxcbiAgICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbWVudVxuICAgIGZsZXg6IGluaXRpYWxcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB1bFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZVxuICAgIGEsXG4gICAgaDFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgaDFcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdFxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLWxpbmtcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgLmRpdG8tbGlua1xuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLW1lbnUnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiIsIjx0ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXG4gIG5hbWU6ICdQdWxzZUxvYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHsgXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgIFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgXHR3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgIFx0bWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgIFx0Ym9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLyoudi1zcGlubmVyXG57XG4gICAgbWFyZ2luOiAxMDBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiovXG5cbkAtd2Via2l0LWtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJcbm5hdi5kaXRvLWhlYWRlclxuICAuZGl0by10cmFpbFxuICAgIHVsXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgc2xvdFxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIHVsXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICAgIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8taGVhZGVyXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGhlaWdodDogM2VtXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmdcbiAgICAgIHVsXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNGVtXG4gICAgICAgICRhbmdsZTogMzNkZWdcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGNvbG9yOiAjOTk5XG4gICAgICAgICY6OmJlZm9yZSxcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICAgIHdpZHRoOiAxcHhcbiAgICAgICAgICBoZWlnaHQ6IDEuMmVtXG4gICAgICAgICAgcmlnaHQ6IC0xcHhcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya1xuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICB0b3A6IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3BcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBib3R0b206IDUwJVxuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tXG4gICAgLmRpdG8tc3Bpbm5lclxuICAgICAgbWFyZ2luLXRvcDogJG1lbnUtcGFkZGluZy12ZXJcbiAgICAuZGl0by1kaXJ0eVxuICAgICAgJjphZnRlclxuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIHdpZHRoOiA4cHhcbiAgICAgICAgaGVpZ2h0OiA4cHhcbiAgICAgICAgbWFyZ2luOiAycHhcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDAuNWVtXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCVcbiAgICAuZGl0by1hY2NvdW50LFxuICAgIC5kaXRvLWxvZ2luXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogMFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tYWNjb3VudFxuICAgICAgbGVmdDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nICogMlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsc2VMb2FkZXIgZnJvbSAndnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSdcblxuY29uc3QgU3Bpbm5lciA9IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdzcGlubmVyJywgUHVsc2VMb2FkZXIpXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1oZWFkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgU3Bpbm5lciB9LFxuXG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNpemUgPSAnOHB4JyxcbiAgICAgIGNvbG9yID0gJyM5OTknXG4gICAgfSA9IHRoaXMuc3Bpbm5lciB8fCB7fVxuICAgIGNvbnN0IHsgcHJvcHMgfSA9IFNwaW5uZXIub3B0aW9uc1xuICAgIHByb3BzLnNpemUuZGVmYXVsdCA9IHNpemVcbiAgICBwcm9wcy5jb2xvci5kZWZhdWx0ID0gY29sb3JcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERvbU1peGluIGZyb20gJy4vRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwdWxsZG93bjoge1xuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgc3RhcnRUaW1lOiAwLFxuICAgICAgICBjaGVja1RpbWU6IHRydWUsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIG1vdXNlZG93bjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG1vdXNldXA6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uUHVsbGRvd25Nb3VzZVVwKG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSkge1xuICAgICAgY29uc3QgeyBzdGFydFRpbWUgfSA9IHRoaXMucHVsbGRvd25cbiAgICAgIGlmICghdGhpcy5jaGVja1RpbWUgfHwgc3RhcnRUaW1lICYmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gMjUwKSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5vblB1bGxkb3duU2VsZWN0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QoLyogdmFsdWUgKi8pIHtcbiAgICAgIC8vIE5PVEU6IFRvIGJlIG92ZXJyaWRkZW4uXG4gICAgfSxcblxuICAgIHNldFB1bGxkb3duT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLnB1bGxkb3duLm9wZW4gPSBvcGVuXG4gICAgICB0aGlzLnB1bGxkb3duLnN0YXJ0VGltZSA9IG9wZW4gPyBEYXRlLm5vdygpIDogMFxuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHRoaXMucHVsbGRvd24uZXZlbnRzKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gIClcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYWNjb3VudFxuICAgIGEoXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgIClcbiAgICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICAgIClcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWFjY291bnRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1hY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBmb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAudi0tbW9kYWwtb3ZlcmxheVxuICAgIHotaW5kZXg6IDIwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2luZG93RXZlbnRzOiBudWxsLFxuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm5hbWVcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5oYXNDYW5jZWwgJiYgZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoaWRlKCkge1xuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgcmVqZWN0KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVqZWN0KHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbnRlbnRcIlxuICAgIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKSB7eyBvcHRpb25zLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSA/IGNvbnRlbnQgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuc3R5bGUsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5zdHlsZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBhc0FycmF5KHZhbHVlKS5yZWR1Y2UoKG9iamVjdCwgZW50cnkpID0+IHtcbiAgICBpZiAoaXNTdHJpbmcoZW50cnkpKSB7XG4gICAgICBvYmplY3RbZW50cnldID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZW50cnkpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKG9iamVjdCwgZW50cnkpXG4gICAgfVxuICAgIHJldHVybiBvYmplY3RcbiAgfSwge30pXG59XG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQuZGl0by1sYWJlbChcbiAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICA6aXM9XCJ0YWdcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbilcbiAgLmRpdG8tY2hldnJvbihcbiAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICApXG4gIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgKVxuICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgICA6aXM9XCJ0YWdcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gIClcbiAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgICApXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgIClcbiAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbGFiZWxcbiAgICAtLWxhYmVsLXBhZGRpbmc6IDBcbiAgICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG4gICAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZy1oYWxmIDBcblxuICAgIGxhYmVsXG4gICAgICBkaXNwbGF5OiBpbmxpbmVcbiAgICAgIGN1cnNvcjogaW5oZXJpdFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcblxuICAgIGxhYmVsLFxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICY6bnRoLWxhc3QtY2hpbGQoMilcbiAgICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAgIC8vIHNvIHRoYXQgYnV0dG9ucyBhbHdheXMgYXBwZWFyIHJpZ2h0LWFsaWduZWQ6XG4gICAgICAgIGZsZXg6IDEgMSBhdXRvXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb250ZW50OiAnXFxhMCcgLy8gJm5icHM7XG5cbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICtlbGxpcHNpc1xuXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpXG4gICAgICBtYXJnaW4tbGVmdDogMFxuICAgICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcblxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci5cbiAgICAgIGxhYmVsXG4gICAgICAgICtlbGxpcHNpc1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuXG4gIGEuZGl0by1sYWJlbFxuICAgICY6aG92ZXJcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXJcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmVcblxuICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0IGxheW91dHNcbiAgLy8gd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgLmRpdG8tc2NoZW1hLWNvbXBhY3RcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICA+IC5kaXRvLXBhbmVcbiAgICAgICAgPiAuZGl0by1jb250YWluZXJcbiAgICAgICAgICA+IC5kaXRvLWxhYmVsOm5vdCguZGl0by1sYWJlbC1jb21wb25lbnQpXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbGFiZWwnLCB7XG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoaXMuY29sbGFwc2libGUgJiYge1xuICAgICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQnLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsIGdldEl0ZW1JZCwgZ2V0SXRlbVVpZCwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICA/IGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgICh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgdGV4dCB8fD0gJydcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZSBpbmRleC5cbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgaWYgKGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGV4dCA9IGAke2luZGV4ICsgMX1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1zY2hlbWFcbiAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICApXG4gICAgICBkaXRvLWxhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICApXG4gICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgZGl0by10YWJzKFxuICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgIClcbiAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgcmVmPVwidGFic1wiXG4gICAgICA6a2V5PVwidGFiXCJcbiAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICA6dGFiPVwidGFiXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgIHNsb3QoXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgIClcbiAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgZGl0by1wYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgICApXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgICAgZGl0by10YWJzKFxuICAgICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgKVxuICAgICAgICBkaXRvLWNsaXBib2FyZChcbiAgICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICAgIHRyYW5zaXRpb24taGVpZ2h0KFxuICAgICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgICAgKVxuICAgICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICApXG4gICAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiKVxuICAgICAgZGl0by1wYW5lbHMoXG4gICAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2NoZW1hXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIGRpc3BsYXkgc2NoZW1hIG5leHQgdG8gcGFuZWxzOlxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBtaW4taGVpZ2h0OiAxMDAlXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgZmxleDogMSAxIDEwMCVcbiAgICAgIC8vIFNvIHRoYXQgc2NoZW1hIGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgICAgZGlzcGxheTogZ3JpZFxuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudFxuICAgICAgPiAqOm9ubHktY2hpbGRcbiAgICAgICAgZ3JpZC1yb3ctZW5kOiBub25lXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nXG4gICAgPiAuZGl0by1idXR0b25zLFxuICAgID4gLmRpdG8tcGFuZWxzXG4gICAgICBmbGV4OiAxIDEgMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nIDBcbiAgICAvLyBEaXNwbGF5IGEgcnVsZXIgYmV0d2VlbiB0YWJiZWQgY29tcG9uZW50cyBhbmQgdG93YXJkcyB0aGUgLmRpdG8tYnV0dG9uc1xuICAgIC5kaXRvLXBhbmUtdGFiICsgLmRpdG8tcGFuZS1tYWluXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgLy8gVXNlIGEgcHNldWRvIGVsZW1lbnQgdG8gZGlzcGxheSBhIHJ1bGVyIHdpdGggcHJvcGVyIG1hcmdpbnNcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgY29udGVudDogJydcbiAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZVxuICAgICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluIHRvIHRoZSBydWxlclxuICAgICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZlxuICAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgZGlzcGxheTogZmxleFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgIC5kaXRvLXRhYnMsXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZFxuICAgIC5kaXRvLWNsaXBib2FyZFxuICAgICAgJjpvbmx5LWNoaWxkXG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgICAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW5cbiAgICAmLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyXG4gICAgICAvLyBCcmluZyB0aGUgdGFicyB1cCB0byB0aGUgbWVudS5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgaGVpZ2h0OiAkbWVudS1oZWlnaHRcbiAgICAgIHBhZGRpbmc6IDAgJG1lbnUtcGFkZGluZy1ob3JcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHRvcDogMFxuICAgICAgbGVmdDogMFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIHotaW5kZXg6ICRtZW51LXotaW5kZXhcbiAgICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG4gICAgICAvLyAuLi5idXQgYWxsb3cgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGFicyBhbmQgYnV0dG9ucyAoZS5nLiBjbGlwYm9hcmQpXG4gICAgICAvLyBsYXllcmVkIG9uIHRvcCBvZiBEaXRvVHJhaWwuXG4gICAgICAuZGl0by10YWJzLFxuICAgICAgLmRpdG8tYnV0dG9uc1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0b1xuICAgICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBidXR0b24uZGl0by1sYWJlbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIENhdGNoIGFsbCBjbGlja3MsIGV2ZW4gd2hlbiBpdCB3b3VsZCBiZSBwYXJ0aWFsbHkgY292ZXJlZCBieSBzY2hlbWEuXG4gICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUmVnRXhwLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsIGdldFBhbmVsU2NoZW1hcywgc2V0RGVmYXVsdHMsIHByb2Nlc3NEYXRhXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjaGVtYScsIHtcbiAgY29tcG9uZW50czogeyBUcmFuc2l0aW9uSGVpZ2h0IH0sXG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBpbmplY3Q6IFtcbiAgICAnJHNjaGVtYVBhcmVudENvbXBvbmVudCdcbiAgXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgaW5saW5lZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGFzT3duRGF0YTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG1lbnVIZWFkZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIHJldHVybiB7XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gcHJvdmlkZSBtb3JlIGRhdGEgdGhyb3VnaCBgc2NoZW1hLmRhdGFgLCB2dWUtc3R5bGU6XG4gICAgICAuLi4oXG4gICAgICAgIGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjb21wb25lbnRzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZXNSZWdpc3RyeToge30sXG4gICAgICBwYW5lbHNSZWdpc3RyeToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyBzY2hlbWFDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIERvbid0IHJldHVybiB0aGUgYWN0dWFsIHBhcmVudCBzY2hlbWEgaXMgdGhpcyBzY2hlbWEgaGFuZGxlcyBpdHMgb3duXG4gICAgICAvLyBkYXRhLiBUaGlzIHByZXZlbnRzIGRlbGVnYXRpbmcgZXZlbnRzIHRvIHRoZSBwYXJlbnQsIGFuZCByZWdpc3RlcmluZ1xuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBwYXJlbnQgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBzZXQgaXNEaXJ0eSBmbGFncy5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyBudWxsIDogdGhpcy4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICBjb25zdCBwYW5lbHMgPSBnZXRQYW5lbFNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxzLCAnJylcbiAgICAgIGZvciAoY29uc3QgcGFuZSBvZiB0aGlzLnBhbmVzKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKC4uLnBhbmUucGFuZWxTY2hlbWFzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhbmVsc1xuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWIgPSB0aGlzLiRyb3V0ZS5oYXNoPy5zbGljZSgxKSB8fCBudWxsXG4gICAgICBjb25zdCB0YWIgPSBjdXJyZW50VGFiICYmIHRoaXMuc2hvdWxkUmVuZGVyKHRoaXMudGFic1tjdXJyZW50VGFiXSlcbiAgICAgICAgPyBjdXJyZW50VGFiXG4gICAgICAgIDogdGhpcy5kZWZhdWx0VGFiPy5uYW1lIHx8IG51bGxcbiAgICAgIGlmICh0YWIgIT09IGN1cnJlbnRUYWIpIHtcbiAgICAgICAgLy8gQW55IHRhYiBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSByb3V0ZXIgYWxzby5cbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiB0YWIgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWJcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHRoaXMudGFicykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRUYWIgfSA9IHRhYlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICA/IGRlZmF1bHRUYWIuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICA6IGRlZmF1bHRUYWJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSB0YWJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICRzY2hlbWE6IHRoaXMuc2NoZW1hLm5hbWUsXG4gICAgICAgIC4uLnRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgdGhpcy5jb250ZXh0KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmxhYmVsIHx8IHRoaXMuY29sbGFwc2libGVcbiAgICB9LFxuXG4gICAgaGFzVGFicygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pbmxpbmVkICYmICEhdGhpcy50YWJzXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZW1pdEV2ZW50KCdkZXN0cm95JylcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoXG4gICAgICAgIHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHNCeU5hbWUoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5TmFtZSh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnQoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIHNvbWVDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5zb21lKGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBldmVyeUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLmV2ZXJ5KGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBvbkV4cGFuZChleHBhbmQpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdleHBhbmQnLCB7XG4gICAgICAgIC8vIFRPRE86IEFjdHVhbGx5IGV4cG9zZSB0aGlzIG9uIERpdG9Db250ZXh0P1xuICAgICAgICBjb250ZXh0OiB7IGV4cGFuZCB9XG4gICAgICB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgZXhwYW5kIHx8IHRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICB0aGlzLm9wZW5lZCA9IGV4cGFuZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzQnlEYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgbGV0IGRhdGFQYXRoc1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gaXNGdW5jdGlvbihtYXRjaClcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBpc1JlZ0V4cChtYXRjaClcbiAgICAgICAgICAgID8gZmllbGQgPT4gbWF0Y2gudGVzdChmaWVsZClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBkYXRhUGF0aHMgPSBjaGVja1xuICAgICAgICAgID8gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpLmZpbHRlcihjaGVjaylcbiAgICAgICAgICA6IGlzQXJyYXkobWF0Y2gpXG4gICAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgICA6IFttYXRjaF1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGRhdGFQYXRocyB8fD0gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmICghY29tcG9uZW50LnZhbGlkYXRlKG5vdGlmeSkpIHtcbiAgICAgICAgICAgIC8vIEZvY3VzIGZpcnN0IGVycm9yIGZpZWxkXG4gICAgICAgICAgICBpZiAobm90aWZ5ICYmIGZpcnN0KSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5mb2N1cygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbChtYXRjaCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGFzeW5jIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgY29uc3QgdW5tYXRjaGVkID0gW11cbiAgICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBlcnJzXSBvZiBPYmplY3QuZW50cmllcyhlcnJvcnMpKSB7XG4gICAgICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgYSBkYXRhLXJvb3QsIHByZWZpeCBpdHMgb3duIGRhdGFQYXRoIHRvIGFsbCBlcnJvcnMsXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkYXRhIHRoYXQgaXQgc2VuZHMgYW5kIHZhbGlkYXRlcyB3aWxsIGJlIHVucHJlZml4ZWQuXG4gICAgICAgIGNvbnN0IGZ1bGxEYXRhUGF0aCA9IHRoaXMuaGFzT3duRGF0YVxuICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgICAgOiBkYXRhUGF0aFxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0aGlzLmRhdGFQYXRoLCB0aGlzLmhhc093bkRhdGEsIGZ1bGxEYXRhUGF0aClcbiAgICAgICAgLy8gQ29udmVydCBmcm9tIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzIG5vdGF0aW9uLCB0byBvdXIgb3duIGZvcm1cbiAgICAgICAgLy8gb2YgcmVsYXRpdmUgSlNPTiBwb2ludGVycyBhcyBkYXRhLXBhdGhzOlxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChmdWxsRGF0YVBhdGgpXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAvLyBDb3VsZG4ndCBmaW5kIGEgY29tcG9uZW50IGluIGFuIGFjdGl2ZSBmb3JtIGZvciB0aGUgZ2l2ZW4gZGF0YVBhdGguXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgY29tcG9uZW50IHNlcnZpbmcgYSBwYXJ0IG9mIHRoZSBkYXRhUGF0aCxcbiAgICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChhd2FpdCBjb21wb25lbnQubmF2aWdhdGVUb0NvbXBvbmVudD8uKFxuICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIG5lc3RlZCBmb3JtIHRvIGRpc3BsYXkgYXQgbGVhc3QgcGFydHMgZm8gdGhlIGVycm9ycy5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzaG93IGFsbCBlcnJvcnMgYXQgb25jZSwgc28gd2UncmUgZG9uZS4gRG9uJ3QgY2FsbFxuICAgICAgICAgICAgICAgIC8vIGBub3RpZnlFcnJvcnMoKWAgeWV0LCBhcyB3ZSBjYW4gb25seSBkaXNwbGF5IGl0IG9uY2VcbiAgICAgICAgICAgICAgICAvLyBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgd2FzIGNhbGxlZCBmcm9tIGBEaXRvRm9ybS5tb3VudGVkKClgXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0aWxsIGhlcmUsIHNvIGtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdoZW4gdGhlIGVycm9yIGNhbid0IGJlIG1hdGNoZWQsIGFkZCBpdCB0byBhIGxpc3Qgb2YgdW5tYXRjaGVkXG4gICAgICAgICAgLy8gZXJyb3JzIHdpdGggZGVjZW50IG1lc3NhZ2UsIHRvIHJlcG9ydCBhdCB0aGUgZW5kLlxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGFiZWxpemUocHJvcGVydHkpXG4gICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gZmllbGRcbiAgICAgICAgICAgICAgPyBgVGhlIGZpZWxkICR7ZmllbGR9YFxuICAgICAgICAgICAgICA6IGBUaGUgJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICAgICB1bm1hdGNoZWQucHVzaChgJHtwcmVmaXh9ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycyh1bm1hdGNoZWQuam9pbignXFxuJykpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG5vdGlmeUVycm9ycyhtZXNzYWdlKSB7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnVmFsaWRhdGlvbiBFcnJvcnMnLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlIHx8ICdQbGVhc2UgY29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgZXJyb3JzLidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc2V0RGF0YSgpIHtcbiAgICAgIC8vIFdlIGNhbid0IHNldCBgdGhpcy5kYXRhID0gLi4uYCBiZWNhdXNlIGl0J3MgYSBwcm9wZXJ0eSwgYnV0IHdlIGNhblxuICAgICAgLy8gc2V0IGFsbCBrbm93biBwcm9wZXJ0aWVzIG9uIGl0IHRvIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnlcbiAgICAgIC8vIGBzZXREZWZhdWx0cygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICB0aGlzLiRzZXQodGhpcy5kYXRhLCBuYW1lLCBkYXRhW25hbWVdKVxuICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLCB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdGhpcy4kc2V0KHJlZ2lzdHJ5LCB1aWQsIGVudHJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZGVsZXRlKHJlZ2lzdHJ5LCB1aWQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGVudHJpZXNCeURhdGFQYXRoW2RhdGFQYXRoXSB8fD0gW11cbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9maWx0ZXJFbnRyaWVzKGVudHJpZXMsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBlbnRyaWVzLmZpbHRlcihtYXRjaCkgOiBlbnRyaWVzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gIDpzY2hlbWE9XCJzY2hlbWFcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuKVxuICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gICAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4gIClcbiAgICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gICAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gICAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNjaGVtYS1pbmxpbmVkXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nXG4gICAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpblxuICAgICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICAgIC8vIEJlY2F1c2UgdGFibGVzIGhhdmUgYSBmdW5ueSB3YXkgb2YgYWxsb3dpbmcgdG9vIG11Y2ggd2lkdGggZ3Jvd3RoOlxuICAgICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgICAgJiArLmRpdG8tcGFuZVxuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgdHJhbnNpdGlvbi1oZWlnaHQgaW4gRGl0b1NjaGVtYTpcbiAgICAgICAgICBtaW4taGVpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEtaW5saW5lZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lKFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICAgIHYtc2hvdz1cInZpc2libGVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBzdG9yZVxuICAgICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICAgIClcbiAgICAgIC5kaXRvLWJyZWFrKFxuICAgICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgICApXG4gICAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgICBtYXJnaW46ICgtJGZvcm0tc3BhY2luZykgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgLy8gQWRkIHJlbW92ZWQgaG9yaXpvbnRhbCBtYXJnaW4gYWdhaW4gdG8gbWF4LXdpZHRoOlxuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAyICogJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lLW1haW5gLFxuICAgIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICAgIGZsZXg6IDAlXG5cbiAgICAmLmRpdG8tcGFuZS1tYWluXG4gICAgICBmbGV4OiAxMDAlXG5cbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyOm5vdCguZGl0by1zY2hlbWEtbWVudS1oZWFkZXIpICsgJlxuICAgICAgLy8gQ2xlYXIgdG9wLW1hcmdpbiBpZiB0aGUgY29tcG9uZW50cyBhcmUgcHJlY2VkZWQgYnkgYSBzY2hlbWEgaGVhZGVyLlxuICAgICAgbWFyZ2luLXRvcDogMFxuXG4gICAgLmRpdG8tY29udGFpbmVyLmRpdG8tb21pdC1wYWRkaW5nID4gJlxuICAgICAgLy8gQ2xlYXIgbWFyZ2lucyBzZXQgYWJvdmUgYWdhaW4gaWYgcGFyZW50IGlzIG9taXR0aW5nIHBhZGRpbmcuXG4gICAgICBtYXJnaW46IDBcbiAgICAgIG1heC13aWR0aDogdW5zZXRcblxuICAgIC5kaXRvLWJyZWFrXG4gICAgICBmbGV4OiAxMDAlXG4gICAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxTY2hlbWFzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmUnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMudGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZpc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWIgPyB0aGlzIDogdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50U2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBjb21wb25lbnRzIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzXG4gICAgICAvLyBhbmQgYWRkcyB0aGUga2V5IGFzIHRoZSBuYW1lIHRvIGVhY2ggY29tcG9uZW50LCB1c2VkIGZvciBsYWJlbHMsIGV0Yy5cbiAgICAgIC8vIE5PVEU6IHNjaGVtYSBjYW4gYmUgbnVsbCB3aGlsZSBtdWx0aS1mb3JtIGxpc3RzIGxvYWQgdGhlaXIgZGF0YSxcbiAgICAgIC8vIGJlY2F1c2Ugb25seSB0aGUgYXZhaWxhYmxlIGRhdGEgd2lsbCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgZm9ybS5cbiAgICAgIC8vIFdoZW4gZWRpdGluZyBwcmltaXRpdmUgdmFsdWVzIHRocm91Z2ggYSBmb3JtLCBkbyBub3QgYXBwZW5kICduYW1lJyB0b1xuICAgICAgLy8gdGhlIGNvbXBvbmVudCdzIGRhdGFQYXRoIHNvIGl0IGNhbiBiZSBtYXBwZWQgdG8gZnJvbSB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICAgIC8vIE5PVEU6IE5vdCBhbGwgc2NoZW1hcyAvIGNvbXBvbmVudHMgaGF2ZSBhIHNvdXJjZVNjaGVtYSwgZS5nLiBkaWFsb2dzLlxuICAgICAgY29uc3Qgd3JhcFByaW1pdGl2ZXMgPSB0aGlzLnNvdXJjZVNjaGVtYT8ud3JhcFByaW1pdGl2ZXNcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYT8uY29tcG9uZW50cyB8fCB7fSkubWFwKFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAvLyBBbHdheXMgYWRkIG5hbWUgdG8gY29tcG9uZW50IHNjaGVtYS5cbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgICAvLyBTaGFyZSBkYXRhUGF0aCBhbmQgc3RvcmUgd2l0aCBwYXJlbnQgaWYgbm90IG5lc3RlZDpcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBpc05lc3RlZChzY2hlbWEpXG4gICAgICAgICAgY29uc3QgbmVzdGVkRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBkYXRhUGF0aDogbmVzdGVkICYmICF3cmFwUHJpbWl0aXZlc1xuICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsU2NoZW1hcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT4gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudCxcbiAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmUodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIGlmICh0aGlzLnRhYikge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IHRoaXMudGFiIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiXG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbilcbiAgZGl0by1sYWJlbChcbiAgICB2LWlmPVwibGFiZWxcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gIClcbiAgZGl0by1lcnJvcnMoXG4gICAgOmVycm9ycz1cImVycm9yc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gICAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuICApXG4gICAgZGl0by1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICApXG4gICAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICAgIClcbiAgICBkaXRvLWVycm9ycyhcbiAgICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY29udGFpbmVyXG4gICAgLy8gTmVlZGVkIGZvciBiZXR0ZXIgdmVydGljYWwgYWxpZ25tZW50OlxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gICAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgJjplbXB0eVxuICAgICAgcGFkZGluZzogMFxuICAgICYuZGl0by1vbWl0LXBhZGRpbmdcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgaGVpZ2h0OiAxMDAlIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbVxuICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbiAgLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbiAgLmRpdG8tY29tcG9uZW50XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgICAmLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgd2lkdGg6IGF1dG9cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRUeXBlT3B0aW9ucywgc2hvdWxkT21pdFBhZGRpbmcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlT3B0aW9ucyh0aGlzLnNjaGVtYSkgfHwge31cbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbCAhPT0gZmFsc2UgJiZcbiAgICAgICAgKCEhbGFiZWwgfHwgdGhpcy50eXBlT3B0aW9ucy5nZW5lcmF0ZUxhYmVsICYmIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRXaWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLW9taXQtcGFkZGluZyc6IHNob3VsZE9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSAoXG4gICAgICAgIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKSA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgKiAxMDAgLy8gZnJhY3Rpb25cbiAgICAgIClcbiAgICAgIHJldHVybiBpc051bWJlcihiYXNpcykgPyBgJHtiYXNpc30lYCA6IGJhc2lzXG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICBjb25zdCBncm93ID0gKFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICBjb25zdCBzaHJpbmsgPSB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxleDogYCR7Z3JvdyA/IDEgOiAwfSAke3NocmluayA/IDEgOiAwfSAke3RoaXMuY29tcG9uZW50QmFzaXN9YFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzcygpIHtcbiAgICAgIGNvbnN0IGJhc2lzSXNBdXRvID0gdGhpcy5jb21wb25lbnRCYXNpcyA9PT0gJ2F1dG8nXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtYXV0byc6IGJhc2lzSXNBdXRvLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10YWJzXG4gIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gIClcbiAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdGFic1xuICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cInsgaGFzaDoga2V5IH1cIlxuICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gICR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodFxuICAkdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZVxuXG4gIC5kaXRvLXRhYnNcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgYVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZVxuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yXG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW5cbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlclxuICAgICAgJjphY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmVcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgOmlzPVwicGFuZWxUYWdcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuICBjb21wb25lbnQuZGl0by1wYW5lbChcbiAgICA6aXM9XCJwYW5lbFRhZ1wiXG4gICAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1wYW5lbFxuICAgIG1hcmdpbi1ib3R0b206ICRjb250ZW50LXBhZGRpbmdcbiAgICAuZGl0by1wYW5lbC10aXRsZVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAuZGl0by1wYW5lbC1zY2hlbWFcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbFxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wOiAwXG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgICAuZGl0by1vYmplY3RcbiAgICAgICAgYm9yZGVyOiAwXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBsYWJlbFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgIC5kaXRvLXBhbmVcbiAgICAgICAgbWFyZ2luOiAwICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgICAgLmRpdG8tY29udGFpbmVyXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmVsJywge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhbmVsVGFiQ29tcG9uZW50OiB7IHR5cGU6IERpdG9Db21wb25lbnQsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIGRpdG8tcGFuZWwoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhbmVscyhcbiAgICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgZGl0by1wYW5lbChcbiAgICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tcGFuZWxzXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC1zaWRlYmFyLXdpZHRoXG4gICAgbWluLXdpZHRoOiBjYWxjKCRjb250ZW50LXNpZGViYXItd2lkdGggLyAyKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbHMnLCB7XG4gIHByb3BzOiB7XG4gICAgcGFuZWxzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICAgICAgLy8gQWxsb3cgc2VwYXJhdGUgdGFicyB0byB1c2UgcGFuZWxzIG9mIHRoZSBzYW1lIG5hbWUsIGJ5XG4gICAgICAvLyBwcmVmaXhpbmcgdGhlaXIga2V5IHdpdGggdGhlIHRhYiBuYW1lLlxuICAgICAgcmV0dXJuIHRhYkNvbXBvbmVudCA/IGAke3RhYkNvbXBvbmVudC50YWJ9XyR7ZGF0YVBhdGh9YCA6IGRhdGFQYXRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICB2LW9uPVwiJGxpc3RlbmVyc1wiXG4pXG4gIGRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICApXG4gIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gIC8vIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgdi1pZj1cIm5vZGUudGFnXCJcbiAgKVxuICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1idXR0b25zKFxuICAgIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgICAvKiBQYXNzIG9uICRsaXN0ZW5lcnMgc28gdGhhdCBkaXRvLWVkaXQtYnV0dG9ucyBjYW4gcGFzcyBldmVudHMuICovXG4gICAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICApXG4gICAgLy8gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLCBzbyBpdCBjYW4gYmVcbiAgICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCJub2RlIGluICRzbG90cy5kZWZhdWx0XCJcbiAgICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gICAgKVxuICAgICAgZGl0by12bm9kZSg6bm9kZT1cIm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuLmRpdG8tYnV0dG9uc1xuICA+IC5kaXRvLWNvbnRhaW5lclxuICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYnV0dG9ucycsIHtcbiAgcHJvdmlkZToge1xuICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGJ1dHRvbnMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXMuXG4gICAgICBjb25zdCB7IGRhdGFQYXRoLCBidXR0b25zIH0gPSB0aGlzXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoYnV0dG9ucykucmVkdWNlKChzY2hlbWFzLCBidXR0b24pID0+IHtcbiAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgfSwge30pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gIClcbiAgcm91dGVyLWxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICAgIEBjbGljay5zdG9wXG4gIClcbiAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgIGEuZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgKVxuICAgIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCIgYXBwZW5kXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICApXG4gICAgZGl0by1jcmVhdGUtYnV0dG9uKFxuICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lZGl0LWJ1dHRvbnNcbiAgICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGZsZXg6IG5vbmVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lZGl0LWJ1dHRvbnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hLmZvcm0pXG4gICAgfSxcblxuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdlZGl0YWJsZScpICYmICEhdGhpcy5lZGl0UGF0aFxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignY3JlYXRhYmxlJykgJiYgISF0aGlzLmNyZWF0ZVBhdGhcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RlbGV0YWJsZScpXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHxcbiAgICAgICAgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc09wdGlvbihuYW1lKSB7XG4gICAgICAvLyBUaGUgb3B0aW9ucyBvZiB0aGUgb3V0ZXIgY29tcG9uZW50IGFyZSBwYXNzZWQgdG8gdGhlIGJ1dHRvbnMgY29tcG9uZW50XG4gICAgICAvLyB0aHJvdWdoIHByb3BlcnRpZXMgYHRoaXNbbmFtZV1gLCBidXQgY2FuIGJlIGRpc2FibGVkIG9uIGEgcGVyLWZvcm1cbiAgICAgIC8vIGJhc2lzIGJ5IHNldHRpbmcgYHNjaGVtYVtuYW1lXWAgdG8gYGZhbHNlYC5cbiAgICAgIHJldHVybiAhISh0aGlzW25hbWVdICYmIHRoaXMuc2NoZW1hW25hbWVdICE9PSBmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaSh2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtZWxzZVxuICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICkge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY3JlYXRlLWJ1dHRvblxuICAgIHRlbXBsYXRlKHYtaWY9XCJzaG93UHVsbGRvd25cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgICkge3sgdGV4dCB9fVxuICAgICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICAgIClcbiAgICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgICBhKFxuICAgICAgICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlKGZvcm0pXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1lbHNlXG4gICAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgcmlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY3JlYXRlLWJ1dHRvbicsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHZlcmI6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHNob3dQdWxsZG93bigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZvcm1zKS5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHRcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgY3JlYXRhYmxlOiBmYWxzZWBcbiAgICAgIHJldHVybiBmb3JtLmNyZWF0YWJsZSAhPT0gZmFsc2VcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGFibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfSxcbiAgICAgICAgICAgIGFwcGVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJjbGlwYm9hcmRcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3B5RW5hYmxlZDogZmFsc2UsXG4gICAgICBwYXN0ZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZml4Q2xpcGJvYXJkOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xpcGJvYXJkT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzLmNsaXBib2FyZCkgPyB0aGlzLmNsaXBib2FyZCA6IHt9XG4gICAgfSxcblxuICAgIGNvcHlEYXRhKCkge1xuICAgICAgY29uc3QgeyBjb3B5IH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBjb3B5XG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IHBhc3RlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGRpbmcgb24gYnJvd3NlcnM6XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyByZXBvcnRcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcsIHsgdXBkYXRlUm9vdCA9IGZhbHNlLCB1cGRhdGVWaWV3ID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nIF4gIWlzTG9hZGluZykgeyAvLyBCb29sZWFuIHhvclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgICAgIGlmICh1cGRhdGVSb290KSB7XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LnJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZVZpZXcpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0TG9hZGluZyh0aGlzLmlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5pbXBvcnQgeyBzZXREZWZhdWx0cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZlcmJzIHdpdGggdGhlaXIgdHJhbnNpZW50IHZlcnNpb25zOlxuICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICBzYXZlOiAnYXBwbHknLFxuICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICBkZWxldGVkOiAncmVtb3ZlZCdcbiAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogQ2FuIHdlIHJlYWxseSBzd2FsbG93IHRoZXNlIGVycm9ycz9cbiAgICAgICAgICAgICAgLy8gSXMgY2FsbGluZyBgZW5zdXJlVXNlcigpYCBpbiBgb25CZWZvcmVSZXF1ZXN0KClgIGVub3VnaD9cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlLmRhdGEpXG4gICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2xvYWQnKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMFxuICAgIH0sXG5cbiAgICBpc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxXG4gICAgfSxcblxuICAgIGFzeW5jIGhhbmRsZVJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlLFxuICAgICAgcXVlcnksXG4gICAgICBkYXRhXG4gICAgfSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgID8gbGFiZWxpemUoZGF0YS50eXBlKVxuICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6ICdlcnJvcicsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IFN1Y2Nlc3NmdWwnLFxuICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgfSksXG4gICAgICBub3RpZnlFcnJvciA9IGVycm9yID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXF1ZXN0JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KFxuICAgICAgICAgIHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSB9LFxuICAgICAgICAgIGFzeW5jIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIERpdG8gdmFsaWRhdGlvbiBlcnJvcjpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5pc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkgJiYgZGF0YS5lcnJvcnNcbiAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDogZXJyXG4gICAgICAgICAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgYmVmb3JlIGNhbGxpbmcgYG5vdGlmeSgpYCBvclxuICAgICAgICAgICAgICAvLyBgdGhpcy5pdGVtTGFiZWxgLCBzbyBpZCBpcyBzZXQgYWZ0ZXIgY3JlYXRpbmcgbmV3IGl0ZW1zLlxuICAgICAgICAgICAgICBpZiAoc2V0RGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCBldmVudCwgeyBub3RpZnksIGVycm9yIH0pIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBvdXRzaWRlIG9mIGBlbWl0RXZlbnQoKWAsIHNvIHRoYXRcbiAgICAgIC8vIGBjb250ZXh0Lndhc05vdGlmaWVkYCBjYW4gYmUgY2hlY2tlZCBhZnRlci5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQoYnV0dG9uLCB7XG4gICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgaXRlbUxhYmVsOiB0aGlzLml0ZW1MYWJlbCxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBidXR0b24uZW1pdEV2ZW50KGV2ZW50LCB7IGNvbnRleHQgfSlcbiAgICAgIGlmIChcbiAgICAgICAgbm90aWZ5ICYmXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBpZiBhbnl0aGluZyB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgLy8gRG8gbm90IGRpc3BsYXkgZGVmYXVsdCBub3RpZmljYXRpb24gaWYgdGhlIGV2ZW50IGhhbmRsZXIgYWxyZWFkeVxuICAgICAgICAvLyBkaXNwbGF5ZWQgYSBub3RpZmljYXRpb24uXG4gICAgICAgICFjb250ZXh0Lndhc05vdGlmaWVkXG4gICAgICApIHtcbiAgICAgICAgbm90aWZ5KGVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBtZXJnZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1mb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCBwcm92aWRlIGFuIGVtcHR5IG9iamVjdCB3aXRoIGp1c3QgdGhlIHJpZ2h0XG4gICAgICAgIC8vIHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgICkgfHwge30gLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmRvZXNNdXRhdGUgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZG9lc011dGF0ZSAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBhcHBsaWNhdGlvbiB1cG9uIHN1Ym1pdC5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogKHRoaXMucGFyYW0gPz8gbnVsbClcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6ICdjcmVhdGUnLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aCh0aGlzLnBhdGhcbiAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuJHNldChcbiAgICAgICAgICB0aGlzLnNvdXJjZURhdGEsXG4gICAgICAgICAgdGhpcy5zb3VyY2VLZXksXG4gICAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIClcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnQgPyAnY3JlYXRlJyA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnQgPyAnc3VibWl0JyA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0b25SZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBidXR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IGAuLi8ke2lkfWAsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1mb3JtLW5lc3RlZFxuICAgICYsXG4gICAgLmRpdG8tc2Nyb2xsXG4gICAgICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAgICAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvRm9ybS5jb21wb25lbnQoJ2RpdG8tZm9ybS1uZXN0ZWQnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICB8IHt7IGVycm9yIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1lcnJvcnMoXG4gICAgdi1pZj1cImVycm9yc1wiXG4gIClcbiAgICB1bFxuICAgICAgbGkodi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIilcbiAgICAgICAgfCB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1lcnJvcnNcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB6LWluZGV4OiAxXG4gICAgdWxcbiAgICAgIG1hcmdpbi10b3A6IDFweFxuICAgICAgY29sb3I6ICRjb2xvci1lcnJvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY29wZXNcbiAgICByb3V0ZXItbGluayhcbiAgICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNjb3Blc1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICArZWxsaXBzaXNcbiAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgICAgbWluLXdpZHRoOiAzZW1cbiAgICAgIGZsZXg6IDAgMSBhdXRvXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW1cbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtXG4gICAgICAmICsgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgICAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucGFnaW5hdGlvbihcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4gIDpwYWdlLnN5bmM9XCJwYWdlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHBhZ2luYXRpb24oXG4gICAgOnBhZ2VTaXplPVwibGltaXRcIlxuICAgIDp0b3RhbD1cInRvdGFsXCJcbiAgICA6cGFnZS5zeW5jPVwicGFnZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2godGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSlcbiAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICB9YFxuICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuKVxuICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKHYtZWxzZSlcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICB2dWUtZHJhZ2dhYmxlKFxuICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhjaGlsZHJlbkRyYWdnYWJsZSwgdHJ1ZSlcIlxuICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICBAZW5kPVwib25FbmREcmFnKCRldmVudCwgY2hpbGRyZW5TY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1pdGVtKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgICB9YFxuICAgIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4gIClcbiAgICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgICApXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgICAgLmRpdG8tdHJlZS1pbmZvKHYtaWY9XCJkZXRhaWxzXCIpIHt7IGRldGFpbHMgfX1cbiAgICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICApXG4gICAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICAgIClcbiAgICAgICAgdGRcbiAgICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICAgIClcbiAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gICAgKVxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gJiYgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgfWBcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGgoXG4gICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICApXG4gICAgICByb3V0ZXItbGluayhcbiAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgIHNwYW5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgIHRyXG4gICAgICB0aChcbiAgICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXRhYmxlLWhlYWRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB0clxuICAgICAgdGhcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnRcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAuZGl0by1idXR0b25cbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXRcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAgIHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICAgICY6ZW1wdHk6OmFmdGVyXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgID4gc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1oZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICA/ICdkZXNjJ1xuICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZChcbiAgICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbiAgKVxuICAgIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVR5cGVDb21wb25lbnQodGhpcy5jZWxsLmNvbXBvbmVudClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKHZhbHVlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEEgY29tcG9uZW50IHRvIHNpbXBseSBwYXNzIHRocm91Z2ggYW4gZXhpc3RpbmcgdnVlIHZub2RlLlxuLy8gU2VlOiBodHRwczovL2ZvcnVtLnZ1ZWpzLm9yZy90LzI4MTYyLzRcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZub2RlJywge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IChoLCBjb250ZXh0KSA9PiBjb250ZXh0LnByb3BzLm5vZGVcbn0pXG48L3NjcmlwdD5cbiIsIi8vIFR5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZSBjb21wb25lbnRzXG4vLyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciB0aGUgYHR5cGU6ICdjb21wb25lbnQnYCB0eXBlcy5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgVHlwZUNvbXBvbmVudCA9IERpdG9Db21wb25lbnQuZXh0ZW5kKHtcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFBhZGRpbmc6IGZhbHNlXG59KVxuXG5UeXBlQ29tcG9uZW50LnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KGBkaXRvLXR5cGUtJHt0eXBlc1swXX1gLCBkZWZpbml0aW9uKVxuICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuVHlwZUNvbXBvbmVudC5nZXQgPSBnZXRUeXBlQ29tcG9uZW50XG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnRcbiIsIlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0ZXh0XCJcbiAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKSB7eyB0ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOnRpdGxlPVwidGV4dFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2J1dHRvbicsICdzdWJtaXQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIHdvcmsgbmljZWx5OlxuICAvLyBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJiKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXSB8fCB0aGlzLm5hbWVcbiAgICB9LFxuXG4gICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQodGV4dCkge1xuICAgICAgICByZXR1cm4gdGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgY2xpY2s6IHRoaXMub25DbGlja1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgaWYgKFxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJiAvLyBNZWFuaW5nOiBkb24ndCBwcmV2ZW50IGRlZmF1bHQuXG4gICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQuZGl0by1jaGVja2JveChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cImNoZWNrYm94XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNoZWNrYm94XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIG5vcm1hbGl6ZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwge1xuICAgICAgcmVzb2x2ZUNvdW50ZXIgPSAxLFxuICAgICAgLi4ubG9hZGluZ09wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKFxuICAgICAgICB0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHxcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuYXN5bmNEYXRhRW50cmllcywgbmFtZSwge1xuICAgICAgICAgIGRlcGVuZGVuY3lGdW5jdGlvbjogbnVsbCxcbiAgICAgICAgICByZXNvbHZlQ291bnRlcjogMCxcbiAgICAgICAgICByZXNvbHZlZERhdGE6IG51bGwsXG4gICAgICAgICAgcmVzb2x2aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/LmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA+IDApIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGEgd2FzIHJlc29sdmVkIGFscmVhZHksIHJldHVybiBpdCBhbmQgY2xlYXIgdGhlIHZhbHVlIG9uY2VcbiAgICAgICAgLy8gYHJlc29sdmVDb3VudGVyYCByZWFjaGVzIHplcm8uIENvdW50aW5nIGlzIG5lZWRlZCBiZWNhdXNlIGRlcGVuZGluZ1xuICAgICAgICAvLyBvbiB0aGUgdXNlIG9mIGRhdGEgYW5kIHJlYWN0aXZpdHksIG11bHRpcGxlIGNhbGxzIHRvIHRoZSBjb21wdXRlZFxuICAgICAgICAvLyBnZXR0ZXIgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhIGlzIGNoYW5naW5nLiBDbGVhcmluZyB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gZGF0YSB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzIGFuZCBvbmx5XG4gICAgICAgIC8vIHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGUgcmVldmFsdWF0aW9uOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBpZiAoLS1hc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID09PSAwKSB7XG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGRhdGEpKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3VzLCBpdCBjYW4ndCBiZSByZXR1cm5lZCBzdHJhaWdodCBhd2F5LlxuICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4gY2hlYXQgdXNpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgYHJlc29sdmVkRGF0YWAsXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZ29pbmcgdG8gcmVjZWl2ZSB0aGUgbG9hZGVkIGRhdGEgYXN5bmNocm9ub3VzbHksXG4gICAgICAgICAgLy8gdHJpZ2dlcmluZyBhIHJlY29tcHV0ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBjYWxsc1xuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgLlxuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gdHJ1ZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZURhdGEoZGF0YSwgbG9hZGluZ09wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID0gcmVzb2x2ZUNvdW50ZXJcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gQ2xlYXIgZGF0YSB1bnRpbCBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBgcmVzb2x2ZWREYXRhYCBpcyBzZXRcbiAgICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoKSB7XG4gICAgICAgIGRhdGEgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChgJHt0aGlzLmRhdGFQYXRofS8ke2RhdGFQYXRofWApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVEYXRhKGxvYWQsIGxvYWRpbmdPcHRpb25zID0ge30pIHtcbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGxldCBkYXRhID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uKGxvYWQpID8gbG9hZCgpIDogbG9hZClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcilcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzU3RyaW5nLCBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemUsIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNPcHRpb25zOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT4gdGhpcy5yZWxhdGVcbiAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydCA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydClcbiAgICAgICAgICA6IGNvbnZlcnQodmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIH0sXG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYSh0aGlzLnNjaGVtYS5vcHRpb25zLCAnb3B0aW9ucycsIHtcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDFcbiAgICAgIH0pID8/IFtdXG4gICAgICBpZiAoIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbnMgZGF0YSwgc2hvdWxkIGJlIGFycmF5OiAke2RhdGF9YClcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFzT3B0aW9ucyA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgcmVsYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVsYXRlJywge1xuICAgICAgLy8gVE9ETzogQ29udmVydCB0byBgcmVsYXRlQnk6ICdpZCdgXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBXZSBjYW5ub3QgdXNlIHNjaGVtYSBhY2Nlc3NvciBjYWxsYmFjayBtYWdpYyBmb3IgYHJlbGF0ZWAgYXMgd2UgbmVlZFxuICAgICAgLy8gdGhpcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQncyBsaWZlLXNwYW4sIHNlZSBgcHJvY2Vzc0RhdGEoKWAgYmVsb3cuXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGdyb3VwQnk6IGdldFNjaGVtYUFjY2Vzc29yKCdncm91cEJ5Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgb3B0aW9uTGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLmxhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ2xhYmVsJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCdsYWJlbCcpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBvcHRpb25WYWx1ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMudmFsdWUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHZhbHVlKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAndmFsdWUnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgJ2lkJyB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCd2YWx1ZScpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBtb3Zpbmcgc2VhcmNoIHRvIGBvcHRpb25zLnNlYXJjaGA/XG4gICAgc2VhcmNoRmlsdGVyOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoJywge1xuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChzZWFyY2gpIHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyLCBkZWJvdW5jZSB9ID0gaXNGdW5jdGlvbihzZWFyY2gpXG4gICAgICAgICAgICA/IHsgZmlsdGVyOiBzZWFyY2ggfVxuICAgICAgICAgICAgOiBzZWFyY2hcbiAgICAgICAgICByZXR1cm4gZGVib3VuY2UgPyBkZWJvdW5jZUFzeW5jKGZpbHRlciwgZGVib3VuY2UpIDogZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogb3B0aW9uXG4gICAgfSxcblxuICAgIGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvbkxhYmVsKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvbkxhYmVsXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uTGFiZWwpXG4gICAgICAgICAgPyBvcHRpb25MYWJlbC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+IHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJcbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLWNoZWNrYm94ZXMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgICAgKVxuICAgICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNvZGUoXG4gIHJlZj1cImNvZGVcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvZGUoXG4gICAgcmVmPVwiY29kZVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzdHlsZT1cInN0eWxlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jb2RlXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAgIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IGF1dG9cbiAgICAuY29kZWZsYXNrXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAvLyBJZ25vcmUgdGhlIHBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fcHJlXG4gICAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fY29kZSxcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSlcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodClcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLWNvbG9yKFxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbilcbiAgLmRpdG8taW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gIClcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgIHNpemU9XCI4XCJcbiAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgKVxuICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLWNvbG9yKFxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIClcbiAgICAuZGl0by1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgKVxuICAgICAgaW5wdXQoXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgICApXG4gICAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICAgIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemVcbiAgJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aFxuICAuZGl0by1jb2xvclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBpbnB1dFxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgLmRpdG8tY29sb3ItcGlja2VyXG4gICAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3XG4gICAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3lcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAmLFxuICAgICAgZGl2XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDBcbiAgICAgICAgYm90dG9tOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInXG5pbXBvcnQgeyBTa2V0Y2ggYXMgU2tldGNoUGlja2VyIH0gZnJvbSAndnVlLWNvbG9yJ1xuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgLy8gTk9URTogdnVlLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICB9W2Zvcm1hdF0gfHwgZm9ybWF0XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgOmlzPVwiY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIHYtYmluZD1cIiRwcm9wc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVUeXBlQ29tcG9uZW50KClgLiBUaGlzIGNhblxuLy8gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4gIC8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG4gIGlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGUgYHZhbHVlYFxuICAgICAgICAgICAgLy8gZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvIHJldHVybiB0aGVcbiAgICAgICAgICAgIC8vIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZVxuICAgIGNvbXBvbmVudChcbiAgICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYSBiZXR0ZXJcbiAgLy8gd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHkgc3VwcG9ydGVkXG4gIC8vIGF0dHJpYnV0ZXMpXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkYXRlVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgfVt0eXBlXVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsIHByb2Nlc3NGb3JtcywgZ2V0TmFtZWRTY2hlbWFzLCBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcywgZ2V0Vmlld1NjaGVtYSxcbiAgaGFzTGFiZWxzLCBpc0NvbXBhY3QsIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzTnVtYmVyLCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1Jlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZSxcbiAgICAgIGlnbm9yZVJvdXRlQ2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwID8gZGF0YVswXSA6IG51bGwpXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5zb21lKGhhc0xhYmVscylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICAvLyBTa2lwIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygd3JhcHBlZFByaW1pdGl2ZXMgYXJyYXlcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIG9sZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gbnVsbFxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5pbmRleE9mKGl0ZW0pXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gaXRlbSAmJiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXRlbSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgICB7IHBhdGggfSxcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgY29uc3QgaW5saW5lZCA9IGlzSW5saW5lZChzY2hlbWEpXG4gICAgaWYgKGlubGluZWQgJiYgc2NoZW1hLnJlc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdMaXN0cyB3aXRoIG5lc3RlZCBmb3JtcyBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlcydcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIGNvbnN0IGdldFBhdGhXaXRoUGFyYW0gPSAocGF0aCwgcGFyYW0pID0+IHBhcmFtXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgIDogYDoke3BhcmFtfWBcbiAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ2RpdG8tZm9ybS1uZXN0ZWQnIDogJ2RpdG8tZm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICB0ZXh0KGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgIG9wdGlvbnM6XG4gICAgICAgICAgICBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICB3aWR0aDogJzQwJSdcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnNjAlJyA6ICdmaWxsJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB7XG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzUGFuZWwoZmlsdGVycywgZGF0YVBhdGgsIHByb3h5KSB7XG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICB0YXJnZXQ6IGRhdGFQYXRoLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcHJveHkucXVlcnlcbiAgICAgIClcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsZWFyOiB7XG4gICAgICAgIHRleHQ6ICdDbGVhcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5yZXNldERhdGEoKVxuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIHRleHQ6ICdGaWx0ZXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcHJveHkucXVlcnkgPSB7XG4gICAgICAgICAgLi4ucHJveHkucXVlcnksXG4gICAgICAgICAgZmlsdGVyOiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKSxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZmlsdGVycyB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2ZpbHRlci5uYW1lXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW25hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtuYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChgJHtuYW1lfToke2FyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJyl9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID8gZmlsdGVycyA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBuYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW25hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBuYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tuYW1lXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbbmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCJcbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgIHYtaWY9XCJzY29wZXMgfHwgaGFzUGFnaW5hdGlvblwiXG4gIClcbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgIClcbiAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICB2LWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICApXG4gIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgfWBcbiAgKVxuICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJpdGVtLCBpbmRleCBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIClcbiAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWxpc3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgICAgdi1pZj1cInNjb3BlcyB8fCBoYXNQYWdpbmF0aW9uXCJcbiAgICApXG4gICAgICBkaXRvLXNjb3BlcyhcbiAgICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgICApXG4gICAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgICAgLmRpdG8tc3BhY2VyKFxuICAgICAgICB2LWVsc2UtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIClcbiAgICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgICApXG4gICAgdGFibGUuZGl0by10YWJsZShcbiAgICAgIDpjbGFzcz1ge1xuICAgICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgICB9YFxuICAgIClcbiAgICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiaXRlbSwgaW5kZXggaW4gbGlzdERhdGFcIlxuICAgICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgdGRcbiAgICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgICB0Zm9vdChcbiAgICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgICAgKVxuICAgICAgICB0clxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbGlzdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZlxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmVtcHR5XG4gICAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICAgIC5kaXRvLXNjb3BlcyxcbiAgICAgIC5kaXRvLXBhZ2luYXRpb25cbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgICBtaW4td2lkdGg6IDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICBoZWlnaHQ6IDEwMCVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW1NvdXJjZU1peGluLCBPcmRlcmVkTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgeyAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzUGFnaW5hdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlICYmIHRoaXMudG90YWwgPiB0aGlzLnBhZ2luYXRlXG4gICAgfSxcblxuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKFxuICAgICAgICB0aGlzLmJ1dHRvblNjaGVtYXMgfHxcbiAgICAgICAgdGhpcy5jcmVhdGFibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSB8fCB0aGlzLnBhdGhcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1sYWJlbC1jb21wb25lbnRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgaGVpZ2h0OiAyZW1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbWFya3VwKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICApXG4gICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tYXJrdXAoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICApXG4gICAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICAgIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICAgIHJlZj1cImVkaXRvclwiXG4gICAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICAgKVxuICAgIC5kaXRvLXJlc2l6ZShcbiAgICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbWFya3VwXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5kaXRvLXJlc2l6ZVxuICAgICAgQGV4dGVuZCAlaWNvbi1yZXNpemVcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiB1bnNldFxuICAgICAgbGVmdDogdW5zZXRcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBib3R0b206IDBcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG5cbiAgICAuUHJvc2VNaXJyb3JcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgb3V0bGluZTogbm9uZVxuXG4gICAgLmRpdG8tbWFya3VwLWVkaXRvclxuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsXG4gICAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3JcblxuICAgIC5kaXRvLWJ1dHRvbnMtdG9vbGJhclxuICAgICAgbWFyZ2luOiAkaW5wdXQtcGFkZGluZy12ZXIgMFxuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgcCxcbiAgICB1bCxcbiAgICBvbCxcbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZVxuICAgICAgbWFyZ2luOiAxcmVtIDBcbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBcbiAgICBoMSxcbiAgICBoMixcbiAgICBoM1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICBoMVxuICAgICAgZm9udC1zaXplOiAxLjRyZW1cbiAgICBoMlxuICAgICAgZm9udC1zaXplOiAxLjJyZW1cbiAgICB1bFxuICAgICAgbGlzdC1zdHlsZTogZGlzY1xuICAgIGNvZGVcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgIHByZVxuICAgICAgcGFkZGluZzogMC43cmVtIDFyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICBvdmVyZmxvdy14OiBhdXRvXG4gICAgICBjb2RlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcCBjb2RlXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6IDAgMC4zcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICBhXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICBjb2xvcjogYmx1ZVxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcbiAgICB1bCxcbiAgICBvbFxuICAgICAgcGFkZGluZy1sZWZ0OiAycmVtXG4gICAgbGlcbiAgICAgICYgPiBwLFxuICAgICAgJiA+IG9sLFxuICAgICAgJiA+IHVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIHBhZGRpbmctbGVmdDogMXJlbVxuICAgICAgZm9udC1zdHlsZTogaXRhbGljXG4gICAgICBwXG4gICAgICAgIG1hcmdpbjogMFxuXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBFZGl0b3JNZW51QmFyLCBNYXJrIH0gZnJvbSAndGlwdGFwJ1xuaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbmltcG9ydCB7XG4gIC8vIE1hcmtzOlxuICBCb2xkLCBDb2RlLCBJdGFsaWMsIExpbmssIFN0cmlrZSwgVW5kZXJsaW5lLFxuICAvLyBOb2RlczpcbiAgQmxvY2txdW90ZSwgQ29kZUJsb2NrLCBIYXJkQnJlYWssIEhlYWRpbmcsIEhvcml6b250YWxSdWxlLFxuICBPcmRlcmVkTGlzdCwgQnVsbGV0TGlzdCwgTGlzdEl0ZW0sXG4gIC8vIFRPRE86XG4gIC8vIC0gSW1hZ2UsIE1lbnRpb24sIENvZGVCbG9ja0hpZ2hsaWdodFxuICAvLyAtIFRhYmxlLCBUYWJsZUNlbGwsIFRhYmxlSGVhZGVyLCBUYWJsZU5vZGVzLCBUYWJsZVJvdyxcbiAgLy8gLSBUb2RvSXRlbSwgVG9kb0xpc3RcbiAgLy8gVG9vbHM6XG4gIEhpc3Rvcnlcbn0gZnJvbSAndGlwdGFwLWV4dGVuc2lvbnMnXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgdW5kZXJzY29yZSwgaHlwaGVuYXRlLCBkZWJvdW5jZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBFZGl0b3JNZW51QmFyLFxuICAgIEljb25cbiAgfSxcblxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGNvbW1hbmQgPT4gdGhpcy5vbkNsaWNrTGluayhjb21tYW5kKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGdldFZhbHVlID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGdldFZhbHVlKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBnZXRIVE1MIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGdldEhUTUwpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmNyZWF0ZUV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhjb21tYW5kKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBudWxsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogdGhpcy5lZGl0b3IuZ2V0TWFya0F0dHJzKCdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LCBwcmVmaXggaXQgd2l0aFxuICAgICAgICAgIC8vIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZCh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gc2NoZW1hLm1hcmtzOlxuICAgICAgICBtYXJrcy5ib2xkICYmIG5ldyBCb2xkKCksXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBuZXcgSXRhbGljKCksXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBuZXcgVW5kZXJsaW5lKCksXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBuZXcgU3RyaWtlKCksXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIG5ldyBTbWFsbCgpLFxuICAgICAgICBtYXJrcy5jb2RlICYmIG5ldyBDb2RlKCksXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgbmV3IExpbmtXaXRoVGl0bGUoKSxcblxuICAgICAgICAvLyBzY2hlbWEubm9kZXM6XG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgbmV3IEJsb2NrcXVvdGUoKSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIG5ldyBDb2RlQmxvY2soKSxcbiAgICAgICAgbmV3IEhhcmRCcmVhaygpLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgbmV3IEhlYWRpbmcoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIG5ldyBIb3Jpem9udGFsUnVsZSgpLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgbmV3IExpc3RJdGVtKCksXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgbmV3IEJ1bGxldExpc3QoKSxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgbmV3IE9yZGVyZWRMaXN0KCksXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvSXRlbSgpLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0xpc3QoKSxcblxuICAgICAgICAvLyBzY2hlbWEudG9vbHM6XG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgbmV3IEhpc3RvcnkoKVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cnMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5lZGl0b3IuaXNBY3RpdmVbbmFtZV1cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuZWRpdG9yLmNvbW1hbmRzW25hbWVdXG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICBpc0FjdGl2ZT8uKGF0dHJzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2tcbiAgICAgICAgICAgID8gb25DbGljayhjb21tYW5kLCBhdHRycylcbiAgICAgICAgICAgIDogY29tbWFuZChhdHRycylcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0ciwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFthdHRyXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNsYXNzIFNtYWxsIGV4dGVuZHMgTWFyayB7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAnc21hbGwnXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZURPTTogW1xuICAgICAgICB7IHRhZzogJ3NtYWxsJyB9XG4gICAgICBdLFxuICAgICAgdG9ET006ICgpID0+IFsnc21hbGwnLCAwXVxuICAgIH1cbiAgfVxuXG4gIGNvbW1hbmRzKHsgdHlwZSB9KSB7XG4gICAgcmV0dXJuICgpID0+IHRvZ2dsZU1hcmsodHlwZSlcbiAgfVxufVxuY2xhc3MgTGlua1dpdGhUaXRsZSBleHRlbmRzIExpbmsge1xuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBocmVmOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICBwYXJzZURPTTogW3tcbiAgICAgICAgdGFnOiAnYScsXG4gICAgICAgIGdldEF0dHJzOiBkb20gPT4gKHtcbiAgICAgICAgICBocmVmOiBkb20uZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgdGl0bGU6IGRvbS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgfSlcbiAgICAgIH1dLFxuICAgICAgdG9ET006IG5vZGUgPT4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgdnVlLW11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tdWx0aXNlbGVjdChcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgICB9YFxuICApXG4gICAgdnVlLW11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuICBAaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QubWluLmNzcydcblxuICAkc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aFxuICAkdGFnLWljb24td2lkdGg6IDEuOGVtXG4gICR0YWctbWFyZ2luOiAycHhcbiAgJHRhZy1wYWRkaW5nOiAzcHhcbiAgJHRhZy1saW5lLWhlaWdodDogMS4xZW1cblxuICAuZGl0by1tdWx0aXNlbGVjdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLm11bHRpc2VsZWN0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIGNvbG9yOiAkY29sb3ItYmxhY2tcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDBcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ1xuICAgICAgZmxvYXQ6IGxlZnRcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtXG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLXdyYXBcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBsaW5lLWhlaWdodDogMFxuXG4gICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiAwXG4gICAgICBtYXJnaW46IDAgMCAxcHggMFxuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnRcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gLm11bHRpc2VsZWN0X190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0OjpwbGFjZWhvbGRlclxuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlclxuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3QsXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aFxuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGhcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aFxuICAgICAgaGVpZ2h0OiBpbmhlcml0XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3RcbiAgICAgIHdpZHRoOiAwXG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpXG5cbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgaW5zZXQ6IDBcbiAgICAgICAgbWFyZ2luOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvblxuICAgICAgbWluLWhlaWdodDogdW5zZXRcbiAgICAgIGhlaWdodDogdW5zZXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWRpc2FibGVkXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZy1pY29uXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW1cbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGhcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICBmb250LXNpemU6IDEuM2VtXG4gICAgICAmOmhvdmVyOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1zZWxlY3RlZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAmLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLFxuICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlXG4gICAgICAtLWlucHV0LXdpZHRoOiAxMDAlXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlXG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnRcblxuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgbWFyZ2luOiAtMXB4IDAgMFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgICYubXVsdGlzZWxlY3QtLWFib3ZlXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgICAgbWFyZ2luOiAwIDAgLTFweFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAmLmRpdG8taGFzLWVycm9yc1xuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yXG5cbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgIHZhbHVlID0+IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZFxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyIHx8IChcbiAgICAgICAgc2VhcmNoYWJsZSAmJiB0YWdnYWJsZSA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiBzZWFyY2hhYmxlID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBvdmVycmlkZSBgVHlwZU1peGluLmdldExpc3RlbmVycygpYCB0byByZS1yb3V0ZSAnaW5wdXQnIHRvIGBvbkNoYW5nZSgpYFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGlucHV0OiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWUgdG9cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgIH1cbiAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlICE9PSAnJ1xuICAgICAgICAgID8gdGhpcy5pc0ludGVnZXIgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXIgPyAnYW55JyA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPSBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID0gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICBbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG4gIGlucHV0W3R5cGU9XCJudW1iZXJcIl06bm90KFtzdGVwXSlcbiAgICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b25cbiAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZVxuICAgICAgbWFyZ2luOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnbnVtYmVyJywgJ2ludGVnZXInXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW9iamVjdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICAgIClcbiAgICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIClcbiAgICAgIGNvbXBvbmVudChcbiAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICAgIClcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpwYXRoPVwicGF0aFwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tb2JqZWN0XG4gICAgZGlzcGxheTogZmxleFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgbWFyZ2luOiAwXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAuZGl0by1vYmplY3QtY29udGVudFxuICAgICAgZmxleDogMCAxIDEwMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIGZsZXg6IDEgMCAwJVxuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0UGFkZGluZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICAgIDptYXg9XCJwcm9ncmVzc01heFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiByYW5nZVsxXSAtIHJhbmdlWzBdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXJhZGlvLWJ1dHRvbnNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNlY3Rpb24oXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbilcbiAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNlY3Rpb24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuICApXG4gICAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zZWN0aW9uXG4gICAgJi5kaXRvLXNlY3Rpb24tbGFiZWxsZWRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oXG4gICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuICAuZGl0by1zZWxlY3RcbiAgICBzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAvLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiAgJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKVxuXG4gIC5kaXRvLXNlbGVjdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgc2VsZWN0XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoXG5cbiAgICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgc2VsZWN0XG4gICAgICAgIHdpZHRoOiAxMDAlXG5cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pXG5cbiAgICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyXG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgaW5wdXQuZGl0by1yYW5nZShcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2xpZGVyXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcmFuZ2VcbiAgICAgIGZsZXg6IGF1dG9cbiAgICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpXG4gICAgLmRpdG8tbnVtYmVyXG4gICAgICBib3JkZXI6IDBcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzeW5jPVwidHJ1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBzd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3luYz1cInRydWVcIlxuICAgIDpsYWJlbHM9XCJsYWJlbHNcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cImlucHV0VHlwZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0ZXh0JywgJ2VtYWlsJywgJ3VybCcsICdob3N0bmFtZScsICdkb21haW4nLCAndGVsJywgJ3Bhc3N3b3JkJywgJ2NyZWRpdGNhcmQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRUeXBlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgfVt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZVxuICAgIH0sXG5cbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICApXG4gICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6cm93cz1cImxpbmVzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10ZXh0YXJlYVxuICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcmVzaXplOiBub25lXG4gICAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjeyAyICogJGlucHV0LXBhZGRpbmctdmVyIH0pXG4gICAgJi5kaXRvLXJlc2l6YWJsZVxuICAgICAgcmVzaXplOiB2ZXJ0aWNhbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJlZS1saXN0XG4gIGRpdG8tc2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgICApXG4gICAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10cmVlLWxpc3RcbiAgICBAZXh0ZW5kICVmaWVsZFxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgPiAuZGl0by10cmVlLWl0ZW1cbiAgICAgICAgZmxleDogMSAxIDI1JVxuICAgICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyXG4gICAgICAgIGZsZXg6IDAgMSA3NSVcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gIH0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgfSxcblxuICAgIHRyZWVEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWRcbiAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8ge1xuICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAuLi50aGlzLnNjaGVtYVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlRm9ybXModGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gdHJ1ZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHJldHVybiBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgICBuZXN0ZWQsIGZsYXR0ZW4sXG4gICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAoY2hpbGRSb3V0ZXMsIGxldmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAvLyBBZGQgYHR5cGVgIHRvIHRoZSBuZXN0ZWQgdHJlZSBsaXN0LlxuICAgICAgICAgIGNoaWxkcmVuLnR5cGUgPSAndHJlZS1saXN0J1xuICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgICBhcGksIGNoaWxkcmVuLCBjaGlsZHJlbi5uYW1lLCBjaGlsZFJvdXRlcywgbGV2ZWwsXG4gICAgICAgICAgICBuZXN0ZWQsIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgIHByb2Nlc3NcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIH0sXG5cbiAgZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nKHNjaGVtYSwgY29udGV4dCkge1xuICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIGNoaWxkcmVuXG4gICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICA6IG51bGxcbiAgICApXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCJcbi5kaXRvLXVwbG9hZFxuICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgIHRyXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJmaWxlc1wiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgIClcbiAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgdGQge3sgZmlsZS5zaXplIHwgZm9ybWF0RmlsZVNpemUgfX1cbiAgICAgICAgdGRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiKVxuICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgKVxuICAgIHRmb290XG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgOmlucHV0LWlkPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICA6cG9zdC1hY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdXBsb2FkXG4gICAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgICB0clxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW5cbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZCh2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiKVxuICAgICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgICApXG4gICAgICB0Zm9vdFxuICAgICAgICB0clxuICAgICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by11cGxvYWRcbiAgICAuZGl0by10YWJsZVxuICAgICAgdHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZVxuICAgIC5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+ICpcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmRcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICAgIC5kaXRvLXByb2dyZXNzXG4gICAgICAgIGZsZXg6IGF1dG9cbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVVcGxvYWQgZnJvbSAndnVlLXVwbG9hZC1jb21wb25lbnQnXG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd1cGxvYWQnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkLCBWdWVEcmFnZ2FibGUgfSxcbiAgZmlsdGVyczogeyBmb3JtYXRGaWxlU2l6ZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdXBsb2FkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMudXBsb2FkXG4gICAgfSxcblxuICAgIGZpbGVzKCkge1xuICAgICAgcmV0dXJuIGFzRmlsZXModGhpcy52YWx1ZSlcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIE5vIGNhbGxiYWNrIGFzIGl0J3MgdXNlZCBpbiBgcHJvY2Vzc1ZhbHVlKClgXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGV4dGVuc2lvbnM6IGdldFNjaGVtYUFjY2Vzc29yKCdleHRlbnNpb25zJywge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIFJlZ0V4cF1cbiAgICB9KSxcblxuICAgIGFjY2VwdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FjY2VwdCcsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KGFjY2VwdCkge1xuICAgICAgICByZXR1cm4gaXNBcnJheShhY2NlcHQpID8gYWNjZXB0LmpvaW4oJywnKSA6IGFjY2VwdFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4U2l6ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heFNpemUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZ2V0KG1heFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG1heFNpemUgPyBwYXJzZUZpbGVTaXplKG1heFNpemUpIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiBkcmFnZ2FibGUgJiYgdGhpcy5maWxlcy5sZW5ndGggPiAxXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGlzVXBsb2FkUmVhZHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCAmJlxuICAgICAgICAhKHRoaXMudXBsb2FkLmFjdGl2ZSB8fCB0aGlzLnVwbG9hZC51cGxvYWRlZClcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCAmJiB0aGlzLnVwbG9hZC5hY3RpdmVcbiAgICB9LFxuXG4gICAgdXBsb2FkUHJvZ3Jlc3MoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnVwbG9hZHMucmVkdWNlKCh0b3RhbCwgZmlsZSkgPT4gdG90YWwgKyBmaWxlLnByb2dyZXNzLCAwKSAvXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGhcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdXBsb2FkUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlVXJsKHtcbiAgICAgICAgdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgIHBhdGg6IHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgodGhpcy5kYXRhUGF0aClcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IHJlbmRlciB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICB2YWx1ZTogZmlsZSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZmlsZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbChmaWxlLm5hbWUpXG4gICAgfSxcblxuICAgIGRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gZmlsZVxuXG4gICAgICBpZiAoZmlsZSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMucmVtb3ZlfSAke25hbWV9P2ApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlLnVwbG9hZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkLnJlbW92ZShmaWxlLnVwbG9hZClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBgJHtuYW1lfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RmlsZUluZGV4KGZpbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIHRoaXMudmFsdWVcbiAgICAgICAgPyB0aGlzLnZhbHVlLmZpbmRJbmRleChpdCA9PiBpdC5pZCA9PT0gZmlsZS5pZClcbiAgICAgICAgOiAtMVxuICAgIH0sXG5cbiAgICBhZGRGaWxlKGZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gZmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBsYWNlRmlsZShmaWxlLCBuZXdGaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RmlsZUluZGV4KGZpbGUpXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuJHNldCh0aGlzLnZhbHVlLCBpbmRleCwgbmV3RmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3RmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVGaWxlKGZpbGUpIHtcbiAgICAgIHRoaXMucmVwbGFjZUZpbGUoZmlsZSwgbnVsbClcbiAgICB9LFxuXG4gICAgaW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHtcbiAgICAgICAgICAgIGFib3J0OiAnVXBsb2FkIGFib3J0ZWQnLFxuICAgICAgICAgICAgZGVuaWVkOiAnVXBsb2FkIGRlbmllZCcsXG4gICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29yayBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgIHNlcnZlcjogJ1NlcnZlciBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICB0aW1lb3V0OiAnVGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJ1xuXG4gICAgICAgICAgfVtlcnJvcl0gfHwgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5wdXRGaWx0ZXIobmV3RmlsZS8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBuZXdseSBhZGRlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgY29uc3QgZmlsZXMgPSBhc0ZpbGVzKHZhbHVlKVxuICAgICAgLm1hcChcbiAgICAgICAgKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICF1cGxvYWQgfHwgdXBsb2FkLnN1Y2Nlc3MgPyBmaWxlIDogbnVsbFxuICAgICAgKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cblxuPC9zY3JpcHQ+XG4iLCJjb25zdCBsb2dnZWREZXByZWNhdGlvbnMgPSBuZXcgU2V0KClcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHJlY2F0ZShtZXNzYWdlKSB7XG4gIC8vIE9ubHkgbG9nIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIG9uY2UuXG4gIGlmICghbG9nZ2VkRGVwcmVjYXRpb25zLmhhcyhtZXNzYWdlKSkge1xuICAgIGxvZ2dlZERlcHJlY2F0aW9ucy5hZGQobWVzc2FnZSlcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSlcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2Nsb3NlJywgJ2Nsb3NlZCcsXG4gICdjYW5jZWwnLCAnY2FuY2VsbGVkJyxcbiAgJ2RyYWcnLCAnZHJhZ2dlZCdcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZU1vZGFsIGZyb20gJ3Z1ZS1qcy1tb2RhbCdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ3Z1ZS1ub3RpZmljYXRpb24nXG5pbXBvcnQge1xuICBpc1N0cmluZywgaXNBcnJheSwgYXNBcnJheSwgaXNBYnNvbHV0ZVVybCxcbiAgbWVyZ2UsIGh5cGhlbmF0ZSwgY2FtZWxpemUsXG4gIGRlZmF1bHRGb3JtYXRzXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyBjb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC5qcydcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMvaW5kZXguanMnXG5pbXBvcnQgRGl0b1Jvb3QgZnJvbSAnLi9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSdcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGRlcHJlY2F0ZSB9IGZyb20gJy4vdXRpbHMvZGVwcmVjYXRlLmpzJ1xuaW1wb3J0IHZlcmJzIGZyb20gJy4vdmVyYnMuanMnXG5cblZ1ZS5jb25maWcucHJvZHVjdGlvblRpcCA9IGZhbHNlXG5cbi8vIEFsbCBnbG9iYWwgcGx1Z2lucyB0aGF0IG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCBvbiBgVnVlYDpcblZ1ZS51c2UoVnVlUm91dGVyKVxuVnVlLnVzZShWdWVNb2RhbCwgeyBkeW5hbWljOiB0cnVlIH0pXG5WdWUudXNlKFZ1ZU5vdGlmaWNhdGlvbnMpXG5cbmlmIChpbXBvcnQubWV0YS5ob3QpIHtcbiAgLy8gV29ya2Fyb3VuZCBmb3IgYSBzdHJhbmdlIFZpdGUgaG90LXJlbG9hZGluZyBidWcsIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVqcy92aXRlL2lzc3Vlcy83ODM5I2lzc3VlY29tbWVudC0xMzQwMTA5Njc5XG4gIGltcG9ydC5tZXRhLmhvdC5vbigndml0ZTpiZWZvcmVVcGRhdGUnLCBvbkJlZm9yZVZpdGVVcGRhdGUpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9BZG1pbiB7XG4gIGNvbnN0cnVjdG9yKGVsLCB7XG4gICAgLy8gYGRpdG9gIGNvbnRhaW5zIHRoZSBiYXNlIGFuZCBhcGkgc2V0dGluZ3MgcGFzc2VkIGZyb20gYEFkbWluQ29udHJvbGxlcmBcbiAgICBkaXRvID0ge30sXG4gICAgYXBpLFxuICAgIHZpZXdzID0ge30sXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICB0aGlzLmVsID0gZWxcbiAgICAvLyBNZXJnZSBpbiBgYXBpYCBzZXR0aW5ncyBhcyBwYXNzZWQgZnJvbSBgY29uZmlnLmFkbWluYCBhbmQgdGhyb3VnaCB0aGVcbiAgICAvLyBgQWRtaW5Db250cm9sbGVyYCB3aXRoIGBhcGlgIHZhbHVlcyBmcm9tIGZyb20gJ2FkbWluL2luZGV4LmpzJ1xuICAgIC8vIE5PVEU6IGBBZG1pbkNvbnRyb2xsZXJgIHByb3ZpZGVzIGBkaXRvLmFwaS5iYXNlYFxuICAgIHRoaXMuYXBpID0gYXBpID0gbWVyZ2UoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBtZXJnZSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gYXBpLnVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgdGhpcy5yb290ID0gbmV3IFZ1ZSh7XG4gICAgICBlbCxcbiAgICAgIHJvdXRlcjogbmV3IFZ1ZVJvdXRlcih7XG4gICAgICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICAgICAgYmFzZTogZGl0by5iYXNlLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pLFxuICAgICAgY29tcG9uZW50czogeyBEaXRvUm9vdCB9LFxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4gY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgcm9vdCBjb250YWluZXIncyBpZCwgYXMgcmVxdWlyZWQgYnkgaG90LXJlbG9hZGluZzpcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpZDogZWwuaWRcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAgIC4uLnR5cGVzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9ICgke3Jlc3BvbnNlLnN0YXR1c1RleHR9KWApXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChhcGksIHtcbiAgdXJsLFxuICBtZXRob2QgPSAnZ2V0JyxcbiAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYHF1ZXJ5YCBvbiAyMDIyLTExLTAxLFxuICAvLyByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueSBtb3JlLlxuICBwYXJhbXMgPSBudWxsLFxuICBxdWVyeSA9IHBhcmFtcyB8fCBudWxsLFxuICBoZWFkZXJzID0gbnVsbCxcbiAgZGF0YSA9IG51bGxcbn0pIHtcbiAgaWYgKHBhcmFtcykge1xuICAgIGRlcHJlY2F0ZShgcmVxdWVzdC5wYXJhbXMgaXMgZGVwcmVjYXRlZC4gVXNlIGFjdGlvbi5tZXRob2QgYW5kIGFjdGlvbi5wYXRoIGluc3RlYWQuYClcbiAgfVxuXG4gIGNvbnN0IGlzQXBpVXJsID0gYXBpLmlzQXBpVXJsKHVybClcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5IH0pLCB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAuLi4oZGF0YSAmJiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihpc0FwaVVybCAmJiBhcGkuaGVhZGVycyksXG4gICAgICAuLi5oZWFkZXJzXG4gICAgfSxcbiAgICBjcmVkZW50aWFsczogaXNBcGlVcmwgJiYgYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgICA/ICdpbmNsdWRlJ1xuICAgICAgOiAnc2FtZS1vcmlnaW4nXG4gIH0pXG5cbiAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJlc3BvbnNlLmRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlKVxuICB9XG4gIHJldHVybiByZXNwb25zZVxufVxuXG5mdW5jdGlvbiBpc0FwaVVybChhcGksIHVybCkge1xuICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxufVxuXG5mdW5jdGlvbiBnZXRBcGlVcmwoYXBpLCB7IHVybCwgcXVlcnkgfSkge1xuICBpZiAoIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGNvbWJpbmVVcmxzKGFwaS51cmwsIHVybClcbiAgfVxuICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICBjb25zdCBzZWFyY2ggPSBmb3JtYXRRdWVyeShxdWVyeSlcbiAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0/JHtzZWFyY2h9YCA6IHVybFxufVxuXG5mdW5jdGlvbiBjb21iaW5lVXJscyhiYXNlVXJsLCByZWxhdGl2ZVVybCkge1xuICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVXJsICYgcmVsYXRpdmVVcmw6XG4gIHJldHVybiBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3JlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cblxuZnVuY3Rpb24gZm9ybWF0UXVlcnkocXVlcnkpIHtcbiAgY29uc3QgZW50cmllcyA9IHF1ZXJ5XG4gICAgPyBpc0FycmF5KHF1ZXJ5KVxuICAgICAgPyBxdWVyeVxuICAgICAgOiBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICA6IFtdXG4gIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgIC8vIEV4cGFuZCBhcnJheSB2YWx1ZXMgaW50byBtdWx0aXBsZSBlbnRyaWVzIHVuZGVyIHRoZSBzYW1lIGtleSwgc29cbiAgICAvLyBgZm9ybWF0UXVlcnkoeyBmb286IFsxLCAyXSwgYmFyOiAzIH0pYCA9PiAnZm9vPTEmZm9vPTImYmFyPTMnLlxuICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgKGVudHJpZXMsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBhc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWxdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gICkudG9TdHJpbmcoKVxufVxuXG5mdW5jdGlvbiBvbkJlZm9yZVZpdGVVcGRhdGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50LnR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgLy8gUGF0Y2ggYGV2ZW50LnVwZGF0ZXNgIHRvIHJlbW92ZSB0aGUgdmVyc2lvbiBxdWVyeSBwYXJhbWV0ZXIgZnJvbSBwYXRoLFxuICAgIC8vIHNvIHRoYXQgdGhlIHVwZGF0ZSBnZXRzIHBpY2tlZCB1cC5cbiAgICAvLyBXaHkgdGhlIHN0b3JlZCBgZGVwc2AgYXJlIG1pc3NpbmcgdGhpcyBwYXJ0IG9mIHRoZSBVUkwsIEkgY2Fubm90IHNheeKAplxuICAgIGNvbnN0IHVwZGF0ZXMgPSBbXVxuICAgIGZvciAoY29uc3QgdXBkYXRlIG9mIGV2ZW50LnVwZGF0ZXMpIHtcbiAgICAgIHVwZGF0ZXMucHVzaCh1cGRhdGUpIC8vIEtlZXAgdGhlIG9yaWdpbmFsIHVwZGF0ZS5cbiAgICAgIGNvbnN0IGFjY2VwdGVkUGF0aCA9IHVwZGF0ZS5hY2NlcHRlZFBhdGgucmVwbGFjZSgvXFw/dj1bMC05YS1mXSsmL2ksICc/JylcbiAgICAgIGlmIChhY2NlcHRlZFBhdGggIT09IHVwZGF0ZS5hY2NlcHRlZFBhdGgpIHtcbiAgICAgICAgdXBkYXRlcy5wdXNoKHsgLi4udXBkYXRlLCBhY2NlcHRlZFBhdGggfSlcbiAgICAgIH1cbiAgICB9XG4gICAgZXZlbnQudXBkYXRlcyA9IHVwZGF0ZXNcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFwcFN0YXRlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJjb250ZXh0cyIsImdldCIsImNvbnRleHQiLCJrZXkiLCJkZWZhdWx0VmFsdWUiLCJvYmplY3QiLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJzZXQiLCJEaXRvQ29udGV4dCIsImNvbXBvbmVudCIsInBhcmVudEl0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwiZXZlbnRzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJfYSIsImNiIiwicXVldWUiLCJyZXNvbHZlIiwibmV4dCIsInJlc3VsdCIsInJlcyIsImVycm9yIiwidGFyZ2V0IiwidHlwZUNoZWNrZXJzIiwiaXNCb29sZWFuIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsImlzRGF0ZSIsImlzT2JqZWN0IiwiaXNSZWdFeHAiLCJ0eXBlQ29udmVydGVycyIsImFzQXJyYXkiLCJpc01hdGNoaW5nVHlwZSIsInR5cGVzIiwidHlwZSIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwiaGFzUmVzb3VyY2UiLCJzY2hlbWEiLCJnZXRSZXNvdXJjZSIsImRlZmF1bHRzIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5IiwiRGl0b01peGluIiwidWlkIiwia2V5T3JEYXRhUGF0aCIsImRlZiIsImNvbnZlcnRlZCIsIm5hbWUiLCJsYWJlbGl6ZSIsImJ1dHRvbiIsInZlcmIiLCJkcmFnZ2FibGUiLCJmYWxsYmFjayIsInF1ZXJ5IiwiY29tcG9uZW50cyIsImJ1dHRvbnMiLCJzZXR0aW5ncyIsInJlamVjdCIsIkRpdG9Db21wb25lbnQiLCJ1cmwiLCJtZXRob2QiLCJpbnRlcm5hbCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY2FjaGUiLCJjYWNoZVBhcmVudCIsImxvYWRDYWNoZSIsImNhY2hlS2V5IiwibG9jYWxlIiwiZm9ybWF0IiwiYSIsImJvZHkiLCJhY2Nlc3NvciIsIndhdGNoIiwiaGFuZGxlcnMiLCJleHByIiwiYWRkRXZlbnQiLCJoeXBoZW5hdGUiLCJoYXNMaXN0ZW5lcnMiLCJwYXJlbnRIYXNMaXN0ZW5lcnMiLCJnZXRDb250ZXh0IiwicGFyYW1zIiwiaXNDcmVkaXRDYXJkIiwiZGVjaW1hbHMiLCJtYXRjaCIsImlzRG9tYWluIiwiaXNFbWFpbCIsImlzSG9zdG5hbWUiLCJtYXgiLCJtaW4iLCJwYXNzd29yZCIsImlzVXJsIiwiVmFsaWRhdGlvbk1peGluIiwibm90aWZ5IiwiaXNWYWxpZCIsInJ1bGUiLCJzZXR0aW5nIiwidmFsaWRhdG9yIiwidmFsaWRhdGlvbnMiLCJ2YWxpZGF0ZSIsIm1lc3NhZ2UiLCJhZGRMYWJlbCIsImVycm9ycyIsImZvY3VzIiwiZ2V0U2NoZW1hQWNjZXNzb3IiLCJnZXRTdG9yZUFjY2Vzc29yIiwidWlkTWFwIiwiZ2V0VWlkIiwiaXRlbUlkIiwiU2NoZW1hR3JhcGgiLCJfX3B1YmxpY0ZpZWxkIiwic3ViR3JhcGgiLCJwYXJ0IiwicmVsYXRlZERhdGFQYXRoIiwibmFub2lkIiwiZmxhdHRlbiIsImdyYXBoIiwiZW50cmllcyIsIiRzZXR0aW5ncyIsInN1YktleSIsInNvdXJjZVNjaGVtYSIsImNsaXBib2FyZCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDb21wb25lbnRzIiwidW5rbm93blR5cGVSZXBvcnRlZCIsInJlZ2lzdGVyVHlwZUNvbXBvbmVudCIsImdldFR5cGVDb21wb25lbnQiLCJhbGxvd051bGwiLCJmb3JFYWNoU2NoZW1hIiwic2NoZW1hcyIsImZvckVhY2hTY2hlbWFDb21wb25lbnQiLCJpc1NpbmdsZUNvbXBvbmVudFZpZXciLCJzb21lU2NoZW1hQ29tcG9uZW50IiwiaXNTY2hlbWEiLCJpc0Zvcm0iLCJpc1ZpZXciLCJnZXRTY2hlbWFJZGVudGlmaWVyIiwicmVzb2x2ZVNjaGVtYSIsInVud3JhcE1vZHVsZSIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwia2V5cyIsInJlc29sdmVTY2hlbWFzIiwidW5yZXNvbHZlZFNjaGVtYXMiLCJyZXNvbHZlSXRlbSIsIm1hcENvbmN1cnJlbnRseSIsIml0ZW0iLCJyZXNvbHZlUGFuZWxzIiwicGFuZWxzIiwicHJvY2Vzc1ZpZXciLCJhcGkiLCJyb3V0ZXMiLCJjaGlsZHJlbiIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsInByb2Nlc3NDb21wb25lbnQiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyIsImxldmVsIiwiX2IiLCJnZXRUeXBlT3B0aW9ucyIsInByb21pc2VzIiwicHJvY2Vzc0Zvcm1zIiwiZm9ybSIsImZvcm1zIiwicmVzb2x2ZUZvcm0iLCJoYXNGb3JtU2NoZW1hIiwiaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyIsImdldFZpZXdTY2hlbWEiLCJ2aWV3Iiwidmlld1NjaGVtYSIsInZpZXdDb21wb25lbnQiLCJnZXRWaWV3RWRpdFBhdGgiLCJnZXRGb3JtU2NoZW1hcyIsIm1vZGlmeUZvcm0iLCJjb21wYWN0IiwiZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMiLCJnZXRJdGVtRm9ybVNjaGVtYSIsImhhc0xhYmVsIiwiaXNDb21wYWN0IiwiaXNJbmxpbmVkIiwiaXNOZXN0ZWQiLCJzaG91bGRPbWl0UGFkZGluZyIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwiaWdub3JlTWlzc2luZ1ZhbHVlIiwidHlwZU9wdGlvbnMiLCJoYXNMYWJlbHMiLCJjaGVja0NvbXBvbmVudHMiLCJzZXREZWZhdWx0cyIsInByb2Nlc3NTY2hlbWFEYXRhIiwiY29tcHV0ZVZhbHVlIiwicm9vdERhdGEiLCJjb21wdXRlIiwiVnVlIiwiY2xvbmVJdGVtIiwiY29weSIsIm9yZGVyS2V5IiwicHJvY2Vzc0RhdGEiLCJzY2hlbWFPbmx5IiwicHJvY2Vzc2VkRGF0YSIsIndyYXBQcmltaXRpdmVzIiwiYiIsImlkMSIsImlkMiIsImV4Y2x1ZGUiLCJwcm9jZXNzIiwicHJvY2Vzc1ZhbHVlIiwicHJvY2Vzc0JlZm9yZSIsInByb2Nlc3NBZnRlciIsInByb2Nlc3NDb21wb25lbnRzIiwiZ2V0RGF0YVBhdGgiLCJjb21wb25lbnRTY2hlbWEiLCJjb21wb25lbnREYXRhUGF0aCIsInByb2Nlc3NJdGVtIiwicHJvY2Vzc2VkSXRlbSIsInRhYiIsInBhbmVsIiwiZ2V0QWxsUGFuZWxTY2hlbWFzIiwiZ2V0TmFtZWRTY2hlbWFzIiwiZGVzY3JpcHRpb25zIiwidG9PYmplY3QiLCJhcnJheSIsInRvU2NoZW1hIiwiY2FtZWxpemUiLCJnZXRCdXR0b25TY2hlbWFzIiwiZ2V0VHlwZSIsInNjaGVtYU9yVHlwZSIsImdldFNvdXJjZVR5cGUiLCJnZXRQYW5lbFNjaGVtYSIsInRhYkNvbXBvbmVudCIsImdldFBhbmVsU2NoZW1hcyIsInNjaGVtYUNvbXBvbmVudCIsImlzT2JqZWN0U291cmNlIiwiaXNMaXN0U291cmNlIiwiZ2V0SXRlbUlkIiwiZ2V0SXRlbVVpZCIsIlR5cGVNaXhpbiIsInBhcnNlIiwibGFiZWwiLCJuYXRpdmVGaWVsZCIsInRleHRGaWVsZCIsImF0dHJpYnV0ZXMiLCJsaXN0ZW5lcnMiLCJhZGQiLCJlbGVtZW50IiwibWl4aW5zIiwiY29tcCIsImN0b3IiLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJSb3V0ZU1peGluIiwidG8iLCJmcm9tIiwibWF0Y2hlZCIsImkiLCJyZWNvcmQiLCJicmVhZGNydW1iIiwicm91dGVDb21wb25lbnRzIiwib2siLCJ0ZW1wbGF0ZVBhdGgiLCJyb290UGF0aCIsImdldENvbW1vblByZWZpeCIsInJlbmRlciIsIl92bSIsIl9oIiwiX2MiLCJzdGF0aWNSZW5kZXJGbnMiLCJfX3Z1ZTJfc2NyaXB0IiwiaXNMb2FkaW5nIiwiY29weURhdGUiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiJGV2ZW50Iiwid2Vla2RheSIsIndlZWtkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJnZXRMb2NhbGVOYW1lcyIsIm5ld1ZhbCIsIm9sZFZhbCIsIm1vZGUiLCJvdmVycmlkZXMiLCJzdGVwIiwiY3VycmVudFZhbHVlIiwic3RhdGUiLCJob3IiLCJ2ZXIiLCJlbnRlciIsImN1cnJlbnRNb2RlIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJ0b2RheSIsImlzRGF5IiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJhZGRFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJlbCIsImJvdW5kcyIsInRyaWdnZXJMZWZ0IiwidHJpZ2dlclRvcCIsInRyaWdnZXJXaWR0aCIsInRyaWdnZXJIZWlnaHQiLCJwb3B1cFdpZHRoIiwicG9wdXBIZWlnaHQiLCJwYXJ0MSIsInBhcnQyIiwid2luV2lkdGgiLCJ3aW5IZWlnaHQiLCJsZWZ0IiwidG9wIiwidHJpZ2dlckJvdW5kcyIsIiQkYSIsIiQkZWwiLCIkJGMiLCIkJHYiLCIkJGkiLCJzaXplIiwidGl0bGUiLCJkaXNhYmxlZCIsInJlYWRvbmx5IiwicGxhY2Vob2xkZXIiLCJhdXRvY29tcGxldGUiLCIkYXR0cnMiLCJpbnB1dCIsImdldExlbmd0aCIsIlRyaWdnZXIiLCJDYWxlbmRhciIsIklucHV0RmllbGQiLCJkZWZhdWx0Rm9ybWF0cyIsInNjcm9sbFRvIiwiZHVyYXRpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwZXJUaWNrIiwic2V0U2VsZWN0aW9uIiwiZmllbGQiLCJzdGFydCIsImVuZCIsInJhbmdlIiwiZm9yY2UiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0Iiwic2VsZWN0ZWQiLCJsZW5ndGgiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsInBhZ2UiLCJwYWdlU2l6ZSIsImN1cnJlbnRQYWdlU2l6ZSIsInNob3dQcmV2Iiwic2hvd05leHQiLCJ0b3RhbCIsImN1cnJlbnRQYWdlIiwic2hvd0xlbmd0aCIsIm51bVBhZ2VzIiwicGFnZVJhbmdlIiwiY2hlY2tlZCIsInVuY2hlY2tlZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRTdHlsZSIsInN0eWxlIiwiZm9yY2VSZXBhaW50Iiwid2lkdGgiLCJoZWlnaHQiLCJEb21NaXhpbiIsInJlbW92ZSIsImhhbmRsZXIiLCJlcnIiLCJ0ZXh0IiwibG9nIiwic3RyaXBUYWdzIiwibm90aWZpY2F0aW9ucyIsImR1cmF0aW9uRmFjdG9yIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJyb3V0ZSIsIlNwaW5uZXIiLCJQdWxzZUxvYWRlciIsImNvbG9yIiwicHJvcHMiLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImRpYWxvZ0RhdGEiLCJjb250ZW50IiwiYXNPYmplY3QiLCJwcmVmaXgiLCJzdWZmaXgiLCJJdGVtTWl4aW4iLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsIlRyYW5zaXRpb25IZWlnaHQiLCJwYW5lIiwiY3VycmVudFRhYiIsImZpcnN0IiwiZGVmYXVsdFRhYiIsImRhdGFQYXRoT3JOYW1lIiwiZXhwYW5kIiwiY29tcG9uZW50c0J5RGF0YVBhdGgiLCJkYXRhUGF0aHMiLCJjaGVjayIsInVubWF0Y2hlZCIsImVycnMiLCJmdWxsRGF0YVBhdGgiLCJkYXRhUGF0aFBhcnRzIiwiZm91bmQiLCJwcm9wZXJ0eSIsInN1YkNvbXBvbmVudHMiLCJyZWdpc3RyeSIsImVudHJpZXNCeURhdGFQYXRoIiwiX3JlZiIsIm5lc3RlZERhdGFQYXRoIiwic3RvcmUiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiY29udGFpbmVyQ2xhc3MiLCJiYXNpcyIsImdyb3ciLCJzaHJpbmsiLCJiYXNpc0lzQXV0byIsInRhYlNjaGVtYSIsImJ1dHRvblNjaGVtYSIsImJ1dHRvbkRhdGFQYXRoIiwibm9kZSIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCJyZXBvcnQiLCJqc29uIiwiX2QiLCJkZWluZGVudCIsIiRzY2hlbWEiLCJfZSIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsImlzQ3JlYXRpbmciLCJwcm92aWRlc0RhdGEiLCJtZXJnZSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJtYWluU2NoZW1hQ29tcG9uZW50IiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dG9uUmVzb3VyY2UiLCJzdWNjZXNzIiwiX3Jlc291cmNlIiwiX21ldGhvZCIsIkRpdG9Gb3JtIiwic2NvcGUiLCJuYXZpZ2F0ZSIsIlBhZ2luYXRpb24iLCJPcmRlcmVkTWl4aW4iLCJvbGRJbmRleCIsIm5ld0luZGV4IiwibGlzdCIsInBhZ2luYXRpb25SYW5nZSIsIm9mZnNldCIsIlZ1ZURyYWdnYWJsZSIsImNoaWxkcmVuU2NoZW1hIiwiZWRpdFBhdGgiLCJjaGlsZHJlbk9wZW4iLCJudW1DaGlsZHJlbiIsImNyZWF0YWJsZSIsImVkaXRhYmxlIiwiY29sdW1uIiwib3JkZXIiLCJlc2NhcGVIdG1sIiwiaCIsIlR5cGVDb21wb25lbnQiLCJUeXBlQ29tcG9uZW50JDEiLCJkZWZpbml0aW9uIiwiRGF0YU1peGluIiwicmVzb2x2ZUNvdW50ZXIiLCJhc3luY0VudHJ5IiwicmVzb2x2ZWREYXRhIiwibG9hZCIsIk9wdGlvbnNNaXhpbiIsImNvbnZlcnRWYWx1ZSIsImNvbnZlcnQiLCJzZWFyY2giLCJmaWx0ZXIiLCJkZWJvdW5jZSIsImRlYm91bmNlQXN5bmMiLCJvcHRpb24iLCJncm91cGVkIiwicmVzdWx0cyIsImdyb3VwIiwiZmluZE9wdGlvbiIsImdyb3VwQnkiLCJvcHRpb25WYWx1ZSIsIm9wdGlvbkxhYmVsIiwicHJvY2Vzc1JlbGF0ZSIsImZsYXNrIiwiQ29kZUZsYXNrIiwiY2hhbmdlZCIsImlnbm9yZVdhdGNoIiwiaWdub3JlVXBkYXRlIiwib25DaGFuZ2UiLCJvbkZvY3VzIiwib25CbHVyIiwic2V0Q29kZSIsImNvZGUiLCJzZXRWYWx1ZSIsIlNrZXRjaFBpY2tlciIsInRpbnljb2xvciIsImZvY3VzZWQiLCJEYXRlVGltZVBpY2tlciIsIlNvdXJjZU1peGluIiwiZGVmYXVsdFNvcnQiLCJkaXJlY3Rpb24iLCJjb2xsYXBzaWJsZSIsImxpc3REYXRhIiwib25Db21wbGV0ZSIsIm9wZW5lZCIsImNhbGxPbkNvbXBsZXRlIiwicm91dGVDb21wb25lbnQiLCJpbmxpbmVkIiwicGFyYW0iLCJtZXRhIiwiZm9ybU1ldGEiLCJjaGlsZFJvdXRlcyIsImdldFBhdGhXaXRoUGFyYW0iLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZmxhdFJvdXRlcyIsInN1YlJvdXRlcyIsImNoaWxkUm91dGUiLCJmaWx0ZXJDb21wb25lbnRzIiwiZGF0ZUZvcm1hdCIsImdldEZpbHRlcnNQYW5lbCIsImZpbHRlcnMiLCJwcm94eSIsInBhcnNlRmlsdGVyc0RhdGEiLCJnZXRGaWx0ZXJzQ29tcG9uZW50cyIsImZvcm1hdEZpbHRlcnNEYXRhIiwiY29tcHMiLCJnZXRDb21wb25lbnRzRm9yRmlsdGVyIiwiZmlsdGVyc0RhdGEiLCJnZXRMaXN0Q29tcG9uZW50Iiwib2JqIiwiZmlsdGVyc0RhdGFQYXRoIiwiaWNvbiIsImlzQWN0aXZlIiwib25DbGljayIsIkVkaXRvckNvbnRlbnQiLCJFZGl0b3JNZW51QmFyIiwiSWNvbiIsImNvbW1hbmQiLCJtYXJrQnV0dG9ucyIsImJhc2ljTm9kZUJ1dHRvbnMiLCJvdGhlck5vZGVCdXR0b25zIiwidG9vbEJ1dHRvbnMiLCJlbmFibGVSdWxlcyIsInNldFZhbHVlRGVib3VuY2VkIiwiZ2V0VmFsdWUiLCJvblVwZGF0ZSIsImdldEhUTUwiLCJFZGl0b3IiLCJnZXRQb2ludCIsIngiLCJ5IiwicHJldlkiLCJtb3VzZW1vdmUiLCJhdHRycyIsImRpYWxvZ0NvbXBvbmVudCIsImhyZWYiLCJtYXJrcyIsIm5vZGVzIiwidG9vbHMiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiU21hbGwiLCJDb2RlIiwiTGlua1dpdGhUaXRsZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIYXJkQnJlYWsiLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkhpc3RvcnkiLCJleHRlbnNpb24iLCJzZXR0aW5nc05hbWUiLCJhZGRCdXR0b24iLCJpZ25vcmVBY3RpdmUiLCJkZXNjcmlwdGlvbiIsInNldHRpbmdOYW1lIiwidW5kZXJzY29yZSIsImF0dHIiLCJNYXJrIiwidG9nZ2xlTWFyayIsIkxpbmsiLCJkb20iLCJWdWVNdWx0aXNlbGVjdCIsInNlYXJjaGFibGUiLCJ0YWdnYWJsZSIsInRhZyIsIk51bWJlck1peGluIiwiJCRzZWxlY3RlZFZhbCIsIm8iLCJ2YWwiLCJvcHQiLCJTd2l0Y2hCdXR0b24iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiZmlsZSIsIlZ1ZVVwbG9hZCIsImFzRmlsZXMiLCJhY2NlcHQiLCJtYXhTaXplIiwicGFyc2VGaWxlU2l6ZSIsIm5ld0ZpbGUiLCJvbGRGaWxlIiwieGhyIiwiZmlsZXMiLCJ1cGxvYWQiLCJsb2dnZWREZXByZWNhdGlvbnMiLCJkZXByZWNhdGUiLCJWdWVSb3V0ZXIiLCJWdWVNb2RhbCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJEaXRvQWRtaW4iLCJkaXRvIiwidmlld3MiLCJnZXRBcGlVcmwiLCJpc0FwaVVybCIsInVzZXJzIiwicGFyZW50UGF0aCIsIkRpdG9Sb290IiwiUmVxdWVzdEVycm9yIiwiaGVhZGVycyIsImlzQWJzb2x1dGVVcmwiLCJjb21i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QUFFLEVBQUEsQ0FDQSxLQUFBLENBQUEsYUFBQUMsQ0FBQSxFQUFBLEtBQ0EsQ0FBQSxLQUFBakIsRUFBQSxNQUFBQyxDQUFBLEVBQUEsS0FBQSxhQUNBZ0IsRUFBQSxZQUFBLEVBQ0FBLEVBQUEsU0FBQSxFQUFBRCxDQUNBLEVBQ0EsS0FBQSxRQUFBLENBQ0EsTUFBQWYsRUFDQSxJQUFBLEtBQUEsSUFDQSxLQUFBLGVBQUFELEVBQUFDLENBQUEsRUFDQSxLQUFBLGFBQUEsUUFBQSxDQUNBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsU0FBQWUsRUFBQSxDQUNBLEtBQUEsUUFBQSxDQUNBLEtBQUEsS0FBQSxhQUFBLFlBQUEsRUFBQUEsQ0FDQSxDQUFBLENBQ0EsRUFFQSxXQUFBakIsRUFBQW1CLEVBQUFuRyxFQUFBLEdBQUEsQ0FDQW1HLElBQUEsYUFDQW5HLEVBQ0EsS0FBQSxRQUFBLENBQ0EsS0FBQWdGLEVBQUEsWUFBQSxFQUNBLE1BQUFBLEVBQUEsU0FBQSxFQUNBLElBQUFBLEVBQUEsUUFBQSxDQUNBLENBQUEsRUFFQSxLQUFBLGFBQUFBLEVBRUEsS0FBQSxNQUFBLFFBQUEsS0FBQSxZQUFBLEVBRUEsRUFFQSxZQUFBRSxFQUFBLENBQ0EsS0FBQSxRQUFBLEtBQUEsRUFHQSxLQUFBLFFBQUEsQ0FBQSxNQUFBQSxFQUFBLElBQUEsQ0FBQSxDQUFBLENBQ0EsRUFFQSxXQUFBRCxFQUFBLENBQ0EsS0FBQSxRQUFBLE9BQUEsRUFDQSxLQUFBLFFBQUEsQ0FBQSxLQUFBQSxFQUFBLENBQ0EsRUFFQSxhQUFBQSxFQUFBQyxFQUFBLENBQ0EsT0FBQUEsRUFBQSxJQUNBRCxJQUNBQyxFQUFBLEdBQ0FBLEVBQUEsSUFDQUQsSUFDQUMsRUFBQSxJQUVBLENBQUEsS0FBQUQsRUFBQSxNQUFBQyxDQUFBLENBQ0EsRUFFQSxhQUFBRixFQUFBLENBQUEsS0FBQUMsRUFBQSxNQUFBQyxFQUFBLElBQUFDLENBQUEsRUFBQSxDQUNBLE9BQUFILEVBQUEsZUFBQSxLQUFBLE9BQUEsQ0FDQSxLQUFBQyxHQUFBLFVBQ0EsTUFBQUMsR0FBQSxPQUNBLElBQUFDLEdBQUEsU0FDQSxDQUFBLENBQ0EsRUFFQSxlQUFBSCxFQUFBLENBQ0EsTUFBQUMsRUFBQSxLQUFBLHFCQUFBRCxFQUFBLFlBQUEsQ0FBQSxFQUNBLE1BQUEsR0FBQUMsT0FBQUEsRUFBQSxHQUNBLEVBRUEsZUFBQUEsRUFBQUMsRUFBQSxDQUNBLE9BQUEsSUFBQSxLQUFBRCxFQUFBQyxFQUFBLEVBQUEsQ0FBQSxFQUFBLFFBQUEsQ0FDQSxFQUVBLHFCQUFBRCxFQUFBLENBRUEsTUFBQSxDQUFBLEdBREFBLEVBQUEsU0FBQSxFQUNBLE1BQUEsRUFBQSxFQUFBLElBQ0EsRUFFQSxTQUFBLENBQUEsSUFBQW1CLEVBQUEsSUFBQUMsRUFBQSxNQUFBQyxDQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsWUFBQUMsRUFBQSxhQUFBTCxDQUFBLEVBQUEsS0FDQSxHQUFBRSxHQUFBQyxFQUFBLENBQ0EsT0FBQUUsRUFBQSxDQUNBLElBQUEsTUFDQSxLQUFBLFFBQUEsQ0FDQSxJQUFBTCxFQUFBLFFBQUEsRUFBQUUsRUFBQUMsRUFBQSxDQUNBLENBQUEsRUFDQSxNQUNBLElBQUEsUUFDQSxLQUFBLFFBQUEsQ0FDQSxNQUFBSCxFQUFBLFNBQUEsRUFBQUUsRUFBQUMsRUFBQSxDQUNBLENBQUEsRUFDQSxNQUNBLElBQUEsT0FDQSxLQUFBLFFBQUEsQ0FDQSxLQUFBSCxFQUFBLFlBQUEsRUFBQUUsRUFBQUMsRUFBQSxDQUNBLENBQUEsRUFDQSxLQUNBLENBQ0EsTUFBQSxXQUNBQyxFQUFBLENBQ0EsT0FBQUMsRUFBQSxDQUNBLElBQUEsTUFDQSxLQUFBLFdBQUFMLENBQUEsRUFDQSxNQUNBLElBQUEsUUFDQSxLQUFBLFFBQUEsS0FBQSxFQUNBLE1BQ0EsSUFBQSxPQUNBLEtBQUEsUUFBQSxPQUFBLEVBQ0EsS0FDQSxDQUNBLE1BQUEsR0FFQSxFQUVBLGlCQUFBLENBQ0EsS0FBQSxVQUFBLENBQUEsRUFDQSxLQUFBLFVBQUEsQ0FBQSxFQUVBLEtBQUEsQ0FBQSxhQUFBQSxDQUFBLEVBQUEs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RUFBQSxVQUFBLEtBQUEsU0FBQSxHQUFBLEVBQUEsRUFDQSxFQUNBLE9BQUEsS0FBQSxjQUNBbVAsRUFBQSxLQUFBLFdBQUEsRUFBQSxJQUVBQSxDQUNBLEVBRUEsWUFBQSxDQUNBLE9BQUEsS0FBQSxPQUFBLFlBQUEsS0FBQSxTQUFBLEVBQ0EsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxLQUFBQyxFQUFBLENBQ0EsS0FBQSxVQUFBQSxHQUFBLEtBQUEsVUFDQSxFQUVBLFVBQUExQixFQUFBQyxFQUFBLENBQ0EsQ0FBQUQsR0FBQSxDQUFBQyxJQUNBLEtBQUEsTUFBQSxjQUFBRCxDQUFBLEVBQ0FBLEdBQ0EsS0FBQSxVQUFBLElBQUEsS0FBQSxlQUFBLENBQUEsRUFHQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsQ0FBQSxRQUFBMkIsRUFBQSxNQUFBQyxDQUFBLEVBQUEsS0FBQSxNQUNBLEdBQUEsS0FBQSxVQUFBLFFBQUEsQ0FDQSxNQUFBalQsRUFBQWdULEVBQUEsY0FBQSxpQkFBQSxFQUNBaFQsSUFDQSxLQUFBLFlBQUEyUyxHQUFBM1MsRUFBQSxDQUNBLE1BQUEsSUFBQSxDQUNBLEtBQUEsVUFBQSxFQUNBLEVBQ0EsS0FBQSxJQUFBLENBQ0EsS0FBQSxVQUFBLEVBQ0EsQ0FDQSxDQUFBLEdBSUEsS0FBQSxzQkFBQSxDQUFBLEtBQUEsYUFJQSxLQUFBLFlBQUEyUyxHQUFBLE9BQUEsQ0FDQSxRQUFBN1QsR0FBQSxDQUVBLEtBQUEsV0FDQSxDQUFBbVUsRUFBQSxTQUFBblUsRUFBQSxNQUFBLEdBQ0EsQ0FBQWtVLEVBQUEsU0FBQWxVLEVBQUEsTUFBQSxJQUVBLEtBQUEsVUFBQSxHQUVBLEVBRUEsS0FBQSxJQUFBLENBQ0EsS0FBQSxVQUFBLEVBQ0EsQ0FDQSxDQUFBLEdBR0EsS0FBQSxhQUNBLEtBQUEsVUFBQSxHQUVBLEVBRUEsU0FBQSxDQUNBLEtBQUEsVUFBQSxLQUFBLElBQ0EsRUFFQSxlQUFBLFVBQ0FVLEVBQUEsS0FBQSxjQUFBLE1BQUFBLEVBQUEsVUFDQTJKLEVBQUEsS0FBQSxjQUFBLE1B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UUFBQTBFLEdBQUEsU0FBQUMsR0FBQSxXQUFBQyxDQUFBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLEtBQUEsUUFBQSxJQUFBLEVBQ0EsV0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLE9BQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsYUFBQSxFQUNBLFlBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLE9BQUEsRUFDQSxXQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQUMsRUFBQSxlQUFBLElBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLFdBQUEsRUFBQSxRQUFBLFNBQUEsRUFDQSxhQUFBLENBQUEsS0FBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLGFBQUEsS0FBQSxNQUNBLFVBQUEsS0FBQSxLQUNBLGFBQUEsR0FDQSxRQUFBLEVBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxTQUFBLENBQ0EsT0FBQSxLQUFBLGNBQUEsS0FBQSxTQUNBLEVBRUEsYUFBQSxDQUNBLE9BQUEvUixFQUFBLE9BQUEsS0FBQSxhQUFBLENBQ0EsT0FBQSxLQUFBLE9BQ0EsS0FBQSxLQUFBLFdBQ0EsS0FBQSxFQUNBLENBQUEsR0FBQSxFQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQWtPLEVBQUFDLEVBQUEsQ0FDQSxDQUFBRCxHQUFBLENBQUFDLElBQ0EsS0FBQSxhQUFBRCxFQUVBLEVBRUEsYUFBQWIsRUFBQSxDQUNBLENBQUFBLEdBQUEsQ0FBQSxLQUFBLFFBQ0EsS0FBQSxRQUFBLEdBQ0EsS0FBQSxNQUFBLFFBQUFBLENBQUEsRUFFQSxFQUVBLEtBQUF1QyxFQUFBLENBQ0EsS0FBQSxVQUFBQSxDQUNBLEVBRUEsVUFBQTFCLEVBQUFDLEVBQUEsQ0FD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QUEsRUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxXQUFBLEVBQUEsUUFBQSxTQUFBLEVBQ0EsYUFBQSxDQUFBLEtBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxFQUNBLGVBQUEsQ0FBQSxLQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsRUFDQSxlQUFBLENBQUEsS0FBQSxTQUFBLFFBQUEsSUFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLGFBQUEsS0FBQSxNQUNBLFVBQUEsS0FBQSxLQUNBLGFBQUEsR0FDQSxVQUFBLEVBQ0EsUUFBQSxFQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsU0FBQSxDQUNBLE9BQUEsS0FBQSxjQUFBLEtBQUEsU0FDQSxFQUVBLGFBQUEsQ0FDQSxPQUFBLEtBQUEsYUFDQSxHQUNBLEtBQUEsUUFBQSxLQUFBLElBQUEsS0FDQSxLQUFBLFFBQUEsS0FBQSxNQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsTUFBQSxJQUNBLEVBQ0EsRUFFQSxhQUFBLENBQ0EsT0FDQSxLQUFBLGNBSUExRSxFQUFBLElBQUEsS0FBQSxDQUFBLEtBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxFQUFBLFlBQUEsQ0FBQSxDQUFBLENBRUEsRUFFQSxLQUFBLENBQ0EsS0FBQSxDQUNBLE9BQUEsS0FBQSxZQUFBLFNBQUEsQ0FDQSxFQUVBLElBQUFLLEVBQUEsQ0FDQSxLQUFBLFFBQUEsQ0FBQSxLQUFBQSxFQUFBLENBQ0EsQ0FDQSxFQUVBLE9BQUEsQ0FDQSxLQUFBLENBQ0EsT0FBQSxLQUFBLFlBQUEsV0FBQSxDQUNBLEVBRUEsSUFBQUMsRUFBQSxDQUNBLEtBQUEsUUFBQSxDQUFBLE9BQUFBLEVBQUEsQ0FDQSxDQUNBLEVBRUEsT0FBQSxDQUNBLEtBQUEsQ0FDQSxPQUFBLEtBQUEsWUFBQSxXQUFBLENBQ0EsRUFFQSxJQUFBQyxFQUFBLENBQ0EsS0FBQSxRQUFBLENBQUEsT0FBQUEsRUFBQSxDQUNBLENBQ0EsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBTyxFQUFBQyxFQUFBLENBQ0EsQ0FBQUQsR0FBQSxDQUFBQyxJQUNBLEtBQUEsYUFBQUQsRUFFQSxFQUVBLGFBQUFiLEVBQUEsQ0FDQSxDQUFBQSxHQUFBLENBQUEsS0FBQSxRQUNBLEtBQUEsUUFBQSxHQUNBLEtBQUEsTUFBQSxRQUFBQSxDQUFBLEVBQ0EsS0FBQSxVQUFBLEVBRUEsRUFFQSxZQUFBLGtCQUVBLFVBQUEsa0JBRUEsS0FBQXVDLEVBQUEsQ0FDQSxLQUFBLFVBQUFBLENBQ0EsRUFFQSxVQUFBMUIsRUFBQUMsRUFBQSxDQUNBRCxJQUNBLEtBQUEsZ0JBQUEsRUFDQSxLQUFBLFVBQUEsQ0FBQSxHQUVBLENBQUFBLEdBQUEsQ0FBQUMsR0FDQSxLQUFBLE1BQUEsY0FBQUQsQ0FBQSxDQUVBLEVBRUEsUUFBQUEsRUFBQUMsRUFBQSxDQUNBLENBQUFELEdBQUEsQ0FBQUMsR0FDQSxLQUFBLE1BQUFELEVBQUEsUUFBQSxNQUFBLENBRUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLElBQUEsT0FBQSxJQUFBLENBQ0EsS0FBQSxVQUNBLEtBQUEsUUFBQSxHQUNBLEtBQUEsTUFBQSxTQUFBLEtBQUEsWUFBQSxFQUVBLENBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxRQUFBalQsRUFBQSxDQUNBLE9BQUEsSUFBQUEsR0FBQSxNQUFBLEVBQUEsQ0FDQSxFQUVBLFFBQUFvVCxFQUFBLENBQ0EsS0FBQSxhQUFBakIsRUFBQSxLQUFBLFlBQUEsQ0FDQSxHQUFBaUIsRUFDQSxZQUFBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsZ0JBQUFvRSxFQUFBLEdBQUEsQ0FDQSxHQUFBLEtBQUEsV0FBQUEsRUFBQSxDQUNBLE1BQUFILEVBQUEsRUFBQSxLQUFBLFVBQ0EsS0FBQSxVQUFBLElBQUFGLEdBQUEsS0FBQSxNQUFBLE1BQUFFLEVBQUFBLEVBQUEsQ0FBQSxDQUFBLEVBRUEsRUFFQSxVQUFBTCxFQUFBLElBQUEsQ0FDQSxNQUFBUyxFQUFBLENBQUFDLEVBQUExWCxJQUFBLENBQ0EsTUFBQTRCLEVBQUEsS0FBQSxNQUFBOFYsQ0FBQSxFQUNBLEdB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LENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsT0FBQSxFQUFBLFFBQUEsRUFBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxRQUFBLEtBQUEsS0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLFNBQUEsQ0FDQSxLQUFBLENBQUEsUUFBQXlHLEVBQUEsU0FBQXRDLENBQUEsRUFBQSxLQUNBLE1BQUEsQ0FDQSxlQUFBc0MsRUFDQSxnQkFBQXRDLENBQ0EsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxLQUFBLENBQUEsT0FBQSxDQUFBLFFBQUFzQyxFQUFBLFVBQUFDLENBQUEsRUFBQSxDQUFBLENBQUEsRUFBQSxLQUVBZCxFQUFBLEtBQUEsSUFBQSxFQUFBYSxHQUFBLFlBQUFBLEVBQUEsT0FBQUMsR0FBQSxZQUFBQSxFQUFBLE1BQUEsRUFDQSxNQUFBLENBQ0EsaUJBQUFkLEVBQUEsR0FBQUEsRUFBQSxTQUFBLElBQ0EsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxLQUFBLENBQUEsR0FBQXJZLEVBQUEsS0FBQWdFLEVBQUEsU0FBQTRTLEVBQUEsT0FBQUksQ0FBQSxFQUFBLEtBQ0EsTUFBQSxDQUFBLEdBQUFoWCxFQUFBLEtBQUFnRSxFQUFBLFNBQUE0UyxFQUFBLEdBQUFJLENBQUEsQ0FDQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUF4VyxFQUFBLENBQ0EsS0FBQSxRQUFBQSxDQUNBLEVBRUEsUUFBQTBZLEVBQUEsQ0FDQUEsSUFBQSxLQUFBLFFBQ0EsS0FBQSxNQUFBLFFBQUFBLENBQUEsRUFDQSxLQUFBLE1BQUEsU0FBQUEsQ0FBQSxFQUVBLENBQ0EsRUFFQSxRQUFBLENBQ0EsT0FBQSxDQUNBLEtBQUEsTUFBQSxNQUFBLE1BQUEsQ0FDQSxDQUNBLENBQ0EsNElDOUlBekcsR0FBQSxDQUNBLFdBQUEsR0FFQSxNQUFBLENBQ0EsUUFB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QUFBLENBQ0EsTUFBQSxDQUNBLGlCQUFBLElBQUEsSUFDQSxDQUNBLEVBRUEsT0FBQSxDQUNBLHdCQUNBLEVBRUEsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxLQUFBLENBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxLQUFBLENBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxNQUFBLEVBQUEsUUFBQSxJQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsWUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxlQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFdBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsV0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxLQUFBLENBQUEsS0FBQXhiLEdBQUEsS0FBQSxPQUNBLE1BQUEsQ0FFQSxHQUNBQSxHQUFBWSxFQUFBLFdBQUFaLENBQUEsRUFDQUEsRUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLEVBQ0FBLEVBRUEsbUJBQUEsQ0FBQSxFQUNBLGNBQUEsQ0FBQSxFQUNBLGVBQUEsQ0FBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsaUJBQUEsQ0FFQSxPQUFBLElBQ0EsRUFFQSx1QkFBQSxDQUlBLE9BQUEsS0FBQSxXQUFBLEtBQUEsS0FBQSxRQUFBLGVBQ0EsRUFFQSxjQUFBLENBQ0EsTUFBQWlMLEVBQUFpRixHQUFBLEtBQUEsT0FBQSxPQUFBLEVBQUEsRUFDQSxVQUFBOEwsS0FBQSxLQUFBLE1BQ0EvUSxFQUFBLEtBQUEsR0FBQStRLEVBQUEsWUFBQSxFQUVBLE9BQUEvUSxDQUNBLEVBRUEsTUFBQSxDQUNBLE9BQUFxRSxFQUFBLEtBQUEsT0FBQSxJQUFBLENBQ0EsRUFFQSxhQUFBLFNBQ0EsTUFBQTJNLElBQUFsYSxFQUFBLEtBQUEsT0FBQSxPQUFBLFlBQUFBLEVBQUEsTUFBQSxLQUFBLEtBQ0FvTixFQUFBOE0sR0FBQSxLQUFBLGFBQUEsS0FBQSxLQUFBQSxDQUFBLENBQUEsRUFDQUEsSUFDQXZRLEVBQUEsS0FBQSxhQUFBLFlBQUFBLEVBQUEsT0FBQSxLQUNBLE9BQUF5RCxJQUFBOE0sR0FFQSxLQUFBLFFBQUEsUUFBQSxDQUFBLEtBQUE5TSxDQUFBLENBQUEsRUFFQUEsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxHQUFBLEtBQUEsS0FBQSxDQUNBLElBQUErTSxFQUFBLEtBQ0EsVUFBQS9NLEtBQUEsT0FBQSxPQUFBLEtBQUEsSUFBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLFdBQUFnTixDQUFBLEVBQUFoTixFQUNBLEdBQUF2TyxFQUFBQSxXQUFBdWIsQ0FBQSxFQUNBQSxFQUFBLEtBQUEsS0FBQSxLQUFBLE9BQUEsRUFDQUEsRUFFQSxPQUFBaE4sRUFFQStNLElBQ0FBLEVBQUEvTSxHQUdBLE9BQUErTSxFQUVBLEVBRUEsV0FBQSxPQUNBLE9BQUFuYSxFQUFBLEtBQUEsU0FBQSxZQUFBQSxFQUFBLFNBQ0EsRUFFQSxlQUFBLENBQ0EsT0FBQSxLQUFBLFlBQUEsQ0FBQSxPQUFBLFNBQUEsV0FBQSxHQUFBLENBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxDQUNBLFFBQUEsS0FBQSxPQUFBLEtBQ0EsR0FBQSxLQUFBLFlBQUEsQ0FBQSxPQUFBLFlBQUEsV0FBQSxHQUFBLENBQ0EsQ0FDQSxFQVFBLE1BQUEsQ0FDQSxPQUFBLEtBQUEsSUFDQSxFQUVBLFVBQUEsQ0FDQSxPQUFBLEtBQUEsUUFDQSxFQUVBLGVBQUEsQ0FDQSxPQUFBLEtBQUEsYUFDQSxFQUVBLGVBQUEsQ0FDQSxPQUFBLEtBQUEsYUFDQSxFQUVBLFlBQUEsQ0FDQSxPQUFBdEMsR0FBQSxLQUFBLFNBQUEsS0FBQSxTQUFBLEVBQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxPQUFBLEtBQUEsU0FDQSxLQUFBLGtCQUFBLEtBQUEsYUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxPQUFBLEtBQUEsY0FBQWlTLEdBQUFBLEVBQUEsT0FBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLE9BQUEsS0FBQSxjQUFBQSxHQUFBQSxFQUFBLFNBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxPQUFBLEtBQUEsZUFBQUEsR0FBQUEsRUFBQSxPQUFBLENBQ0EsRUFFQSxhQUFBLENBQ0EsT0FBQSxLQUFBLGVBQUFBLEdBQUFBLEVBQUEsV0FBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLEtBQUEsSUFDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxLQUFBLE9BQUEsS0FBQSxXQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFNBQUEsQ0FBQSxDQUFBLEtBQUEsSUFDQSxFQUVBLGFBQUEsQ0FDQSxLQUFBLENBQUEsV0FBQWhOLEdBQUEsS0FBQSxPQUNBLE1BQUEsQ0FBQSxDQUFBQSxHQUFBLE9BQUEsS0FBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FDQSxFQUVBLE9BQUFvRCxHQUFBLFNBQUEsQ0FDQSxTQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsU0FDQSxDQUNBLENBQUEsRUFFQSxZQUFBLENBQ0EsT0FBQSxPQUFBLE9BQUEsS0FBQSxrQkFBQSxDQUNBLEVBRUEsT0FBQSxDQUNBLE9BQUEsT0FBQSxPQUFBLEtBQUEsYUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLE9BQUEsT0FBQSxPQUFBLEtBQUEsY0FBQSxDQUNBLEVBRUEsc0JBQUEsQ0FDQSxPQUFBLEtBQUEsdUJBQUEsS0FBQSxrQkFBQSxDQUNBLEVBRUEsaUJBQUEsQ0FDQSxPQUFBLEtBQUEsdUJBQUEsS0FBQSxhQUFBLENBQ0EsRUFF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TUFBQSxDQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxXQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLFFBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxLQUFBLEVBQUEsUUFBQSxJQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLFdBQUEsQ0FDQSxPQUFBLEtBQUEsU0FBQSxLQUFBLE9BQUEsSUFBQSxDQUNBLEVBRUEsYUFBQSxDQUNBLE9BQUEsS0FBQSxVQUFBLFdBQUEsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxPQUFBLEtBQUEsVUFBQSxVQUFBLEdBQUEsQ0FBQSxDQUFBLEtBQUEsUUFDQSxFQUVBLGFBQUEsQ0FDQSxPQUFBLEtBQUEsVUFBQSxXQUFBLEdBQUEsQ0FBQSxDQUFBLEtBQUEsVUFDQSxFQUVBLGFBQUEsQ0FDQSxPQUFBLEtBQUEsVUFBQSxXQUFBLENBQ0EsRUFFQSxrQkFBQSxPQUNBLFFBRUEvQyxFQUFBLEtBQUEsT0FBQSxZQUFBLFlBQUFBLEVBQUEsUUFJQSxLQUFBLFdBQ0EsR0FBQWtjLEVBQUFBLFdBQUEsS0FBQSxNQUFBLE1BQUEsS0FBQSxLQUFBLGFBRUEsSUFFQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFVBQUE5WixFQUFBLENBSUEsTUFBQSxDQUFBLEVBQUEsS0FBQUEsQ0FBQSxHQUFBLEtBQUEs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Q1YsS0FBQXhzQixFQUFPLElBQ1QsRUFBRyxTQUNHc0csR0FDRnFsQixHQUFVLDBFQUEwRSxFQUd0RixNQUFNUSxFQUFXaGhCLEVBQUksU0FBU3BHLENBQUcsRUFFM0JJLEVBQVcsTUFBTSxNQUFNZ0csRUFBSSxVQUFVLENBQUUsSUFBQXBHLEVBQUssTUFBQU4sQ0FBSyxDQUFFLEVBQUcsQ0FDMUQsT0FBUU8sRUFBTyxZQUFhLEVBQzVCLEdBQUloRixHQUFRLENBQUUsS0FBTSxLQUFLLFVBQVVBLENBQUksR0FDdkMsUUFBUyxDQUNQLEdBQUltc0IsR0FBWWhoQixFQUFJLFFBQ3BCLEdBQUdxaEIsQ0FDSixFQUNELFlBQWFMLEtBQVlwcUIsRUFBQW9KLEVBQUksT0FBSixNQUFBcEosRUFBVSxhQUMvQixVQUNBLGFBQ1IsQ0FBRyxFQU1ELElBSkkySixFQUFBdkcsRUFBUyxRQUFRLElBQUksY0FBYyxJQUFuQyxNQUFBdUcsRUFBc0MsU0FBUyxzQkFDakR2RyxFQUFTLEtBQU8sTUFBTUEsRUFBUyxLQUFNLEdBR25DLENBQUNBLEVBQVMsR0FDWixNQUFNLElBQUlvbkIsR0FBYXBuQixDQUFRLEVBRWpDLE9BQU9BLENBQ1QsQ0FFQSxTQUFTZ25CLEdBQVNoaEIsRUFBS3BHLEVBQUssQ0FDMUIsTUFBTyxDQUFDMG5CLEVBQWEsY0FBQzFuQixDQUFHLEdBQUtBLEVBQUksV0FBV29HLEVBQUksR0FBRyxDQUN0RCxDQUVBLFNBQVMrZ0IsR0FBVS9nQixFQUFLLENBQUUsSUFBQXBHLEVBQUssTUFBQU4sQ0FBSyxFQUFJLENBQ2pDZ29CLEVBQUFBLGNBQWMxbkIsQ0FBRyxJQUNwQkEsRUFBTTJuQixHQUFZdmhCLEVBQUksSUFBS3BHLENBQUcsR0FHaEMsTUFBTTRkLEVBQVNnSyxHQUFZbG9CLENBQUssRUFDaEMsT0FBT2tlLEVBQVMsR0FBRzVkLEtBQU80ZCxJQUFXNWQsQ0FDdkMsQ0FFQSxTQUFTMm5CLEdBQVlFLEVBQVNDLEVBQWEsQ0FFekMsTUFBTyxHQUFHRCxFQUFRLFFBQVEsT0FBUSxFQUFFLEtBQUtDLEVBQVksUUFBUSxPQUFRLEVBQUUsR0FDekUsQ0FFQSxTQUFTRixHQUFZbG9CLEVBQU8sQ0FDMUIsTUFBTWlFLEVBQVVqRSxFQUNabEQsRUFBQUEsUUFBUWtELENBQUssRUFDWEEsRUFDQSxPQUFPLFFBQVFBLENBQUssRUFDdEIsQ0FBRSxFQUNOLE9BQU8sSUFBSSxnQkFHVGlFLEVBQVEsT0FDTixDQUFDQSxFQUFTLENBQUNsSSxFQUFLRyxDQUFLLElBQU0sQ0FDekIsVUFBVzZwQixLQUFPeG5CLFVBQVFyQyxDQUFLLEVBQzdCK0gsRUFBUSxLQUFLLENBQUNsSSxFQUFLZ3FCLENBQUcsQ0FBQyxFQUV6QixPQUFPOWhCLENBQ1IsRUFDRCxDQUFFLENBQ0gsQ0FDRixFQUFDLFNBQVUsQ0FDZCIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOls2MCw2MV19
4
+ ${h.message}
5
+ `))}const{$schema:o,...s}=t||{};return o===((d=this.schemaComponent)==null?void 0:d.schema.name)?s:null},async checkClipboard(){this.copyEnabled=!!this.data,this.pasteEnabled=!!await this.getClipboardData(!1)},async onCopy(){var t,o,s;let e=(t=this.schemaComponent)==null?void 0:t.clipboardData;try{e=e&&this.copyData(e),this.appState.clipboardData=e;try{const a=JSON.stringify(e,null,2);await((s=(o=navigator.clipboard)==null?void 0:o.writeText)==null?void 0:s.call(o,a)),await this.checkClipboard()}catch(a){console.error(a,a.name,a.message)}}catch(a){console.error(a),alert(a.message)}},async onPaste(){let e=await this.getClipboardData(!0);try{e=e&&this.pasteData(e),e&&this.schemaComponent.setData(e)}catch(t){console.error(t),alert(t.message)}}}}),Ba=b($a,[["render",Ca]]),Vt={data(){return{isLoading:!1}},methods:{setLoading(e,{updateRoot:t=!1,updateView:o=!1}={}){!this.isLoading^!e&&(this.isLoading=!!e,t&&this.rootComponent.registerLoading(e),o&&this.viewComponent.setLoading(this.isLoading))}}},Dt={mixins:[De,Vt],provide(){return{$resourceComponent:()=>this,$verbs:()=>this.verbs,$isPopulated:()=>this.hasData}},data(){return{loadedData:null}},computed:{resourceComponent(){return this},resource(){return this.getResource()},providesData(){return!!this.resource},linksToView(){return!1},isTransient(){const e=this.formComponent;return!this.providesData&&!this.linksToView||e&&(e.isTransient||e.isCreating)},transientNote(){return this.isTransient&&"<b>Note</b>: the parent still needs to be saved in order to persist this change."},shouldLoad(){return!this.isTransient&&!this.isLoading},hasData(){return!!this.loadedData},verbs(){return this.getVerbs()},paginationRange(){const{paginate:e}=this.sourceSchema;if(this.isListSource&&e){const{page:t=0}=this.query||{},o=t*e;return[o,o+e-1]}},queryParams(){const e=this.paginationRange,{page:t,...o}=this.query||{};return{...o,...e&&{range:e.join(",")}}}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var e,t;return F((e=this.sourceSchema)==null?void 0:e.resource,{type:"collection",parent:((t=this.parentFormComponent)==null?void 0:t.resource)??null})},getVerbs(){const e=this.$verbs();return this.isTransient?{...e,create:"add",created:"added",save:"apply",saved:"applied",delete:"remove",deleted:"removed"}:e},clearData(){this.loadedData=null},setData(e){this.loadedData=e},setupData(){this.ensureData()},ensureData(){this.shouldLoad&&(this.hasData?this.reloadData():this.loadData(!0))},reloadData(){this.loadData(!1)},loadData(e){this.isTransient||(e&&this.clearData(),this.requestData())},createData(e,t){return xe(e,t?{type:t}:{},this)},requestData(){const e=this.queryParams;this.handleRequest({method:"get",query:e},(t,o)=>{var s;if(t){if(o){const{data:a}=o;if((a==null?void 0:a.type)==="FilterValidation"&&((s=this.onFilterErrors)!=null&&s.call(this,a.errors)))return!0;if(this.isUnauthorizedError(o))return!0}}else this.setData(o.data),this.emitSchemaEvent("load")})},isValidationError(e){return(e==null?void 0:e.status)===400},isUnauthorizedError(e){return(e==null?void 0:e.status)===401},async handleRequest({method:e,resource:t=this.resource,query:o,data:s},a){const r={updateRoot:!0,updateView:this.isInView};this.setLoading(!0,r);const i={method:e,resource:t,data:s,query:o};try{const l=await this.sendRequest(i);a(null,l)}catch(l){const{response:d}=l;if(!a(l,d)){const h=d==null?void 0:d.data,p=c.isString(h==null?void 0:h.type)?c.labelize(h.type):"Error",u=(h==null?void 0:h.message)??l;this.notify({type:"error",title:p,text:u})}}this.setLoading(!1,r)},getPayloadData(e,t){return["post","put","patch"].includes(t)&&(e.getSchemaValue(["resource","data"])||e.processedItem)},async submit(e){const t=F(e.schema.resource,{parent:this.resource});if(t){const{method:o}=t,s=this.getPayloadData(e,o);return this.submitResource(e,t,o,s)}return!1},async submitResource(e,t,o,s,{setData:a=!1,onSuccess:r,onError:i,notifySuccess:l=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:d=h=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${h?":":""}`,(h==null?void 0:h.message)||h]})}={}){return new Promise(h=>{this.handleRequest({method:o,resource:t,data:s},async(p,u)=>{const g=u==null?void 0:u.data;if(p){const f=this.isValidationError(u)&&g.errors;if(f)await this.showValidationErrors(f,!0);else{const m=c.isObject(g)?g:p;i==null||i(m),await this.emitButtonEvent(e,"error",{notify:d,error:m})}h(!1)}else a&&g&&this.setData(g),r==null||r(),await this.emitButtonEvent(e,"success",{notify:l}),h(!0)})})},async emitButtonEvent(e,t,{notify:o,error:s}){const a=new D(e,{nested:!1,data:this.data,itemLabel:this.itemLabel,error:s}),r=await e.emitEvent(t,{context:a});return o&&r===void 0&&!a.wasNotified&&o(s),r}}};function wa(e){return new URL(`file:${e}`).pathname}const Va=["data-resource"],Da={type:"submit",disabled:""};function Sa(e,t,o,s,a,r){const i=n.resolveComponent("router-view"),l=n.resolveComponent("dito-buttons"),d=n.resolveComponent("dito-schema");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-form dito-scroll-parent",{"dito-form-nested":e.isNestedRoute}]),"data-resource":e.sourceSchema.path},[e.isLastUnnestedRoute||e.isNestedRoute?n.createCommentVNode("",!0):n.withDirectives((n.openBlock(),n.createBlock(i,{key:0},null,512)),[[n.vShow,!e.isActive]]),n.withDirectives((n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.isNestedRoute?"div":"form"),{class:"dito-scroll",onSubmit:t[0]||(t[0]=n.withModifiers(()=>{},["prevent"]))},{default:n.withCtx(()=>[n.createVNode(d,{schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:e.isLoading,menuHeader:!0},{buttons:n.withCtx(()=>[n.createVNode(l,{class:"dito-buttons-round dito-buttons-main dito-buttons-large",buttons:e.buttonSchemas,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:e.isLoading},null,8,["buttons","dataPath","data","meta","store","disabled"])]),_:1},8,["schema","dataPath","data","meta","store","disabled"]),n.withDirectives(n.createElementVNode("button",Da,null,512),[[n.vShow,!1]])]),_:1},544)),[[n.vShow,e.isActive]])],10,Va)}const Pa=C.component("dito-form",{mixins:[ct,Dt],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const e=this.getVerbs(),{isCreating:t,providesData:o}=this;return{...e,submit:t?e.create:e.save,submitted:t?e.created:e.saved,cancel:o?e.cancel:e.close,cancelled:o?e.cancelled:e.closed}},schema(){return this.getItemFormSchema(this.sourceSchema,this.data||{type:this.type},this.context)||{}},buttonSchemas(){return te(c.merge({cancel:{type:"button",events:{click:()=>this.cancel()}},submit:!this.isMutating&&{type:"submit",closeForm:!0,events:{click:({component:e})=>e.submit()}}},this.schema.buttons))},isActive(){return this.isLastRoute||this.isLastUnnestedRoute},isTransient(){return!this.providesData},isCreating(){return this.param==="create"},isDirty(){var e;return!this.isMutating&&!!((e=this.mainSchemaComponent)!=null&&e.isDirty)},isMutating(){return!!this.sourceSchema.mutate},selectedTab(){var e;return((e=this.mainSchemaComponent)==null?void 0:e.selectedTab)||null},type(){return this.$route.query.type},itemId(){return this.isCreating?null:this.param??null},method(){return this.isCreating?"post":"patch"},resource(){const e=this.getResource();return me(this.itemId,e)||e},breadcrumbPrefix(){return c.capitalize(this.isCreating?this.verbs.create:this.verbs.edit)},data(){return this.createdData||this.loadedData||this.inheritedData||null},dataPath(){return this.getDataPathFrom(this.dataComponent)},sourceData(){let e=this.routeRecord?this.parentRouteComponent.data:null;if(e){const t=c.parseDataPath(this.getDataPathFrom(this.parentRouteComponent)),o=this.routeRecord.path.split("/"),s=o.slice(o.length-t.length);this.sourceKey=null;const a=t[t.length-1];U(this.sourceSchema)&&a==="create"&&t.length--;for(let r=0,i=t.length;r<i&&e;r++){const l=t[r],d=/^:id/.test(s[r])?l==="create"?null:this.findItemIdIndex(this.sourceSchema,e,l):l;r===i-1?this.sourceKey=d:e=e[d]}}return e},inheritedData(){if(this.isTransient&&this.clonedData===void 0&&this.sourceData&&this.sourceKey!==null){let e=this.sourceData[this.sourceKey];return this.isMutating||(this.clonedData=e=c.clone(e)),e===null&&!this.isCreating&&U(this.sourceSchema)&&this.$router.push({path:`${this.path}/create`}),e}return this.clonedData},hasData(){return!!this.data},itemLabel(){return this.getItemLabel(this.sourceSchema,this.data,{extended:!0})}},watch:{sourceData:"clearClonedData",create:"setupData"},methods:{emitSchemaEvent(e,t){return this.mainSchemaComponent.emitEvent(e,t)},getDataPathFrom(e){return this.api.denormalizePath(this.path.slice((e.isView?0:e.path.length)+1))},setupData(){this.isCreating?this.createdData||(this.createdData=this.createData(this.schema,this.type)):this.ensureData()},setSourceData(e){if(this.sourceData&&this.sourceKey!==null){const{mainSchemaComponent:t}=this;return this.sourceData[this.sourceKey]=t.filterData(e),t.onChange(),!0}return!1},addSourceData(e){var t;return U(this.sourceSchema)?this.setSourceData(e):!!((t=this.sourceData)!=null&&t.push(e))},clearData(){this.setData(null)},setData(e){this.isTransient?this.setSourceData(e):(this.createdData=null,this.loadedData=e)},clearClonedData(e,t){e!==t&&(this.clonedData=void 0)},async cancel(){return this.close()},async close(){return this.navigate(this.parentRouteComponent.path)},getSubmitVerb(e=!0){return this.isCreating?e?"create":"created":e?"submit":"submitted"},async submit(e,{validate:t=!0,closeForm:o=!1}={}){if(t&&!this.validateAll())return!1;const s=h=>this.verbs[this.getSubmitVerb(h)],a=F(e.schema.resource,{parent:this.resource}),r=a||this.resource,i=(r==null?void 0:r.method)||this.method,l=this.getPayloadData(e,i);let d;if(!a&&this.isTransient?d=await this.submitTransient(e,r,i,l,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:h=>this.emitSchemaEvent("error",{context:{error:h}}),notifySuccess:()=>{const h=s(!1);this.notify({type:"info",title:this.isCreating?`Item ${c.capitalize(h)}`:`Change ${c.capitalize(h)}`,text:[this.isCreating?`${this.itemLabel} was ${h}.`:`Changes to ${this.itemLabel} were ${h}.`,this.transientNote]})},notifyError:()=>{const h=s(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${h} ${this.itemLabel}.`})}}):d=await this.submitResource(e,r,i,l,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:h=>this.emitSchemaEvent("error",{context:{error:h}}),notifySuccess:()=>{const h=s(!1);this.notify({type:"success",title:`Successfully ${c.capitalize(h)}`,text:`${this.itemLabel} was ${h}.`})},notifyError:h=>{const p=s(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${p} ${this.itemLabel}${h?":":""}`,(h==null?void 0:h.message)||h]})}}),d){if(this.resetValidation(),o||e.closeForm)this.close();else if(this.isCreating){const h=this.getItemId(this.schema,this.data);this.$router.replace({path:wa(`${this.path}/../${h}`)})}}return d},async submitTransient(e,t,o,s,{onSuccess:a,onError:r,notifySuccess:i,notifyError:l}){const d=this.isCreating?this.addSourceData(s):this.setSourceData(s);if(d)a==null||a(),await this.emitButtonEvent(e,"success",{notify:i});else{const h="Could not submit transient item";r==null||r(h),await this.emitButtonEvent(e,"error",{notify:l,error:h})}return d}}}),St=b(Pa,[["render",Sa]]),nc="",Ea=C.component("dito-form-nested",{extends:St}),Na={key:0,class:"dito-errors"};function Oa(e,t,o,s,a,r){return e.errors?(n.openBlock(),n.createElementBlock("div",Na,[n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.errors,i=>(n.openBlock(),n.createElementBlock("li",null,n.toDisplayString(i),1))),256))])])):n.createCommentVNode("",!0)}const oc="",_a=C.component("dito-errors",{props:{errors:{type:Array,default:null}}}),Fa=b(_a,[["render",Oa]]),La={class:"dito-scopes"},Ta=["title","onClick"];function ja(e,t,o,s,a,r){const i=n.resolveComponent("router-link");return n.openBlock(),n.createElementBlock("div",La,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.scopes,(l,d)=>(n.openBlock(),n.createBlock(i,{key:d,to:e.getScopeLink(l),custom:""},{default:n.withCtx(({navigate:h})=>[n.createElementVNode("button",{class:n.normalizeClass(["dito-button",{"dito-selected":l.name===e.query.scope}]),type:"button",title:l.hint||e.getLabel(l),onClick:h},n.toDisplayString(e.getLabel(l)),11,Ta)]),_:2},1032,["to"]))),128))])}const sc="",Ma=C.component("dito-scopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(e){const t={...this.query,scope:e.name};return t.page&&(t.page=0),this.getQueryLink(t)}}}),Ra=b(Ma,[["render",ja]]);function qa(e,t,o,s,a,r){const i=n.resolveComponent("pagination");return n.openBlock(),n.createBlock(i,{pageSize:e.limit,total:e.total,page:e.page,"onUpdate:page":t[0]||(t[0]=l=>e.page=l)},null,8,["pageSize","total","page"])}const Ia=C.component("dito-pagination",{components:{Pagination:Ro},props:{query:{type:Object,required:!0},limit:{type:Number,required:!0},total:{type:Number,required:!0}},computed:{page:{get(){return(+this.query.page||0)+1},set(e){this.page!==e&&this.$router.push(this.getQueryLink({...this.query,page:e-1}))}}}}),za=b(Ia,[["render",qa]]),Se={mixins:[De],data(){return{dragging:!1}},methods:{onStartDrag(){this.dragging=!0},onEndDrag({oldIndex:e,newIndex:t}){this.dragging=!1,e!==t&&this.onChange()},updateOrder(e,t,o){const{orderKey:s}=e;if(s){const a=(o==null?void 0:o[0])||0;for(let r=0;r<t.length;r++)t[r][s]=r+a}return t}}},Aa=["id"],Ua={key:0,class:"dito-tree-header"},Ha=["innerHTML"],Ka={key:1,class:"dito-tree-info"},Wa={key:1,class:"dito-tree-leaf"},Ya=["innerHTML"],Ja={key:2,class:"dito-buttons dito-buttons-small"},Qa={key:1,class:"dito-properties"};function Ga(e,t,o,s,a,r){const i=n.resolveComponent("dito-label"),l=n.resolveComponent("dito-table-cell"),d=n.resolveComponent("dito-tree-item",!0),h=n.resolveComponent("vue-sortable");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-tree-item",{"dito-dragging":e.dragging,"dito-active":e.active}]),id:e.dataPath,style:n.normalizeStyle(e.level>0&&{"--level":e.level})},[e.label?(n.openBlock(),n.createElementBlock("div",Ua,[e.numEntries?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-tree-branch",onClick:t[0]||(t[0]=n.withModifiers(p=>e.opened=!e.opened,["stop"]))},[e.numEntries?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-chevron",{"dito-opened":e.opened}])},null,2)):n.createCommentVNode("",!0),n.createElementVNode("div",{class:"dito-tree-label",innerHTML:e.label},null,8,Ha),e.details?(n.openBlock(),n.createElementBlock("div",Ka,n.toDisplayString(e.details),1)):n.createCommentVNode("",!0)])):(n.openBlock(),n.createElementBlock("div",Wa,[n.createElementVNode("div",{class:"dito-tree-label",innerHTML:e.label},null,8,Ya)])),e.hasEditButtons?(n.openBlock(),n.createElementBlock("div",Ja,[e.draggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:0,class:"dito-button"},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.editable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:1,class:"dito-button",type:"button",onClick:t[1]||(t[1]=(...p)=>e.onEdit&&e.onEdit(...p))},e.getButtonAttributes(e.verbs.edit)),null,16)):n.createCommentVNode("",!0),e.deletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:2,class:"dito-button",type:"button",onClick:t[2]||(t[2]=(...p)=>e.onDelete&&e.onDelete(...p))},e.getButtonAttributes(e.verbs.delete)),null,16)):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),e.properties?n.withDirectives((n.openBlock(),n.createElementBlock("table",Qa,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.properties,p=>(n.openBlock(),n.createElementBlock("tr",null,[n.createElementVNode("td",null,[p.label!==!1?(n.openBlock(),n.createBlock(i,{key:0,dataPath:e.getPropertyDataPath(p),label:e.getLabel(p)},null,8,["dataPath","label"])):n.createCommentVNode("",!0)]),n.createVNode(l,{cell:p,schema:p,dataPath:e.getPropertyDataPath(p),data:e.data,meta:e.nestedMeta,store:e.store,disabled:e.disabled},null,8,["cell","schema","dataPath","data","meta","store","disabled"])]))),256))],512)),[[n.vShow,e.opened]]):n.createCommentVNode("",!0),e.childrenSchema?n.withDirectives((n.openBlock(),n.createBlock(h,{key:2,list:e.childrenItems,options:e.getDragOptions(e.childrenDraggable,!0),itemKey:p=>e.getItemUid(e.childrenSchema,p.data),onStart:e.onStartDrag,onEnd:t[3]||(t[3]=p=>e.onEndDrag(p,e.childrenSchema))},{item:n.withCtx(({element:p,index:u})=>[n.createVNode(d,{schema:e.childrenSchema,dataPath:e.getItemDataPath(e.childrenSchema,u),data:p.data,path:p.path,open:p.open,active:p.active,draggable:e.childrenDraggable,label:e.getItemLabel(e.childrenSchema,p.data,{index:u}),level:e.level+1},null,8,["schema","dataPath","data","path","open","active","draggable","label","level"])]),_:1},8,["list","options","itemKey","onStart"])),[[n.vShow,e.opened]]):n.createCommentVNode("",!0)],14,Aa)}const ac="",Xa=C.component("dito-tree-item",{components:{VueSortable:ae.Sortable},mixins:[Se],inject:["container"],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Array,Object],default:null},path:{type:String,default:""},open:{type:Boolean,default:!1},active:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},label:{type:String,default:null},level:{type:Number,default:0}},data(){return{opened:this.open||this.schema.open}},computed:{meta(){return this.container.meta},store(){return this.container.store},disabled(){return this.container.disabled},nestedMeta(){return{...this.meta,schema:this.schema}},properties(){return q(this.schema.properties)},childrenSchema(){return this.schema.children},childrenList(){var t;const e=(t=this.childrenSchema)==null?void 0:t.name;return e&&this.data[e]},childrenDraggable(){var e;return((e=this.childrenList)==null?void 0:e.length)>1&&this.getSchemaValue("draggable",{type:Boolean,default:!1,schema:this.childrenSchema})},numChildren(){var e;return((e=this.childrenList)==null?void 0:e.length)||0},numProperties(){var e;return((e=this.properties)==null?void 0:e.length)||0},numEntries(){return this.numProperties+this.numChildren},childrenItems(){const{childrenSchema:e,childrenList:t}=this;if(e&&t){const{editPath:o}=this.container,s=!this.path&&e.open;return this.updateOrder(e,t.map((a,r)=>{const i=e.path&&`${this.path}/${e.path}/${r}`,l=s||o.startsWith(i)&&i.length<o.length;return{data:a,path:i,open:l,active:o===i}}))}return[]},details(){const{numChildren:e}=this;return e&&`${e} ${e===1?"item":"items"}`},hasEditButtons(){return this.draggable||this.editable||this.deletable},creatable:y("creatable",{type:Boolean,default:!1,get(e){return e&&R(this.schema)}}),editable:y("editable",{type:Boolean,default:!1,get(e){return e&&R(this.schema)}}),deletable:y("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(e){return _(this.dataPath,e.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),Za=b(Xa,[["render",Ga]]),va={class:"dito-table-head"},xa=["onClick"],er=n.createElementVNode("div",{class:"dito-order-arrows"},null,-1),tr={key:1},nr={key:0},or=[n.createElementVNode("span",null,null,-1)];function sr(e,t,o,s,a,r){const i=n.resolveComponent("router-link");return n.openBlock(),n.createElementBlock("thead",va,[n.createElementVNode("tr",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.columns,(l,d)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRender(l)?(n.openBlock(),n.createElementBlock("th",{key:0,class:n.normalizeClass(e.getColumnClass(l))},[l.sortable?(n.openBlock(),n.createBlock(i,{key:0,to:e.getSortLink(l),custom:""},{default:n.withCtx(({navigate:h})=>[n.createElementVNode("button",{class:n.normalizeClass(["dito-button",e.getSortClass(l)]),type:"button",onClick:h},[er,n.createElementVNode("span",null,n.toDisplayString(e.getLabel(l)),1)],10,xa)]),_:2},1032,["to"])):(n.openBlock(),n.createElementBlock("span",tr,n.toDisplayString(e.getLabel(l)),1))],2)):n.createCommentVNode("",!0)],64))),256)),e.hasEditButtons?(n.openBlock(),n.createElementBlock("th",nr,or)):n.createCommentVNode("",!0)])])}const ic="",ar=C.component("dito-table-head",{props:{query:{type:Object,required:!0},columns:{type:Object,required:!0},hasEditButtons:{type:Boolean,required:!0}},computed:{sort(){const e=(this.query.order||"").split(/\s+/);return{name:e[0],order:e[1]}}},methods:{getColumnClass(e){return`dito-column-${c.hyphenate(e.name)}`},getSortClass(e){return this.sort.name===e.name?`dito-selected dito-order-${this.sort.order}`:null},getSortLink(e){const t=this.sort.name===e.name&&this.sort.order==="asc"?"desc":"asc";return this.getQueryLink({...this.query,order:`${e.name} ${t}`})}}}),rr=b(ar,[["render",sr]]),ir=["innerHTML"];function lr(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("td",{class:n.normalizeClass(e.cell.class),style:n.normalizeStyle(e.cell.style)},[e.cell.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.cell.component),{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,nested:e.nested,disabled:e.disabled},null,8,["schema","dataPath","data","meta","store","nested","disabled"])):(n.openBlock(),n.createElementBlock("span",{key:1,innerHTML:e.renderCell(e.data)},null,8,ir))],6)}const dr=C.component("dito-table-cell",{props:{cell:{type:Object,required:!0},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},methods:{renderCell(e){const{name:t,render:o}=this.cell,s=e[t];return o?o.call(this,new D(this,{name:t,value:s,data:e,dataPath:_(this.dataPath,t)})):c.escapeHtml(s)}}}),cr=b(dr,[["render",lr]]);function Pt({vnode:e}){return e}Pt.props={vnode:{type:Object,required:!0}};const hr=C.component("dito-vnode",Pt),pr=Object.freeze(Object.defineProperty({__proto__:null,DitoAccount:bs,DitoButtons:ra,DitoClipboard:Ba,DitoContainer:Us,DitoCreateButton:ga,DitoDialog:kt,DitoEditButtons:da,DitoElement:Cs,DitoErrors:Fa,DitoForm:St,DitoFormNested:Ea,DitoHeader:ps,DitoLabel:Vs,DitoMenu:as,DitoPagination:za,DitoPane:qs,DitoPanel:Xs,DitoPanels:ea,DitoRoot:Ve,DitoSchema:Ns,DitoSchemaInlined:Fs,DitoScopes:Ra,DitoTableCell:cr,DitoTableHead:rr,DitoTabs:Ys,DitoTreeItem:Za,DitoVNode:hr,DitoView:ht},Symbol.toStringTag,{value:"Module"})),w={extends:C,mixins:[Q],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitPadding:!1,component:C.component,get:G,register(e,t={}){e=c.asArray(e);const o=this.component(`dito-type-${e[0]}`,t);for(const s of e)wn(s,o);return o}},ur=["id","type","title"];function mr(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("button",n.mergeProps({class:["dito-button",`dito-button-${e.verb}`],ref:"element",id:e.dataPath,type:e.type,title:e.text},e.attributes),n.toDisplayString(e.text),17,ur)}const fr=w.register(["button","submit"],{defaultValue:()=>{},excludeValue:!0,defaultWidth:"auto",computed:{verb(){return this.verbs[this.name]||this.name},text:y("text",{type:String,get(e){return e||c.labelize(this.verb)}}),closeForm:y("closeForm",{type:Boolean,default:!1})},methods:{getEvents(){const{onFocus:e,onBlur:t,onClick:o}=this;return{onFocus:e,onBlur:t,onClick:o}},async submit(e){var t;return(t=this.resourceComponent)==null?void 0:t.submit(this,e)},async onClick(){await this.emitEvent("click",{parent:this.schemaComponent})===void 0&&Te(this.schema)&&await this.submit()}}}),gr=b(fr,[["render",mr]]),br=["id"];function yr(e,t,o,s,a,r){return n.withDirectives((n.openBlock(),n.createElementBlock("input",n.mergeProps({class:"dito-checkbox",ref:"element",id:e.dataPath,type:"checkbox","onUpdate:modelValue":t[0]||(t[0]=i=>e.value=i)},e.attributes),null,16,br)),[[n.vModelCheckbox,e.value]])}const lc="",kr=w.register("checkbox",{nativeField:!0}),Cr=b(kr,[["render",yr]]),Et={mixins:[Vt],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(e,t,{resolveCounter:o=1,...s}={}){var l,d;c.isObject(e)||(e={data:e});let{data:a=void 0,dataPath:r=null}=e;const i=(l=this.asyncDataEntries)[t]||(l[t]=n.reactive({dependencyFunction:null,resolveCounter:0,resolvedData:null,resolving:!1}));if((d=i.dependencyFunction)==null||d.call(this,this.context),i.resolveCounter>0){const{resolvedData:h}=i;return--i.resolveCounter===0&&(i.resolvedData=null),h}if(i.resolving)a=null;else if(a){if(c.isFunction(a)){const h=a.call(this,this.context);c.isFunction(h)?(i.dependencyFunction=a,a=h.call(this,this.context)):a=h}c.isPromise(a)&&(i.resolving=!0,this.resolveData(a,s).then(h=>{i.resolveCounter=o,i.resolvedData=h,i.resolving=!1}),a=null)}else r&&(a=c.getValueAtDataPath(this.rootData,c.normalizeDataPath(`${this.dataPath}/${r}`)));return a},async resolveData(e,t={}){this.setLoading(!0,t);let o=null;try{o=await(c.isFunction(e)?e():e)}catch(s){this.addError(s.message||s)}return this.setLoading(!1,t),o}}},se={mixins:[Et],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const e=o=>this.relate?this.hasOption(o)?this.getValueForOption(o):null:o,t=c.isArray(this.value)?this.value.map(e).filter(o=>o!==null):e(this.value);return this.relate&&this.hasOptions&&(t===null&&this.value!==null||hn(this.value))&&(this.selectedValue=t),t},set(e){const t=o=>this.relate?this.getOptionForValue(o):o;this.value=c.isArray(e)?e.map(t):t(e)}},selectedOption(){return this.getOptionForValue(this.selectedValue)},options(){const e=this.handleDataSchema(this.schema.options,"options",{resolveCounter:1})??[];if(!c.isArray(e))throw new Error(`Invalid options data, should be array: ${e}`);return this.hasOptions=e.length>0,this.processOptions(e)},activeOptions(){return this.options},relate:y("relate",{type:Boolean,default:!1,callback:!1}),groupBy:y("groupBy",{type:String,default:null}),optionLabel:y("options.label",{type:[String,Function],default:null,get(e){return e||this.getOptionKey("label")||null}}),optionValue:y("options.value",{type:[String,Function],default:null,get(e){return e||this.relate&&"id"||this.getOptionKey("value")||null}}),searchFilter:y("search",{type:[Object,Function],default:null,get(e){if(e){const{filter:t,debounce:o}=c.isFunction(e)?{filter:e}:e;return o?c.debounceAsync(t,o):t}}}),groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(e){const[t]=this.activeOptions;return c.isObject(t)&&e in t?e:null},processOptions(e){if(e.length){if(this.relate)for(const t of e)"id"in t||cn(t,"id");if(this.groupBy){const t={};e=e.reduce((o,s)=>{const a=s[this.groupBy];let r=t[a];return r||(r=t[a]={[this.groupByLabel]:a,[this.groupByOptions]:[]},o.push(r)),r.options.push(s),o},[])}}return e},hasOption(e){return!!this.getOptionForValue(this.getValueForOption(e))},getOptionForValue(e){const t=(o,s,a)=>{for(const r of o)if(a){const i=t(r.options,s,null);if(i)return i}else if(s===this.getValueForOption(r))return r};return this.optionValue?t(this.activeOptions,e,this.groupBy):e},getValueForOption(e){const{optionValue:t}=this;return c.isString(t)?e==null?void 0:e[t]:c.isFunction(t)?t.call(this,new D(this,{option:e})):e},getLabelForOption(e){const{optionLabel:t}=this;return c.isString(t)?e==null?void 0:e[t]:c.isFunction(t)?t.call(this,new D(this,{option:e})):c.labelize(`${e}`)}},processValue(e,t,o,s){var a;if(e.relate){const r=(a=e.options)==null?void 0:a.dataPath,i=r?c.normalizeDataPath(`${o}/${r}`):null;s.addRelation(o,i,e),i&&s.setSourceRelated(i);const l=d=>d&&{id:d.id};t=c.isArray(t)?t.map(l):l(t)}return t}},$r=["id"],Br=["value"];function wr(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("ul",{class:n.normalizeClass(["dito-checkboxes",`dito-layout-${e.schema.layout||"vertical"}`]),id:e.dataPath},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.options,i=>(n.openBlock(),n.createElementBlock("li",null,[n.createElementVNode("label",null,[n.withDirectives(n.createElementVNode("input",n.mergeProps({class:"dito-checkbox",ref_for:!0,ref:"element",type:"checkbox",value:e.getValueForOption(i),"onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedOptions=l)},e.attributes),null,16,Br),[[n.vModelCheckbox,e.selectedOptions]]),n.createTextVNode(n.toDisplayString(e.getLabelForOption(i)),1)])]))),256))],10,$r)}const dc="",Vr=w.register("checkboxes",{mixins:[se],nativeField:!0,defaultValue:[],computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(e=>e)},set(e){this.selectedValue=e||[]}}}}),Dr=b(Vr,[["render",wr]]),Sr=["id"];function Pr(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",{class:"dito-code",ref:"code",id:e.dataPath,style:n.normalizeStyle(e.style)},null,12,Sr)}const cc="",Er=w.register("code",{mixins:[W],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const e=new Tt(this.$refs.code,{language:this.schema.language||"javascript",tabSize:this.schema.indentSize||2,lineNumbers:!1});let t=!1,o=!1,s=!1;const a=()=>{!this.focused&&t&&(t=!1,this.onChange())},r=()=>this.onFocus(),i=()=>{this.onBlur(),a()};this.domOn(this.$refs.code.querySelector("textarea"),{focus:r,blur:i});const l=h=>{h!==e.code&&(s=!0,e.updateCode(h))},d=h=>{h!==this.value&&(o=!0,this.value=h,t=!0,a())};e.onUpdate(h=>{s?s=!1:d(h)}),this.$watch("value",h=>{o?o=!1:l(h||"")}),l(this.value||"")},methods:{focusElement(){var e;(e=this.$el.querySelector("textarea"))==null||e.focus()}}}),Nr=b(Er,[["render",Pr]]),Or=["id"],_r={key:0,class:"dito-color-preview dito-inherit-focus"},Fr=["disabled"];function Lr(e,t,o,s,a,r){const i=n.resolveComponent("sketch-picker"),l=n.resolveComponent("trigger");return n.openBlock(),n.createBlock(l,{class:"dito-color",trigger:"click",show:e.showPopup,"onUpdate:show":t[3]||(t[3]=d=>e.showPopup=d)},{trigger:n.withCtx(()=>[n.createElementVNode("div",{class:n.normalizeClass(["dito-input",{"dito-focus":e.showPopup}])},[n.withDirectives(n.createElementVNode("input",n.mergeProps({ref:"element",id:e.dataPath,type:"input",size:"8","onUpdate:modelValue":t[0]||(t[0]=d=>e.hexValue=d)},e.attributes),null,16,Or),[[n.vModelText,e.hexValue]]),e.value?(n.openBlock(),n.createElementBlock("div",_r,[n.createElementVNode("div",{style:n.normalizeStyle({background:`#${e.hexValue||"00000000"}`})},null,4)])):n.createCommentVNode("",!0),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:1,class:"dito-button-clear dito-button-overlay",onClick:t[1]||(t[1]=n.withModifiers((...d)=>e.clear&&e.clear(...d),["stop"])),disabled:e.disabled},null,8,Fr)):n.createCommentVNode("",!0)],2)]),popup:n.withCtx(()=>[n.createVNode(i,{class:"dito-color-picker",modelValue:e.colorValue,"onUpdate:modelValue":t[2]||(t[2]=d=>e.colorValue=d),"disable-alpha":!e.alpha,"disable-fields":!e.inputs,"preset-colors":e.presets},null,8,["modelValue","disable-alpha","disable-fields","preset-colors"])]),_:1},8,["show"])}const hc="",Tr=w.register("color",{components:{Trigger:we,SketchPicker:jt.Sketch},data(){return{showPopup:!1,convertedHexValue:null}},computed:{colorValue:{get(){return this.value||{}},set(e){const t=this.colorFormat,o={hex:(e==null?void 0:e.a)<1?"hex8":"hex",rgb:"rgba"}[t]||t;o?this.value=e[o]:this.value=re(e).toString(t),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused){const e=re(this.value);e.isValid()&&(this.convertedHexValue=e.toString(e.getAlpha()<1?"hex8":"hex6").slice(1).toUpperCase())}return this.convertedHexValue},set(e){this.convertedHexValue=e}},colorFormat:y("format",{type:String,default:"hex"}),alpha:y("alpha",{type:Boolean,default:!1}),inputs:y("inputs",{type:Boolean,default:!0}),presets:y("presets",{type:Array,default:["#ffffff","#c3c3c3","#7f7f7f","#000000","#880015","#ed1c24","#ff7f27","#fff200","#22b14c","#00a2e8","#3f48cc","#a349a4","#b97a57","#ffaec9","#ffc90e","#00000000"]})},watch:{focused(e){if(!e&&this.convertedHexValue){const t=re(`#${this.convertedHexValue}`);t!=null&&t.isValid()&&(this.value=t.toString(this.colorFormat),this.onChange())}}}}),jr=b(Tr,[["render",Lr]]);function Mr(e,t,o,s,a,r){return n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),n.normalizeProps(n.guardReactiveProps(e.$props)),null,16)}const Rr=w.register("component",{defaultValue:()=>{},ignoreMissingValue:e=>!("default"in e),async processSchema(e,t){await v(t)}}),qr=b(Rr,[["render",Mr]]),Ir=["id","name","value","disabled"];function zr(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("input",{class:"dito-text dito-input",ref:"element",id:e.dataPath,name:e.name,type:"text",value:e.value,disabled:e.disabled,readonly:!0},null,8,Ir)}const Ar=w.register(["computed","data","hidden"],{mixins:[Et],defaultValue:()=>{},defaultVisible:!1,computed:{value:{get(){const{schema:e}=this;if(e.data||e.dataPath){const t=this.handleDataSchema(e,"schema",{resolveCounter:2});this.data[this.name]=t}return Q.computed.value.get.call(this)},set(e){Q.computed.value.set.call(this,e)}}}}),Ur=b(Ar,[["render",zr]]),Hr={class:"dito-date"};function Kr(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",Hr,[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.getComponent(e.type)),n.mergeProps({ref:"element",id:e.dataPath,locale:e.locale,dateFormat:{...e.api.formats.date,...e.dateFormat},modelValue:e.dateValue,"onUpdate:modelValue":t[0]||(t[0]=i=>e.dateValue=i)},e.attributes),null,16,["id","locale","dateFormat","modelValue"]))])}const Wr=w.register(["date","datetime","time"],{components:{DatePicker:mt,TimePicker:gt,DateTimePicker:Eo},nativeField:!0,textField:!0,computed:{dateValue:{get(){const{value:e}=this;return e&&new Date(e)},set(e){this.value=e}},dateFormat:y("dateFormat",{type:Object,default:null})},methods:{getComponent(e){return{date:"date-picker",time:"time-picker",datetime:"date-time-picker"}[e]}},processValue(e,t){return c.isDate(t)?t.toISOString():t}}),Yr=b(Wr,[["render",Kr]]),z={mixins:[Dt,lt],defaultValue(e){return H(e)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1,ignoreRouteChange:!1}},computed:{sourceComponent(){return this},isObjectSource(){return U(this.type)},isListSource(){return H(this.type)},hasData(){return!!this.value},isReady(){return this.hasData||!this.providesData},isInView(){return!!this.viewComponent},wrapPrimitives(){return this.schema.wrapPrimitives},listData:{get(){let e=this.value;this.isObjectSource?e=e!=null?[e]:[]:e=this.unwrapListData(e)||e,e||(e=[]);const{wrapPrimitives:t}=this;return t?(this.unwrappingPrimitives?this.unwrappingPrimitives=!1:this.wrappedPrimitives=e.map(o=>({[t]:o})),this.wrappedPrimitives):e},set(e){this.wrapPrimitives?this.wrappedPrimitives=e:this.value=this.isObjectSource?e&&e.length>0?e[0]:null:e}},objectData:{get(){return this.listData[0]||null},set(e){this.listData=e?[e]:[]}},sourceSchema(){return this.schema},path(){return this.routeComponent.getChildPath(this.schema.path)},defaultQuery(){const{defaultOrder:e}=this;return e?{order:e}:{}},query:fe("query",{get(e){return{...this.defaultQuery,...e}},set(e){var s;const{scope:t=(s=this.defaultScope)==null?void 0:s.name,page:o=this.schema.page}=this.query;return e={...this.query,...t!=null&&{scope:t},...o!=null&&{page:o},...e},c.equals(e,this.$route.query)||(this.ignoreRouteChange=!0,this.$router.replace({query:e,hash:this.$route.hash})),e}}),total:fe("total"),columns(){return q(this.schema.columns)},scopes(){return q(this.schema.scopes)},defaultScope(){if(this.scopes){let e=null;for(const t of Object.values(this.scopes)){if(t.defaultScope)return t;e||(e=t)}return e}},defaultOrder(){if(this.columns)for(const e of Object.values(this.columns)){const{defaultSort:t}=e;if(t){const o=c.isString(t)?t:"asc";return`${e.name} ${o}`}}},nestedMeta(){return{...this.meta,schema:this.schema}},forms(){return Object.values(A(this.schema,this.context))},view(){return Je(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return te(this.schema.buttons)},hasLabels(){return this.forms.some(Fn)},isCompact(){return this.forms.every(Ge)},isInlined(){return Ce(this.schema)},paginate:y("paginate",{type:Number}),render:y("render",{type:Function,default:null}),creatable:y("creatable",{type:Boolean,default:!1,get(e){return e&&R(this.schema)?this.isObjectSource?!this.value:!0:!1}}),editable:y("editable",{type:Boolean,default:!1,get(e){return e&&!this.isInlined}}),deletable:y("deletable",{type:Boolean,default:!1}),draggable:y("draggable",{type:Boolean,default:!1,get(e){return this.isListSource&&this.listData.length>1&&e}}),collapsible:y("collapsible",{type:Boolean,default:null,get(e){return this.isInlined&&!!(e??this.collapsed!==null)}}),collapsed:y("collapsed",{type:Boolean,default:null})},watch:{$route(e,t){if(this.ignoreRouteChange){this.ignoreRouteChange=!1;return}t.path===e.path&&t.hash===e.hash&&(this.query=e.query,this.loadData(!1))},wrappedPrimitives:{deep:!0,handler(e,t){const{wrapPrimitives:o}=this;o&&t!==null&&(this.unwrappingPrimitives=!0,this.value=e.map(s=>s[o]))}}},methods:{setupData(){this.query=this.$route.query,this.ensureData()},clearData(){this.total=0,this.value=null},setData(e){!e||this.isListSource&&c.isArray(e)||this.isObjectSource&&c.isObject(e)?this.value=e:this.unwrapListData(e)||c.isObject(e)&&this.isInView&&this.viewComponent.setData(e)},unwrapListData(e){if(this.isListSource&&c.isObject(e)&&c.isNumber(e.total)&&c.isArray(e.results))return this.total=e.total,this.value=e.results,this.value},createItem(e,t){const o=this.createData(e,t);return this.isObjectSource?this.objectData=o:this.listData.push(o),this.collapsible&&this.$nextTick(()=>this.openSchemaComponent(-1)),this.onChange(),o},removeItem(e){if(this.isObjectSource)this.objectData=null,this.onChange();else{const{listData:t}=this,o=t&&t.indexOf(e);o>=0&&(t.splice(o,1),this.onChange())}},deleteItem(e,t){const o=e&&this.getItemLabel(this.schema,e,{index:t,extended:!0}),s=()=>this.notify({type:this.isTransient?"info":"success",title:"Successfully Removed",text:[`${o} was ${this.verbs.deleted}.`,this.transientNote]});if(e&&window.confirm(`Do you really want to ${this.verbs.delete} ${o}?`))if(this.isTransient)this.removeItem(e),s();else{const a=this.getItemId(this.schema,e),r=me(a,this.resource);r&&this.handleRequest({method:"delete",resource:r},i=>{i||(this.removeItem(e),s()),this.reloadData()})}},getSchemaComponent(e){const{schemaComponents:t}=this,{length:o}=t;return t[(e%o+o)%o]},openSchemaComponent(e){const t=this.getSchemaComponent(e);t&&(t.opened=!0)},async navigateToComponent(e,t){if(this.collapsible){const o=e.startsWith(this.dataPath)?this.isListSource?c.parseDataPath(e.slice(this.dataPath.length+1))[0]??null:0:null;if(o!==null&&c.isNumber(+o)){const s=this.getSchemaComponent(+o);if(s){const{opened:a}=s;a||(s.opened=!0,await this.$nextTick());const r=s.getComponentsByDataPath(e);if(r.length>0&&((t==null?void 0:t(r))??!0))return!0;s.opened=a}}}return this.navigateToRouteComponent(e,t)},navigateToRouteComponent(e,t){return new Promise((o,s)=>{const a=()=>{const{routeComponents:i}=this.appState,l=i[i.length-1];o((t==null?void 0:t([l]))??!0)},r=c.parseDataPath(e);for(;r.length>0;){const i=this.routeComponent.getChildPath(this.api.normalizePath(c.normalizeDataPath(r))),{matched:l}=this.$router.match(i);l.length&&(this.$route.path===i?a():this.$router.push({path:i}).catch(s).then(()=>{this.$nextTick(a)})),r.pop()}o(!1)})}},async processSchema(e,t,o,s,a,r=!1,i=!1,l=null){Ke(e,t,o);const d=Ce(t);if(d&&t.resource)throw new Error("Lists with nested forms cannot load data from their own resources");const h=`id${a+1}`,p={api:e,schema:t},u={...p,flatten:i,nested:r,param:h},g=await Pn(e,t,a);if(l&&await l(g,a+1),R(t)&&!d){const f=($,S)=>S?$?`${$}/:${S}`:`:${S}`:$,m=a===0?"":t.path,k={path:f(m,H(t)&&h),component:C.component(r?"dito-form-nested":"dito-form"),meta:u};U(t)&&s.push({...k,path:f(m,h)}),m&&s.push({path:m,redirect:".",meta:p});const[P,V]=g.reduce(($,S)=>($[S.meta.flatten?0:1].push(S),$),[[],[]]);if(V.length&&(k.children=V),s.push(k),P.length)for(const $ of P)s.push({...$.redirect?$:k,path:`${k.path}/${$.path}`,meta:{...$.meta,flatten:i}})}},processValue(e,t,o,s){return s.addSource(o,e),t}},Pe={text(e){const t=[{label:"contains",value:"contains"},{label:"equals",value:"equals"},{label:"starts with",value:"starts-with"},{label:"ends with",value:"ends-with"}];return{operator:e.operators?{type:"select",options:c.isArray(e.operators)?t.filter(o=>e.operators.includes(o.value)):t,width:"40%"}:null,text:{type:"text",width:e.operators?"60%":"fill"}}},"date-range"(){const e={day:"2-digit",month:"2-digit",year:"numeric"};return{from:{type:"datetime",width:"50%",dateFormat:e},to:{type:"datetime",width:"50%",dateFormat:e}}}};function Jr(e,t,o){const s={label:"Filters",name:"$filters",target:t,disabled:!1,data(){return Xr(s,o.query)},components:Qr(e),buttons:{clear:{text:"Clear",events:{click({schemaComponent:a}){a.resetData(),a.applyFilters()}}},filter:{type:"submit",text:"Filter",events:{click({schemaComponent:a}){a.applyFilters()}}}},methods:{applyFilters(){o.query={...o.query,filter:Gr(this.schema,this.data),page:void 0}}}};return s}function Qr(e){var o;const t={};for(const s of Object.values(e||{})){const{filter:a,...r}=s,i=a?(o=Pe[a])==null?void 0:o.call(Pe,s):s.components;if(i){r.components={};for(const[l,d]of Object.entries(i))if(d){const h=d.label||c.labelize(d.name||l);r.components[l]={...d,label:!1,placeholder:h}}t[s.name]={label:r.label,type:"object",default:()=>({}),form:r,inlined:!0}}else throw new Error(`Invalid filter '${s.name}': Unknown filter type '${a}'.`)}return t}function Nt(e,t){var s;const o=e.components[t];return(s=o==null?void 0:o.form)==null?void 0:s.components}function Gr(e,t){const o=[];for(const s in t){const a=t[s];if(a){const r=Object.keys(Nt(e,s)).map(i=>a[i]??null);r.some(i=>i!==null)&&o.push(`${s}:${r.map(JSON.stringify).join(",")}`)}}return o.length?o:void 0}function Xr(e,t){const o={};if(t)for(const a of c.asArray(t.filter)){const[,r,i]=a.match(/^(\w+):(.*)$/);try{o[r]=c.asArray(JSON.parse(`[${i}]`))}catch{}}const s={};for(const a in e.components){const r={},i=o[a];if(i){const l=Nt(e,a);if(l){let d=0;for(const h in l)r[h]=i[d++]}}s[a]=r}return s}const Zr=["id"],vr={key:0,class:"dito-navigation"},xr={key:1,class:"dito-spacer"},ei=["id"],ti={key:1},ni=["innerHTML"],oi=["innerHTML"],si={key:2,class:"dito-cell-edit-buttons"},ai={key:1},ri=["colspan"];function ii(e,t,o,s,a,r){const i=n.resolveComponent("dito-scopes"),l=n.resolveComponent("dito-pagination"),d=n.resolveComponent("dito-table-head"),h=n.resolveComponent("dito-table-cell"),p=n.resolveComponent("dito-schema-inlined"),u=n.resolveComponent("dito-edit-buttons"),g=n.resolveComponent("vue-sortable");return e.isReady?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-list",e.schema.class]),id:e.dataPath,style:n.normalizeStyle(e.schema.style)},[e.scopes||e.hasPagination?(n.openBlock(),n.createElementBlock("div",vr,[e.scopes?(n.openBlock(),n.createBlock(i,{key:0,query:e.query,scopes:e.scopes},null,8,["query","scopes"])):e.hasPagination?(n.openBlock(),n.createElementBlock("div",xr)):n.createCommentVNode("",!0),e.hasPagination?(n.openBlock(),n.createBlock(l,{key:2,query:e.query,limit:e.paginate,total:e.total||0},null,8,["query","limit","total"])):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),n.createElementVNode("table",{class:n.normalizeClass(["dito-table",{"dito-table-separators":e.isInlined,"dito-table-larger-padding":e.hasEditButtons&&!e.isInlined,"dito-table-alternate-colors":!e.isInlined,"dito-table-even-count":e.hasEvenCount}])},[e.columns?(n.openBlock(),n.createBlock(d,{key:0,query:e.query,columns:e.columns,hasEditButtons:e.hasEditButtons},null,8,["query","columns","hasEditButtons"])):n.createCommentVNode("",!0),n.createVNode(g,{tag:"tbody",list:e.updateOrder(e.sourceSchema,e.listData,e.paginationRange),options:e.getDragOptions(e.draggable),itemKey:f=>e.getItemUid(e.schema,f),onStart:e.onStartDrag,onEnd:e.onEndDrag},{item:n.withCtx(({element:f,index:m})=>[n.createElementVNode("tr",{id:e.getDataPath(m)},[e.columns?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.columns,k=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRender(k)?(n.openBlock(),n.createBlock(h,{key:k.name,class:n.normalizeClass(e.getCellClass(k)),cell:k,schema:e.schema,dataPath:e.getDataPath(m),data:f,meta:e.nestedMeta,store:e.store,nested:!1,disabled:e.disabled||e.isLoading},null,8,["class","cell","schema","dataPath","data","meta","store","disabled"])):n.createCommentVNode("",!0)],64))),256)):(n.openBlock(),n.createElementBlock("td",ti,[e.isInlined?(n.openBlock(),n.createBlock(p,{key:0,label:e.getItemLabel(e.schema,f,{index:m,asObject:!0}),schema:e.getItemFormSchema(e.schema,f,e.context),dataPath:e.getDataPath(m),data:f,meta:e.nestedMeta,store:e.getChildStore(m),disabled:e.disabled||e.isLoading,collapsed:e.collapsed,collapsible:e.collapsible,deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.getEditPath(f,m),onDelete:k=>e.deleteItem(f,m)},null,8,["label","schema","dataPath","data","meta","store","disabled","collapsed","collapsible","deletable","draggable","editable","editPath","onDelete"])):e.schema.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),{key:1,dataPath:e.getDataPath(m),data:f,nested:!1},null,8,["dataPath","data"])):e.render?(n.openBlock(),n.createElementBlock("span",{key:2,innerHTML:e.render(e.getContext(f,m))},null,8,ni)):(n.openBlock(),n.createElementBlock("span",{key:3,innerHTML:e.getItemLabel(e.schema,f,{index:m})},null,8,oi))])),e.hasCellEditButtons?(n.openBlock(),n.createElementBlock("td",si,[n.createVNode(u,{deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.getEditPath(f,m),schema:e.getItemFormSchema(e.schema,f,e.context),dataPath:e.getDataPath(m),data:f,meta:e.nestedMeta,store:e.getChildStore(m),onDelete:k=>e.deleteItem(f,m)},null,8,["deletable","draggable","editable","editPath","schema","dataPath","data","meta","store","onDelete"])])):n.createCommentVNode("",!0)],8,ei)]),_:1},8,["list","options","itemKey","onStart","onEnd"]),e.hasListButtons&&!e.single?(n.openBlock(),n.createElementBlock("tfoot",ai,[n.createElementVNode("tr",null,[n.createElementVNode("td",{class:"dito-cell-edit-buttons",colspan:e.numColumns},[n.createVNode(u,{creatable:e.creatable,createPath:e.path,buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.listData,meta:e.meta,store:e.store},null,8,["creatable","createPath","buttons","schema","dataPath","data","meta","store"])],8,ri)])])):n.createCommentVNode("",!0)],2),e.hasListButtons&&e.single?(n.openBlock(),n.createBlock(u,{key:1,class:"dito-buttons-main dito-buttons-large",creatable:e.creatable,createPath:e.path,buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.listData,meta:e.meta,store:e.store},null,8,["creatable","createPath","buttons","schema","dataPath","data","meta","store"])):n.createCommentVNode("",!0)],14,Zr)):n.createCommentVNode("",!0)}const pc="",li=w.register("list",{components:{VueSortable:ae.Sortable},mixins:[z,Se],getSourceType(e){return e},getPanelSchema(e,t,o){const{filters:s}=e;if(s){const a=()=>o.getComponentByDataPath(t,r=>r.type==="list");return Jr(q(s),t,{get query(){var r;return(r=a())==null?void 0:r.query},set query(r){const i=a();if(i){const l=d=>c.pickBy(d,h=>h!==void 0);c.equals(l(r),l(i.query))||(i.query=r,i.loadData(!1))}}})}},computed:{hasPagination(){return this.paginate&&this.total>this.paginate},hasListButtons(){return!!(this.buttonSchemas||this.creatable)},hasEditButtons(){const{listData:e}=this;return e.length>0&&(this.editable||this.deletable||this.draggable)},hasCellEditButtons(){return!this.isInlined&&this.hasEditButtons},hasEvenCount(){return!(this.listData.length%2)},numColumns(){return(this.columns?Object.keys(this.columns).length:1)+(this.hasCellEditButtons?1:0)}},methods:{getDataPath(e){return _(this.dataPath,e)},getEditPath(e,t){if(this.editable){const o=Nn(this.schema,this.context)||this.path,s=this.getItemId(this.schema,e,t);return`${o}/${s}`}return null},getCellClass(e){return`dito-cell-${c.hyphenate(e.name)}`},getContext(e,t){return new D(this,{data:e,value:e,index:t,dataPath:this.getDataPath(t)})},onFilterErrors(e){const t=_(this.dataPath,"$filters"),o=this.schemaComponent.getPanelByDataPath(t);if(o)return o.showValidationErrors(e,!0),!0}},async processSchema(e,t,o,s,a,r=!1,i=!1,l=null){await Promise.all([v(t),Ue(t.columns),z.processSchema(e,t,o,s,a,r,i,l)])}}),di=b(li,[["render",ii]]);function ci(e,t,o,s,a,r){const i=n.resolveComponent("dito-label");return n.openBlock(),n.createBlock(i,{class:"dito-label-component",label:e.value,dataPath:e.dataPath},null,8,["label","dataPath"])}const uc="",hi=w.register("label",{excludeValue:!0,generateLabel:!1}),pi=b(hi,[["render",ci]]),ui=["id"],mi=["editor"],fi={key:0,class:"dito-buttons dito-buttons-toolbar"},gi={class:"dito-button-group"},bi=["onClick"];function yi(e,t,o,s,a,r){const i=n.resolveComponent("icon"),l=n.resolveComponent("editor-content");return n.openBlock(),n.createElementBlock("div",{class:"dito-markup",id:e.dataPath},[n.createElementVNode("div",{class:"dito-markup-toolbar",editor:e.editor},[e.groupedButtons.length>0?(n.openBlock(),n.createElementBlock("div",fi,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.groupedButtons,d=>(n.openBlock(),n.createElementBlock("div",gi,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(d,({name:h,icon:p,isActive:u,onClick:g})=>(n.openBlock(),n.createElementBlock("button",{class:n.normalizeClass(["dito-button",{"dito-active":u}]),onClick:g},[n.createVNode(i,{name:p},null,8,["name"])],10,bi))),256))]))),256))])):n.createCommentVNode("",!0)],8,mi),n.createVNode(l,{class:"dito-markup-editor",ref:"editor",editor:e.editor,style:n.normalizeStyle(e.styles)},null,8,["editor","style"]),e.resizable?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-resize",onMousedown:t[0]||(t[0]=n.withModifiers((...d)=>e.onDragResize&&e.onDragResize(...d),["stop","prevent"]))},null,32)):n.createCommentVNode("",!0)],8,ui)}const mc="",ki=w.register("markup",{components:{EditorContent:Y.EditorContent,Icon:Oo},mixins:[W],data(){return{editor:null,height:null}},computed:{lines(){return this.schema.lines||10},styles(){return{height:this.height||`calc(${this.lines}em * var(--line-height))`}},markButtons(){return this.getButtons("marks",{bold:!0,italic:!0,underline:!0,strike:!0,small:!0,code:!0,link:{onClick:e=>this.onClickLink(e)}})},basicNodeButtons(){return this.getButtons("nodes",{paragraph:{ignoreActive:()=>this.otherNodeButtons.some(e=>e.isActive)},heading:{attribute:"level",values:[1,2,3,4,5,6]}})},otherNodeButtons(){return this.getButtons("nodes",{bulletList:!0,orderedList:!0,blockquote:!0,codeBlock:!0})},toolButtons(){return this.getButtons("tools",{undo:!0,redo:!0})},groupedButtons(){const{markButtons:e,basicNodeButtons:t,otherNodeButtons:o,toolButtons:s}=this;return[e,t,o,s].filter(a=>a.length>0)},parseOptions(){return{preserveWhitespace:{collapse:!1,preserve:!0,"preserve-all":"full"}[this.whitespace]}},editorOptions(){return{editable:!this.readyonly,autoFocus:this.autofocus,disableInputRules:!this.enableRules.input,disablePasteRules:!this.enableRules.paste,parseOptions:this.parseOptions}},resizable:y("resizable",{type:Boolean,default:!1}),whitespace:y("whitespace",{type:String,default:"collapse"}),enableRules:y("enableRules",{type:[Object,Boolean],default:!1,get(e){return c.isObject(e)?e:{input:!!e,paste:!!e}}})},watch:{readyonly:"updateEditorOptions",autofocus:"updateEditorOptions",enableRules:"updateEditorOptions"},created(){let e=!1,t=!1;const o=()=>{!this.focused&&e&&(e=!1,this.onChange())},s=()=>this.onFocus(),a=()=>{this.onBlur(),o()},r=c.debounce(l=>{t=!0,this.value=l.getHTML(),e=!0,o()},100),i=({editor:l})=>{r(l),this.onInput()};this.$watch("value",l=>{t?t=!1:this.editor.setContent(l,!1,this.parseOptions)}),this.editor=new Y.Editor({...this.editorOptions,onFocus:s,onBlur:a,onUpdate:i,extensions:this.getExtensions(),content:this.value||""})},beforeUnmount(){this.editor.destroy()},methods:{onDragResize(e){const t=({clientX:i,clientY:l})=>({x:i,y:l});let o=t(e).y,s=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=i=>{const{y:l}=t(i);s+=l-o,o=l,this.height=`${Math.max(s,0)}px`},r=this.domOn(document,{mousemove:a,mouseup(i){a(i),r.remove()}})},updateEditorOptions(){this.editor.setOptions(this.editorOptions)},async onClickLink(e){const t=await this.rootComponent.showDialog({components:{href:{type:"url",label:"Link",autofocus:!0},title:{type:"text",label:"Title"}},buttons:{cancel:{},apply:{type:"submit"},remove:{events:{click({dialogComponent:o}){o.resolve(null)}}}},data:Y.getMarkAttributes(this.editor.state,"link")});if(t){let{href:o,title:s}=t;if(o)try{new URL(o)}catch{o=`https://${o}`}e.commands.setLink({href:o,title:s})}else e.commands.unsetLink()},getExtensions(){const{marks:e={},nodes:t={},tools:o={}}=this.schema;return[Mt.Document,Rt.Text,Qt.Paragraph,e.bold&&qt.Bold,e.italic&&zt.Italic,e.underline&&Ht.Underline,e.strike&&Ut.Strike,e.small&&Ci,e.code&&It.Code,e.link&&$i,t.blockquote&&Kt.Blockquote,t.codeBlock&&Wt.CodeBlock,Yt.HardBreak,t.heading&&Jt.Heading.configure({levels:t.heading}),t.horizontalRule&&Gt.HorizontalRule,(t.orderedList||t.bulletList)&&vt.ListItem,t.bulletList&&Zt.BulletList,t.orderedList&&Xt.OrderedList,o.history&&xt.History].filter(s=>!!s)},getButtons(e,t){const o=[],s=({name:r,icon:i,attributes:l,ignoreActive:d,onClick:h})=>{o.push({name:r,icon:i,isActive:this.editor.isActive(r,l)&&(d==null||!d()),onClick:()=>{const p=`toggle${c.camelize(r,!0)}`;this.editor.commands[p]&&(h?h(this.editor,l):(g=>this.editor.chain()[p](g).focus().run())(l))}})},a=this.schema[e];if(a)for(const[r,i]of Object.entries(t)){const l=["undo","redo"].includes(r)?"history":r,d=a[l],h=c.underscore(r),p=c.hyphenate(r);if(d){if(i===!0)s({name:h,icon:p});else if(c.isObject(i)){const{attribute:u,values:g,ignoreActive:f,onClick:m}=i;if(u){if(c.isArray(g)&&c.isArray(d))for(const k of g)d.includes(k)&&s({name:h,icon:`${p}-${k}`,attributes:{[u]:k},ignoreActive:f,onClick:m})}else s({name:h,icon:p,ignoreActive:f,onClick:m})}}}return o},focusElement(){var e,t;(t=(e=this.$el).scrollIntoView)==null||t.call(e),this.editor.focus()}}}),Ci=Y.Mark.create({name:"small",parseHTML(){return[{tag:"small"}]},renderHTML(){return["small",0]},addCommands(){return{setSmall:e=>({commands:t})=>t.setMark(this.name,e),toggleSmall:e=>({commands:t})=>t.toggleMark(this.name,e),unsetSmall:()=>({commands:e})=>e.unsetMark(this.name)}}}),$i=At.Link.extend({inclusive:!1,schema:{attrs:{href:{default:null},title:{default:null}},parseHTML(){return[{tag:"a",getAttrs:e=>({href:e.getAttribute("href"),title:e.getAttribute("title")})}]},renderHTML(e){return["a",e.attrs,0]}}}),Bi=b(ki,[["render",yi]]),wi=["disabled"];function Vi(e,t,o,s,a,r){const i=n.resolveComponent("vue-multiselect");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-multiselect",{"dito-multiselect-single":!e.multiple,"dito-multiselect-multiple":e.multiple}])},[n.createVNode(i,n.mergeProps({ref:"element",modelValue:e.selectedOptions,"onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedOptions=l)},e.attributes,{"show-labels":!1,placeholder:e.placeholder,"tag-placeholder":"Press enter to add new tag",options:e.populate&&e.activeOptions||[],"custom-label":e.getLabelForOption,"track-by":e.optionValue,"group-label":e.groupByLabel,"group-values":e.groupByOptions,multiple:e.multiple,taggable:e.taggable,searchable:e.searchable,"internal-search":!e.searchFilter,"preserve-search":!!e.searchFilter,"clear-on-select":!e.searchFilter,"close-on-select":!e.stayOpen,loading:e.isLoading,onOpen:t[1]||(t[1]=l=>e.populate=!0),onTag:e.onAddTag,onSearchChange:e.onSearchChange}),null,16,["modelValue","placeholder","options","custom-label","track-by","group-label","group-values","multiple","taggable","searchable","internal-search","preserve-search","clear-on-select","close-on-select","loading","onTag","onSearchChange"]),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",type:"button",onClick:t[2]||(t[2]=(...l)=>e.clear&&e.clear(...l)),disabled:e.disabled},null,8,wi)):n.createCommentVNode("",!0)],2)}const fc="",Di=w.register("multiselect",{components:{VueMultiselect:en},mixins:[se],data(){return{searchedOptions:null,populate:!1}},computed:{selectedOptions:{get(){return this.multiple?(this.selectedValue||[]).map(e=>this.getOptionForValue(e)||this.addTagOption(e)).filter(e=>e):this.selectedOption},set(e){this.selectedValue=this.multiple?(e||[]).map(t=>this.getValueForOption(t)):this.getValueForOption(e),this.onChange()}},activeOptions(){return this.searchedOptions||this.options},multiple:y("multiple",{type:Boolean,default:!1}),searchable:y("searchable",{type:Boolean,default:!1}),taggable:y("taggable",{type:Boolean,default:!1}),stayOpen:y("stayOpen",{type:Boolean,default:!1}),placeholder(){const{placeholder:e,searchable:t,taggable:o}=this.schema;return e||(t&&o?`Search or add a ${this.label}`:t?`Select or search ${this.label}`:void 0)}},mounted(){this.autofocus&&this.focus()},methods:{addTagOption(e){if(this.taggable){const{optionLabel:t,optionValue:o}=this,s=t&&o?{[t]:e,[o]:e}:e;return this.options.push(s),s}},focusElement(){this.$refs.element.activate()},onAddTag(e){const t=this.addTagOption(e);t&&this.value.push(this.getValueForOption(t))},async onSearchChange(e){this.searchFilter&&(e?(this.searchedOptions=[],this.searchedOptions=await this.resolveData(()=>this.searchFilter(new D(this,{query:e})))):this.searchedOptions=null)}}}),Si=b(Di,[["render",Vi]]),Ee={computed:{inputValue:{get(){return this.value!==null?this.value:""},set(e){this.value=e!==""?this.isInteger?parseInt(e,10):parseFloat(e):null}},isInteger(){return!1},stepValue(){return this.step==null&&!this.isInteger?"any":this.step},decimals:y("decimals",{type:Number}),step:y("step",{type:Number,get(e){return this.isInteger&&e!=null?Math.ceil(e):e}}),min:y("min",{type:Number,get(e){var t;return e=e===void 0?(t=this.getSchemaValue("range",{type:Array}))==null?void 0:t[0]:e,this.isInteger&&e!=null?Math.floor(e):e}}),max:y("max",{type:Number,get(e){var t;return e=e===void 0?(t=this.getSchemaValue("range",{type:Array}))==null?void 0:t[1]:e,this.isInteger&&e!=null?Math.ceil(e):e}}),range:y("range",{type:Array,get(){const{min:e,max:t}=this;return e!=null&&t!=null?[e,t]:void 0},set(e){c.isArray(e)&&([this.min,this.max]=e)}})},methods:{getValidations(){const e={},{range:t,min:o,max:s,decimals:a,step:r}=this;if(t?e.range=t:(o!=null&&(e.min=o),s!=null&&(e.max=s)),a!=null)e.decimals=a;else if(r){const i=(`${r}`.split(".")[1]||"").length;i>0?e.decimals=i:e.integer=!0}return this.isInteger&&(e.integer=!0),e}}};function Pi(e,t,o,s,a,r){const i=n.resolveComponent("input-field");return n.openBlock(),n.createBlock(i,n.mergeProps({class:"dito-number",ref:"element",id:e.dataPath,type:"number",modelValue:e.inputValue,"onUpdate:modelValue":t[0]||(t[0]=l=>e.inputValue=l)},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),null,16,["id","modelValue","min","max","step"])}const gc="",Ei=w.register(["number","integer"],{components:{InputField:K},mixins:[Ee],nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),Ni=b(Ei,[["render",Pi]]),Oi=["id"],_i={key:0,class:"dito-object-content"},Fi=["innerHTML"],Li=["innerHTML"];function Ti(e,t,o,s,a,r){const i=n.resolveComponent("dito-schema-inlined"),l=n.resolveComponent("dito-edit-buttons");return e.isReady?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-object",e.schema.class]),id:e.dataPath,style:n.normalizeStyle(e.schema.style)},[e.objectData?(n.openBlock(),n.createElementBlock("div",_i,[e.isInlined?(n.openBlock(),n.createBlock(i,{key:0,label:e.objectLabel,schema:e.getItemFormSchema(e.schema,e.objectData,e.context),dataPath:e.dataPath,data:e.objectData,meta:e.nestedMeta,store:e.store,disabled:e.disabled||e.isLoading,collapsed:e.collapsed,collapsible:e.collapsible},null,8,["label","schema","dataPath","data","meta","store","disabled","collapsed","collapsible"])):e.schema.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),{key:1,dataPath:e.dataPath,data:e.objectData,nested:!1},null,8,["dataPath","data"])):e.render?(n.openBlock(),n.createElementBlock("span",{key:2,innerHTML:e.render(e.getContext())},null,8,Fi)):(n.openBlock(),n.createElementBlock("span",{key:3,innerHTML:e.getItemLabel(e.schema,e.objectData)},null,8,Li))])):n.createCommentVNode("",!0),n.createVNode(l,{creatable:e.creatable,deletable:e.objectData&&e.deletable,editable:e.objectData&&e.editable,createPath:e.path,editPath:e.path,buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.objectData,path:e.path,meta:e.meta,store:e.store,onDelete:t[0]||(t[0]=d=>e.deleteItem(e.objectData))},null,8,["creatable","deletable","editable","createPath","editPath","buttons","schema","dataPath","data","path","meta","store"])],14,Oi)):n.createCommentVNode("",!0)}const bc="",ji=w.register("object",{mixins:[z],getSourceType(e){return e},computed:{objectLabel(){return this.collapsible?this.getItemLabel(this.schema,this.objectData,{asObject:!0}):null}},methods:{getContext(){return new D(this,{data:this.objectData})}},async processSchema(e,t,o,s,a,r=!1,i=!1,l=null){await Promise.all([v(t),z.processSchema(e,t,o,s,a,r,i,l)])}}),Mi=b(ji,[["render",Ti]]),Ri=w.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitPadding:!0,getPanelSchema(e){const{name:t,...o}=e;return o}}),qi=["id","value","max"];function Ii(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("progress",n.mergeProps({class:"dito-progress",ref:"element",id:e.dataPath,value:e.progressValue,max:e.progressMax},e.attributes),null,16,qi)}const zi=w.register("progress",{mixins:[Ee],computed:{progressValue(){let{value:e,range:t,step:o}=this;return e!==null?(t&&(e-=t[0]),o&&(e=Math.round(e/o)*o)):e="",e},progressMax(){const{range:e}=this;if(e)return e[1]-e[0]}}}),Ai=b(zi,[["render",Ii]]),Ui=["id"],Hi=["value"];function Ki(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("ul",{class:n.normalizeClass(["dito-radio-buttons",`dito-layout-${e.schema.layout||"vertical"}`]),id:e.dataPath},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.options,i=>(n.openBlock(),n.createElementBlock("li",null,[n.createElementVNode("label",null,[n.withDirectives(n.createElementVNode("input",n.mergeProps({class:"dito-radio-button",ref_for:!0,ref:"element",type:"radio",value:e.getValueForOption(i),"onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedValue=l)},e.attributes),null,16,Hi),[[n.vModelRadio,e.selectedValue]]),n.createTextVNode(n.toDisplayString(e.getLabelForOption(i)),1)])]))),256))],10,Ui)}const yc="",Wi=w.register("radio",{mixins:[se],nativeField:!0}),Yi=b(Wi,[["render",Ki]]);function Ji(e,t,o,s,a,r){const i=n.resolveComponent("dito-pane");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-section",{"dito-section-labelled":!!e.schema.label}])},[n.createVNode(i,{class:"dito-section-pane",schema:e.getItemFormSchema(e.schema,e.item,e.context),dataPath:e.dataPath,data:e.item,meta:e.meta,store:e.store,disabled:e.disabled},null,8,["schema","dataPath","data","meta","store","disabled"])],2)}const kc="",Qi=w.register("section",{defaultValue:()=>{},ignoreMissingValue:e=>!e.nested&&!("default"in e),defaultNested:!1,generateLabel:!1,omitFlexGrow:!0,computed:{item(){return this.nested?this.value:this.data}},methods:{getItemFormSchema:ke},async processSchema(e,t,o,s,a){await x(e,t,s,a)}}),Gi=b(Qi,[["render",Ji]]),Xi={class:"dito-select"},Zi=["id"],vi=["label"],xi=["value"],el=["value"],tl=["value"],nl=["disabled"];function ol(e,t,o,s,a,r){return n.openBlock(),n.createElementBlock("div",Xi,[n.withDirectives(n.createElementVNode("select",n.mergeProps({ref:"element",id:e.dataPath,"onUpdate:modelValue":t[0]||(t[0]=i=>e.selectedValue=i)},e.attributes,{onMousedown:t[1]||(t[1]=i=>e.populate=!0),onFocus:t[2]||(t[2]=i=>e.populate=!0)}),[e.populate?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.options,i=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.groupBy?(n.openBlock(),n.createElementBlock("optgroup",{key:0,label:i[e.groupByLabel]},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(i[e.groupByOptions],l=>(n.openBlock(),n.createElementBlock("option",{value:e.getValueForOption(l)},n.toDisplayString(e.getLabelForOption(l)),9,xi))),256))],8,vi)):(n.openBlock(),n.createElementBlock("option",{key:1,value:e.getValueForOption(i)},n.toDisplayString(e.getLabelForOption(i)),9,el))],64))),256)):e.selectedOption?(n.openBlock(),n.createElementBlock("option",{key:1,value:e.selectedValue},n.toDisplayString(e.getLabelForOption(e.selectedOption)),9,tl)):n.createCommentVNode("",!0)],16,Zi),[[n.vModelSelect,e.selectedValue]]),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",onClick:t[3]||(t[3]=(...i)=>e.clear&&e.clear(...i)),disabled:e.disabled},null,8,nl)):n.createCommentVNode("",!0)])}const Cc="",sl=w.register("select",{mixins:[se],nativeField:!0,data(){return{populate:!0}}}),al=b(sl,[["render",ol]]),rl={class:"dito-slider"},il=["id","min","max","step"];function ll(e,t,o,s,a,r){const i=n.resolveComponent("input-field");return n.openBlock(),n.createElementBlock("div",rl,[n.withDirectives(n.createElementVNode("input",n.mergeProps({class:"dito-range",ref:"element",id:e.dataPath,type:"range","onUpdate:modelValue":t[0]||(t[0]=l=>e.inputValue=l)},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),null,16,il),[[n.vModelText,e.inputValue]]),e.input?(n.openBlock(),n.createBlock(i,n.mergeProps({key:0,class:"dito-number",type:"number",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l)},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),null,16,["modelValue","min","max","step"])):n.createCommentVNode("",!0)])}const $c="",dl=w.register("slider",{components:{InputField:K},mixins:[Ee],nativeField:!0,computed:{input:y("input",{type:Boolean,default:!0})}}),cl=b(dl,[["render",ll]]);function hl(e,t,o,s,a,r){const i=n.resolveComponent("switch-button");return n.openBlock(),n.createBlock(i,n.mergeProps({class:"dito-switch",ref:"element",id:e.dataPath,sync:!0,labels:e.labels,modelValue:e.value,"onUpdate:modelValue":t[0]||(t[0]=l=>e.value=l)},e.attributes),null,16,["id","labels","modelValue"])}const Bc="",pl=w.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:Ho},computed:{labels(){return this.schema.labels}}}),ul=b(pl,[["render",hl]]);function ml(e,t,o,s,a,r){const i=n.resolveComponent("input-field");return n.openBlock(),n.createBlock(i,n.mergeProps({class:"dito-text",ref:"element",id:e.dataPath,type:e.inputType,modelValue:e.inputValue,"onUpdate:modelValue":t[0]||(t[0]=l=>e.inputValue=l)},e.attributes),null,16,["id","type","modelValue"])}const fl="****************",gl=w.register(["text","email","url","hostname","domain","tel","password","creditcard"],{components:{InputField:K},nativeField:!0,textField:!0,ignoreMissingValue:e=>e.type==="password",computed:{inputType(){return{creditcard:"text",hostname:"text",domain:"text"}[this.type]||this.type},inputValue:{get(){return this.type==="password"&&this.value===void 0&&!this.focused?fl:this.value},set(e){this.value=e}}},methods:{getValidations(){const e={email:"email",url:"url",hostname:"hostname",domain:"domain",password:"password",creditcard:"creditcard"}[this.type];return e?{[e]:!0}:{}}}}),bl=b(gl,[["render",ml]]),yl=["id","rows"];function kl(e,t,o,s,a,r){return n.withDirectives((n.openBlock(),n.createElementBlock("textarea",n.mergeProps({class:"dito-textarea dito-input",ref:"element",id:e.dataPath,"onUpdate:modelValue":t[0]||(t[0]=i=>e.value=i)},e.attributes,{rows:e.lines,class:{"dito-resizable":e.resizable}}),null,16,yl)),[[n.vModelText,e.value]])}const wc="",Cl=w.register("textarea",{nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:y("resizable",{type:Boolean,default:!1})}}),$l=b(Cl,[["render",kl]]),Bl={class:"dito-tree-list"},wl={class:"dito-tree-panel"},Vl={key:0,class:"dito-tree-form-container"};function Dl(e,t,o,s,a,r){const i=n.resolveComponent("dito-scopes"),l=n.resolveComponent("dito-tree-item"),d=n.resolveComponent("router-view");return n.openBlock(),n.createElementBlock("div",Bl,[e.scopes?(n.openBlock(),n.createBlock(i,{key:0,query:e.query,scopes:e.scopes},null,8,["query","scopes"])):n.createCommentVNode("",!0),n.createElementVNode("div",wl,[n.createVNode(l,{schema:e.treeSchema,dataPath:e.treeDataPath,data:e.treeData,draggable:e.draggable,open:!0},null,8,["schema","dataPath","data","draggable"]),e.hasEditableForms?(n.openBlock(),n.createElementBlock("div",Vl,[n.createVNode(d)])):n.createCommentVNode("",!0)])])}const Vc="",Sl=w.register(["tree-list","tree-object"],{mixins:[z],provide(){return{container:this}},getSourceType(e){return e==="tree-object"?"object":"list"},computed:{path(){var e;return(e=this.formComponent)==null?void 0:e.path},editPath(){var e;return this.$route.path.slice((e=this.path)==null?void 0:e.length)},treeData(){return this.isListSource?{[this.name]:this.value}:this.value},treeDataPath(){return this.isListSource?this.dataPath.slice(0,this.dataPath.length-this.name.length):this.dataPath},treeSchema(){return this.isListSource?{children:{name:this.name,...this.schema}}:this.schema},hasEditableForms(){const e=t=>R(t)&&(this.getSchemaValue("editable",{type:Boolean,default:!1,schema:t})||t.children&&e(t.children));return e(this.schema)}},async processSchema(e,t,o,s,a,r=!0,i=!1,l=null){await Promise.all([Ue(t.properties),z.processSchema(e,t,o,s,a,r,i,(d,h)=>{const{children:p}=t;if(p)return p.type="tree-list",this.processSchema(e,p,p.name,d,h,r,!0,l)})])},getFormSchemasForProcessing(e,t){const{children:o}=e;return A(e,t,o?s=>({...s,components:{...s.components,[o.name]:o}}):null)}}),Pl=b(Sl,[["render",Dl]]);function Ot(e){return on.filesize(e,{base:10})}const El={class:"dito-upload"},Nl={class:"dito-table dito-table-separators dito-table-background"},Ol=n.createElementVNode("thead",{class:"dito-table-head"},[n.createElementVNode("tr",null,[n.createElementVNode("th",null,[n.createElementVNode("span",null,"Name")]),n.createElementVNode("th",null,[n.createElementVNode("span",null,"Size")]),n.createElementVNode("th",null,[n.createElementVNode("span",null,"Status")]),n.createElementVNode("th",null,[n.createElementVNode("span")])])],-1),_l=["innerHTML"],Fl={class:"dito-cell-edit-buttons"},Ll={class:"dito-buttons dito-buttons-round"},Tl=["onClick"],jl={colspan:4},Ml={class:"dito-upload-footer"},Rl=["value"],ql={class:"dito-buttons dito-buttons-round"};function Il(e,t,o,s,a,r){const i=n.resolveComponent("vue-sortable"),l=n.resolveComponent("vue-upload");return n.openBlock(),n.createElementBlock("div",El,[n.createElementVNode("table",Nl,[Ol,n.createVNode(i,{tag:"tbody",list:e.files,options:e.getDragOptions(e.draggable),itemKey:"key",onStart:e.onStartDrag,onEnd:e.onEndDrag},{item:n.withCtx(({element:d,index:h})=>[n.createElementVNode("tr",null,[n.createElementVNode("td",{innerHTML:e.renderFile(d,h)},null,8,_l),n.createElementVNode("td",null,n.toDisplayString(e.formatFileSize(d.size)),1),n.createElementVNode("td",null,[d.upload?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[d.upload.error?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createTextVNode("Error: "+n.toDisplayString(d.upload.error),1)],64)):d.upload.active?(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createTextVNode("Uploading...")],64)):d.upload.success?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[n.createTextVNode("Uploaded")],64)):n.createCommentVNode("",!0)],64)):(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createTextVNode("Stored")],64))]),n.createElementVNode("td",Fl,[n.createElementVNode("div",Ll,[e.draggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:0,class:"dito-button"},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.deletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:1,class:"dito-button",type:"button",onClick:p=>e.deleteFile(d,h)},e.getButtonAttributes(e.verbs.delete)),null,16,Tl)):n.createCommentVNode("",!0)])])])]),_:1},8,["list","options","onStart","onEnd"]),n.createElementVNode("tfoot",null,[n.createElementVNode("tr",null,[n.createElementVNode("td",jl,[n.createElementVNode("div",Ml,[e.isUploadActive?(n.openBlock(),n.createElementBlock("progress",{key:0,class:"dito-progress",value:e.uploadProgress,max:"100"},null,8,Rl)):n.createCommentVNode("",!0),n.createElementVNode("div",ql,[e.isUploadActive?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button",type:"button",onClick:t[0]||(t[0]=n.withModifiers(d=>e.upload.active=!1,["prevent"]))},"Cancel All")):e.isUploadReady?(n.openBlock(),n.createElementBlock("button",{key:1,class:"dito-button",type:"button",onClick:t[1]||(t[1]=n.withModifiers(d=>e.upload.active=!0,["prevent"]))},"Upload All")):n.createCommentVNode("",!0),n.createVNode(l,{class:"dito-button dito-button-add-upload","input-id":e.dataPath,name:e.dataPath,disabled:e.disabled,"post-action":e.uploadPath,extensions:e.extensions,accept:e.accept,multiple:e.multiple,size:e.maxSize,modelValue:e.uploads,"onUpdate:modelValue":t[2]||(t[2]=d=>e.uploads=d),onInputFilter:e.inputFilter,onInputFile:e.inputFile,ref:"upload",title:"Upload Files"},null,8,["input-id","name","disabled","post-action","extensions","accept","multiple","size","modelValue","onInputFilter","onInputFile"])])])])])])])])}const Dc="",zl=w.register("upload",{components:{VueUpload:tn,VueSortable:ae.Sortable},mixins:[Se],data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},files(){return _t(this.value)},multiple:y("multiple",{type:Boolean,default:!1,callback:!1}),extensions:y("extensions",{type:[Array,String,RegExp]}),accept:y("accept",{type:Array,get(e){return c.isArray(e)?e.join(","):e}}),maxSize:y("maxSize",{type:[String,Number],get(e){return e?nn(e):void 0}}),draggable:y("draggable",{type:Boolean,default:!1,get(e){return e&&this.files.length>1}}),deletable:y("deletable",{type:Boolean,default:!1}),isUploadReady(){return this.uploads.length&&!(this.upload.active||this.upload.uploaded)},isUploadActive(){return this.uploads.length&&this.upload.active},uploadProgress(){return this.uploads.reduce((e,t)=>e+t.progress,0)/this.uploads.length},uploadPath(){return this.getResourceUrl({type:"upload",path:this.api.normalizePath(this.dataPath)})}},methods:{formatFileSize:Ot,renderFile(e,t){const{render:o}=this.schema;return o?o.call(this,new D(this,{value:e,data:this.files,index:t,dataPath:_(this.dataPath,t)})):c.escapeHtml(e.name)},deleteFile(e,t){const{name:o}=e;e&&window.confirm(`Do you really want to ${this.verbs.remove} ${o}?`)&&(this.multiple?this.value.splice(t,1):this.value=null,e.upload&&this.upload.remove(e.upload),this.onChange(),this.notify({type:"info",title:"Successfully Removed",text:`${o} was ${this.verbs.deleted}.`}))},getFileIndex(e){return this.multiple&&this.value?this.value.findIndex(t=>t.id===e.id):-1},addFile(e){this.multiple?this.value?this.value.push(e):this.value=[e]:this.value=e},replaceFile(e,t){if(this.multiple){const o=this.getFileIndex(e);o>=0&&(t?this.value[o]=t:this.value.splice(o,1))}else this.value=t},removeFile(e){this.replaceFile(e,null)},inputFile(e,t){if(e&&!t){const{id:o,name:s,size:a}=e;this.addFile({id:o,name:s,size:a,upload:e})}if(e&&t){const{success:o,error:s}=e;if(o){this.onChange();const a=e.response[0];a?(a.upload=e,this.replaceFile(e,a)):this.removeFile(e)}else if(s){const a={abort:"Upload aborted",denied:"Upload denied",extension:`Unsupported file-type: ${e.name}`,network:"Network error encountered during upload",server:"Server error occurred during upload",size:`File is too large: ${Ot(e.size)}`,timeout:"Timeout occurred during upload"}[s]||`Unknown File Upload Error: '${s}'`;this.notify({type:"error",title:"File Upload Error",text:a}),this.removeFile(e)}}},inputFilter(e){var o;const t=e==null?void 0:e.xhr;(o=this.api.cors)!=null&&o.credentials&&t&&!t.withCredentials&&(t.withCredentials=!0)}},processValue(e,t){const o=_t(t).map(({upload:s,...a})=>!s||s.success?a:null).filter(s=>s);return e.multiple?o:o[0]||null}});function _t(e){return e?c.asArray(e):[]}const Al=Object.freeze(Object.defineProperty({__proto__:null,TypeButton:gr,TypeCheckbox:Cr,TypeCheckboxes:Dr,TypeCode:Nr,TypeColor:jr,TypeComponent:qr,TypeComputed:Ur,TypeDate:Yr,TypeLabel:pi,TypeList:di,TypeMarkup:Bi,TypeMultiselect:Si,TypeNumber:Ni,TypeObject:Mi,TypePanel:Ri,TypeProgress:Ai,TypeRadio:Yi,TypeSection:Gi,TypeSelect:al,TypeSlider:cl,TypeSwitch:ul,TypeText:bl,TypeTextarea:$l,TypeTreeList:Pl,TypeUpload:b(zl,[["render",Il]])},Symbol.toStringTag,{value:"Module"})),Ft=new Set;function Ul(e){Ft.has(e)||(Ft.add(e),console.warn(e))}const Hl=["create","created","save","saved","submit","submitted","delete","deleted","edit","edited","close","closed","cancel","cancelled","drag","dragged"].reduce((e,t)=>(e[t]=t,e),{});class Kl{constructor(t,{dito:o={},api:s,views:a={},...r}={}){this.el=t,this.api=s=c.merge({base:"/"},o.api,s),this.options=r,s.locale||(s.locale="en-US"),s.formats=c.merge({},c.defaultFormats,s.formats),s.request||(s.request=d=>Yl(s,d)),s.getApiUrl||(s.getApiUrl=d=>Ql(s,d)),s.isApiUrl||(s.isApiUrl=d=>Jl(s,d)),s.normalizePath||(s.normalizePath=s.normalizePaths?c.hyphenate:d=>d),s.denormalizePath||(s.denormalizePath=s.normalizePaths?c.camelize:d=>d);const i=s.users=F(s.users,{type:"collection"})||{};i.login=F(i.login||"login",{method:"post",parent:i}),i.logout=F(i.logout||"logout",{method:"post",parent:i}),i.session=F(i.session||"session",{method:"get",parent:i}),s.resources={any(d){const h=this[d==null?void 0:d.type]||this.default;return d&&h.call(this,d)},default(d){const h=this.any(d.parent);return h?`${h}/${d.path}`:d.path},collection(d){return this.default(d)},member(d){return`${d.path}/${d.id}`},upload(d){return`${this.collection(d.parent)}/upload/${d.path}`},...s.resources},s.headers={"Content-Type":"application/json",...s.headers},c.isString(t)&&(t=document.querySelector(t));const l=this.app=n.createApp({components:{DitoRoot:Ve,VueNotifications:M,...pr,...Al},provide:{api:s,$verbs:()=>Hl,$views:()=>{},$isPopulated:()=>!0,$parentComponent:()=>null,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:()=>n.h(Ve,{ref:"root",class:o.settings.rootClass,unresolvedViews:a,options:r})});l.use(M,{name:"notify",componentName:"VueNotifications"}),l.use(O.createRouter({routes:[{name:"catch-all",path:"/:_(.*)",components:{}}],history:O.createWebHistory(o.base),linkActiveClass:"",linkExactActiveClass:""})),t.classList.add("dito-app"),l.mount(t)}register(t,o){return w.register(t,o)}}class Wl extends Error{constructor(t){super(`Request failed with status code: ${t.status} (${t.statusText})`),this.response=t}}async function Yl(e,{url:t,method:o="get",params:s=null,query:a=s||null,headers:r=null,data:i=null}){var h,p;s&&Ul("request.params is deprecated. Use action.method and action.path instead.");const l=e.isApiUrl(t),d=await fetch(e.getApiUrl({url:t,query:a}),{method:o.toUpperCase(),...i&&{body:JSON.stringify(i)},headers:{...l&&e.headers,...r},credentials:l&&((h=e.cors)!=null&&h.credentials)?"include":"same-origin"});if((p=d.headers.get("Content-Type"))!=null&&p.includes("application/json")&&(d.data=await d.json()),!d.ok)throw new Wl(d);return d}function Jl(e,t){return!c.isAbsoluteUrl(t)||t.startsWith(e.url)}function Ql(e,{url:t,query:o}){c.isAbsoluteUrl(t)||(t=Gl(e.url,t));const s=Xl(o);return s?`${t}?${s}`:t}function Gl(e,t){return`${e.replace(/\/+$/,"")}/${t.replace(/^\/+/,"")}`}function Xl(e){const t=e?c.isArray(e)?e:Object.entries(e):[];return new URLSearchParams(t.reduce((o,[s,a])=>{for(const r of c.asArray(a))o.push([s,r]);return o},[])).toString()}return Kl});
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9yZXNvdXJjZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kZWNpbWFscy5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JlcXVpcmVkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy9taXhpbnMvVHlwZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL3VpZC5qcyIsIi4uL3NyYy91dGlscy9TY2hlbWFHcmFwaC5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvdXRpbHMvb3B0aW9ucy5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vc3JjL0RpdG9Vc2VyLmpzIiwiLi4vc3JjL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1JvdXRlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9ldmVudC5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSW5wdXRGaWVsZC52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9zY3JvbGwuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvc2VsZWN0aW9uLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JY29uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy90cmFuc2l0aW9ucy9UcmFuc2l0aW9uSGVpZ2h0LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL21peGlucy9Eb21NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TcGlubmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0xhYmVsLnZ1ZSIsIi4uL3NyYy9taXhpbnMvSXRlbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlIiwiLi4vc3JjL3V0aWxzL3Z1ZS5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlIiwiLi4vc3JjL21peGlucy9Mb2FkaW5nTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1Jlc291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvcGF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtTmVzdGVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL09yZGVyZWRNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZOb2RlLnZ1ZSIsIi4uL3NyYy9UeXBlQ29tcG9uZW50LmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveC52dWUiLCIuLi9zcmMvbWl4aW5zL0RhdGFNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvT3B0aW9uc01peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDaGVja2JveGVzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWUiLCIuLi9zcmMvbWl4aW5zL051bWJlck1peGluLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVQYW5lbC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTZWN0aW9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHRhcmVhLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlIiwiLi4vc3JjL3V0aWxzL2RlcHJlY2F0ZS5qcyIsIi4uL3NyYy92ZXJicy5qcyIsIi4uL3NyYy9EaXRvQWRtaW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbmV4cG9ydCBkZWZhdWx0IHJlYWN0aXZlKHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufSlcbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlciwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYW4gb2JqZWN0IHRoYXQgaG9sZHMgbm90aGluZyBtb3JlIHRoYW4gYW4gaWQuXG4gIHJldHVybiBkYXRhPy5baWRLZXldICE9IG51bGwgJiYgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAxXG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLCBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0sIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSB9ID0gT2JqZWN0LnByb3RvdHlwZVxuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpXG4gIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldCh0b1Jhdyhjb250ZXh0KSlba2V5XSA9IHZhbHVlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Db250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgLy8gVXNlIHRoZSBwcm92aWRlZCBwYXJhbXMgb2JqZWN0IC8gZnVuY3Rpb24sIG9yIGNyZWF0ZSBhIG5ldyBvbmU6XG4gICAgY29udGV4dCA9IGNvbnRleHRcbiAgICAgID8gKGlzRnVuY3Rpb24oY29udGV4dCkgPyBjb250ZXh0KCkgOiB7IC4uLmNvbnRleHQgfSlcbiAgICAgIDoge31cbiAgICAvLyBJZiBub3QgZXhwbGljaXRseSBzZXQgKHRvIGZhbHNlKSwgZGVmYXVsdCB0byB0cnVlIHNvIHdlIGRvbid0IGZhbGwgYmFja1xuICAgIC8vIHRvIGBjb21wb25lbnRgIGZvciBpdHMgdmFsdWUuXG4gICAgY29udGV4dC5uZXN0ZWQgPz89IHRydWVcbiAgICBjb250ZXh0LmNvbXBvbmVudCA9IGNvbXBvbmVudFxuICAgIC8vIEhhdmUgYG9iamVjdGAgaW5oZXJpdCBmcm9tIHRoZSBgY29tcG9uZW50YCBpbnN0YW5jZSwgc28gaXQgY2FuIG92ZXJyaWRlXG4gICAgLy8gaXRzIHZhbHVlcyBhbmQgc3RpbGwgcmV0cmlldmUgZnJvbSBpdCwgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIGB0aGlzYFxuICAgIC8vIHRocm91Z2ggYGNvbnRleHRzYCBtYXA6XG4gICAgY29uc3Qgb2JqZWN0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mKGNvbnRleHQsIGNvbXBvbmVudClcbiAgICAvLyBObyBuZWVkIGZvciBgdG9SYXcodGhpcylgIGhlcmUgYXMgaXQncyBhbHdheXMgcmF3IGluc2lkZSB0aGUgY29uc3RydWN0b3IuXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZShldmVudCwgdGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUoZXYsIHRhcmdldClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHRhcmdldC5lbWl0KGV2ZW50LCAuLi5hcmdzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksIGlzT2JqZWN0LCBpc1N0cmluZywgaXNCb29sZWFuLCBpc051bWJlciwgaXNGdW5jdGlvbiwgaXNEYXRlLFxuICBpc1JlZ0V4cCwgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+IGlzRGF0ZSh2YWx1ZSlcbiAgPyB2YWx1ZVxuICA6IG5ldyBEYXRlKHZhbHVlKVxuXG5jb25zdCB0b0FycmF5ID0gdmFsdWUgPT4gaXNBcnJheSh2YWx1ZSlcbiAgPyB2YWx1ZVxuICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgID8gdmFsdWUuc3BsaXQoJywnKVxuICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PiBpc09iamVjdCh2YWx1ZSlcbiAgPyB2YWx1ZVxuICAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgLy8gb2JqZWN0LiBVc2VkIGJ5IGBjcmVhdGFibGVgICYgY28sIHRoYXQgY2FuIGJlIGJvdGguXG4gIDogdmFsdWUgPT09IHRydWVcbiAgICA/IHt9XG4gICAgOiBudWxsXG5cbmNvbnN0IHRvUmVnRXhwID0gdmFsdWUgPT4gaXNSZWdFeHAodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgUmVnRXhwKHZhbHVlKVxuXG5jb25zdCB0eXBlQ29udmVydGVycyA9IHtcbiAgQm9vbGVhbjogdG9Cb29sZWFuLFxuICBOdW1iZXI6IHRvTnVtYmVyLFxuICBTdHJpbmc6IHRvU3RyaW5nLFxuICBEYXRlOiB0b0RhdGUsXG4gIEFycmF5OiB0b0FycmF5LFxuICBPYmplY3Q6IHRvT2JqZWN0LFxuICBSZWdFeHA6IHRvUmVnRXhwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpIHtcbiAgLy8gU2VlIGlmIGFueSBvZiB0aGUgZXhwZWN0IHR5cGVzIG1hdGNoLCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhleSBkbzpcbiAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGlmICh0eXBlQ2hlY2tlcnNbdHlwZS5uYW1lXT8uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKSB7XG4gIGNvbnN0IGNvbnZlcnRlciA9IHR5cGUgJiYgdHlwZUNvbnZlcnRlcnNbdHlwZS5uYW1lIHx8IHR5cGVdXG4gIHJldHVybiBjb252ZXJ0ZXIgPyBjb252ZXJ0ZXIodmFsdWUpIDogdmFsdWVcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgcGlja0J5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Jlc291cmNlKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRSZXNvdXJjZShzY2hlbWEucmVzb3VyY2UpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvdXJjZShyZXNvdXJjZSwgZGVmYXVsdHMgPSB7fSkge1xuICBjb25zdCB7IHBhcmVudCwgLi4uZGVmcyB9ID0gZGVmYXVsdHNcbiAgcmVzb3VyY2UgPSBpc09iamVjdChyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIC4uLnJlc291cmNlIH1cbiAgICA6IGlzU3RyaW5nKHJlc291cmNlKSA/IHsgLi4uZGVmcywgcGF0aDogcmVzb3VyY2UgfVxuICAgIDogbnVsbFxuICAvLyBPbmx5IHNldCBwYXJlbnQgaWYgcGF0aCBkb2Vzbid0IHN0YXJ0IHdpdGggJy8nLCBzbyByZWxhdGl2ZSBVUkxzIGFyZVxuICAvLyBkZWFsdCB3aXRoIGNvcnJlY3RseS5cbiAgaWYgKFxuICAgIHJlc291cmNlICYmXG4gICAgcGFyZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICByZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCAmJlxuICAgICFyZXNvdXJjZS5wYXRoPy5zdGFydHNXaXRoKCcvJylcbiAgKSB7XG4gICAgcmVzb3VyY2UucGFyZW50ID0gcGFyZW50XG4gICAgaWYgKCFyZXNvdXJjZS5wYXRoKSB7XG4gICAgICByZXNvdXJjZS5wYXRoID0gJy4nXG4gICAgfVxuICB9XG4gIHJldHVybiByZXNvdXJjZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVtYmVyUmVzb3VyY2UoaWQsIHJlc291cmNlKSB7XG4gIHJldHVybiBpZCAhPSBudWxsICYmIHJlc291cmNlPy50eXBlID09PSAnY29sbGVjdGlvbidcbiAgICA/IHtcbiAgICAgIHR5cGU6ICdtZW1iZXInLFxuICAgICAgLi4ucGlja0J5KFxuICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgKHZhbHVlLCBrZXkpID0+IFsnbWV0aG9kJywgJ3BhdGgnLCAncGFyZW50J10uaW5jbHVkZXMoa2V5KVxuICAgICAgKSxcbiAgICAgIGlkOiBgJHtpZH1gXG4gICAgfVxuICAgIDogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzU3RyaW5nLCBpc0Z1bmN0aW9uLCBhc0FycmF5LCBlcXVhbHMsXG4gIGdldFZhbHVlQXREYXRhUGF0aCwgbGFiZWxpemUsIGh5cGhlbmF0ZSwgZm9ybWF0XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgYXBwU3RhdGUgZnJvbSAnLi4vYXBwU3RhdGUuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRwYXJlbnRDb21wb25lbnQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8ge1xuICAgICAgICAkcGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHBTdGF0ZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gUmVzb3VyY2VNaXhpbiwgdXNlZCBieSBsaXN0cy5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgaXNQb3B1bGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaXNQb3B1bGF0ZWQoKVxuICAgIH0sXG5cbiAgICBsb2NhbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGkubG9jYWxlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiBmYWxzZSB9KVxuICAgIH0sXG5cbiAgICByb290Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QuJHJlZnMucm9vdFxuICAgIH0sXG5cbiAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgcGFyZW50Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGZvcm1Db21wb25lbnQoKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJvdXRlQ29tcG9uZW50XG4gICAgICByZXR1cm4gY29tcG9uZW50Py5pc0Zvcm0gPyBjb21wb25lbnQgOiBudWxsXG4gICAgfSxcblxuICAgIHZpZXdDb21wb25lbnQoKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJvdXRlQ29tcG9uZW50XG4gICAgICByZXR1cm4gY29tcG9uZW50Py5pc1ZpZXcgPyBjb21wb25lbnQgOiBudWxsXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGZpcnN0IHJvdXRlIGNvbXBvbmVudCBpbiB0aGUgY2hhaW4gb2YgcGFyZW50cywgaW5jbHVkaW5nXG4gICAgLy8gdGhpcyBjdXJyZW50IGNvbXBvbmVudCwgdGhhdCBpcyBsaW5rZWQgdG8gYSByZXNvdXJjZSAoYW5kIHRodXMgbG9hZHMgaXRzXG4gICAgLy8gb3duIGRhdGEgYW5kIGRvZXNuJ3QgaG9sZCBuZXN0ZWQgZGF0YSkuXG4gICAgZGF0YUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YSA/IHRoaXMgOiB0aGlzLiRkYXRhQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGRpYWxvZ0NvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhbmVsQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQucm91dGVDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5mb3JtQ29tcG9uZW50XG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGRhdGEgb2YgdGhlIGZpcnN0IHJvdXRlIGNvbXBvbmVudCBpbiB0aGUgY2hhaW4gb2YgcGFyZW50c1xuICAgIC8vIHRoYXQgbG9hZHMgaXRzIG93biBkYXRhIGZyb20gYW4gYXNzb2NpYXRlZCBBUEkgcmVzb3VyY2UuXG4gICAgcm9vdERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhQ29tcG9uZW50Py5kYXRhXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZUNyZWF0ZSgpIHtcbiAgICBjb25zdCB1aWQgPSBuZXh0VWlkKytcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJyR1aWQnLCB7XG4gICAgICBnZXQoKSB7IHJldHVybiB1aWQgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLnN0b3JlW2tleV0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpIHx8IHRoaXMuc2V0U3RvcmUoa2V5LCByZWFjdGl2ZSh7fSkpXG4gICAgfSxcblxuICAgIGdldFNjaGVtYVZhbHVlKFxuICAgICAga2V5T3JEYXRhUGF0aCxcbiAgICAgIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBzY2hlbWEgPSB0aGlzLnNjaGVtYSwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuICAgICkge1xuICAgICAgY29uc3QgdHlwZXMgPSB0eXBlICYmIGFzQXJyYXkodHlwZSlcbiAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBkYXRhLXBhdGhzIGluIGBrZXlPckRhdGFQYXRoYCBjYW4gb25seSBiZVxuICAgICAgLy8gcHJvdmlkZWQgaW4gaW4gYXJyYXkgZm9ybWF0IGhlcmU6XG4gICAgICBsZXQgdmFsdWUgPSBzY2hlbWFcbiAgICAgICAgPyBpc0FycmF5KGtleU9yRGF0YVBhdGgpXG4gICAgICAgICAgPyBnZXRWYWx1ZUF0RGF0YVBhdGgoc2NoZW1hLCBrZXlPckRhdGFQYXRoLCAoKSA9PiB1bmRlZmluZWQpXG4gICAgICAgICAgOiBzY2hlbWFba2V5T3JEYXRhUGF0aF1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oZGVmKSAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIGRlZikpIHtcbiAgICAgICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9ucyBmb3IgYW55IHR5cGUgZXhjZXB0IGBGdW5jdGlvbmA6XG4gICAgICAgICAgZGVmID0gZGVmLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9XG4gICAgICAvLyBBbnkgc2NoZW1hIHZhbHVlIGhhbmRsZWQgdGhyb3VnaCBgZ2V0U2NoZW1hVmFsdWUoKWAgY2FuIHByb3ZpZGVcbiAgICAgIC8vIGEgZnVuY3Rpb24gdGhhdCdzIHJlc29sdmVkIHdoZW4gdGhlIHZhbHVlIGlzIGV2YWx1YXRlZDpcbiAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gICAgICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgICAgICBpZiAoY29udmVydGVkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIGdldExhYmVsKHNjaGVtYSwgbmFtZSkge1xuICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2xhYmVsJywgeyB0eXBlOiBTdHJpbmcsIHNjaGVtYSB9KSB8fFxuICAgICAgICAgIGxhYmVsaXplKG5hbWUgfHwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogbGFiZWxpemUobmFtZSkgfHwgJydcbiAgICB9LFxuXG4gICAgbGFiZWxpemUsXG5cbiAgICBnZXRCdXR0b25BdHRyaWJ1dGVzKG5hbWUsIGJ1dHRvbikge1xuICAgICAgY29uc3QgdmVyYiA9IHRoaXMudmVyYnNbbmFtZV0gfHwgbmFtZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xhc3M6IGBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YCxcbiAgICAgICAgdGl0bGU6IGJ1dHRvbj8udGV4dCB8fCBsYWJlbGl6ZSh2ZXJiKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUsIGZhbGxiYWNrID0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuaW1hdGlvbjogMTUwLFxuICAgICAgICBkaXNhYmxlZDogIWRyYWdnYWJsZSxcbiAgICAgICAgaGFuZGxlOiAnLmRpdG8tYnV0dG9uLWRyYWcnLFxuICAgICAgICBkcmFnQ2xhc3M6ICdkaXRvLWRyYWctYWN0aXZlJyxcbiAgICAgICAgY2hvc2VuQ2xhc3M6ICdkaXRvLWRyYWctY2hvc2VuJyxcbiAgICAgICAgZ2hvc3RDbGFzczogJ2RpdG8tZHJhZy1naG9zdCcsXG4gICAgICAgIGZhbGxiYWNrQ2xhc3M6ICdkaXRvLWRyYWctZmFsbGJhY2snLFxuICAgICAgICBmb3JjZUZhbGxiYWNrOiBmYWxsYmFja1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgKkxpbmsoKSB0byAqUm91dGUoKS5cbiAgICBnZXRRdWVyeUxpbmsocXVlcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlcihzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gISFzY2hlbWEgJiYgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnaWYnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHNjaGVtYVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKSB7XG4gICAgICByZXNvdXJjZSA9IGdldFJlc291cmNlKHJlc291cmNlKVxuICAgICAgLy8gUmVzb3VyY2VzIHdpdGhvdXQgYSBwYXJlbnQgaW5oZXJpdCB0aGUgb25lIGZyb20gYGRhdGFDb21wb25lbnRgXG4gICAgICAvLyBhdXRvbWF0aWNhbGx5LlxuICAgICAgaWYgKHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc291cmNlLnBhcmVudCA9IHRoaXMuZGF0YUNvbXBvbmVudD8ucmVzb3VyY2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFwaS5yZXNvdXJjZXMuYW55KGdldFJlc291cmNlKHJlc291cmNlKSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgcmV0dXJuIHVybCA/IHRoaXMuYXBpLmdldEFwaVVybCh7IHVybCwgcXVlcnk6IHJlc291cmNlLnF1ZXJ5IH0pIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdCh7IG1ldGhvZCwgdXJsLCByZXNvdXJjZSwgcXVlcnksIGRhdGEsIGludGVybmFsIH0pIHtcbiAgICAgIHVybCB8fD0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICBtZXRob2QgfHw9IHJlc291cmNlPy5tZXRob2RcbiAgICAgIGNvbnN0IGNoZWNrVXNlciA9ICFpbnRlcm5hbCAmJiB0aGlzLmFwaS5pc0FwaVVybCh1cmwpXG4gICAgICBpZiAoY2hlY2tVc2VyKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5lbnN1cmVVc2VyKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcGkucmVxdWVzdCh7IG1ldGhvZCwgdXJsLCBkYXRhLCBxdWVyeSB9KVxuICAgICAgLy8gRGV0ZWN0IGNoYW5nZSBvZiB0aGUgb3duIHVzZXIsIGFuZCBmZXRjaCBpdCBhZ2FpbiBpZiBpdCB3YXMgY2hhbmdlZC5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tVc2VyICYmXG4gICAgICAgIG1ldGhvZCA9PT0gJ3BhdGNoJyAmJlxuICAgICAgICBlcXVhbHMocmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlKHRoaXMudXNlci5pZCwgdGhpcy5hcGkudXNlcnMpKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5mZXRjaFVzZXIoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coeyBjb21wb25lbnRzLCBidXR0b25zLCBkYXRhLCBzZXR0aW5ncyB9KSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29tcG9uZW50LnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICBidXR0b25zLFxuICAgICAgICBkYXRhLFxuICAgICAgICBzZXR0aW5nc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVxdWVzdCh7IGNhY2hlLCAuLi5vcHRpb25zIH0pIHtcbiAgICAgIC8vIEFsbG93IGNhY2hpbmcgb2YgbG9hZGVkIGRhdGEgb24gdHdvIGxldmVsczpcbiAgICAgIC8vIC0gJ2dsb2JhbCc6IGNhY2hlIGdsb2JhbGx5LCBmb3IgdGhlIGVudGlyZSBhZG1pbiBzZXNzaW9uXG4gICAgICAvLyAtICdsb2NhbCc6IGNhY2hlIGxvY2FsbHkgd2l0aGluIHRoZSBjbG9zZXN0IHJvdXRlIGNvbXBvbmVudCB0aGF0IGlzXG4gICAgICAvLyAgICBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBhbmQgbG9hZHMgaXRzIG93biBkYXRhLlxuICAgICAgY29uc3QgY2FjaGVQYXJlbnQgPSBjYWNoZSAmJiB7XG4gICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgbG9jYWw6IHRoaXMuZGF0YUNvbXBvbmVudFxuICAgICAgfVtjYWNoZV1cbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gbG9hZENhY2hlICYmIGAke1xuICAgICAgICBvcHRpb25zLm1ldGhvZCB8fCAnZ2V0J30gJHtcbiAgICAgICAgb3B0aW9ucy51cmx9ICR7XG4gICAgICAgIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb25cbiAgICAgICAgLy8gMjAyMi0xMS0wMSwgcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucHVzaChsb2NhdGlvbilcbiAgICB9LFxuXG4gICAgZG93bmxvYWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH1cbiAgICAgIH1cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ5OTE3MDY2LzExNjM3MDhcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGEuaHJlZiA9IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEuY29tcHV0ZWQgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc29yID0gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICAgICAgICA/IHsgZ2V0OiB2YWx1ZSB9XG4gICAgICAgICAgOiBpc09iamVjdCh2YWx1ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5nZXQpXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgYWNjZXNzb3IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGNvbXB1dGVkIHByb3BlcnR5IGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwRXZlbnRzKCkge1xuICAgICAgY29uc3QgeyB3YXRjaCwgZXZlbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKHdhdGNoKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gaXNGdW5jdGlvbih3YXRjaCkgPyB3YXRjaC5jYWxsKHRoaXMpIDogd2F0Y2hcbiAgICAgICAgaWYgKGlzT2JqZWN0KGhhbmRsZXJzKSkge1xuICAgICAgICAgIC8vIEluc3RhbGwgdGhlIHdhdGNoIGhhbmRsZXJzIGluIHRoZSBuZXh0IHRpY2ssIHNvIGFsbCBjb21wb25lbnRzIGFyZVxuICAgICAgICAgIC8vIGluaXRpYWxpemVkIGFuZCB3ZSBjYW4gY2hlY2sgYWdhaW5zdCB0aGVpciBuYW1lcy5cbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNhbGxiYWNrXSBvZiBPYmplY3QuZW50cmllcyhoYW5kbGVycykpIHtcbiAgICAgICAgICAgICAgLy8gRXhwYW5kIHByb3BlcnR5IG5hbWVzIHRvICdkYXRhLnByb3BlcnR5JzpcbiAgICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5TmFtZShrZXkpXG4gICAgICAgICAgICAgICAgPyBgZGF0YS4ke2tleX1gXG4gICAgICAgICAgICAgICAgOiBrZXlcbiAgICAgICAgICAgICAgdGhpcy4kd2F0Y2goZXhwciwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhZGRFdmVudCA9IChrZXksIGV2ZW50LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgICB0aGlzLm9uKGh5cGhlbmF0ZShldmVudCksIGNhbGxiYWNrKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgZXZlbnQgZGVmaW5pdGlvbjogJHtrZXl9OiAke2NhbGxiYWNrfWApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBbHNvIHNjYW4gc2NoZW1hIGZvciBgb25bQS1aXWAtc3R5bGUgY2FsbGJhY2tzIGFuZCBhZGQgdGhlbVxuICAgICAgLy8gVE9ETzogRGVwcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCBuZXh0VWlkID0gMFxuIiwiaW1wb3J0IHsgaXNDcmVkaXRDYXJkIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGNyZWRpdGNhcmQgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0NyZWRpdENhcmQodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgaW52YWxpZCdcbn1cbiIsImV4cG9ydCBjb25zdCBkZWNpbWFscyA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IGRlY2ltYWxzID09PSAnKicgPyAnKycgOiBgezEsJHtkZWNpbWFsc319YFxuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeWy0rXT9cXFxcZCooXFxcXC5cXFxcZCR7bWF0Y2h9KT8kYCkudGVzdCh2YWx1ZSlcbiAgfSxcblxuICBtZXNzYWdlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiAoXG4gICAgYG11c3QgYmUgbnVtZXJpYyBhbmQgbWF5IGNvbnRhaW4gJHtcbiAgICAgICFkZWNpbWFscyB8fCBkZWNpbWFscyA9PT0gJyonID8gJycgOiBkZWNpbWFsc1xuICAgIH0gZGVjaW1hbCBwb2ludHNgXG4gIClcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnLFxuICBudWxsaXNoOiB0cnVlXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRpb25zIGZyb20gJy4uL3ZhbGlkYXRpb25zL2luZGV4LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICBpc1ZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZShub3RpZnkgPSB0cnVlKSB7XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAvLyBjb25zb2xlLmxvZygndmFsaWRhdGUnLCB0aGlzLmRhdGFQYXRoLCB2YWx1ZSwgdGhpcy52YWxpZGF0aW9ucylcbiAgICAgIGZvciAoY29uc3QgW3J1bGUsIHNldHRpbmddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHZhbGlkYXRpb25zW3J1bGVdXG4gICAgICAgIGlmICh2YWxpZGF0b3IgJiYgKHZhbGlkYXRvci5udWxsaXNoIHx8IHZhbHVlICE9IG51bGwpKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWxpZGF0ZSwgbWVzc2FnZSB9ID0gdmFsaWRhdG9yXG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZSh2YWx1ZSwgc2V0dGluZywgdGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzRnVuY3Rpb24obWVzc2FnZSlcbiAgICAgICAgICAgICAgICA/IG1lc3NhZ2UodmFsdWUsIHNldHRpbmcsIHRoaXMpXG4gICAgICAgICAgICAgICAgOiBtZXNzYWdlXG4gICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IGlzVmFsaWRcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKGZhbHNlKVxuICAgIH0sXG5cbiAgICBtYXJrVG91Y2hlZCgpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBtYXJrRGlydHkoKSB7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyBvbiBuZXcgaW5wdXQuXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgYWRkRXJyb3IoZXJyb3IsIGFkZExhYmVsID0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZXJyb3JzIHx8PSBbXVxuICAgICAgaWYgKGFkZExhYmVsKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbCB8fCB0aGlzLnBsYWNlaG9sZGVyIHx8IHRoaXMubmFtZVxuICAgICAgICBlcnJvciA9IGBUaGUgJHtsYWJlbH0gZmllbGQgJHtlcnJvcn0uYFxuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcilcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICAvLyBDb252ZXJ0IGZyb20gQUpWIGVycm9ycyBvYmplY3RzIHRvIGFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzXG4gICAgICB0aGlzLmVycm9ycyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHsgbWVzc2FnZSB9IG9mIGVycm9ycykge1xuICAgICAgICB0aGlzLmFkZEVycm9yKG1lc3NhZ2UsIHRydWUpXG4gICAgICB9XG4gICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBnZXRFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lcnJvcnMgPyBbLi4udGhpcy5lcnJvcnNdIDogbnVsbFxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gbnVsbFxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0Z1bmN0aW9uLCBpc1N0cmluZywgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUFjY2Vzc29yKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbikge1xuICAvLyBga2V5T3JEYXRhUGF0aGAgY2FuIGJlIGEgc2ltcGxlIHByb3BlcnR5IGtleSxcbiAgLy8gb3IgYSBkYXRhLXBhdGggaW50byBzdWItcHJvcGVydGllcywgYm90aCBpbiBhcnJheSBvciBzdHJpbmcgZm9ybWF0LlxuICBpZiAoaXNTdHJpbmcoa2V5T3JEYXRhUGF0aCkgJiYga2V5T3JEYXRhUGF0aC5pbmNsdWRlcygnLicpKSB7XG4gICAga2V5T3JEYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgfVxuICAvLyBVc2UgdGhlIG5vcm1hbGl6ZWQgZGF0YSBwYXRoIGZvciB0aGUgaGFuZGxpbmcgb3ZlcnJpZGVzXG4gIGNvbnN0IG5hbWUgPSBub3JtYWxpemVEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIC8vIE9ubHkgZGV0ZXJtaW5lIHNjaGVtYSB2YWx1ZSBpZiB3ZSBoYXZlIG5vIGdldHRlciwgb3IgdGhlIGdldHRlclxuICAgICAgLy8gd2FudHMgdG8gcmVjZWl2ZSB0aGUgdmFsdWUgYW5kIHByb2Nlc3MgaXQgZnVydGhlcjpcbiAgICAgIGNvbnN0IHZhbHVlID0gIWdldCB8fCBnZXQubGVuZ3RoID4gMFxuICAgICAgICAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCBvYmplY3QsIHRoZXlcbiAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgIC8vIGBzZXQoKWAgc3RvcmVzIGNoYW5nZWQgdmFsdWVzIGluIHRoZSBzZXBhcmF0ZSBgb3ZlcnJpZGVzYCBvYmplY3QuXG4gICAgICAgID8gdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgID8gdGhpcy5vdmVycmlkZXNbbmFtZV1cbiAgICAgICAgICA6IHRoaXMuZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGNhbGxiYWNrIH0pXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVmFsaWRhdGlvbk1peGluIGZyb20gJy4vVmFsaWRhdGlvbk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGNvbXB1dGVWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldEl0ZW0sIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiBudWxsLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgeyBjb21wb25lbnQ6IHRoaXMgfVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLmZvcm1hdGAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEucGFyc2VgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSBwYXJzZVxuICAgICAgICAgID8gcGFyc2UuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB0aGlzLnBhcnNlZFZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICAvLyBXZSBjYW4gb25seSBnZXQgdGhlIHByb2Nlc3NlZCBpdGVtcyB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWRJdGVtLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2xhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgQm9vbGVhbl0sXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKGxhYmVsKVxuICAgICAgICAgID8gbGFiZWxcbiAgICAgICAgICA6IGxhYmVsICE9PSBmYWxzZSAmJiB0aGlzLiRvcHRpb25zLmdlbmVyYXRlTGFiZWxcbiAgICAgICAgICAgID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgd2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl1cbiAgICB9KSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRvcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGV4Y2x1ZGVkYCBmb3IgY29uc2lzdGVudCBuYW1pbmdcbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgbmF0aXZlRmllbGQsIHRleHRGaWVsZCB9ID0gdGhpcy4kb3B0aW9uc1xuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5PYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy4kYXR0cnMpLmZpbHRlcigoW2tleV0pID0+IGtleS5zdGFydHNXaXRoKCdvbicpKVxuICAgICAgICApLFxuICAgICAgICAuLi50aGlzLmV2ZW50cyxcbiAgICAgICAgLi4uYXR0cmlidXRlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBldmVudHMoKSB7XG4gICAgICBjb25zdCBldmVudHMgPSB0aGlzLmdldEV2ZW50cygpXG4gICAgICAvLyBSZWdpc3RlciBjYWxsYmFja3MgZm9yIGFsbCBwcm92aWRlcyBub24tcmVjb2duaXplZCBldmVudHMsXG4gICAgICAvLyBhc3N1bWluZyB0aGV5IGFyZSBuYXRpdmUgZXZlbnRzLlxuICAgICAgLy8gVE9ETzogTW92ZSB0byB2dWUzLXN0eWxlIGBvbltBLVpdYCBldmVudCBoYW5kbGVycyBuYW1pbmcgdGhhdCBhcmVuJ3RcbiAgICAgIC8vIG5hbWVzcGFjZWQgaW4gYHNjaGVtYS5ldmVudHNgIG9uY2UgdGhlIHRyYW5zaXRpb24gaXMgY29tcGxldGUuXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLmV2ZW50cyB8fCB7fSkpIHtcbiAgICAgICAgZXZlbnRzW2BvbiR7Y2FtZWxpemUoZXZlbnQsIHRydWUpfWBdIHx8PSAoKSA9PiB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgIH1cbiAgICAgIHJldHVybiBldmVudHNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgYmVmb3JlVW5tb3VudCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgKGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMubWFya1RvdWNoZWQoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2ZvY3VzJylcbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OiB0aGlzLnBhcnNlZFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQob2JqZWN0LCBpdGVtSWQpIHtcbiAgbGV0IGlkID0gdWlkTWFwLmdldChvYmplY3QpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGl0ZW1JZCB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQob2JqZWN0LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsIGFzQXJyYXksIHBhcnNlRGF0YVBhdGgsIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSAoc3ViR3JhcGhba2V5XSA/Pz0ge30pXG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gY2xpcGJvYXJkICYmIChcbiAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH0gaWYgKHJlZmVyZW5jZUlkIHx8IGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZWZLZXkgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YC5cbiAgICAgICAgICAgICAgICA/IGlkS2V5XG4gICAgICAgICAgICAgICAgLy8gU2VydmVyIHdhbnRzIE9iamVjdGlvbi1zdHlsZSAnI2lkJyAvICcjcmVmJyBwYWlycy5cbiAgICAgICAgICAgICAgICA6IHNvdXJjZSA/ICcjaWQnIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAvLyBhY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGl0b01peGluIGZyb20gJy4uL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICcuL3VpZC5qcydcbmltcG9ydCB7IFNjaGVtYUdyYXBoIH0gZnJvbSAnLi9TY2hlbWFHcmFwaC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIGNsb25lLCBjYW1lbGl6ZSwgaXNNb2R1bGUsXG4gIG1hcENvbmN1cnJlbnRseVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbWFya1JhdyB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgdHlwZUNvbXBvbmVudHMgPSB7fVxuY29uc3QgdW5rbm93blR5cGVSZXBvcnRlZCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KSB7XG4gIHR5cGVDb21wb25lbnRzW3R5cGVdID0gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcG9uZW50KHR5cGUsIGFsbG93TnVsbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVDb21wb25lbnRzW3R5cGVdIHx8IG51bGxcbiAgaWYgKCFjb21wb25lbnQgJiYgIWFsbG93TnVsbCAmJiAhdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSkge1xuICAgIC8vIFJlcG9ydCBlYWNoIG1pc3NpbmcgdHlwZSBvbmx5IG9uY2UsIHRvIGF2b2lkIGZsb29kaW5nIHRoZSBjb25zb2xlOlxuICAgIHVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0gPSB0cnVlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERpdG8gY29tcG9uZW50IHR5cGU6ICcke3R5cGV9J2ApXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYS5jb21wb25lbnQsIHNjaGVtYS5uYW1lKVxuICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzY2hlbWFzID0gc2NoZW1hXG4gICAgICA/IFsuLi5PYmplY3QudmFsdWVzKHNjaGVtYS50YWJzIHx8IHt9KSwgc2NoZW1hXVxuICAgICAgOiBbXVxuICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSlcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBjb21wb25lbnQgOiB1bmRlZmluZWRcbiAgKSB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyB0cnVlIDogdW5kZWZpbmVkXG4gICkgPT09IHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5U2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+ICFjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gZmFsc2UgOiB1bmRlZmluZWRcbiAgKSAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NoZW1hKHNjaGVtYSkge1xuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiBpc1N0cmluZyhzY2hlbWEudHlwZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRm9ybShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdmb3JtJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3ZpZXcnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLm5hbWUgfHwgc2NoZW1hLmxhYmVsIHx8IHNjaGVtYS50eXBlXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYW5lbHMoc2NoZW1hKSB7XG4gIGNvbnN0IHsgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhwYW5lbHMpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gIGF3YWl0IHJlc29sdmVQYW5lbHMoc2NoZW1hKVxuICBpZiAoaXNWaWV3KHNjaGVtYSkpIHtcbiAgICBsZXQgbGV2ZWwgPSAwXG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLmNvbXBvbmVudCwgbmFtZSwgY2hpbGRyZW4sIGxldmVsKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3LCBzdGFydCBhdCBsZXZlbCAxXG4gICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sICsrbGV2ZWwpXG4gICAgfVxuICAgIHNjaGVtYS5sZXZlbCA9IGxldmVsXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZpZXcgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBgLyR7c2NoZW1hLnBhdGh9YCxcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnQsXG4gICAgbWV0YToge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gIHNjaGVtYS5sZXZlbCA9IGxldmVsXG4gIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICBhd2FpdCBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW5cbiAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gIHNjaGVtYS5wYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgKGNvbXBvbmVudCwgbmFtZSkgPT4ge1xuICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc0NvbXBvbmVudChhcGksIGNvbXBvbmVudCwgbmFtZSwgcm91dGVzLCBsZXZlbCkpXG4gIH0pXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIHJlc29sdmVGb3JtKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCByZXNvbHZlRm9ybShmb3JtKVxuICB9IGVsc2UgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cyB9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfSAvLyBPbmx5IHVzZWQgZm9yIHByb2Nlc3MgbG9vcCBiZWxvdy5cbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIGZvcm0sIGNoaWxkcmVuLCBsZXZlbCArIDEpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRm9ybShzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNGb3JtKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBpZiAoc2NoZW1hKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVBhbmVscyhzY2hlbWEpXG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRm9ybVNjaGVtYShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBib3RoIHNpbmdsZSBmb3JtIGFuZCBtdWx0aXBsZSBmb3JtcyBub3RhdGlvbiwgYXMgd2VsbCBhcyBpbmxpbmVkXG4gIC8vIGNvbXBvbmVudHMuXG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5mb3JtIHx8IHNjaGVtYS5mb3JtcyB8fCBzY2hlbWEuY29tcG9uZW50cylcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgT2JqZWN0LmtleXMoc2NoZW1hPy5mb3JtcyB8fCB7fSkubGVuZ3RoID4gMVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNWaWV3KHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuY29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3Rm9ybVNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgeyB2aWV3IH0gPSBzY2hlbWFcbiAgY29uc3Qgdmlld1NjaGVtYSA9IHZpZXcgJiYgY29udGV4dC52aWV3c1t2aWV3XVxuICByZXR1cm4gdmlld1NjaGVtYVxuICAgIC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICA/IGZvckVhY2hTY2hlbWFDb21wb25lbnQodmlld1NjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0pIHx8IG51bGxcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRWaWV3Rm9ybVNjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gICAgPyBjb250ZXh0LnZpZXdzW3NjaGVtYS52aWV3XVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIHJldHVybiB2aWV3XG4gICAgPyB2aWV3LmxldmVsID09PSAwXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YCAvLyBBIHNpbmdsZS1jb21wb25lbnQgdmlld1xuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXdcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgbW9kaWZ5Rm9ybSkge1xuICBjb25zdCB2aWV3U2NoZW1hID0gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlld1NjaGVtYSkge1xuICAgIHNjaGVtYSA9IHZpZXdTY2hlbWFcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzLCBjb21wYWN0IH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgY29tcG9uZW50cyB0byBmb3Jtcywgc3VwcG9ydGluZyBgY29tcGFjdGAgc2V0dGluZy5cbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMsIGNvbXBhY3QgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGlzRnVuY3Rpb24oZm9ybS5jb21wb25lbnRzKSkge1xuICAgICAgICBmb3JtID0ge1xuICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgY29tcG9uZW50czogZm9ybS5jb21wb25lbnRzKGNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbdHlwZSwgbW9kaWZ5Rm9ybT8uKGZvcm0pID8/IGZvcm1dXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pIHtcbiAgcmV0dXJuIGZvcm1zW2l0ZW0/LnR5cGVdIHx8IGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyhnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQpLCBpdGVtKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEubGFiZWwgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoXG4gICAgc2NoZW1hLm5lc3RlZCB8fFxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdFBhZGRpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRQYWRkaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gc2NoZW1hLmRlZmF1bHRcbiAgY29uc3QgdmFsdWUgPSBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgID8gZGVmYXVsdFZhbHVlXG4gICAgOiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0VmFsdWVcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpXG4gICAgPyB2YWx1ZShzY2hlbWEpXG4gICAgOiBjbG9uZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpIHtcbiAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG4gIHJldHVybiAhIShcbiAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgdHlwZU9wdGlvbnM/Lmlnbm9yZU1pc3NpbmdWYWx1ZT8uKHNjaGVtYSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWxzKHNjaGVtYSkge1xuICBjb25zdCBjaGVja0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+XG4gICAgT2JqZWN0LnZhbHVlcyhjb21wb25lbnRzIHx8IHt9KS5zb21lKGhhc0xhYmVsKVxuXG4gIHJldHVybiAoXG4gICAgY2hlY2tDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKSB8fFxuICAgIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMgfHwge30pLnNvbWUoY2hlY2tDb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0cyhzY2hlbWEsIGRhdGEgPSB7fSwgY29tcG9uZW50KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgcm9vdERhdGE6IGRhdGEgfVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lKSA9PiB7XG4gICAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdXAgYSBkYXRhIG9iamVjdCB0aGF0IGhhcyBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbFxuICAvLyBmb3JtIGZpZWxkcywgc28gdGhleSBjYW4gYmUgY29ycmVjdGx5IHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsIGRhdGEsIG51bGwsIG51bGwsIHByb2Nlc3NCZWZvcmUsIG51bGwsIG9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgcm9vdERhdGEgPSBjb21wb25lbnQ/LnJvb3REYXRhXG59ID0ge30pIHtcbiAgY29uc3QgeyBjb21wdXRlIH0gPSBzY2hlbWFcbiAgaWYgKGNvbXB1dGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGUoRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgdG8gcHJldmVudCBlbmRsZXNzIHJlY3Vyc2lvbiB0aHJvdWdoIGNhbGxpbmcgdGhlXG4gICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGFcbiAgICB9KSlcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQWNjZXNzIGBkYXRhW25hbWVdYCBkaXJlY3RseSBpbnN0ZWFkIG9mIGB0aGlzLnZhbHVlID0g4oCmYCB0byB1cGRhdGUgdGhlXG4gICAgICAvLyB2YWx1ZSB3aXRob3V0IGNhbGxpbmcgcGFyc2UoKTpcbiAgICAgIGRhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICB9XG4gIC8vIE5vdyBhY2Nlc3MgdGhlIHZhbHVlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgcmVhY3Rpdml0eSBhbmQgbmVlZHMgdG9cbiAgLy8gaGFwcGVuIGFmdGVyIGFsbCBwcmlvciBtYW5pcHVsYXRpb24gb2YgYGRhdGFbbmFtZV1gLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgc2NoZW1hT25seSwgLy8gd2hldGhlciB0byBvbmx5IGluY2x1ZGUgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBzY2hlbWEsIG9yIGFsbCBkYXRhXG4gIHRhcmdldFxufSA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgc2NoZW1hT25seSwgdGFyZ2V0LCByb290RGF0YTogZGF0YSB9XG4gIGNvbnN0IHByb2Nlc3NlZERhdGEgPSBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBkYXRhLCBvcHRpb25zKVxuICBjb25zdCBncmFwaCA9IG5ldyBTY2hlbWFHcmFwaCgpXG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIG9wdGlvbnMpXG4gICAgLy8gVGhlIHNjaGVtYSBleHBlY3RzIHRoZSBgd3JhcFByaW1pdGl2ZXNgIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBwcmVzZW50IG9uXG4gICAgLy8gdGhlIGRhdGEgdGhhdCBpdCBpcyBhcHBsaWVkIG9uLCBzbyB3YXJwIGJlZm9yZSBhbmQgdW53cmFwIGFmdGVyLlxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgb3JkZXJLZXksIGlkS2V5ID0gJ2lkJyB9ID0gc2NoZW1hXG4gICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiBlbnRyeVxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsd2F5cyBzaGFsbG93LWNsb25lIGFycmF5IHZhbHVlczpcbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWVdXG4gICAgICB9XG4gICAgICBpZiAob3JkZXJLZXkgJiYgdGFyZ2V0ID09PSAnY2xpcGJvYXJkJykge1xuICAgICAgICAvLyBTb3J0IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgbmF0dXJhbCBzZXF1ZW5jZSBhcyBkZWZpbmVkIGJ5IHRoZWlyIGlkcyxcbiAgICAgICAgLy8gc28gY29weS1wYXN0aW5nIGJldHdlZW4gc2VydmVycyAoZS5nLiBuZXN0ZWQgZm9udC1jdXRzIG9uIExpbmV0bylcbiAgICAgICAgLy8gbmF0dXJhbGx5IGdldHMgbWFwcGVkIHRvIHRoZSBzYW1lIGVudHJpZXMgaW4gdGhlIGdyYXBoLlxuICAgICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQxID0gYT8uW2lkS2V5XVxuICAgICAgICAgIGNvbnN0IGlkMiA9IGI/LltpZEtleV1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaWQxID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDEpID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMikgPyAtMVxuICAgICAgICAgICAgOiBpZDEgLSBpZDJcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgdmFsdWUsXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICBwcm9jZXNzZWREYXRhXG4gICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+IGRhdGFQYXRoICE9IG51bGxcbiAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9IGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3NBZnRlcj8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBpZiAoc2NoZW1hLnRhYnMpIHtcbiAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSkge1xuICAgICAgcHJvY2Vzc0NvbXBvbmVudHModGFiLmNvbXBvbmVudHMpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0QWxsUGFuZWxTY2hlbWFzKHNjaGVtYSwgZGF0YVBhdGgpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuc2NoZW1hLmNvbXBvbmVudHMpXG4gIH1cblxuICByZXR1cm4gcHJvY2Vzc2VkRGF0YSB8fCBkYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lZFNjaGVtYXMoc2NoZW1hcywgZGVmYXVsdHMpIHtcbiAgY29uc3QgdG9PYmplY3QgPSAoYXJyYXksIHRvU2NoZW1hKSA9PiB7XG4gICAgcmV0dXJuIGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgID8gYXJyYXkucmVkdWNlKChvYmplY3QsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgb2JqZWN0W3NjaGVtYS5uYW1lXSA9IHNjaGVtYSAmJiBkZWZhdWx0c1xuICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0XG4gICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoc2NoZW1hcylcbiAgICA/IHRvT2JqZWN0KHNjaGVtYXMsIHZhbHVlID0+IChcbiAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge1xuICAgICAgICBuYW1lOiBjYW1lbGl6ZSh2YWx1ZSwgZmFsc2UpXG4gICAgICB9XG4gICAgKSlcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICBPYmplY3QuZW50cmllcyhzY2hlbWFzKSxcbiAgICAgICAgKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICAgICAgaXNPYmplY3QodmFsdWUpID8ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIDogaXNTdHJpbmcodmFsdWUpID8ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uU2NoZW1hcyhidXR0b25zKSB7XG4gIHJldHVybiBnZXROYW1lZFNjaGVtYXMoXG4gICAgYnV0dG9ucyxcbiAgICB7IHR5cGU6ICdidXR0b24nIH0gLy8gRGVmYXVsdHNcbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hT3JUeXBlKSA/IHNjaGVtYU9yVHlwZS50eXBlIDogc2NoZW1hT3JUeXBlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVDb21wb25lbnQoZ2V0VHlwZShzY2hlbWFPclR5cGUpLCB0cnVlKSA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKFxuICAgIGdldFR5cGUoc2NoZW1hT3JUeXBlKVxuICApID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsU2NoZW1hKHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICBzY2hlbWEsXG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBuYW1lLCBhcHBlbmQgaXQgdG8gdGhlIGRhdGFQYXRoLlxuICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgIGRhdGFQYXRoOiBzY2hlbWEubmFtZVxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgIHRhYkNvbXBvbmVudFxuICAgIH1cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsU2NoZW1hcyhzY2hlbWFzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbHMgPSBbXSkge1xuICBpZiAoc2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWFzKSkge1xuICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbFNjaGVtYShcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwga2V5KSxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWxzLnB1c2gocGFuZWwpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsU2NoZW1hcyhcbiAgc2NoZW1hLFxuICBkYXRhUGF0aCxcbiAgc2NoZW1hQ29tcG9uZW50ID0gbnVsbCxcbiAgdGFiQ29tcG9uZW50ID0gbnVsbFxuKSB7XG4gIGNvbnN0IHBhbmVsID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2V0UGFuZWxTY2hlbWE/LihcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgc2NoZW1hQ29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxzID0gcGFuZWwgPyBbZ2V0UGFuZWxTY2hlbWEocGFuZWwsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXSA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gJGZpbHRlcik6XG4gIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbHMpXG4gIHJldHVybiBwYW5lbHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkpXG59XG4iLCIvLyBBIG1pbmktcmVwbGljYXRpb24gb2YgdnVlJ3MgaW50ZXJuYWwgYHJlc29sdmVNZXJnZWRPcHRpb25zKClgIGJ1dCBvbmx5XG4vLyBoYW5kbGluZyBvdXIgb3duIGFkZGVkIG9wdGlvbnMgcHJvcGVydGllcyBhbmQgbWVyZ2luZyB0aGVtIGVhcmx5IGluc3RlYWRcbi8vIG9mIGxhemlseS5cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNZXJnZWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgY29uc3QgeyBtaXhpbnMgfSA9IG9wdGlvbnNcbiAgcmV0dXJuIG1peGlucyB8fCBvcHRpb25zLmV4dGVuZHNcbiAgICA/IG1lcmdlT3B0aW9ucyhcbiAgICAgIHsgLi4ub3B0aW9ucyB9LFxuICAgICAgb3B0aW9uc1xuICAgIClcbiAgICA6IG9wdGlvbnNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3B0aW9ucyh0bywgZnJvbSkge1xuICBpZiAoZnJvbS5leHRlbmRzKSB7XG4gICAgbWVyZ2VPcHRpb25zKHRvLCBmcm9tLmV4dGVuZHMpXG4gIH1cbiAgaWYgKGZyb20ubWl4aW5zKSB7XG4gICAgZm9yIChjb25zdCBtaXhpbiBvZiBmcm9tLm1peGlucykge1xuICAgICAgbWVyZ2VPcHRpb25zKHRvLCBtaXhpbilcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgb2YgZGl0b09wdGlvbktleXMpIHtcbiAgICBpZiAoa2V5IGluIGZyb20pIHtcbiAgICAgIHRvW2tleV0gPSBmcm9tW2tleV1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbmNvbnN0IGRpdG9PcHRpb25LZXlzID0gW1xuICAnZGVmYXVsdFZhbHVlJyxcbiAgJ2RlZmF1bHROZXN0ZWQnLFxuICAnZGVmYXVsdFZpc2libGUnLFxuICAnZ2VuZXJhdGVMYWJlbCcsXG4gICdleGNsdWRlVmFsdWUnLFxuICAnaWdub3JlTWlzc2luZ1ZhbHVlJyxcbiAgJ29taXRQYWRkaW5nJyxcbiAgJ3Byb2Nlc3NWYWx1ZScsXG4gICdwcm9jZXNzU2NoZW1hJyxcbiAgJ2dldFBhbmVsU2NoZW1hJyxcbiAgJ2dldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZycsXG4gIC8vIFZ1ZSAzIC8gVnVlLXJvdXRlciA0IGZvcmdldHMgdGhlc2UuXG4gIC8vIFRPRE86IENyZWF0ZSBidWctcmVwb3J0P1xuICAnYmVmb3JlUm91dGVVcGRhdGUnLFxuICAnYmVmb3JlUm91dGVMZWF2ZSdcbl1cbiIsImltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZU1lcmdlZE9wdGlvbnMgfSBmcm9tICcuL3V0aWxzL29wdGlvbnMuanMnXG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhcmUgcHJlc2VudCBpbiBhbGwgRGl0b0NvbXBvbmVudC5cbiAgY29tcG9uZW50cyxcbiAgbWl4aW5zOiBbRGl0b01peGluXSxcblxuICBjb21wb25lbnQobmFtZSwgZGVmaW5pdGlvbikge1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICBkZWZpbml0aW9uID0gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoe1xuICAgICAgICAgIGV4dGVuZHM6IHRoaXMsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICAuLi5kZWZpbml0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb21wb25lbnRzW25hbWVdID0gZGVmaW5pdGlvblxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvdW5tb3VudGVkKClgIG9uIGl0c1xuICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50YCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBiZWZvcmVSb3V0ZUxlYXZlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcz8uYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZUxldmVsKCkge1xuICAgICAgbGV0IGxldmVsID0gMFxuICAgICAgbGV0IHJvdXRlQ29tcG9uZW50ID0gdGhpc1xuICAgICAgd2hpbGUgKChyb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudCkpIHtcbiAgICAgICAgbGV2ZWwrK1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxldmVsXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWRbdGhpcy5yb3V0ZUxldmVsXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgaXNWaWV3KCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZC5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGVtcGxhdGUodi1pZj1cInVzZXJcIilcbiAgLy8tIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8tIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuICAvLy0gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vLSB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gICAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4gIClcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHsgc29tZVNjaGVtYUNvbXBvbmVudCwgaXNTaW5nbGVDb21wb25lbnRWaWV3IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICAgIC4uLmNvbXBvbmVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRlKGRhdGUsXG4gIHtcbiAgICB5ZWFyID0gZGF0ZT8uZ2V0RnVsbFllYXIoKSA/PyAwLFxuICAgIG1vbnRoID0gZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheSA9IGRhdGU/LmdldERhdGUoKSA/PyAwLFxuICAgIGhvdXIgPSBkYXRlPy5nZXRIb3VycygpID8/IDAsXG4gICAgbWludXRlID0gZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kID0gZGF0ZT8uZ2V0U2Vjb25kcygpID8/IDAsXG4gICAgbWlsbGlzZWNvbmQgPSBkYXRlPy5nZXRNaWxsaXNlY29uZHMoKSA/PyAwXG4gIH0gPSB7fVxuKSB7XG4gIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGF0ZShkYXRlKSB7XG4gIHJldHVybiBpc0RhdGUoZGF0ZSkgPyBkYXRlIDogZGF0ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbFxufVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNhbGVuZGFyXG4gICAgbWluLXdpZHRoOiAyNDBweFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcblxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICB6LWluZGV4OiAxMDAwXG5cbiAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICBzcGFuXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA3KVxuICAgICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0XG4gICAgICBsaW5lLWhlaWdodDogY2FsYygjeyRpbnB1dC1oZWlnaHR9IC0gMnB4KVxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS10b2RheVxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmVcbiAgICAgICYsXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgY29sb3I6IHdoaXRlXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZFxuICAgICAgYmFja2dyb3VuZDogd2hpdGVcbiAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1ncmF5XG4gICAgICBjb2xvcjogIzk5OVxuXG4gIC5kaXRvLWNhbGVuZGFyLW1vbnRocyxcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICBzcGFuXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNClcbiAgICAgIG1hcmdpbjogMC41ZW0gMFxuXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW5cbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNSlcblxuICAuZGl0by1jYWxlbmRhciBhLFxuICAuZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuICAuZGl0by1jYWxlbmRhci1tb250aHMgc3BhbixcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhblxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBjdXJzb3I6IHBvaW50ZXJcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhblxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGFcbiAgICAgIHBhZGRpbmc6IDAgMC4yZW1cblxuICAuZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuOmhvdmVyLFxuICAuZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXI6bm90KDpob3ZlcikgLmRpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuXG4gIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzIHNwYW5cbiAgICBmb250LXdlaWdodDogYm9sZFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuXG4gIC5kaXRvLWNhbGVuZGFyLWhlYWRlcixcbiAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgQGV4dGVuZCAlaW5wdXQtaGVpZ2h0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgdGV4dC1hbGlnbjogY2VudGVyXG5cbiAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZVxuXG4gIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICA+IHNwYW5cbiAgICAgIG1hcmdpbjogYXV0b1xuICAgICAgcGFkZGluZzogMCAwLjVlbVxuICAgIGFcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG5cbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuICAuZGl0by1jYWxlbmRhci1zdGVwLW5leHRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICB3aWR0aDogNSVcbiAgICBtaW4td2lkdGg6IDJlbVxuICAgIG1heC13aWR0aDogM2VtXG4gICAgJjo6YWZ0ZXJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgbGVmdDogMFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIGZvbnQtc2l6ZTogMS4yNWVtXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldlxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAn4oC5J1xuICAgICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyXG4gICAgICBjb250ZW50OiAnwqsnXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dFxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAn4oC6J1xuICAgICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyXG4gICAgICBjb250ZW50OiAnwrsnXG5cbiAgLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5XG4gICAgJjo6YWZ0ZXJcbiAgICAgIGNvbnRlbnQ6ICdOb3cnXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY29weURhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6XG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZSB8fFxuICAgICAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdXNlIGN1cnJlbnQgZGF0ZSBidXQgY2xlYXIgdGltZSBmaWVsZHM6XG4gICAgICAgIGNvcHlEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG8gfHwgbmV3IERhdGUoKVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOlxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJiBtb250aCA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldE1vbnRoKCkgJiZcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzpcbiAgICAgICAgICBtb250aCA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRZZWFyQ2xhc3MoeWVhcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOlxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJiB5ZWFyID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzpcbiAgICAgICAgICB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudFZhbHVlLCBvdmVycmlkZXMpXG4gICAgfSxcblxuICAgIHN0ZXBEZWNhZGUoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiAxMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2V0TW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH0sXG5cbiAgICBzdGVwTW9udGgoc3RlcCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IHRoaXMuZ2V0WWVhck1vbnRoKFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwXG4gICAgICApXG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBtb250aCxcbiAgICAgICAgZGF5OiBNYXRoLm1pbihcbiAgICAgICAgICB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXREYXRlKClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc3RlcFllYXIoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdERhdGUoZGF0ZSwgc3RhdGUsIGNvcHkgPSBmYWxzZSkge1xuICAgICAgaWYgKHN0YXRlICE9PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RNb250aChtb250aCkge1xuICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgLy8gU2V0IGRheSB0byAxIHRvIGF2b2lkIHNlbGVjdGluZyBhIGRhdGUgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZVxuICAgICAgLy8gbmV3IG1vbnRoLCBlLmcuIEZlYiAzMSAtPiBNYXIgMy5cbiAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoLCBkYXk6IDEgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0WWVhcih5ZWFyKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXIgfSlcbiAgICB9LFxuXG4gICAgZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICBpZiAobW9udGggPiAxMSkge1xuICAgICAgICB5ZWFyKytcbiAgICAgICAgbW9udGggPSAwXG4gICAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICB5ZWFyLS1cbiAgICAgICAgbW9udGggPSAxMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGggfVxuICAgIH0sXG5cbiAgICBkYXRlVG9TdHJpbmcoZGF0ZSwgeyB5ZWFyLCBtb250aCwgZGF5IH0pIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IGhvciwgdmVyLCBlbnRlciB9KSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRNb2RlLCBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChob3IgfHwgdmVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgZGF5OiBjdXJyZW50VmFsdWUuZ2V0RGF0ZSgpICsgaG9yICsgdmVyICogN1xuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICBtb250aDogY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBob3IgKyB2ZXIgKiA2XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBob3IgKyB2ZXIgKiA1XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoY3VycmVudFZhbHVlKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVEYXRlUmFuZ2UoKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdXG4gICAgICB0aGlzLnllYXJSYW5nZSA9IFtdXG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB5ZWFyID0gY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIGNvbnN0IG1vbnRoID0gY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICB0aGlzLnllYXJSYW5nZS5wdXNoKHN0YXJ0WWVhciArIGkpXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyTW9udGhGaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgbGV0IGZpcnN0RGF5V2VlayA9IGN1cnJNb250aEZpcnN0RGF5LmdldERheSgpICsgMVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA9PT0gMCkge1xuICAgICAgICBmaXJzdERheVdlZWsgPSA3XG4gICAgICB9XG4gICAgICBjb25zdCBudW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aClcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPiAxKSB7XG4gICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoIC0gMSlcbiAgICAgICAgY29uc3QgcHJldk1vbnRoTnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoXG4gICAgICAgICAgcHJldk1vbnRoLnllYXIsXG4gICAgICAgICAgcHJldk1vbnRoLm1vbnRoXG4gICAgICAgIClcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdERheVdlZWs7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRheSA9IHByZXZNb250aE51bURheXMgLSBmaXJzdERheVdlZWsgKyBpICsgMVxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwcmV2TW9udGgueWVhciwgcHJldk1vbnRoLm1vbnRoLCBkYXkpXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBudW1EYXlzOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKVxuICAgICAgICBjb25zdCBpc0RheSA9IGRhdGUgPT4gZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzRGF5KHRoaXMubW9kZWxWYWx1ZSkgPyAnYWN0aXZlJ1xuICAgICAgICAgIDogaXNEYXkodG9kYXkpID8gJ3RvZGF5J1xuICAgICAgICAgIDogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnXG4gICAgICAgICAgOiBpc0RheShjdXJyZW50VmFsdWUpID8gJ2N1cnJlbnQnXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBzdGF0ZVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TW9udGhOZWVkID0gNDIgLSB0aGlzLmRhdGVSYW5nZS5sZW5ndGhcbiAgICAgIGlmIChuZXh0TW9udGhOZWVkID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCArIDEpXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG5leHRNb250aE5lZWQ7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShuZXh0TW9udGgueWVhciwgbmV4dE1vbnRoLm1vbnRoLCBpKVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBsb2NhbGVOYW1lcyA9IHt9XG5cbi8vIENhbGxpbmcgYHRvTG9jYWxlU3RyaW5nKClgIHRoaXMgbXVjaCBhcHBlYXJzIHRvIGJlIGV4cGVuc2l2ZSwgc28gY2FjaGUgaXQ6XG5mdW5jdGlvbiBnZXRMb2NhbGVOYW1lcyhsb2NhbGUpIHtcbiAgbGV0IG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXVxuICBpZiAoIW5hbWVzKSB7XG4gICAgY29uc3Qgd2Vla2RheU5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIDAsIGkpXG4gICAgICB3ZWVrZGF5TmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCBpLCAwKVxuICAgICAgbW9udGhOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV0gPSB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzXG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lc1xufVxuPC9zY3JpcHQ+XG4iLCJleHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRzKHRhcmdldCwgZXZlbnRzKSB7XG4gIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudHNbdHlwZV0sIGZhbHNlKVxuICB9XG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCB0eXBlIGluIGV2ZW50cykge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudHNbdHlwZV0sIGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5KGV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgMzc6ICdsZWZ0JyxcbiAgICAzODogJ3VwJyxcbiAgICAzOTogJ3JpZ2h0JyxcbiAgICA0MDogJ2Rvd24nLFxuICAgIDEzOiAnZW50ZXInXG4gIH1bZXZlbnQua2V5Q29kZV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleU5hdmlnYXRpb24oZXZlbnQpIHtcbiAgY29uc3Qga2V5ID0gZ2V0S2V5KGV2ZW50KVxuICByZXR1cm4ge1xuICAgIGhvcjogeyBsZWZ0OiAtMSwgcmlnaHQ6IDEgfVtrZXldIHx8IDAsXG4gICAgdmVyOiB7IHVwOiAtMSwgZG93bjogMSB9W2tleV0gfHwgMCxcbiAgICBlbnRlcjoga2V5ID09PSAnZW50ZXInXG4gIH1cbn1cbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIHRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuICBAaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2FzcydcblxuICAuZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gIC5kaXRvLXRyaWdnZXItZGlzYWJsZWRcbiAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgKlxuICAgICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnRcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjpmb2N1c1xuICAgICAgICBib3gtc2hhZG93OiBub25lXG5cbiAgLmRpdG8tcG9wdXBcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB0b3A6IDBcbiAgICBsZWZ0OiAwXG4gICAgei1pbmRleDogMTAwMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgICAgaWYgKHRvKSB7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IGFkZEV2ZW50cyh0YXJnZXQsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICBiZWZvcmVVbm1vdW50KCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IG51bGxcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcodGhpcy50YXJnZXQpXG4gICAgICAgID8gdGhpcy4kcmVmc1t0aGlzLnRhcmdldF1cbiAgICAgICAgOiB0aGlzLnRhcmdldFxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgICAgY29uc3QgZWwgPSB0YXJnZXQgPT09IHBvcHVwID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0RWxlbWVudENoaWxkXG4gICAgICAgIGlmIChlbCkge1xuICAgICAgICAgIGVsLnN0eWxlLndpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLndpZHRoXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gKHRhcmdldCB8fCB0cmlnZ2VyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuXG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGUtcG9zaXRpb24nLCB7XG4gICAgICAgIHRyaWdnZXIsXG4gICAgICAgIHBvcHVwLFxuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMucG9wdXBQbGFjZW1lbnRcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5zaG93UG9wdXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8taW5wdXRcbiAgaW5wdXQoXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOmlkPVwiaWRcIlxuICAgIDpuYW1lPVwibmFtZVwiXG4gICAgOnRpdGxlPVwidGl0bGVcIlxuICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWlucHV0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBpbnB1dFxuICAgICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgICBhbGw6IGluaGVyaXRcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIGJvcmRlcjogMFxuICAgICAgbWFyZ2luOiAwXG4gICAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAndGV4dCcgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gICAgLypcbiAgICBjbGVhcmFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICAgIHN1ZmZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcHJlZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICAgICovXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICAvLyBSZW1vdmUgJ29uSW5wdXQnIGhhbmRsZXIgYmVjYXVzZSB3ZSdyZSBoYW5kbGluZyBpdCBzZXBhcmF0ZWx5IGJlbG93LFxuICAgICAgLy8gYnV0IHBhc3Mgb24gYWxsIG90aGVycyB0byB0aGUgd3JhcHBlZCBuYXRpdmUgZWxlbWVudDpcbiAgICAgIGNvbnN0IHsgb25JbnB1dCwgLi4uYXR0cmlidXRlcyB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIHNpemUoKSB7XG4gICAgICAvLyBEZXRlcm1pbmUgc2l6ZSBiYXNlZCBvbiBtaW4gJiBtYXggc2V0dGluZ3MsIGlmIHRoZXkncmUgcHJvdmlkZWQuXG4gICAgICBjb25zdCB7IHNpemUsIG1pbiwgbWF4IH0gPSB0aGlzLiRhdHRyc1xuICAgICAgY29uc3QgZ2V0TGVuZ3RoID0gdmFsdWUgPT4gdmFsdWUgIT0gbnVsbCA/IGAke3ZhbHVlfWAubGVuZ3RoIDogMFxuICAgICAgcmV0dXJuIHNpemUgfHwgZ2V0TGVuZ3RoKG1pbikgfHwgZ2V0TGVuZ3RoKG1heCkgfHwgdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50cmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgaW5wdXQtZmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICApXG4gIC8vIGljb24odHlwZT1cImNhbGVuZGFyXCIgOmNvbG9yPVwiaWNvbkNvbG9yXCIpXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBjYWxlbmRhci5kaXRvLWRhdGUtcGlja2VyLXBvcHVwKFxuICAgICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgICAgQGlucHV0PVwic2VsZWN0RGF0ZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1kYXRlLXBpY2tlclxuICAgIG1pbi13aWR0aDogMTBlbVxuICAgIC5kaXRvLWlucHV0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIHdpZHRoOiAxMDAlXG4gIC5kaXRvLWRhdGUtcGlja2VyLXBvcHVwXG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4vQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgZGF0ZTogdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aW1lOiBmYWxzZVxuICAgICAgfSkgfHwgJydcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgICBpZiAoIXRvICYmIHRoaXMuY2hhbmdlZCkge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2VsZWN0RGF0ZShkYXRlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy4kcmVmcy5jYWxlbmRhcj8ubmF2aWdhdGUoZ2V0S2V5TmF2aWdhdGlvbihldmVudCkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsImV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24pIHtcbiAgY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChhcmd1bWVudHNbMF0sIDEwKVxuICB9XG4gIGlmIChkdXJhdGlvbiA8PSAwKSB7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgPSB0b1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0byAtIGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgY29uc3QgcGVyVGljayA9IGRpZmZlcmVuY2UgLyBkdXJhdGlvbiAqIDEwXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gZWxlbWVudC5zY3JvbGxUb3AgKyBwZXJUaWNrXG4gICAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgPT09IHRvKSByZXR1cm5cbiAgICAgIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbiAtIDEwKVxuICAgIH0pXG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZmllbGQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKGZpZWxkLmNyZWF0ZVRleHRSYW5nZSkge1xuICAgIGNvbnN0IHJhbmdlID0gZmllbGQuY3JlYXRlVGV4dFJhbmdlKClcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpXG4gICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kKVxuICAgIHJhbmdlLnNlbGVjdCgpXG4gICAgZmllbGQuZm9jdXMoKVxuICB9IGVsc2UgaWYgKGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgZmllbGQuZm9jdXMoKVxuICAgIGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBmaWVsZCkge1xuICAgIGZpZWxkLnNlbGVjdGlvblN0YXJ0ID0gc3RhcnRcbiAgICBmaWVsZC5zZWxlY3Rpb25FbmQgPSBlbmRcbiAgICBmaWVsZC5mb2N1cygpXG4gIH1cbn1cbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50cmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgaW5wdXQtZmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgLy8tIGljb24odHlwZT1cInRpbWVcIlxuICAgIC8vLSAgIDpjb2xvcj1cImRpc2FibGVkID8gJyNiZmJmYmYnIDogKHRleHQgPyAnIzY2NicgOiAnI2JmYmZiZicpXCJcbiAgICAvLy0gKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihcbiAgICAgICAgICByZWY9XCJob3VyXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMFwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkSG91cihpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLW1pbnV0ZShcbiAgICAgICAgICByZWY9XCJtaW51dGVcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAxXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IG1pbnV0ZSA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKFxuICAgICAgICAgIHJlZj1cInNlY29uZFwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10aW1lLXBpY2tlclxuICAgIC5kaXRvLWlucHV0XG4gICAgICB3aWR0aDogMTAwJVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgbWF4LXdpZHRoOiAxNjBweFxuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpblxuXG4gICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweFxuICAuZGl0by10aW1lLXBpY2tlclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAuZGl0by1pY29uLXRpbWVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIHRvcDogMFxuICAgICAgICByaWdodDogN3B4XG4gICAgICAgIGhlaWdodDogMTAwJVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgbGlzdC1zdHlsZTogbm9uZVxuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICBvdmVyZmxvdzogaGlkZGVuXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICBmbG9hdDogbGVmdFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci13aWR0aDogMCAxcHggMFxuICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyAzICsgMXB4KVxuICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgICAmOmxhc3QtY2hpbGRcbiAgICAgIGJvcmRlci1yaWdodDogMFxuICAgIHVsXG4gICAgICBvdmVyZmxvdy14OiBoaWRkZW5cbiAgICAgIG92ZXJmbG93LXk6IGF1dG9cbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmVcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBtYXJnaW46IDBcbiAgICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3hcbiAgICAgIHBhZGRpbmc6IDAgMTdweCAwIDBcbiAgICAgIGhlaWdodDogNyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgJiA+IGxpXG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICBsaW5lLWhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgICBtYXJnaW4tdG9wOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcbiAgICAgICAgJi5zZWxlY3RlZCxcbiAgICAgICAgJi5zZWxlY3RlZDpob3ZlclxuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgJi5kaXNhYmxlZFxuICAgICAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWRcbiAgICAgICAgJi5kaXNhYmxlZDpob3ZlclxuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgeyBjb3B5RGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBzY3JvbGxUbyB9IGZyb20gJy4uL3V0aWxzL3Njcm9sbC5qcydcbmltcG9ydCB7IHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIElucHV0RmllbGQgfSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiAwLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlXG4gICAgICAgID8gYCR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMuaG91cil9OiR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMubWludXRlKX06JHtcbiAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5zZWNvbmQpfWBcbiAgICAgICAgOiAnJ1xuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgY29weURhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoZGF0ZSkge1xuICAgICAgaWYgKCtkYXRlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBkYXRlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNlbGVjdGlvbjogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0bykge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKDApXG4gICAgICB9XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICAgIGlmICghdG8gJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlU2VsZWN0aW9uKGZvcmNlID0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCB8fCBmb3JjZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IDMgKiB0aGlzLnNlbGVjdGlvblxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy4kcmVmcy5pbnB1dCwgc3RhcnQsIHN0YXJ0ICsgMikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjcm9sbEFsbChkdXJhdGlvbiA9IDEwMCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAvLyBGaXJzdCBhbmQgbGFzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpblxuICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC8gKHRhcmdldC5jaGlsZHJlbi5sZW5ndGggKyA2KVxuICAgICAgICAgIHNjcm9sbFRvKHRhcmdldCwgTWF0aC5yb3VuZCh2YWx1ZSAqIGxpbmVIZWlnaHQpLCBkdXJhdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzY3JvbGwoJ2hvdXInLCB0aGlzLmhvdXIpXG4gICAgICAgIHNjcm9sbCgnbWludXRlJywgdGhpcy5taW51dGUpXG4gICAgICAgIHNjcm9sbCgnc2Vjb25kJywgdGhpcy5zZWNvbmQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gWydob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnXVt0aGlzLnNlbGVjdGlvbl1cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICBjb25zdCB7IGhvciwgdmVyLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgICAgaWYgKGhvcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3Rpb24gKyBob3JcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9XG4gICAgICAgICAgICB2YWx1ZSA8IDAgPyAyXG4gICAgICAgICAgICA6IHZhbHVlID4gMiA/IDBcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmICh2ZXIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbc2VsZWN0ZWRdICsgdmVyXG4gICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHRoaXMuJHJlZnNbc2VsZWN0ZWRdLmNoaWxkcmVuXG4gICAgICAgICAgdGhpc1tzZWxlY3RlZF0gPVxuICAgICAgICAgICAgdmFsdWUgPCAwID8gdmFsdWUgKyBsZW5ndGhcbiAgICAgICAgICAgIDogdmFsdWUgPj0gbGVuZ3RoID8gdmFsdWUgLSBsZW5ndGhcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvciB8fCB2ZXIgfHwgZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0cnVlKVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIoXG4gIHJlZj1cInBpY2tlclwiXG4pXG4gIC5kaXRvLXBpY2tlcnMoXG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gIClcbiAgICBkYXRlLXBpY2tlcihcbiAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LW1vZGVsOnNob3c9XCJzaG93RGF0ZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIEBmb2N1cz1cImRhdGVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImRhdGVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZWhvbGRlciwgbG9jYWxlLCBkYXRlRm9ybWF0LCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgdGltZS1waWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd1RpbWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgQGZvY3VzPVwidGltZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwidGltZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIGRpc2FibGVkIH1cIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlclxuICAgIC5kaXRvLXBpY2tlcnNcbiAgICAgIEBleHRlbmQgJWlucHV0XG4gICAgICBwYWRkaW5nOiAwXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgIC5kaXRvLWRhdGUtcGlja2VyXG4gICAgICB3aWR0aDogNjAlXG4gICAgICBtaW4td2lkdGg6IDYuOWVtXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwXG4gICAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAgIHdpZHRoOiA0MCVcbiAgICAgIG1pbi13aWR0aDogNS40ZW1cbiAgICAgIC5kaXRvLWlucHV0XG4gICAgICAgIHBhZGRpbmctbGVmdDogMFxuICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgVGltZVBpY2tlciBmcm9tICcuL1RpbWVQaWNrZXIudnVlJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciB9LFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRlRm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gZGVmYXVsdEZvcm1hdHMuZGF0ZSB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93RGF0ZTogZmFsc2UsXG4gICAgICBzaG93VGltZTogZmFsc2UsXG4gICAgICBkYXRlRm9jdXNlZDogZmFsc2UsXG4gICAgICB0aW1lRm9jdXNlZDogZmFsc2UsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlRm9jdXNlZCB8fCB0aGlzLnRpbWVGb2N1c2VkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoZGF0ZSkge1xuICAgICAgaWYgKCtkYXRlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBkYXRlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgICBpZiAoIXRvICYmIHRoaXMuY2hhbmdlZCkge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuZGF0ZS5ibHVyKClcbiAgICAgIHRoaXMuJHJlZnMudGltZS5ibHVyKClcbiAgICB9XG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAvLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuICAvLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNhc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3NcbiAgLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4gIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbiAgQGVhY2ggJG5hbWUgaW4gJGljb25zXG4gICAgLmRpdG8taWNvbi0jeyRuYW1lfVxuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFnaW5hdGlvblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgIHYtaWY9XCJzaG93VG90YWxcIlxuICApXG4gICAgdGVtcGxhdGUodi1pZj1cInRvdGFsID4gMFwiKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgIHRlbXBsYXRlKHYtZWxzZSkgMFxuICAgIHwgIC8ge3sgdG90YWwgfX1cbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWZvcj1cInBhZ2UgaW4gcGFnZVJhbmdlXCJcbiAgICAgIEBjbGljaz1cIm9uQ2xpY2tQYWdlKHBhZ2UpXCJcbiAgICAgIDpjbGFzcz1cImdldFBhZ2VDbGFzcyhwYWdlKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJwYWdlLmRpc2FibGVkXCJcbiAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWlmPVwicGFnZS50ZXh0XCJcbiAgICAgICkge3sgcGFnZS50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhZ2luYXRpb25cbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbFxuICAgICAgK2VsbGlwc2lzXG4gICAgICBtYXJnaW46IDAgMC41ZW1cbiAgICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICB0cmFuc2l0aW9uOiBhbGwgLjNzIGVhc2UsIGNvbG9yIDBzLCBiYWNrZ3JvdW5kIDBzLCBib3JkZXIgMHNcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICAgICYtcHJldixcbiAgICAgICYtbmV4dFxuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93XG4gICAgICAmLXByZXY6OmJlZm9yZVxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSlcbiAgICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAgICYtZWxsaXBzaXMtbmV4dFxuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzXG4gICAgICAgICY6aG92ZXI6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnNcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICAgICY6Zm9jdXNcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICAmOmFjdGl2ZVxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmVcbiAgICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVJhbmdlOiBbXSxcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBudW1QYWdlczogMCxcbiAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5jdXJyZW50UGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMuY3VycmVudFBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0b3RhbDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd1ByZXY6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dOZXh0OiAndXBkYXRlUGFnZVJhbmdlJyxcblxuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUocGFnZVNpemUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gcGFnZVNpemVcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2VTaXplKGN1cnJlbnRQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgICB0aGlzLiRlbWl0KCdzaXplLWNoYW5nZScsIHRoaXMucGFnZSwgY3VycmVudFBhZ2VTaXplKVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnBhZ2UnLCB0bylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlXG4gICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplXG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2tQYWdlKHBhZ2UpIHtcbiAgICAgIGlmIChwYWdlLmluZGV4ICYmICFwYWdlLmRpc2FibGVkICYmIHBhZ2UuaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2UuaW5kZXhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UGFnZUNsYXNzKHBhZ2UpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgICdkaXRvLXNlbGVjdGVkJzogcGFnZS5hY3RpdmVcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlLnR5cGUpIHtcbiAgICAgICAgY2xhc3Nlc1tgZGl0by1idXR0b24tJHtwYWdlLnR5cGV9YF0gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICB1cGRhdGVQYWdlUmFuZ2UoKSB7XG4gICAgICBjb25zdCB7IHNob3dQcmV2LCBzaG93TmV4dCwgdG90YWwsIGN1cnJlbnRQYWdlU2l6ZSwgY3VycmVudFBhZ2UgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNob3dMZW5ndGggPSBzaG93UHJldiArIHNob3dOZXh0ICsgMVxuICAgICAgY29uc3QgbnVtUGFnZXMgPSB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VSYW5nZSA9IFtdXG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgdGhpcy5wYWdlUmFuZ2UgPSBwYWdlUmFuZ2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXN3aXRjaChcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pXG4gIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgaW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgOmlkPVwiaWRcIlxuICAgICAgOm5hbWU9XCJuYW1lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIHYtYmluZD1cIiRhdHRyc1wiXG4gICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICBuYW1lPVwiY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgIHNsb3QoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1zd2l0Y2hcbiAgICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgICAvLyB3aXRoIGBjYWxjKClgIHRvIGVuZCB1cCB3aXRoIGV2ZW4gcGl4ZWwgc2l6ZXMuIGByZW1gIGlzIG5lZWRlZCBiZWNhdXNlIHdlXG4gICAgLy8gY2hhbmdlIGBmb250LXNpemVgIGluc2lkZSBgLmRpdG8tc3dpdGNoLWJ1dHRvbmBcbiAgICAtLXN3aXRjaC13aWR0aDogNHJlbVxuICAgIC0tc3dpdGNoLWhlaWdodDogMnJlbVxuICAgIC0tc3dpdGNoLW1hcmdpbjogMnB4XG4gICAgLS1zd2l0Y2gtcGFkZGluZzogM3B4XG4gICAgLS1zd2l0Y2gtc3BlZWQ6IDMwMG1zXG4gICAgLS1sYWJlbC1tYXJnaW46IDAuNWVtXG5cbiAgICAtLXdpZHRoOiBjYWxjKHZhcigtLXN3aXRjaC13aWR0aCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpXG4gICAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpXG4gICAgLS1vZmZzZXQ6IGNhbGModmFyKC0td2lkdGgpIC0gdmFyKC0taGVpZ2h0KSlcblxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIGhlaWdodDogdmFyKC0tc3dpdGNoLWhlaWdodClcbiAgICAvLyBUbyBtYWtlIGlubGluZSBsYWJlbHMgYXBwZWFyIG9uIGNvbnNpc3RlbnQgYmFzZWxpbmU6XG4gICAgdmVydGljYWwtYWxpZ246IC0yNSVcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICB3aWR0aDogdmFyKC0td2lkdGgpXG4gICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodClcbiAgICAuZGl0by1zd2l0Y2gtcGFuZSxcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIHRvcDogNTAlXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSlcbiAgICBpbnB1dFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICBhcHBlYXJhbmNlOiBub25lXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgaGVpZ2h0OiAxMDAlXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodFxuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIC4zcywgYmFja2dyb3VuZC1jb2xvciAuM3NcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIC8vIFNldCBmb250LXNpemUgdG8gaGVpZ2h0LCBzbyB3ZSBjYW4gdXNlIHdpZHRoL2hlaWdodCA9IDFlbSBmb3IgY2lyY2xlOlxuICAgICAgZm9udC1zaXplOiBjYWxjKHZhcigtLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLXBhZGRpbmcpKVxuICAgICAgdG9wOiB2YXIoLS1zd2l0Y2gtcGFkZGluZylcbiAgICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKVxuICAgICAgd2lkdGg6IDFlbVxuICAgICAgaGVpZ2h0OiAxZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6IDAuNWVtXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSB2YXIoLS1zd2l0Y2gtc3BlZWQpXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbilcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2VcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAmLmRpdG8tY2hlY2tlZFxuICAgICAgaW5wdXRcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSlcbiAgICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pXG4gICAgICAgIHJpZ2h0OiB1bnNldFxuICAgICYuZGl0by1kaXNhYmxlZFxuICAgICAgQGV4dGVuZCAlYnV0dG9uLWRpc2FibGVkXG4gICAgJjpmb2N1cy13aXRoaW46bm90KDpob3ZlcilcbiAgICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1c1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMubW9kZWxWYWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICBjb25zdCB7IGNoZWNrZWQsIGRpc2FibGVkIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jaGVja2VkJzogY2hlY2tlZCxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsczogeyBjaGVja2VkLCB1bmNoZWNrZWQgfSA9IHt9IH0gPSB0aGlzXG4gICAgICAvLyBDYWxjdWxhdGUgYC0tc3dpdGNoLXdpZHRoYCBpbiBgcmVtYCwgYmFzZWQgb24gbGFiZWwgbGVuZ3RoLlxuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoMCwgY2hlY2tlZD8ubGVuZ3RoLCB1bmNoZWNrZWQ/Lmxlbmd0aClcbiAgICAgIHJldHVybiB7XG4gICAgICAgICctLXN3aXRjaC13aWR0aCc6IGxlbmd0aCA/IGAke2xlbmd0aCAqIDEuNX1yZW1gIDogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUobW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gbW9kZWxWYWx1ZVxuICAgIH0sXG5cbiAgICBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICAgIGlmIChjaGVja2VkICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjaGVja2VkKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjaGVja2VkKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAkZHVyYXRpb246IDAuMTVzXG4gIC5oZWlnaHQtZW50ZXItYWN0aXZlLFxuICAuaGVpZ2h0LWxlYXZlLWFjdGl2ZVxuICAgIHRyYW5zaXRpb246IGhlaWdodCAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgLmhlaWdodC1lbnRlci1hY3RpdmVcbiAgICBhbmltYXRpb246IHNsaWRlLWVudGVyICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gIC5oZWlnaHQtbGVhdmUtYWN0aXZlXG4gICAgYW5pbWF0aW9uOiBzbGlkZS1sZWF2ZSAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAuaGVpZ2h0LWVudGVyLWZyb20sXG4gIC5oZWlnaHQtbGVhdmUtdG9cbiAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdoZWlnaHQnLFxuXG4gIG9uQWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lb3V0IGJlZm9yZSBzZXR0aW5nIHN0eWxlIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBhZnRlciBjYWxscyB0b1xuICAgIC8vIGBmb3JjZVJlcGFpbnQoKWAsIGJ1dCB1c2luZyBvbmUgaGVyZSB0b28gcHJlc2VydmVzIGV4ZWN1dGlvbiBzZXF1ZW5jZSBzb1xuICAgIC8vIHRoYXQgdGhlIGNhbGwgZnJvbSBgZW50ZXIoKWAgY2FuIG5ldmVyIG91dHJ1biB0aGUgb25lIGZyb20gYGFmdGVyRW50ZXIoKWBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAnYXV0bycgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kaWFsb2coXG4gIHJvbGU9XCJkaWFsb2dcIlxuICBhcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXG4gIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgOnN0eWxlPVwieyAnLS13aWR0aCc6IGAke3NldHRpbmdzLndpZHRofXB4YCB9XCJcbiAgQGNsaWNrPVwic2V0dGluZ3MuY2xpY2tUb0Nsb3NlICYmIGNsb3NlKClcIlxuKVxuICBmb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tZGlhbG9nXG4gICAgcG9zaXRpb246IGZpeGVkXG4gICAgZGlzcGxheTogZmxleFxuICAgIGluc2V0OiAwXG4gICAgei1pbmRleDogMjAwMFxuICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmdcbiAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXJcbiAgICAvLyBQcmV2ZW50IHNjcm9sbGluZyBvZiB0aGUgcGFnZSBiZWhpbmQgdGhlIGRpYWxvZzpcbiAgICBvdmVyZmxvdzogaGlkZGVuXG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpXG5cbiAgICAvLyBUT0RPOiBgJl9faW5uZXJgXG4gICAgZm9ybVxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBvdmVyZmxvdzogaGlkZGVuXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgsIDQ4MHB4KVxuICAgICAgbWF4LWhlaWdodDogMTAwJVxuICAgICAgYm94LXNoYWRvdzogMCAyMHB4IDYwcHggLTJweCByZ2JhKDI3LCAzMywgNTgsIDAuNClcblxuICAuZGl0by1kaWFsb2ctZW50ZXItYWN0aXZlLFxuICAuZGl0by1kaWFsb2ctbGVhdmUtYWN0aXZlXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1c1xuXG4gICAgZm9ybVxuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzXG5cbiAgLmRpdG8tZGlhbG9nLWVudGVyLWZyb20sXG4gIC5kaXRvLWRpYWxvZy1sZWF2ZS10b1xuICAgIG9wYWNpdHk6IDBcblxuICAgIGZvcm1cbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweClcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzZXR0aW5nczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB3aW5kb3dFdmVudHM6IG51bGwsXG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYnV0dG9uU2NoZW1hcykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuaGFzQ2FuY2VsIHx8ICF0aGlzLmhhc0J1dHRvbnMpICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlJylcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVVbm1vdW50KCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXJvb3RcbiAgdnVlLW5vdGlmaWNhdGlvbnMuZGl0by1ub3RpZmljYXRpb25zKFxuICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgIHBvc2l0aW9uPVwidG9wIHJpZ2h0XCJcbiAgICBjbGFzc2VzPVwiZGl0by1ub3RpZmljYXRpb25cIlxuICApXG4gIHRyYW5zaXRpb24tZ3JvdXAobmFtZT1cImRpdG8tZGlhbG9nXCIpXG4gICAgZGl0by1kaWFsb2coXG4gICAgICB2LWZvcj1cIihkaWFsb2csIGtleSkgaW4gZGlhbG9nc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDpjb21wb25lbnRzPVwiZGlhbG9nLmNvbXBvbmVudHNcIlxuICAgICAgOmJ1dHRvbnM9XCJkaWFsb2cuYnV0dG9uc1wiXG4gICAgICA6cHJvbWlzZT1cImRpYWxvZy5wcm9taXNlXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nLmRhdGFcIlxuICAgICAgOnNldHRpbmdzPVwiZGlhbG9nLnNldHRpbmdzXCJcbiAgICAgIEByZW1vdmU9XCJyZW1vdmVEaWFsb2coa2V5KVwiXG4gICAgKVxuICBkaXRvLW1lbnVcbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgZGl0by1oZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgIClcbiAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICApXG4gICAgICAgIHNwYW4gTG9naW5cbiAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZSdcblxuICAuZGl0by1hcHAsXG4gIC5kaXRvLXJvb3RcbiAgICB3aWR0aDogMTAwJVxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGZsZXhcblxuICAuZGl0by1yb290XG4gICAgLmRpdG8tcGFnZVxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgLy8gVGhlIHJvb3QtbGV2ZWwgdmlld3MgYW5kIGZvcm1zIG1heSBoYXZlIGEgYC5kaXRvLXNjaGVtYS1oZWFkZXJgIHRoYXRcbiAgICAgIC8vIHNob3VsZCBhcHBlYXIgbGF5ZXJlZCBvdmVyIGAuZGl0by1tZW51YCwgd2hpbGUgaGF2aW5nIGBvdmVybGF5OiBoaWRkZW5gXG4gICAgICAvLyBzZXQgYnkgYC5kaXRvLXNjcm9sbC1wYXJlbnRgIHRvIGRlbGVnYXRlIHNjcm9sbGluZyB0byBgLmRpdG8tc2Nyb2xsYC5cbiAgICAgIC8vIEluIG9yZGVyIHRvIG5vdCBoYXZlIHRoZSBoZWFkZXIgY2xpcHBlZCwgYWRqdXN0IHRoZSB0b3AgaGVyZTpcbiAgICAgID4gLmRpdG8tZm9ybSxcbiAgICAgID4gLmRpdG8tdmlld1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1lbnUtaGVpZ2h0XG4gICAgICAgIHBhZGRpbmctdG9wOiAkbWVudS1oZWlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBhc0FycmF5LCBtYXBDb25jdXJyZW50bHksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQge1xuICBwcm9jZXNzVmlldywgcmVzb2x2ZVNjaGVtYXMsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXJvb3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgRGl0b0RpYWxvZyB9LFxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHZpZXdzOiAoKSA9PiB0aGlzLnJlc29sdmVkVmlld3NcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB1bnJlc29sdmVkVmlld3M6IHsgdHlwZTogW09iamVjdCwgRnVuY3Rpb24sIFByb21pc2VdLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG9wdGlvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZFZpZXdzOiB7fSxcbiAgICAgIHJlbW92ZVJvdXRlczogbnVsbCxcbiAgICAgIGRpYWxvZ3M6IHt9LFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBsb2FkaW5nQ291bnQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0ge1xuICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgIH1bdHlwZV0gfHwgJ05vdGlmaWNhdGlvbidcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0ge1xuICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgIH1bdHlwZV0gfHwgJ2Vycm9yJ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IGFuZCB3cmFwcyBpdCBpbiBhIHByb21pc2Ugc28gdGhhdCB0aGVcbiAgICAgIC8vIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYCBhbmQgYGRpYWxvZy5yZWplY3QoKWBcbiAgICAgIC8vIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3QgdGhlIHByb21pc2UgYXQgb25jZS5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgICAgYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIC8vIFByb2Nlc3MgY29tcG9uZW50cyB0byByZXNvbHZlIGFzeW5jIHNjaGVtYXMuXG4gICAgICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyh0aGlzLmFwaSwgeyBjb21wb25lbnRzIH0sIHJvdXRlcywgMClcbiAgICAgICAgICBpZiAocm91dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYERpYWxvZyBjb21wb25lbnRzIGNhbm5vdCBjb250YWluIHJvdXRlcywgb25seSBjb21wb25lbnRzIHdpdGggc2NoZW1hcy5gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGtleSA9IGBkaWFsb2ctJHsrK2RpYWxvZ0lkfWBcbiAgICAgICAgICB0aGlzLmRpYWxvZ3Nba2V5XSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICByZW1vdmVEaWFsb2coa2V5KSB7XG4gICAgICBkZWxldGUgdGhpcy5kaWFsb2dzW2tleV1cbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgbG9naW46IHsgdHlwZTogJ3N1Ym1pdCcgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLnJlc29sdmVkVmlld3MpLFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lKVxuICAgICAgKVxuICAgICAgLy8gTm93IHRoYXQgdGhlIHJvdXRlcyBhcmUgbG9hZGVkLCByZXBsYWNlIGFsbCBleGlzdGluZyByb3V0ZXMgd2l0aCB0aGVcbiAgICAgIC8vIG5ldyByb3V0ZXMsIGFuZCByZXN0b3JlIHRoZSBjdXJyZW50IHBhdGguXG4gICAgICBjb25zdCB7IGZ1bGxQYXRoIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXM/LigpXG4gICAgICB0aGlzLnJlbW92ZVJvdXRlcyA9IGFkZFJvdXRlcyh0aGlzLiRyb3V0ZXIsIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdyb290JyxcbiAgICAgICAgICBwYXRoOiAnLycsXG4gICAgICAgICAgY29tcG9uZW50czoge31cbiAgICAgICAgfSxcbiAgICAgICAgLi4ucm91dGVzXG4gICAgICBdKVxuICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoZnVsbFBhdGgpXG4gICAgfVxuICB9XG5cbn0pXG5cbmxldCBkaWFsb2dJZCA9IDBcblxuZnVuY3Rpb24gYWRkUm91dGVzKHJvdXRlciwgcm91dGVzKSB7XG4gIGNvbnN0IHJlbW92ZXJzID0gW11cbiAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICBjb25zdCByZW1vdmVSb3V0ZSA9IHJvdXRlci5hZGRSb3V0ZShyb3V0ZSlcbiAgICByZW1vdmVycy5wdXNoKHJlbW92ZVJvdXRlKVxuICB9XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJlbW92ZSBvZiByZW1vdmVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLW1lbnVcbiAgICBmbGV4OiBpbml0aWFsXG4gICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgdWxcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItc3R5bGVcbiAgICBhLFxuICAgIGgxXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgIGgxXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWRhcmtlc3RcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1saW5rXG4gICAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nXG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gIC5kaXRvLWxpbmtcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1c1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1tZW51Jywge30pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zcGlubmVyKFxuICB2LXNob3c9XCJsb2FkaW5nXCJcbilcbiAgLy8tIFRPRE86IENvbnZlcnQgdG8gQkVNXG4gIC52LXB1bHNlLnYtcHVsc2UxKFxuICAgIDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5MV1cIlxuICApXG4gIC52LXB1bHNlLnYtcHVsc2UyKFxuICAgIDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5Ml1cIlxuICApXG4gIC52LXB1bHNlLnYtcHVsc2UzKFxuICAgIDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5M11cIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkAtd2Via2l0LWtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5IHtcbiAgMCUsXG4gIDgwJVxuICB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIDQ1JVxuICB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXkge1xuICAwJSxcbiAgODAlXG4gIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgNDUlXG4gIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG59XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyM1ZGM1OTYnXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTVweCdcbiAgICB9LFxuICAgIG1hcmdpbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzJweCdcbiAgICB9LFxuICAgIHJhZGl1czoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzEwMCUnXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBvbmx5IGNsYXNzZXNcbiAgICByZXR1cm4ge1xuICAgICAgc3Bpbm5lclN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5jb2xvcixcbiAgICAgICAgd2lkdGg6IHRoaXMuc2l6ZSxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnNpemUsXG4gICAgICAgIG1hcmdpbjogdGhpcy5tYXJnaW4sXG4gICAgICAgIGJvcmRlclJhZGl1czogdGhpcy5yYWRpdXMsXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgICBhbmltYXRpb25OYW1lOiAndi1wdWxzZVN0cmV0Y2hEZWxheScsXG4gICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMC43NXMnLFxuICAgICAgICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogJ2luZmluaXRlJyxcbiAgICAgICAgYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246ICdjdWJpYy1iZXppZXIoLjIsLjY4LC4xOCwxLjA4KScsXG4gICAgICAgIGFuaW1hdGlvbkZpbGxNb2RlOiAnYm90aCdcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkxOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4xMnMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mjoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMjRzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTM6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjM2cydcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxubmF2LmRpdG8taGVhZGVyXG4gIC5kaXRvLXRyYWlsXG4gICAgdWxcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1oZWFkZXJcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2tcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgIHotaW5kZXg6ICRtZW51LXotaW5kZXhcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICBzcGFuXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by10cmFpbFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgaGVpZ2h0OiAzZW1cbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZ1xuICAgICAgdWxcbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYVxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcGFkZGluZy1yaWdodDogMC40ZW1cbiAgICAgICAgJGFuZ2xlOiAzM2RlZ1xuICAgICAgICAmOmhvdmVyXG4gICAgICAgICAgY29sb3I6ICM5OTlcbiAgICAgICAgJjo6YmVmb3JlLFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgICAgd2lkdGg6IDFweFxuICAgICAgICAgIGhlaWdodDogMS4yZW1cbiAgICAgICAgICByaWdodDogLTFweFxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrXG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIHRvcDogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGJvdHRvbTogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLSRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b21cbiAgICAuZGl0by1zcGlubmVyXG4gICAgICBtYXJnaW4tdG9wOiAkbWVudS1wYWRkaW5nLXZlclxuICAgIC5kaXRvLWRpcnR5XG4gICAgICAmOmFmdGVyXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgd2lkdGg6IDhweFxuICAgICAgICBoZWlnaHQ6IDhweFxuICAgICAgICBtYXJnaW46IDJweFxuICAgICAgICBtYXJnaW4tbGVmdDogMC41ZW1cbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJVxuICAgIC5kaXRvLWFjY291bnQsXG4gICAgLmRpdG8tbG9naW5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiAwXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by1hY2NvdW50XG4gICAgICBsZWZ0OiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmcgKiAyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvU3Bpbm5lciBmcm9tICcuL0RpdG9TcGlubmVyLnZ1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWhlYWRlcicsIHtcbiAgY29tcG9uZW50czogeyBEaXRvU3Bpbm5lciB9LFxuXG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNpemUgPSAnOHB4JyxcbiAgICAgIGNvbG9yID0gJyM5OTknXG4gICAgfSA9IHRoaXMuc3Bpbm5lciB8fCB7fVxuICAgIC8vIFRPRE86IFRoaXMgaXMgYSBoYWNrIHRvIHNldCB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIERpdG9TcGlubmVyLlxuICAgIC8vIFBhc3MgdGhlbSBvbiB0aHJvdWdoIHRoZSB0ZW1wbGF0ZSBpbnN0ZWFkIVxuICAgIGNvbnN0IHsgcHJvcHMgfSA9IERpdG9TcGlubmVyXG4gICAgcHJvcHMuc2l6ZS5kZWZhdWx0ID0gc2l6ZVxuICAgIHByb3BzLmNvbG9yLmRlZmF1bHQgPSBjb2xvclxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAobnVsbCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcnM6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4odHJ1ZSlcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93bihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICApXG4gICAgbGkoXG4gICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICApXG4gICAgICBhKFxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICkge3sgbGFiZWwgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tYWNjb3VudFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLXB1bGxkb3duXG4gICAgICB0b3A6ICRwdWxsZG93bi1wYWRkaW5nLXZlclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWFjY291bnQnLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiB7XG4gICAgICAgIHNldHRpbmdzOiAnU2V0dGluZ3MnLFxuICAgICAgICBsb2dvdXQ6ICdMb2dvdXQnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duU2VsZWN0KHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQubG9nb3V0KClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgY29uc29sZS5pbmZvKCdUT0RPOiBJbXBsZW1lbnQgU2V0dGluZ3MnKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lbGVtZW50Jywge1xuICBwcm9wczoge1xuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzcGFuJyB9LFxuICAgIGNvbnRlbnQ6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QoY29udGVudCkgPyBjb250ZW50IDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICB9LFxuXG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLmNsYXNzLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLnN0eWxlLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQuZGl0by1sYWJlbChcbiAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICA6aXM9XCJ0YWdcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbilcbiAgLmRpdG8tY2hldnJvbihcbiAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICApXG4gIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgKVxuICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbGFiZWxcbiAgICAtLWxhYmVsLXBhZGRpbmc6IDBcbiAgICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG4gICAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZy1oYWxmIDBcblxuICAgIGxhYmVsXG4gICAgICBkaXNwbGF5OiBpbmxpbmVcbiAgICAgIGN1cnNvcjogaW5oZXJpdFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcblxuICAgIGxhYmVsLFxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICY6bnRoLWxhc3QtY2hpbGQoMilcbiAgICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAgIC8vIHNvIHRoYXQgYnV0dG9ucyBhbHdheXMgYXBwZWFyIHJpZ2h0LWFsaWduZWQ6XG4gICAgICAgIGZsZXg6IDEgMSBhdXRvXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb250ZW50OiAnXFxhMCcgLy8gJm5icHM7XG5cbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICtlbGxpcHNpc1xuXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpXG4gICAgICBtYXJnaW4tbGVmdDogMFxuICAgICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcblxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci5cbiAgICAgIGxhYmVsXG4gICAgICAgICtlbGxpcHNpc1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuXG4gIGEuZGl0by1sYWJlbFxuICAgICY6aG92ZXJcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXJcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmVcblxuICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0IGxheW91dHNcbiAgLy8gd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgLmRpdG8tc2NoZW1hLWNvbXBhY3RcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICA+IC5kaXRvLXBhbmVcbiAgICAgICAgPiAuZGl0by1jb250YWluZXJcbiAgICAgICAgICA+IC5kaXRvLWxhYmVsOm5vdCguZGl0by1sYWJlbC1jb21wb25lbnQpXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbGFiZWwnLCB7XG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLih0aGlzLmNvbGxhcHNpYmxlICYmIHtcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQnLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsIGdldEl0ZW1JZCwgZ2V0SXRlbVVpZCwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICA/IGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgICh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiAhKGl0ZW1MYWJlbCBpbiBpdGVtKSkge1xuICAgICAgICAvLyBgaXRlbUxhYmVsYCBjYW4gYmUgYm90aCBhIGtleSwgb3Igc2ltcGx5IGEgbGFiZWwuXG4gICAgICAgIHRleHQgPSBpdGVtTGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlIGluZGV4LlxuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgdGV4dCA9IChpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBpbmRleCAhPT0gbnVsbClcbiAgICAgICAgICA/IHRleHQgPSBgJHtpbmRleCArIDF9YFxuICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNjaGVtYVxuICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgIClcbiAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgIClcbiAgICAgICAgLy8tIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgZGl0by10YWJzKFxuICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgIClcbiAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgcmVmPVwidGFic1wiXG4gICAgICA6a2V5PVwidGFiXCJcbiAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICA6dGFiPVwidGFiXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgIClcbiAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgZGl0by1wYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2NoZW1hXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIGRpc3BsYXkgc2NoZW1hIG5leHQgdG8gcGFuZWxzOlxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBtaW4taGVpZ2h0OiAxMDAlXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgZmxleDogMSAxIDEwMCVcbiAgICAgIC8vIFNvIHRoYXQgc2NoZW1hIGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgICAgZGlzcGxheTogZ3JpZFxuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudFxuICAgICAgPiAqOm9ubHktY2hpbGRcbiAgICAgICAgZ3JpZC1yb3ctZW5kOiBub25lXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nXG4gICAgPiAuZGl0by1idXR0b25zLFxuICAgID4gLmRpdG8tcGFuZWxzXG4gICAgICBmbGV4OiAxIDEgMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nIDBcbiAgICAvLyBEaXNwbGF5IGEgcnVsZXIgYmV0d2VlbiB0YWJiZWQgY29tcG9uZW50cyBhbmQgdG93YXJkcyB0aGUgLmRpdG8tYnV0dG9uc1xuICAgIC5kaXRvLXBhbmUtdGFiICsgLmRpdG8tcGFuZS1tYWluXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgLy8gVXNlIGEgcHNldWRvIGVsZW1lbnQgdG8gZGlzcGxheSBhIHJ1bGVyIHdpdGggcHJvcGVyIG1hcmdpbnNcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgY29udGVudDogJydcbiAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZVxuICAgICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluIHRvIHRoZSBydWxlclxuICAgICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZlxuICAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgZGlzcGxheTogZmxleFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgIC5kaXRvLXRhYnMsXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZFxuICAgIC5kaXRvLWNsaXBib2FyZFxuICAgICAgJjpvbmx5LWNoaWxkXG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgICAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW5cbiAgICAmLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyXG4gICAgICAvLyBCcmluZyB0aGUgdGFicyB1cCB0byB0aGUgbWVudS5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgaGVpZ2h0OiAkbWVudS1oZWlnaHRcbiAgICAgIHBhZGRpbmc6IDAgJG1lbnUtcGFkZGluZy1ob3JcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHRvcDogMFxuICAgICAgbGVmdDogMFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIHotaW5kZXg6ICRtZW51LXotaW5kZXhcbiAgICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG4gICAgICAvLyAuLi5idXQgYWxsb3cgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGFicyBhbmQgYnV0dG9ucyAoZS5nLiBjbGlwYm9hcmQpXG4gICAgICAvLyBsYXllcmVkIG9uIHRvcCBvZiBEaXRvVHJhaWwuXG4gICAgICAuZGl0by10YWJzLFxuICAgICAgLmRpdG8tYnV0dG9uc1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0b1xuICAgICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBidXR0b24uZGl0by1sYWJlbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIENhdGNoIGFsbCBjbGlja3MsIGV2ZW4gd2hlbiBpdCB3b3VsZCBiZSBwYXJ0aWFsbHkgY292ZXJlZCBieSBzY2hlbWEuXG4gICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUmVnRXhwLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsIGdldFBhbmVsU2NoZW1hcywgc2V0RGVmYXVsdHMsIHByb2Nlc3NEYXRhXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjaGVtYScsIHtcbiAgY29tcG9uZW50czogeyBUcmFuc2l0aW9uSGVpZ2h0IH0sXG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBpbmplY3Q6IFtcbiAgICAnJHNjaGVtYVBhcmVudENvbXBvbmVudCdcbiAgXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgaW5saW5lZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGFzT3duRGF0YTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG1lbnVIZWFkZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIHJldHVybiB7XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gcHJvdmlkZSBtb3JlIGRhdGEgdGhyb3VnaCBgc2NoZW1hLmRhdGFgLCB2dWUtc3R5bGU6XG4gICAgICAuLi4oXG4gICAgICAgIGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjb21wb25lbnRzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZXNSZWdpc3RyeToge30sXG4gICAgICBwYW5lbHNSZWdpc3RyeToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyBzY2hlbWFDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIERvbid0IHJldHVybiB0aGUgYWN0dWFsIHBhcmVudCBzY2hlbWEgaXMgdGhpcyBzY2hlbWEgaGFuZGxlcyBpdHMgb3duXG4gICAgICAvLyBkYXRhLiBUaGlzIHByZXZlbnRzIGRlbGVnYXRpbmcgZXZlbnRzIHRvIHRoZSBwYXJlbnQsIGFuZCByZWdpc3RlcmluZ1xuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBwYXJlbnQgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBzZXQgaXNEaXJ0eSBmbGFncy5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyBudWxsIDogdGhpcy5wYXJlbnRDb21wb25lbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIGNvbnN0IHBhbmVscyA9IGdldFBhbmVsU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbHMsICcnKVxuICAgICAgZm9yIChjb25zdCBwYW5lIG9mIHRoaXMucGFuZXMpIHtcbiAgICAgICAgcGFuZWxzLnB1c2goLi4ucGFuZS5wYW5lbFNjaGVtYXMpXG4gICAgICB9XG4gICAgICByZXR1cm4gcGFuZWxzXG4gICAgfSxcblxuICAgIHRhYnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnRhYnMpXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgY29uc3QgY3VycmVudFRhYiA9IHRoaXMuJHJvdXRlLmhhc2g/LnNsaWNlKDEpIHx8IG51bGxcbiAgICAgIGNvbnN0IHRhYiA9IGN1cnJlbnRUYWIgJiYgdGhpcy5zaG91bGRSZW5kZXIodGhpcy50YWJzW2N1cnJlbnRUYWJdKVxuICAgICAgICA/IGN1cnJlbnRUYWJcbiAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWI/Lm5hbWUgfHwgbnVsbFxuICAgICAgaWYgKHRhYiAhPT0gY3VycmVudFRhYikge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgd2F0Y2hlciFcbiAgICAgICAgLy8gQW55IHRhYiBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSByb3V0ZXIgYWxzby5cbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiBgIyR7dGFifWAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWJcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHRoaXMudGFicykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRUYWIgfSA9IHRhYlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICA/IGRlZmF1bHRUYWIuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICA6IGRlZmF1bHRUYWJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSB0YWJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICRzY2hlbWE6IHRoaXMuc2NoZW1hLm5hbWUsXG4gICAgICAgIC4uLnRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgdGhpcy5jb250ZXh0KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmxhYmVsIHx8IHRoaXMuY29sbGFwc2libGVcbiAgICB9LFxuXG4gICAgaGFzVGFicygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pbmxpbmVkICYmICEhdGhpcy50YWJzXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgfSxcblxuICBiZWZvcmVVbm1vdW50KCkge1xuICAgIHRoaXMuZW1pdEV2ZW50KCdkZXN0cm95JylcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoXG4gICAgICAgIHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHNCeU5hbWUoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5TmFtZSh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnQoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIHNvbWVDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5zb21lKGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBldmVyeUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLmV2ZXJ5KGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBvbkV4cGFuZChleHBhbmQpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdleHBhbmQnLCB7XG4gICAgICAgIC8vIFRPRE86IEFjdHVhbGx5IGV4cG9zZSB0aGlzIG9uIERpdG9Db250ZXh0P1xuICAgICAgICBjb250ZXh0OiB7IGV4cGFuZCB9XG4gICAgICB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgZXhwYW5kIHx8IHRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICB0aGlzLm9wZW5lZCA9IGV4cGFuZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzQnlEYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgbGV0IGRhdGFQYXRoc1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gaXNGdW5jdGlvbihtYXRjaClcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBpc1JlZ0V4cChtYXRjaClcbiAgICAgICAgICAgID8gZmllbGQgPT4gbWF0Y2gudGVzdChmaWVsZClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBkYXRhUGF0aHMgPSBjaGVja1xuICAgICAgICAgID8gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpLmZpbHRlcihjaGVjaylcbiAgICAgICAgICA6IGlzQXJyYXkobWF0Y2gpXG4gICAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgICA6IFttYXRjaF1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGRhdGFQYXRocyB8fD0gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmICghY29tcG9uZW50LnZhbGlkYXRlKG5vdGlmeSkpIHtcbiAgICAgICAgICAgIC8vIEZvY3VzIGZpcnN0IGVycm9yIGZpZWxkXG4gICAgICAgICAgICBpZiAobm90aWZ5ICYmIGZpcnN0KSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5mb2N1cygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbChtYXRjaCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGFzeW5jIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgY29uc3QgdW5tYXRjaGVkID0gW11cbiAgICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBlcnJzXSBvZiBPYmplY3QuZW50cmllcyhlcnJvcnMpKSB7XG4gICAgICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgYSBkYXRhLXJvb3QsIHByZWZpeCBpdHMgb3duIGRhdGFQYXRoIHRvIGFsbCBlcnJvcnMsXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkYXRhIHRoYXQgaXQgc2VuZHMgYW5kIHZhbGlkYXRlcyB3aWxsIGJlIHVucHJlZml4ZWQuXG4gICAgICAgIGNvbnN0IGZ1bGxEYXRhUGF0aCA9IHRoaXMuaGFzT3duRGF0YVxuICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgICAgOiBkYXRhUGF0aFxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0aGlzLmRhdGFQYXRoLCB0aGlzLmhhc093bkRhdGEsIGZ1bGxEYXRhUGF0aClcbiAgICAgICAgLy8gQ29udmVydCBmcm9tIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzIG5vdGF0aW9uLCB0byBvdXIgb3duIGZvcm1cbiAgICAgICAgLy8gb2YgcmVsYXRpdmUgSlNPTiBwb2ludGVycyBhcyBkYXRhLXBhdGhzOlxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChmdWxsRGF0YVBhdGgpXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAvLyBDb3VsZG4ndCBmaW5kIGEgY29tcG9uZW50IGluIGFuIGFjdGl2ZSBmb3JtIGZvciB0aGUgZ2l2ZW4gZGF0YVBhdGguXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgY29tcG9uZW50IHNlcnZpbmcgYSBwYXJ0IG9mIHRoZSBkYXRhUGF0aCxcbiAgICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChhd2FpdCBjb21wb25lbnQubmF2aWdhdGVUb0NvbXBvbmVudD8uKFxuICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIG5lc3RlZCBmb3JtIHRvIGRpc3BsYXkgYXQgbGVhc3QgcGFydHMgZm8gdGhlIGVycm9ycy5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzaG93IGFsbCBlcnJvcnMgYXQgb25jZSwgc28gd2UncmUgZG9uZS4gRG9uJ3QgY2FsbFxuICAgICAgICAgICAgICAgIC8vIGBub3RpZnlFcnJvcnMoKWAgeWV0LCBhcyB3ZSBjYW4gb25seSBkaXNwbGF5IGl0IG9uY2VcbiAgICAgICAgICAgICAgICAvLyBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgd2FzIGNhbGxlZCBmcm9tIGBEaXRvRm9ybS5tb3VudGVkKClgXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0aWxsIGhlcmUsIHNvIGtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdoZW4gdGhlIGVycm9yIGNhbid0IGJlIG1hdGNoZWQsIGFkZCBpdCB0byBhIGxpc3Qgb2YgdW5tYXRjaGVkXG4gICAgICAgICAgLy8gZXJyb3JzIHdpdGggZGVjZW50IG1lc3NhZ2UsIHRvIHJlcG9ydCBhdCB0aGUgZW5kLlxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGFiZWxpemUocHJvcGVydHkpXG4gICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gZmllbGRcbiAgICAgICAgICAgICAgPyBgVGhlIGZpZWxkICR7ZmllbGR9YFxuICAgICAgICAgICAgICA6IGBUaGUgJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICAgICB1bm1hdGNoZWQucHVzaChgJHtwcmVmaXh9ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycyh1bm1hdGNoZWQuam9pbignXFxuJykpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG5vdGlmeUVycm9ycyhtZXNzYWdlKSB7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnVmFsaWRhdGlvbiBFcnJvcnMnLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlIHx8ICdQbGVhc2UgY29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgZXJyb3JzLidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc2V0RGF0YSgpIHtcbiAgICAgIC8vIFdlIGNhbid0IHNldCBgdGhpcy5kYXRhID0gLi4uYCBiZWNhdXNlIGl0J3MgYSBwcm9wZXJ0eSwgYnV0IHdlIGNhblxuICAgICAgLy8gc2V0IGFsbCBrbm93biBwcm9wZXJ0aWVzIG9uIGl0IHRvIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnlcbiAgICAgIC8vIGBzZXREZWZhdWx0cygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgdGhpcy5kYXRhW25hbWVdID0gZGF0YVtuYW1lXVxuICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLCB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmVnaXN0cnlbdWlkXSA9IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcmVnaXN0cnlbdWlkXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgID8gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZmlsdGVyRW50cmllcyhlbnRyaWVzLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoID8gZW50cmllcy5maWx0ZXIobWF0Y2gpIDogZW50cmllc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gIDpzY2hlbWE9XCJzY2hlbWFcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuKVxuICAvLy0gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNjaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLy0gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2NoZW1hLWlubGluZWRcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICAgICAgLy8gQ2hhbmdlIHNwYWNpbmcgc28gLmRpdG8tbGFiZWwgY292ZXJzIHRoZSBmdWxsIC5kaXRvLXNjaGVtYS1oZWFkZXIuXG4gICAgICAgIG1hcmdpbjogLSRmb3JtLXNwYWNpbmdcbiAgICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluXG4gICAgICAgICAgLS1sYWJlbC1wYWRkaW5nOiAjeyRmb3JtLXNwYWNpbmd9XG4gICAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveFxuICAgICAgICAgIC8vIEJlY2F1c2UgdGFibGVzIGhhdmUgYSBmdW5ueSB3YXkgb2YgYWxsb3dpbmcgdG9vIG11Y2ggd2lkdGggZ3Jvd3RoOlxuICAgICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgICAgICAvLyBQcmV2ZW50IGNvbGxhcHNpbmcgdG8gbWluLWhlaWdodCB3aGVuIGFsb25lIGluXG4gICAgICAgICAgLy8gLmRpdG8tc2NoZW1hLWNvbnRlbnQsIGR1ZSB0byBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICAgICAgbWluLWhlaWdodDogMmVtXG4gICAgICAgICYgKy5kaXRvLXBhbmVcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgICAgbWluLWhlaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hLWlubGluZWQnLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgICBtYXJnaW46ICgtJGZvcm0tc3BhY2luZykgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgLy8gQWRkIHJlbW92ZWQgaG9yaXpvbnRhbCBtYXJnaW4gYWdhaW4gdG8gbWF4LXdpZHRoOlxuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAyICogJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lLW1haW5gLFxuICAgIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICAgIGZsZXg6IDAlXG5cbiAgICAmLmRpdG8tcGFuZS1tYWluXG4gICAgICBmbGV4OiAxMDAlXG5cbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyOm5vdCguZGl0by1zY2hlbWEtbWVudS1oZWFkZXIpICsgJlxuICAgICAgLy8gQ2xlYXIgdG9wLW1hcmdpbiBpZiB0aGUgY29tcG9uZW50cyBhcmUgcHJlY2VkZWQgYnkgYSBzY2hlbWEgaGVhZGVyLlxuICAgICAgbWFyZ2luLXRvcDogMFxuXG4gICAgLmRpdG8tY29udGFpbmVyLmRpdG8tb21pdC1wYWRkaW5nID4gJlxuICAgICAgLy8gQ2xlYXIgbWFyZ2lucyBzZXQgYWJvdmUgYWdhaW4gaWYgcGFyZW50IGlzIG9taXR0aW5nIHBhZGRpbmcuXG4gICAgICBtYXJnaW46IDBcbiAgICAgIG1heC13aWR0aDogdW5zZXRcblxuICAgIC5kaXRvLWJyZWFrXG4gICAgICBmbGV4OiAxMDAlXG4gICAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxTY2hlbWFzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmUnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMudGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZpc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWIgPyB0aGlzIDogdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50U2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBjb21wb25lbnRzIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzXG4gICAgICAvLyBhbmQgYWRkcyB0aGUga2V5IGFzIHRoZSBuYW1lIHRvIGVhY2ggY29tcG9uZW50LCB1c2VkIGZvciBsYWJlbHMsIGV0Yy5cbiAgICAgIC8vIE5PVEU6IHNjaGVtYSBjYW4gYmUgbnVsbCB3aGlsZSBtdWx0aS1mb3JtIGxpc3RzIGxvYWQgdGhlaXIgZGF0YSxcbiAgICAgIC8vIGJlY2F1c2Ugb25seSB0aGUgYXZhaWxhYmxlIGRhdGEgd2lsbCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgZm9ybS5cbiAgICAgIC8vIFdoZW4gZWRpdGluZyBwcmltaXRpdmUgdmFsdWVzIHRocm91Z2ggYSBmb3JtLCBkbyBub3QgYXBwZW5kICduYW1lJyB0b1xuICAgICAgLy8gdGhlIGNvbXBvbmVudCdzIGRhdGFQYXRoIHNvIGl0IGNhbiBiZSBtYXBwZWQgdG8gZnJvbSB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICAgIC8vIE5PVEU6IE5vdCBhbGwgc2NoZW1hcyAvIGNvbXBvbmVudHMgaGF2ZSBhIHNvdXJjZVNjaGVtYSwgZS5nLiBkaWFsb2dzLlxuICAgICAgY29uc3Qgd3JhcFByaW1pdGl2ZXMgPSB0aGlzLnNvdXJjZVNjaGVtYT8ud3JhcFByaW1pdGl2ZXNcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYT8uY29tcG9uZW50cyB8fCB7fSkubWFwKFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAvLyBBbHdheXMgYWRkIG5hbWUgdG8gY29tcG9uZW50IHNjaGVtYS5cbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgICAvLyBTaGFyZSBkYXRhUGF0aCBhbmQgc3RvcmUgd2l0aCBwYXJlbnQgaWYgbm90IG5lc3RlZDpcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBpc05lc3RlZChzY2hlbWEpXG4gICAgICAgICAgY29uc3QgbmVzdGVkRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBkYXRhUGF0aDogbmVzdGVkICYmICF3cmFwUHJpbWl0aXZlc1xuICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsU2NoZW1hcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT4gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudCxcbiAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIGJlZm9yZVVubW91bnQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmUodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIGlmICh0aGlzLnRhYikge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IGAjJHt0aGlzLnRhYn1gIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuKVxuICBkaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwidHlwZUNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIGRpdG8tZXJyb3JzKFxuICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWNvbnRhaW5lclxuICAgIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICAgIG1heC13aWR0aDogMTAwJVxuICAgIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAgIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICY6ZW1wdHlcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAmLmRpdG8tb21pdC1wYWRkaW5nXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICYuZGl0by1zaW5nbGVcbiAgICAgIGhlaWdodDogMTAwJSAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b21cbiAgLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4gIC8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4gIC5kaXRvLWNvbXBvbmVudFxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICAgJi5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHdpZHRoOiBhdXRvXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZUNvbXBvbmVudCwgc2hvdWxkT21pdFBhZGRpbmcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIGdldFR5cGVDb21wb25lbnQodGhpcy5zY2hlbWEudHlwZSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbCAhPT0gZmFsc2UgJiZcbiAgICAgICAgKCEhbGFiZWwgfHwgdGhpcy50eXBlQ29tcG9uZW50Py5nZW5lcmF0ZUxhYmVsICYmIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRXaWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLW9taXQtcGFkZGluZyc6IHNob3VsZE9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSAoXG4gICAgICAgIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKSA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgKiAxMDAgLy8gZnJhY3Rpb25cbiAgICAgIClcbiAgICAgIHJldHVybiBpc051bWJlcihiYXNpcykgPyBgJHtiYXNpc30lYCA6IGJhc2lzXG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICBjb25zdCBncm93ID0gKFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICBjb25zdCBzaHJpbmsgPSB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxleDogYCR7Z3JvdyA/IDEgOiAwfSAke3NocmluayA/IDEgOiAwfSAke3RoaXMuY29tcG9uZW50QmFzaXN9YFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzcygpIHtcbiAgICAgIGNvbnN0IGJhc2lzSXNBdXRvID0gdGhpcy5jb21wb25lbnRCYXNpcyA9PT0gJ2F1dG8nXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtYXV0byc6IGJhc2lzSXNBdXRvLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRhYnNcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICApXG4gICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOnRvPVwieyBoYXNoOiBgIyR7a2V5fWAgfVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IHNlbGVjdGVkVGFiID09PSBrZXkgfVwiXG4gICAgKSB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgJHRhYi1jb2xvci1iYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3RcbiAgJHRhYi1jb2xvci1pbmFjdGl2ZTogJGNvbG9yLWxpZ2h0XG4gICR0YWItY29sb3ItYWN0aXZlOiAkY29sb3ItbGlnaHRlc3RcbiAgJHRhYi1jb2xvci1ob3ZlcjogJGNvbG9yLXdoaXRlXG5cbiAgLmRpdG8tdGFic1xuICAgIC8vIFNlZTogaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICBhXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWluYWN0aXZlXG4gICAgICBwYWRkaW5nOiAkdGFiLXBhZGRpbmctdmVyICR0YWItcGFkZGluZy1ob3JcbiAgICAgIG1hcmdpbi1sZWZ0OiAkdGFiLW1hcmdpblxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1c1xuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWhvdmVyXG4gICAgICAmOmFjdGl2ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWFjdGl2ZVxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWJhY2tncm91bmRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFicycsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWJzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNlbGVjdGVkVGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbmNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICA6aXM9XCJwYW5lbFRhZ1wiXG4gIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gIEBzdWJtaXQucHJldmVudFxuKVxuICBsYWJlbC5kaXRvLXBhbmVsLXRpdGxlIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgZGl0by1zY2hlbWEuZGl0by1wYW5lbC1zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gIClcbiAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgIGRpdG8tYnV0dG9ucyhcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhbmVsXG4gICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZ1xuICAgIC5kaXRvLXBhbmVsLXRpdGxlXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3JcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIC5kaXRvLXBhbmVsLXNjaGVtYVxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3A6IDBcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmdcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9XG4gICAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmIDBcbiAgICAgIC5kaXRvLW9iamVjdFxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgIGxhYmVsXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgLmRpdG8tcGFuZVxuICAgICAgICBtYXJnaW46IDAgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgICAuZGl0by1jb250YWluZXJcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgdGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnRhcmdldCB8fCB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIC8vIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGBzY2hlbWEuZGF0YWAgaGFuZGxpbmcgaW4gRGl0b1NjaGVtYSxcbiAgICAvLyB3aGVyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgYWN0dWFsIGNvbXBvbmVudC5cbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMub3duRGF0YSA9IGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlVW5tb3VudCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHBhbmVscyBzbyB0aGF0IG90aGVyIGNvbXBvbmVudHMgY2FuIGZpbmQgdGhlbSBieSB0aGVpclxuICAgICAgLy8gZGF0YS1wYXRoLCBlLmcuIGluIFR5cGVMaXN0Lm9uRmlsdGVyRXJyb3JzKClcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmVsKHRoaXMsIGFkZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICApXG4gICAgZGl0by1wYW5lbChcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXBhbmVsc1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtc2lkZWJhci13aWR0aFxuICAgIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMilcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgdXNlU2xvdHMsIENvbW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWTm9kZUNvbnRlbnQodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlICYmIGFzQXJyYXkodm5vZGUpLnNvbWUodm5vZGUgPT4gdm5vZGUudHlwZSAhPT0gQ29tbWVudClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Nsb3RDb250ZW50KHNsb3QsIHByb3BzID0ge30pIHtcbiAgc2xvdCA9IGlzU3RyaW5nKHNsb3QpID8gdXNlU2xvdHMoKVtzbG90XSA6IHNsb3RcbiAgcmV0dXJuIGhhc1ZOb2RlQ29udGVudChzbG90Py4ocHJvcHMpKVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8IGhhc1Nsb3RDb250ZW50KCRzbG90cy5kZWZhdWx0KVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cInZub2RlIG9mICRzbG90cy5kZWZhdWx0Py4oKVwiXG4gIClcbiAgICAvLy0gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLFxuICAgIC8vLSBzbyBpdCBjYW4gYmUgd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNWTm9kZUNvbnRlbnQodm5vZGUpXCJcbiAgICApXG4gICAgICBkaXRvLXZub2RlKDp2bm9kZT1cInZub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbi5kaXRvLWJ1dHRvbnNcbiAgPiAuZGl0by1jb250YWluZXJcbiAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGhhc1Nsb3RDb250ZW50LCBoYXNWTm9kZUNvbnRlbnQgfSBmcm9tICcuLi91dGlscy92dWUuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1idXR0b25zJywge1xuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgIHNjaGVtYXNbYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGJ1dHRvbi5uYW1lKV0gPSBidXR0b25cbiAgICAgICAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNTbG90Q29udGVudCxcbiAgICBoYXNWTm9kZUNvbnRlbnRcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmRpdG8tYnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICAvKiBQcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWw6ICovXG4gIEBjbGljay5zdG9wXG4pXG4gIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gIGEuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgKVxuICByb3V0ZXItbGluay5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNFZGl0YWJsZVwiXG4gICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBkaXRvLWNyZWF0ZS1idXR0b24oXG4gICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWVkaXQtYnV0dG9uc1xuICAgIC8vIE92ZXJyaWRlIGN1cnNvciBmcm9tIGNvbGxhcHNpYmxlIGRpdG8tbGFiZWw6XG4gICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgZmxleDogbm9uZVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVkaXQtYnV0dG9ucycsIHtcbiAgcHJvcHM6IHtcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNyZWF0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNyZWF0ZVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RyYWdnYWJsZScpXG4gICAgfSxcblxuICAgIGlzRWRpdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2VkaXRhYmxlJykgJiYgISF0aGlzLmVkaXRQYXRoXG4gICAgfSxcblxuICAgIGlzQ3JlYXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdjcmVhdGFibGUnKSAmJiAhIXRoaXMuY3JlYXRlUGF0aFxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fFxuICAgICAgICAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIFRoZSBvcHRpb25zIG9mIHRoZSBvdXRlciBjb21wb25lbnQgYXJlIHBhc3NlZCB0byB0aGUgYnV0dG9ucyBjb21wb25lbnRcbiAgICAgIC8vIHRocm91Z2ggcHJvcGVydGllcyBgdGhpc1tuYW1lXWAsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybVxuICAgICAgLy8gYmFzaXMgYnkgc2V0dGluZyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgLlxuICAgICAgcmV0dXJuICEhKHRoaXNbbmFtZV0gJiYgdGhpcy5zY2hlbWFbbmFtZV0gIT09IGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgdGVtcGxhdGUodi1pZj1cInNob3dQdWxsZG93blwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgYShcbiAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWVsc2VcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jcmVhdGUtYnV0dG9uXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHJpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNyZWF0ZS1idXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mb3JtcykubGVuZ3RoID4gMSB8fCAhdGhpcy5mb3Jtcy5kZWZhdWx0XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0NyZWF0YWJsZShmb3JtKSB7XG4gICAgICAvLyBGb3JtcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBieSBwcm92aWRpbmcgYGNyZWF0YWJsZTogZmFsc2VgXG4gICAgICByZXR1cm4gZm9ybS5jcmVhdGFibGUgIT09IGZhbHNlXG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSA9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRhYmxlKGZvcm0pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5saW5lZCkge1xuICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50LmNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAsXG4gICAgICAgICAgICBxdWVyeTogeyB0eXBlIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGxvd2VkIHRvIGNyZWF0ZSBpdGVtIGZvciBnaXZlbiBmb3JtJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCh0eXBlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUl0ZW0odGhpcy5mb3Jtc1t0eXBlXSwgdHlwZSlcbiAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3B5RW5hYmxlZDogZmFsc2UsXG4gICAgICBwYXN0ZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZml4Q2xpcGJvYXJkOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xpcGJvYXJkT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzLmNsaXBib2FyZCkgPyB0aGlzLmNsaXBib2FyZCA6IHt9XG4gICAgfSxcblxuICAgIGNvcHlEYXRhKCkge1xuICAgICAgY29uc3QgeyBjb3B5IH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBjb3B5XG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IHBhc3RlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGluZyBvbiBicm93c2VyczpcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25QYXN0ZSgpIHtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKHRydWUpIC8vIHJlcG9ydFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5wYXN0ZURhdGEoZGF0YSlcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7IC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIExvYWRpbmdNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgLy8gUGFzcyBsb2NhbCB2ZXJicyBvdmVycmlkZXMgb24gdG8gY2hpbGRyZW4sIHNlZSB2ZXJicygpIGNvbXB1dGVkIHByb3AuXG4gICAgICAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMsXG4gICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRoaXMuaGFzRGF0YVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsb2FkZWREYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdGhlIHJlc291cmNlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc291cmNlIGZvciB0aGVcbiAgICAgIC8vIGFzc29jaWF0ZWQgc291cmNlIHNjaGVtYS5cbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlKClcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgYSBkYXRhLXNvdXJjZSBpZiBpdCBoYXMgYW4gYXNzb2NpYXRlZCBBUEkgcmVzb3VyY2U6XG4gICAgICByZXR1cm4gISF0aGlzLnJlc291cmNlXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgLy8gUmV0dXJucyBgZmFsc2VgaGVyZSwgYnV0IGlzIG92ZXJyaWRkZW4gdG8gcmV0dXJuIGB0cnVlYCBpblxuICAgICAgLy8gYFNvdXJjZU1peGluYCBmb3IgY29tcG9uZW50IHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEsIGJ1dFxuICAgICAgLy8gZWRpdCB0aGVpciBpdGVtcyB0aHJvdWdoIGEgbGlua2VkIHZpZXcuICBJbiB0aGlzIGNhc2UsIHJlYWwgaWRzIG5lZWQgdG9cbiAgICAgIC8vIGJlIHVzZWQuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICAvLyBDaGVjayB0aGUgZm9ybSB0aGF0IHRoaXMgY29tcG9uZW50IGJlbG9uZ3MgdG8gYXMgd2VsbCwgc2luY2UgaXQgbWF5IGJlXG4gICAgICAvLyBpbiBjcmVhdGlvbiBtb2RlLCB3aGljaCBtYWtlcyBpdCB0cmFuc2llbnQuXG4gICAgICAvLyBOT1RFOiBUaGlzIGRvZXMgbm90IGxvb3AgZW5kbGVzc2x5IGJlY2F1c2UgRGl0b0Zvcm0gcmVkZWZpbmVzXG4gICAgICAvLyBgaXNUcmFuc2llbnQoKWAgdG8gb25seSByZXR1cm4gYCF0aGlzLnByb3ZpZGVzRGF0YWAuXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ29tcG9uZW50XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5wcm92aWRlc0RhdGEgJiZcbiAgICAgICAgIXRoaXMubGlua3NUb1ZpZXcgfHxcbiAgICAgICAgZm9ybSAmJiAoXG4gICAgICAgICAgZm9ybS5pc1RyYW5zaWVudCB8fFxuICAgICAgICAgIGZvcm0uaXNDcmVhdGluZ1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIHRyYW5zaWVudE5vdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgJ2luIG9yZGVyIHRvIHBlcnNpc3QgdGhpcyBjaGFuZ2UuJ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICBzaG91bGRMb2FkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgIXRoaXMuaXNMb2FkaW5nXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICAvLyBCYXNlIGRlZmluaXRpb24sIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW5cbiAgICAgIHJldHVybiAhIXRoaXMubG9hZGVkRGF0YVxuICAgIH0sXG5cbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIFRoZSBhY3R1YWwgY29kZSBpcyB0aGUgYGdldFZlcmJzKClgIG1ldGhvZCwgZm9yIGVhc2llciBvdmVycmlkaW5nIG9mXG4gICAgICAvLyB0aGlzIGNvbXB1dGVkIHByb3BlcnR5IGluIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIFJlc291cmNlTWl4aW4uXG4gICAgICByZXR1cm4gdGhpcy5nZXRWZXJicygpXG4gICAgfSxcblxuICAgIHBhZ2luYXRpb25SYW5nZSgpIHtcbiAgICAgIC8vIE9ubHkgYXBwbHkgcGFnaW5hdGlvbiB0byBsaXN0cy5cbiAgICAgIGNvbnN0IHsgcGFnaW5hdGU6IGFtb3VudCB9ID0gdGhpcy5zb3VyY2VTY2hlbWFcbiAgICAgIGlmICh0aGlzLmlzTGlzdFNvdXJjZSAmJiBhbW91bnQpIHtcbiAgICAgICAgY29uc3QgeyBwYWdlID0gMCB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgICBjb25zdCBzdGFydCA9IHBhZ2UgKiBhbW91bnRcbiAgICAgICAgcmV0dXJuIFtzdGFydCwgc3RhcnQgKyBhbW91bnQgLSAxXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBxdWVyeVBhcmFtcygpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5wYWdpbmF0aW9uUmFuZ2VcbiAgICAgIGNvbnN0IHsgcGFnZSwgLi4ucXVlcnkgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnF1ZXJ5LCAvLyBRdWVyeSBtYXkgb3ZlcnJpZGUgc2NvcGUuXG4gICAgICAgIC4uLihyYW5nZSAmJiB7XG4gICAgICAgICAgLy8gUGFzcyBwYWdpbmF0aW9uIGFzIHJhbmdlLCBzbyB0aGF0IHdlIGF1dG9tYXRpY2FsbHkgZ2V0IE9iamVjdGlvbidzXG4gICAgICAgICAgLy8gcmVzdWx0cyBjb3VudGluZzpcbiAgICAgICAgICByYW5nZTogcmFuZ2Uuam9pbignLCcpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgLy8gV2hlbiBjcmVhdGluZyBuZXN0ZWQgZGF0YSwgd2Ugc3RpbGwgbmVlZCB0byBjYWxsIHNldHVwRGF0YSgpXG4gICAgaWYgKHRoaXMucHJvdmlkZXNEYXRhIHx8IHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgdGhpcy5zZXR1cERhdGEoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UmVzb3VyY2UoKSB7XG4gICAgICAvLyBUaGlzIGlzIGRlZmluZWQgYXMgYSBtZXRob2Qgc28gdGhlIGNvbXB1dGVkIGByZXNvdXJjZWAgZ2V0dGVyIGNhblxuICAgICAgLy8gYmUgb3ZlcnJpZGRlbiBhbmQgYHN1cGVyYCBmdW5jdGlvbmFsaXR5IGNhbiBzdGlsbCBiZSBhY2Nlc3NlZC5cbiAgICAgIHJldHVybiBnZXRSZXNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYT8ucmVzb3VyY2UsIHtcbiAgICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICBwYXJlbnQ6IHRoaXMucGFyZW50Rm9ybUNvbXBvbmVudD8ucmVzb3VyY2UgPz8gbnVsbFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0VmVyYnMoKSB7XG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuJHZlcmJzKClcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgID8ge1xuICAgICAgICAgIC4uLnZlcmJzLFxuICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgY3JlYXRlOiAnYWRkJyxcbiAgICAgICAgICBjcmVhdGVkOiAnYWRkZWQnLFxuICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgc2F2ZWQ6ICdhcHBsaWVkJyxcbiAgICAgICAgICBkZWxldGU6ICdyZW1vdmUnLFxuICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICB9XG4gICAgICAgIDogdmVyYnNcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgLy8gQWN0dWFsIGNvZGUgaXMgaW4gc2VwYXJhdGUgZnVuY3Rpb24gc28gaXQncyBlYXNlciB0byBvdmVycmlkZVxuICAgICAgLy8gYHNldHVwRGF0YSgpYCBhbmQgYW5kIGNhbGwgYGVuc3VyZURhdGEoKWAgZnJvbSB0aGUgb3ZlcnJpZGVzLFxuICAgICAgLy8gc2VlIERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpbi5cbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIGVuc3VyZURhdGEoKSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRMb2FkKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0RhdGEpIHtcbiAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZWxvYWREYXRhKCkge1xuICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICB9LFxuXG4gICAgbG9hZERhdGEoY2xlYXIpIHtcbiAgICAgIGlmICghdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBpZiAoY2xlYXIpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyRGF0YSgpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXF1ZXN0RGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKSB7XG4gICAgICByZXR1cm4gc2V0RGVmYXVsdHMoc2NoZW1hLCB0eXBlID8geyB0eXBlIH0gOiB7fSwgdGhpcylcbiAgICB9LFxuXG4gICAgcmVxdWVzdERhdGEoKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2dldCcsIHF1ZXJ5IH0sIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGF0YT8udHlwZSA9PT0gJ0ZpbHRlclZhbGlkYXRpb24nICYmXG4gICAgICAgICAgICAgIHRoaXMub25GaWx0ZXJFcnJvcnM/LihkYXRhLmVycm9ycykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdCh7XG4gICAgICBtZXRob2QsXG4gICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICBxdWVyeSxcbiAgICAgIGRhdGFcbiAgICB9LCBjYWxsYmFjaykge1xuICAgICAgY29uc3QgbG9hZGluZ09wdGlvbnMgPSB7XG4gICAgICAgIHVwZGF0ZVJvb3Q6IHRydWUsIC8vIERpc3BsYXkgc3Bpbm5lciBpbiBoZWFkZXIgd2hlbiBsb2FkaW5nIGluIHJlc291cmNlc1xuICAgICAgICB1cGRhdGVWaWV3OiB0aGlzLmlzSW5WaWV3IC8vIE5vdGlmeSB2aWV3IG9mIGxvYWRpbmcgZm9yIHZpZXcgY29tcG9uZW50c1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgY29uc3QgcmVxdWVzdCA9IHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSwgcXVlcnkgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC8vIFBhc3MgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZSB0byB0aGUgY2FsbGJhY2ssIHNvIHRoZXkgY2FuIGJlXG4gICAgICAgIC8vIGV4cG9zZWQgdG8gZnVydGhlciBjYWxsYmFja3MgdGhyb3VnaCBEaXRvQ29udGV4dC5cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBjYWxsYmFjayByZXR1cm5zIHRydWUsIGVycm9ycyB3ZXJlIGFscmVhZHkgaGFuZGxlZC5cbiAgICAgICAgY29uc3QgeyByZXNwb25zZSB9ID0gZXJyb3JcbiAgICAgICAgaWYgKCFjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UpKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgY29uc3QgdGl0bGUgPSBpc1N0cmluZyhkYXRhPy50eXBlKVxuICAgICAgICAgICAgPyBsYWJlbGl6ZShkYXRhLnR5cGUpXG4gICAgICAgICAgICA6ICdFcnJvcidcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZGF0YT8ubWVzc2FnZSA/PyBlcnJvclxuICAgICAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogJ2Vycm9yJywgdGl0bGUsIHRleHQgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICB9LFxuXG4gICAgZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpIHtcbiAgICAgIC8vIENvbnZlbnRpb246IG9ubHkgcG9zdCwgcHV0IGFuZCBwYXRjaCByZXF1ZXN0cyBwYXNzIHRoZSBkYXRhIGFzIHBheWxvYWQuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5jbHVkZXMobWV0aG9kKSAmJiAoXG4gICAgICAgICAgLy8gVE9ETzogVXNlIGBoYW5kbGVEYXRhU2NoZW1hKClgIGFzeW5jaHJvbm91c2x5IGhlcmUgaW5zdGVhZCwgdG9cbiAgICAgICAgICAvLyBvZmZlciB0aGUgc2FtZSBhbW91bnQgb2YgcG9zc2liaWxpdGllcyBmb3IgZGF0YSBsb2FkaW5nLlxuICAgICAgICAgIGJ1dHRvbi5nZXRTY2hlbWFWYWx1ZShbJ3Jlc291cmNlJywgJ2RhdGEnXSkgfHxcbiAgICAgICAgICBidXR0b24ucHJvY2Vzc2VkSXRlbVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24pIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgeyBtZXRob2QgfSA9IHJlc291cmNlXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEpXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICBzZXREYXRhID0gZmFsc2UsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aXRsZTogJ1JlcXVlc3QgU3VjY2Vzc2Z1bCcsXG4gICAgICAgIHRleHQ6ICdSZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgc2VudC4nXG4gICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgYFVuYWJsZSB0byBzZW5kIHJlcXVlc3Qke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICBdXG4gICAgICB9KVxuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoXG4gICAgICAgICAgeyBtZXRob2QsIHJlc291cmNlLCBkYXRhIH0sXG4gICAgICAgICAgYXN5bmMgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAvLyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgRGl0byB2YWxpZGF0aW9uIGVycm9yOlxuICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSAmJiBkYXRhLmVycm9yc1xuICAgICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc09iamVjdChkYXRhKSA/IGRhdGEgOiBlcnJcbiAgICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHVuZGVybHlpbmcgZGF0YSBiZWZvcmUgY2FsbGluZyBgbm90aWZ5KClgIG9yXG4gICAgICAgICAgICAgIC8vIGB0aGlzLml0ZW1MYWJlbGAsIHNvIGlkIGlzIHNldCBhZnRlciBjcmVhdGluZyBuZXcgaXRlbXMuXG4gICAgICAgICAgICAgIGlmIChzZXREYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEoZGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRCdXR0b25FdmVudChidXR0b24sIGV2ZW50LCB7IG5vdGlmeSwgZXJyb3IgfSkge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IG91dHNpZGUgb2YgYGVtaXRFdmVudCgpYCwgc28gdGhhdFxuICAgICAgLy8gYGNvbnRleHQud2FzTm90aWZpZWRgIGNhbiBiZSBjaGVja2VkIGFmdGVyLlxuICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBEaXRvQ29udGV4dChidXR0b24sIHtcbiAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICBpdGVtTGFiZWw6IHRoaXMuaXRlbUxhYmVsLFxuICAgICAgICBlcnJvclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJ1dHRvbi5lbWl0RXZlbnQoZXZlbnQsIHsgY29udGV4dCB9KVxuICAgICAgaWYgKFxuICAgICAgICBub3RpZnkgJiZcbiAgICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGlmIGFueXRoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAvLyBEbyBub3QgZGlzcGxheSBkZWZhdWx0IG5vdGlmaWNhdGlvbiBpZiB0aGUgZXZlbnQgaGFuZGxlciBhbHJlYWR5XG4gICAgICAgIC8vIGRpc3BsYXllZCBhIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgIWNvbnRleHQud2FzTm90aWZpZWRcbiAgICAgICkge1xuICAgICAgICBub3RpZnkoZXJyb3IpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhdGgocGF0aCkge1xuICAvLyBGb3IgcGF0aHMgc3RhcmluZyB3aXRoIGAvYCwgd2UgY2FuIHVzZSB0aGUgbmF0aXZlIGBVUkwoKWAgY2xhc3MgdG8gcmVzb2x2ZVxuICAvLyB0aGUgcGF0aCwgd2hpY2ggd2lsbCBhbHNvIGhhbmRsZSBgLi5gIGFuZCBgLmAgc2VnbWVudHM6XG4gIHJldHVybiBuZXcgVVJMKGBmaWxlOiR7cGF0aH1gKS5wYXRobmFtZVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbiAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4pXG4gIC8vLSBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8tIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8tIGVkaXRpbmcuIE9ubHkgcmVuZGVyIGEgcm91dGVyLXZpZXcgaGVyZSBpZiB0aGlzIGlzbid0IHRoZSBsYXN0IGRhdGEgcm91dGVcbiAgLy8tIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLy0gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgKVxuICAgIC8vLSBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8tIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vLSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTE1MDc4MDZcbiAgICBidXR0b24oXG4gICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGRpc2FibGVkXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBtZXJnZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyByZXNvbHZlUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1mb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCBwcm92aWRlIGFuIGVtcHR5IG9iamVjdCB3aXRoIGp1c3QgdGhlIHJpZ2h0XG4gICAgICAgIC8vIHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgICkgfHwge30gLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmlzTXV0YXRpbmcgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNNdXRhdGluZyAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIHBlcnNpc3RlbmNlIHVwb24gc3VibWlzc2lvbi5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogKHRoaXMucGFyYW0gPz8gbnVsbClcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgLy8gRm9ybXMgdGhhdCBhcmUgYWJvdXQgdG8gYmUgZGVzdHJveWVkIGR1ZSB0byBuYXZpZ2F0aW9uIGxvb3NlIHRoZWlyXG4gICAgICAvLyByb3V0ZS1yZWNvcmQsIGJ1dCBtaWdodCBzdGlsbCB0cmlnZ2VyIHRoaXMgZ2V0dGVyLiBGaWx0ZXIgdGhvc2Ugb3V0LlxuICAgICAgbGV0IGRhdGEgPSB0aGlzLnJvdXRlUmVjb3JkID8gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5kYXRhIDogbnVsbFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmlzTXV0YXRpbmcpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGEgaGFjaywgbW92ZSB0byBhIHdhdGNoZXIhXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aCh0aGlzLnBhdGhcbiAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV0gPSBtYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoZGF0YSlcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKHRvLCBmcm9tKSB7XG4gICAgICAvLyBPbmx5IGNsZWFyIGlmIHRoZSB3YXRjaGVkIHNvdXJjZURhdGEgaXRzZWxmIGNoYW5nZXMgaW4gdGhlIGZvcm0uXG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50ID8gJ2NyZWF0ZScgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50ID8gJ3N1Ym1pdCcgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dG9uUmVzb3VyY2UgfHwgdGhpcy5yZXNvdXJjZVxuICAgICAgY29uc3QgbWV0aG9kID0gcmVzb3VyY2U/Lm1ldGhvZCB8fCB0aGlzLm1ldGhvZFxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICBsZXQgc3VjY2Vzc1xuICAgICAgaWYgKCFidXR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiByZXNvbHZlUGF0aChgJHt0aGlzLnBhdGh9Ly4uLyR7aWR9YCkgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZm9ybS1uZXN0ZWRcbiAgICAmLFxuICAgIC5kaXRvLXNjcm9sbFxuICAgICAgLy8tIE5vIHNjcm9sbGluZyBpbnNpZGUgbmVzdGVkIGZvcm1zLCBhbmQgcHJldmVudCBvcGVuIC5tdWx0aXNlbGVjdCBmcm9tXG4gICAgICAvLy0gYmVpbmcgY3JvcHBlZC5cbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWZvcm0tbmVzdGVkJywge1xuICBleHRlbmRzOiBEaXRvRm9ybVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWVycm9ycyhcbiAgdi1pZj1cImVycm9yc1wiXG4pXG4gIHVsXG4gICAgbGkodi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIilcbiAgICAgIHwge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tZXJyb3JzXG4gICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgei1pbmRleDogMVxuICAgIHVsXG4gICAgICBtYXJnaW4tdG9wOiAxcHhcbiAgICAgIGNvbG9yOiAkY29sb3ItZXJyb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b21cbiAgICB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlbGVjdGVkJzogc2NvcGUubmFtZSA9PT0gcXVlcnkuc2NvcGUgfVwiXG4gICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgKSB7eyBnZXRMYWJlbChzY29wZSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2NvcGVzXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1idXR0b25cbiAgICAgICtlbGxpcHNpc1xuICAgICAgYm9yZGVyLXJhZGl1czogMFxuICAgICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgICBtaW4td2lkdGg6IDNlbVxuICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDFlbVxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxZW1cbiAgICAgICYgKyAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHhcbiAgICAgIC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICAgJjpmb2N1c1xuICAgICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnBhZ2luYXRpb24oXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuICB2LW1vZGVsOnBhZ2U9XCJwYWdlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2godGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSlcbiAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1pdGVtKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4pXG4gIC5kaXRvLXRyZWUtaGVhZGVyKHYtaWY9XCJsYWJlbFwiKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICApXG4gICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgICAgLmRpdG8tdHJlZS1pbmZvKHYtaWY9XCJkZXRhaWxzXCIpIHt7IGRldGFpbHMgfX1cbiAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgIClcbiAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICApXG4gICAgdHIoXG4gICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgIClcbiAgICAgIHRkXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgIClcbiAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gIHZ1ZS1zb3J0YWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgOmxpc3Q9XCJjaGlsZHJlbkl0ZW1zXCJcbiAgICA6b3B0aW9ucz1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgOml0ZW1LZXk9XCJpdGVtID0+IGdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICBAZW5kPVwib25FbmREcmFnKCRldmVudCwgY2hpbGRyZW5TY2hlbWEpXCJcbiAgKVxuICAgIHRlbXBsYXRlKCNpdGVtPVwieyBlbGVtZW50OiBpdGVtLCBpbmRleCB9XCIpXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgICApXG4gICAgICAvLy0gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgICAgLy8tIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBTb3J0YWJsZSBhcyBWdWVTb3J0YWJsZSB9IGZyb20gJ3NvcnRhYmxlanMtdnVlMydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZVNvcnRhYmxlIH0sXG4gIG1peGluczogW09yZGVyZWRNaXhpbl0sXG4gIGluamVjdDogWydjb250YWluZXInXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW0FycmF5LCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxldmVsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiB0aGlzLm9wZW4gfHwgdGhpcy5zY2hlbWEub3BlblxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubWV0YVxuICAgIH0sXG5cbiAgICBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5zdG9yZVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5kaXNhYmxlZFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG5hbWVkIGBzb3VyY2VTY2hlbWFgIGluc3RlYWQ/IFVzZSBTb3VyY2VNaXhpbj9cbiAgICBjaGlsZHJlblNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkxpc3QoKSB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5jaGlsZHJlblNjaGVtYT8ubmFtZVxuICAgICAgcmV0dXJuIG5hbWUgJiYgdGhpcy5kYXRhW25hbWVdXG4gICAgfSxcblxuICAgIGNoaWxkcmVuRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZHJhZ2dhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgc2NoZW1hOiB0aGlzLmNoaWxkcmVuU2NoZW1hXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG51bUNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1Qcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcz8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtRW50cmllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm51bVByb3BlcnRpZXMgKyB0aGlzLm51bUNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuSXRlbXMoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSAmJiBjaGlsZHJlbkxpc3QpIHtcbiAgICAgICAgY29uc3QgeyBlZGl0UGF0aCB9ID0gdGhpcy5jb250YWluZXJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5PcGVuID0gIXRoaXMucGF0aCAmJiBjaGlsZHJlblNjaGVtYS5vcGVuXG4gICAgICAgIC8vIEJ1aWxkIGEgY2hpbGRyZW4gbGlzdCB3aXRoIGNoaWxkIG1ldGEgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXIoXG4gICAgICAgICAgY2hpbGRyZW5TY2hlbWEsXG4gICAgICAgICAgY2hpbGRyZW5MaXN0Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLnBhdGggJiZcbiAgICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtjaGlsZHJlblNjaGVtYS5wYXRofS8ke2luZGV4fWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGVkaXRQYXRoID09PSBwYXRoXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICBvcGVuLFxuICAgICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gW11cbiAgICB9LFxuXG4gICAgZGV0YWlscygpIHtcbiAgICAgIGNvbnN0IHsgbnVtQ2hpbGRyZW4gfSA9IHRoaXNcbiAgICAgIHJldHVybiBudW1DaGlsZHJlbiAmJiBgJHtudW1DaGlsZHJlbn0gJHtcbiAgICAgICAgbnVtQ2hpbGRyZW4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnXG4gICAgICB9YFxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmVkaXRhYmxlIHx8IHRoaXMuZGVsZXRhYmxlXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFN1cHBvcnQgY3JlYXRhYmxlIVxuICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBjcmVhdGFibGUsIGVkaXRhYmxlIGFuZCBkZWxldGFibGUgb3ZlcnJpZGVzIG9uIHRoZVxuICAgIC8vIGFzc29jaWF0ZWQgZm9ybXMsIGp1c3QgbGlrZSBpbiBgVHlwZUxpc3RgIGFuZCBgVHlwZU9iamVjdGAsIHRocm91Z2hcbiAgICAvLyBgRGl0b0VkaXRCdXR0b25zYC4gSXQgd291bGQgYmUgYmVzdCB0byB1c2UgYERpdG9FZGl0QnV0dG9uc2AgaGVyZSB0b28uXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHByb3BlcnR5Lm5hbWUpXG4gICAgfSxcblxuICAgIG9uRWRpdCgpIHtcbiAgICAgIC8vIEFsbCB3ZSBnb3QgdG8gZG8gaXMgcHVzaCB0aGUgcmlnaHQgZWRpdCBwYXRoIHRvIHRoZSByb3V0ZXIsIHRoZSByZXN0XG4gICAgICAvLyBpcyBoYW5kbGVkIGJ5IG91ciByb3V0ZXMsIGFsbG93aW5nIHJlbG9hZHMgYXMgd2VsbC5cbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogYCR7dGhpcy5jb250YWluZXIucGF0aH0ke3RoaXMucGF0aH1gLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25EZWxldGUoKSB7XG4gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQhXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5jb250YWluZXIub25DaGFuZ2UoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgKVxuICAgICAgdGgoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b21cbiAgICAgICAgICB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLy0gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zYXNzXG4gICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXRhYmxlLWhlYWRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB0clxuICAgICAgdGhcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnRcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAuZGl0by1idXR0b25cbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXRcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAgIHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICAgICY6ZW1wdHk6OmFmdGVyXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgID4gc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1oZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICA/ICdkZXNjJ1xuICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZChcbiAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuKVxuICAvLy0gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDppcz1cImNlbGwuY29tcG9uZW50XCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiAgc3BhbihcbiAgICB2LWVsc2VcbiAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gRGl0b1ZOb2RlKHsgdm5vZGUgfSkge1xuICByZXR1cm4gdm5vZGVcbn1cblxuRGl0b1ZOb2RlLnByb3BzID0ge1xuICB2bm9kZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdm5vZGUnLCBEaXRvVk5vZGUpXG48L3NjcmlwdD5cbiIsIi8vIFR5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZSBjb21wb25lbnRzXG4vLyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciB0aGUgYHR5cGU6ICdjb21wb25lbnQnYCB0eXBlcy5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZXh0ZW5kczogRGl0b0NvbXBvbmVudCxcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFBhZGRpbmc6IGZhbHNlLFxuXG4gIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQsXG5cbiAgZ2V0OiBnZXRUeXBlQ29tcG9uZW50LFxuXG4gIHJlZ2lzdGVyKHR5cGVzLCBkZWZpbml0aW9uID0ge30pIHtcbiAgICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoYGRpdG8tdHlwZS0ke3R5cGVzWzBdfWAsIGRlZmluaXRpb24pXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5idXR0b24uZGl0by1idXR0b24oXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRleHRcIlxuICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbikge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdidXR0b24nLCAnc3VibWl0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuICAvLyBUT0RPOiBDb25zaWRlciBtYWtpbmcgdGhpcyB3b3JrIG5pY2VseTpcbiAgLy8gb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYigpIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmJzW3RoaXMubmFtZV0gfHwgdGhpcy5uYW1lXG4gICAgfSxcblxuICAgIHRleHQ6IGdldFNjaGVtYUFjY2Vzc29yKCd0ZXh0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRleHQgfHwgbGFiZWxpemUodGhpcy52ZXJiKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY2xvc2VGb3JtOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xvc2VGb3JtJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQG92ZXJyaWRlXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9XG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUNvbXBvbmVudD8uc3VibWl0KHRoaXMsIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmVtaXRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgICAvLyBIYXZlIGJ1dHRvbnMgdGhhdCBkZWZpbmUgcmVzb3VyY2VzIGNhbGwgYHRoaXMuc3VibWl0KClgIGJ5IGRlZmF1bHQ6XG4gICAgICBpZiAoXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgaGFzUmVzb3VyY2UodGhpcy5zY2hlbWEpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmlucHV0LmRpdG8tY2hlY2tib3goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHR5cGU9XCJjaGVja2JveFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jaGVja2JveFxuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3Ncbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBub3JtYWxpemVEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwge1xuICAgICAgcmVzb2x2ZUNvdW50ZXIgPSAxLFxuICAgICAgLi4ubG9hZGluZ09wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKFxuICAgICAgICB0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHw9IHJlYWN0aXZlKHtcbiAgICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICAgIHJlc29sdmluZzogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplLCBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiB2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY29kZShcbiAgcmVmPVwiY29kZVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnN0eWxlPVwic3R5bGVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1jb2RlXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAgIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IGF1dG9cbiAgICAuY29kZWZsYXNrXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAvLyBJZ25vcmUgdGhlIHBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fcHJlXG4gICAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fY29kZSxcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSlcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodClcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50cmlnZ2VyLmRpdG8tY29sb3IoXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIC5kaXRvLWlucHV0KDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiKVxuICAgICAgaW5wdXQoXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBza2V0Y2gtcGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemVcbiAgJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aFxuICAuZGl0by1jb2xvclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBpbnB1dFxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgLmRpdG8tY29sb3ItcGlja2VyXG4gICAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3XG4gICAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3lcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAmLFxuICAgICAgZGl2XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDBcbiAgICAgICAgYm90dG9tOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInXG5pbXBvcnQgeyBTa2V0Y2ggYXMgU2tldGNoUGlja2VyIH0gZnJvbSAnQGxrNzcvdnVlMy1jb2xvcidcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29sb3InLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgU2tldGNoUGlja2VyIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiBmYWxzZSxcbiAgICAgIGNvbnZlcnRlZEhleFZhbHVlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29sb3JWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB7fVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuY29sb3JGb3JtYXRcbiAgICAgICAgY29uc3Qga2V5ID0ge1xuICAgICAgICAgIC8vIE5PVEU6IHZ1ZTMtY29sb3IgY2FsbHMgaXQgJ2hleCcsIHdoaWxlIHRpbnljb2xvciBjYWxscyBpdCAnaGV4NidcbiAgICAgICAgICBoZXg6IHZhbHVlPy5hIDwgMSA/ICdoZXg4JyA6ICdoZXgnLFxuICAgICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICAgIH1bZm9ybWF0XSB8fCBmb3JtYXRcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRpbnljb2xvcih2YWx1ZSkudG9TdHJpbmcoZm9ybWF0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoZXhWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IG51bGxcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IodGhpcy52YWx1ZSlcbiAgICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkSGV4VmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogYGZvcm1hdGAgY2xhc2hlcyB3aXRoIFR5cGVNaXhpbi5mb3JtYXQoKWAsIHdoaWNoIHNoYWxsIGJlIHJlbmFtZWRcbiAgICAvLyBzb29uIHRvIGBmb3JtYXRWYWx1ZSgpYC4gUmVuYW1lIGBjb2xvckZvcm1hdGAgYmFjayB0byBgZm9ybWF0YCBhZnRlci5cbiAgICBjb2xvckZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdoZXgnXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dBbHBoYWA/XG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRzYD9cbiAgICBpbnB1dHM6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dHMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgcHJlc2V0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ3ByZXNldHMnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICAnI2MzYzNjMycsXG4gICAgICAgICcjN2Y3ZjdmJyxcbiAgICAgICAgJyMwMDAwMDAnLFxuICAgICAgICAnIzg4MDAxNScsXG4gICAgICAgICcjZWQxYzI0JyxcbiAgICAgICAgJyNmZjdmMjcnLFxuICAgICAgICAnI2ZmZjIwMCcsXG5cbiAgICAgICAgJyMyMmIxNGMnLFxuICAgICAgICAnIzAwYTJlOCcsXG4gICAgICAgICcjM2Y0OGNjJyxcbiAgICAgICAgJyNhMzQ5YTQnLFxuICAgICAgICAnI2I5N2E1NycsXG4gICAgICAgICcjZmZhZWM5JyxcbiAgICAgICAgJyNmZmM5MGUnLFxuICAgICAgICAnIzAwMDAwMDAwJ1xuICAgICAgXVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBmb2N1c2VkKGZvY3VzZWQpIHtcbiAgICAgIGlmICghZm9jdXNlZCAmJiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKGAjJHt0aGlzLmNvbnZlcnRlZEhleFZhbHVlfWApXG4gICAgICAgIGlmIChjb2xvcj8uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbG9yLnRvU3RyaW5nKHRoaXMuY29sb3JGb3JtYXQpXG4gICAgICAgICAgLy8gVE9ETzogRW1pdCAnaW5wdXQnIGhlcmUgaW5zdGVhZCwgYW5kICdjaGFuZ2UnIGluIGJsdXIsIGxpa2Ugb3RoZXJzLlxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICB2LWJpbmQ9XCIkcHJvcHNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbi8vIFRoaXMgaXMgdGhlIGdlbmVyYWwgcHVycG9zZSAnY29tcG9uZW50JyB0eXBlLCB3aGljaCBjYW4gcmVzb2x2ZSB0byBhbnkgY3VzdG9tXG4vLyBjb21wb25lbnQgdGhyb3VnaCBgc2NoZW1hLmNvbXBvbmVudGAsIHNlZSBgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCgpYC4gVGhpc1xuLy8gY2FuIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb21wb25lbnQnLCB7XG4gIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBgZGVmYXVsdFZhbHVlOiBudWxsYCB0byBub3Qgc2V0IGFueSBkYXRhIGZvciBjdXN0b21cbiAgLy8gY29tcG9uZW50cywgdW5sZXNzIHRoZXkgcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICBhd2FpdCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4vLy0gaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuaW5wdXQuZGl0by10ZXh0LmRpdG8taW5wdXQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpuYW1lPVwibmFtZVwiXG4gIHR5cGU9XCJ0ZXh0XCJcbiAgOnZhbHVlPVwidmFsdWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpyZWFkb25seT1cInRydWVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4uL21peGlucy9EYXRhTWl4aW4uanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZGVmYXVsdFZpc2libGU6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgJ3NjaGVtYScsIHtcbiAgICAgICAgICAgIC8vIE1vZGlmeWluZyBgdGhpcy5kYXRhYCBiZWxvdyB0cmlnZ2VycyBhbm90aGVyIGNhbGwgb2YgdGhlIGB2YWx1ZWBcbiAgICAgICAgICAgIC8vIGdldHRlciwgc28gdXNlIGEgdmFsdWUgb2YgMiBmb3IgYHJlc29sdmVDb3VudGVyYCB0byByZXR1cm4gdGhlXG4gICAgICAgICAgICAvLyByZXNvbHZlZCBkYXRhIHR3aWNlLlxuICAgICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDJcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYSBiZXR0ZXJcbiAgLy8gd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHkgc3VwcG9ydGVkXG4gIC8vIGF0dHJpYnV0ZXMpXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkYXRlVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgfVt0eXBlXVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsIHByb2Nlc3NGb3JtcywgZ2V0TmFtZWRTY2hlbWFzLCBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcywgZ2V0Vmlld1NjaGVtYSxcbiAgaGFzTGFiZWxzLCBpc0NvbXBhY3QsIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzTnVtYmVyLCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1Jlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZSxcbiAgICAgIGlnbm9yZVJvdXRlQ2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwID8gZGF0YVswXSA6IG51bGwpXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5zb21lKGhhc0xhYmVscylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG8ubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdERhdGEgJiYgbGlzdERhdGEuaW5kZXhPZihpdGVtKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGxpc3REYXRhLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxldGVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBjb25zdCBsYWJlbCA9IGl0ZW0gJiYgdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIGl0ZW0sIHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGV4dGVuZGVkOiB0cnVlXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBub3RpZnkgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgXVxuICAgICAgfSlcblxuICAgICAgaWYgKGl0ZW0gJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKVxuICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaXRlbUlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0pXG4gICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRNZW1iZXJSZXNvdXJjZShpdGVtSWQsIHRoaXMucmVzb3VyY2UpXG4gICAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdkZWxldGUnLCByZXNvdXJjZSB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKVxuICAgICAgICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gc2NoZW1hQ29tcG9uZW50c1xuICAgICAgcmV0dXJuIHNjaGVtYUNvbXBvbmVudHNbKChpbmRleCAlIGxlbmd0aCkgKyBsZW5ndGgpICUgbGVuZ3RoXVxuICAgIH0sXG5cbiAgICBvcGVuU2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudChpbmRleClcbiAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGVUb0NvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhUGF0aC5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgICAgPyB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgICAgPyBwYXJzZURhdGFQYXRoKGRhdGFQYXRoLnNsaWNlKHRoaXMuZGF0YVBhdGgubGVuZ3RoICsgMSkpWzBdID8/IG51bGxcbiAgICAgICAgICAgIDogMFxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaXNOdW1iZXIoK2luZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KCtpbmRleClcbiAgICAgICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wZW5lZCB9ID0gc2NoZW1hQ29tcG9uZW50XG4gICAgICAgICAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID4gMCAmJiAob25Db21wbGV0ZT8uKGNvbXBvbmVudHMpID8/IHRydWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gb3BlbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpXG4gICAgfSxcblxuICAgIG5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbE9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHRoZSBjb21wb25lbnQgdGhhdFxuICAgICAgICAgIC8vIHdlIGp1c3QgbmF2aWdhdGVkIHRvLCBhbmQgcGFzcyBpdCBvbiB0byBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICAgICAgY29uc3Qgcm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudHNbcm91dGVDb21wb25lbnRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgcmVzb2x2ZShvbkNvbXBsZXRlPy4oW3JvdXRlQ29tcG9uZW50XSkgPz8gdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSByb3V0ZSB0aGF0IGNhbiBzZXJ2ZSBwYXJ0IG9mIHRoZSBnaXZlbiBkYXRhUGF0aCxcbiAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aChcbiAgICAgICAgICAgIHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgobm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGhQYXJ0cykpXG4gICAgICAgICAgKVxuICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHJvdXRlIGZvciB0aGlzIHN1Yi1jb21wb25lbnQ6XG4gICAgICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZXIubWF0Y2gocGF0aClcbiAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHRoZXJlLCBzbyBqdXN0IGNhbGwgYG9uQ29tcGxldGUoKWA6XG4gICAgICAgICAgICAgIGNhbGxPbkNvbXBsZXRlKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLCBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTGlzdHMgd2l0aCBuZXN0ZWQgZm9ybXMgY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXMnXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICBjb25zdCBnZXRQYXRoV2l0aFBhcmFtID0gKHBhdGgsIHBhcmFtKSA9PiBwYXJhbVxuICAgICAgICA/IHBhdGhcbiAgICAgICAgICA/IGAke3BhdGh9Lzoke3BhcmFtfWBcbiAgICAgICAgICA6IGA6JHtwYXJhbX1gXG4gICAgICAgIDogcGF0aFxuXG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgaXNMaXN0U291cmNlKHNjaGVtYSkgJiYgcGFyYW0pLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdkaXRvLWZvcm0tbmVzdGVkJyA6ICdkaXRvLWZvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgdGV4dChmaWx0ZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvbnRhaW5zJyxcbiAgICAgICAgdmFsdWU6ICdjb250YWlucydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICAgICAgdmFsdWU6ICdlcXVhbHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3N0YXJ0cyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdzdGFydHMtd2l0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdlbmRzLXdpdGgnXG4gICAgICB9XG4gICAgXVxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yc1xuICAgICAgICA/IHtcbiAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICBvcHRpb25zOlxuICAgICAgICAgICAgaXNBcnJheShmaWx0ZXIub3BlcmF0b3JzKVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIG9wdGlvbiA9PiBmaWx0ZXIub3BlcmF0b3JzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgd2lkdGg6ICc0MCUnXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgdGV4dDoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHdpZHRoOiBmaWx0ZXIub3BlcmF0b3JzID8gJzYwJScgOiAnZmlsbCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIC8vIFVzZSBzaG9ydGVyIGRhdGUgZm9ybWF0IGluIGRhdGUtcmFuZ2UgZmlsdGVyczpcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0ge1xuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgeWVhcjogJ251bWVyaWMnXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyc1BhbmVsKGZpbHRlcnMsIGRhdGFQYXRoLCBwcm94eSkge1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgdGFyZ2V0OiBkYXRhUGF0aCxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHByb3h5LnF1ZXJ5XG4gICAgICApXG4gICAgfSxcbiAgICBjb21wb25lbnRzOiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbGVhcjoge1xuICAgICAgICB0ZXh0OiAnQ2xlYXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQucmVzZXREYXRhKClcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZmlsdGVyOiB7XG4gICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICB0ZXh0OiAnRmlsdGVyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBhcHBseUZpbHRlcnMoKSB7XG4gICAgICAgIHByb3h5LnF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnByb3h5LnF1ZXJ5LFxuICAgICAgICAgIGZpbHRlcjogZm9ybWF0RmlsdGVyc0RhdGEodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSksXG4gICAgICAgICAgLy8gQ2xlYXIgcGFnaW5hdGlvbiB3aGVuIGFwcGx5aW5nIG9yIGNsZWFyaW5nIGZpbHRlcnM6XG4gICAgICAgICAgcGFnZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGZpbHRlcnMgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tmaWx0ZXIubmFtZV0gPSB7XG4gICAgICAgIGxhYmVsOiBmb3JtLmxhYmVsLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tuYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBmaWx0ZXJzID0gW11cbiAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbbmFtZV1cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIC8vIE1hcCBjb21wb25lbnRzIHNlcXVlbmNlIHRvIGFyZ3VtZW50czpcbiAgICAgIGNvbnN0IGFyZ3MgPSBPYmplY3Qua2V5cyhnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkpLm1hcChcbiAgICAgICAga2V5ID0+IGVudHJ5W2tleV0gPz8gbnVsbFxuICAgICAgKVxuICAgICAgLy8gT25seSBhcHBseSBmaWx0ZXIgaWYgdGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlbid0IG51bGw6XG4gICAgICBpZiAoYXJncy5zb21lKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goYCR7bmFtZX06JHthcmdzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCcpfWApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJzLmxlbmd0aCA/IGZpbHRlcnMgOiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzRGF0YShzY2hlbWEsIHF1ZXJ5KSB7XG4gIGNvbnN0IGZpbHRlcnMgPSB7fVxuICAvLyBTYW1lIGFzIEBkaXRvanMvc2VydmVyJ3MgUXVlcnlQYXJhbWV0ZXJzLmZpbHRlcjogVHJhbnNsYXRlIHRoZSBzdHJpbmcgZGF0YVxuICAvLyBmcm9tICRyb3V0ZS5xdWVyeSBiYWNrIHRvIHBhcmFtIGxpc3RzIHBlciBmaWx0ZXI6XG4gIGlmIChxdWVyeSkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGFzQXJyYXkocXVlcnkuZmlsdGVyKSkge1xuICAgICAgY29uc3QgWywgbmFtZSwganNvbl0gPSBmaWx0ZXIubWF0Y2goL14oXFx3Kyk6KC4qKSQvKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyc1tuYW1lXSA9IGFzQXJyYXkoSlNPTi5wYXJzZShgWyR7anNvbn1dYCkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBmaWx0ZXJzRGF0YSA9IHt9XG4gIGZvciAoY29uc3QgbmFtZSBpbiBzY2hlbWEuY29tcG9uZW50cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgIC8vIElmIHdlIGhhdmUgcmV0cmlldmVkIHBhcmFtcyBmcm9tIHRoZSBxdWVyeSwgZmV0Y2ggdGhlIGFzc29jaWF0ZWRcbiAgICAvLyBmb3JtIGNvbXBvbmVudHMgc28gd2UgY2FuIG1hcCB0aGUgdmFsdWVzIGJhY2sgdG8gb2JqZWN0IGtleXM6XG4gICAgY29uc3QgYXJncyA9IGZpbHRlcnNbbmFtZV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKVxuICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gYXJnc1tpbmRleCsrXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZpbHRlcnNEYXRhW25hbWVdID0gZGF0YVxuICB9XG4gIHJldHVybiBmaWx0ZXJzRGF0YVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgIHYtaWY9XCJzY29wZXMgfHwgaGFzUGFnaW5hdGlvblwiXG4gIClcbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vLSBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8tIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgIHYtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgZGl0by10YWJsZS1oZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgdnVlLXNvcnRhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICA6aXRlbUtleT1cIml0ZW0gPT4gZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNpdGVtPVwieyBlbGVtZW50OiBpdGVtLCBpbmRleCB9XCIpXG4gICAgICAgIHRyKFxuICAgICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgdGRcbiAgICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIClcbiAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLWxpc3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGZcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjplbXB0eVxuICAgICAgICBkaXNwbGF5OiBub25lXG4gICAgICAuZGl0by1zY29wZXMsXG4gICAgICAuZGl0by1wYWdpbmF0aW9uXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICAgbWluLXdpZHRoOiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgICAgZGlzcGxheTogZ3JpZFxuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudFxuICAgICAgaGVpZ2h0OiAxMDAlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBTb3J0YWJsZSBhcyBWdWVTb3J0YWJsZSB9IGZyb20gJ3NvcnRhYmxlanMtdnVlMydcbmltcG9ydCB7XG4gIGdldE5hbWVkU2NoZW1hcywgZ2V0Vmlld0VkaXRQYXRoLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50LCByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlU29ydGFibGUgfSxcbiAgbWl4aW5zOiBbU291cmNlTWl4aW4sIE9yZGVyZWRNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGdldFBhbmVsU2NoZW1hKHNjaGVtYSwgZGF0YVBhdGgsIHNjaGVtYUNvbXBvbmVudCkge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gc2NoZW1hXG4gICAgLy8gU2VlIGlmIHRoaXMgbGlzdCBjb21wb25lbnQgd2FudHMgdG8gZGlzcGxheSBhIGZpbHRlciBwYW5lbCwgYW5kIGlmIHNvLFxuICAgIC8vIGNyZWF0ZSB0aGUgcGFuZWwgc2NoZW1hIGZvciBpdCB0aHJvdWdoIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIC8vIEF0IHRoZSB0aW1lIG9mIHRoZSBjcmVhdGlvbiBvZiB0aGUgcGFuZWwgc2NoZW1hLCB0aGUgc2NoZW1hQ29tcG9uZW50IGlzXG4gICAgICAvLyBub3QgZmlsbGVkIHlldCwgc28gd2UgY2FuJ3QgZ2V0IHRoZSB0YXJnZXQgY29tcG9uZW50IChkYXRhUGF0aCkgcmlnaHRcbiAgICAgIC8vIGF3YXkuIFVzZSBhIHByb3h5IGFuZCBhIGdldHRlciBpbnN0ZWFkLCB0byBnZXQgYXJvdW5kIHRoaXM6XG4gICAgICBjb25zdCBnZXRMaXN0Q29tcG9uZW50ID0gKCkgPT4gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgoXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBjb21wb25lbnQgPT4gY29tcG9uZW50LnR5cGUgPT09ICdsaXN0J1xuICAgICAgKVxuXG4gICAgICByZXR1cm4gZ2V0RmlsdGVyc1BhbmVsKFxuICAgICAgICBnZXROYW1lZFNjaGVtYXMoZmlsdGVycyksXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICB7IC8vIENyZWF0ZSBhIHNpbXBsZSBwcm94eSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgICBnZXQgcXVlcnkoKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdENvbXBvbmVudCgpPy5xdWVyeVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0IHF1ZXJ5KHF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBnZXRMaXN0Q29tcG9uZW50KClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCB1bmRlZmluZWQgdmFsdWVzIGZvciBjb21wYXJpbmcgd2l0aCBlcXVhbHMoKVxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgaWYgKCFlcXVhbHMoZmlsdGVyKHF1ZXJ5KSwgZmlsdGVyKGNvbXBvbmVudC5xdWVyeSkpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNQYWdpbmF0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGUgJiYgdGhpcy50b3RhbCA+IHRoaXMucGFnaW5hdGVcbiAgICB9LFxuXG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuYnV0dG9uU2NoZW1hcyB8fFxuICAgICAgICB0aGlzLmNyZWF0YWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpIHx8IHRoaXMucGF0aFxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLCBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLmNvbHVtbnMpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCwgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5kaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1sYWJlbC1jb21wb25lbnRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgaGVpZ2h0OiAyZW1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tYXJrdXAoXG4gIDppZD1cImRhdGFQYXRoXCJcbilcbiAgLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgKVxuICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgIClcbiAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tbWFya3VwXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5kaXRvLXJlc2l6ZVxuICAgICAgQGV4dGVuZCAlaWNvbi1yZXNpemVcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiB1bnNldFxuICAgICAgbGVmdDogdW5zZXRcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBib3R0b206IDBcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG5cbiAgICAuUHJvc2VNaXJyb3JcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgb3V0bGluZTogbm9uZVxuXG4gICAgLmRpdG8tbWFya3VwLWVkaXRvclxuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsXG4gICAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3JcblxuICAgIC5kaXRvLWJ1dHRvbnMtdG9vbGJhclxuICAgICAgbWFyZ2luOiAkaW5wdXQtcGFkZGluZy12ZXIgMFxuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgcCxcbiAgICB1bCxcbiAgICBvbCxcbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZVxuICAgICAgbWFyZ2luOiAxcmVtIDBcbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBcbiAgICBoMSxcbiAgICBoMixcbiAgICBoM1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICBoMVxuICAgICAgZm9udC1zaXplOiAxLjRyZW1cbiAgICBoMlxuICAgICAgZm9udC1zaXplOiAxLjJyZW1cbiAgICB1bFxuICAgICAgbGlzdC1zdHlsZTogZGlzY1xuICAgIGNvZGVcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgIHByZVxuICAgICAgcGFkZGluZzogMC43cmVtIDFyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICBvdmVyZmxvdy14OiBhdXRvXG4gICAgICBjb2RlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcCBjb2RlXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6IDAgMC4zcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICBhXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICBjb2xvcjogYmx1ZVxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcbiAgICB1bCxcbiAgICBvbFxuICAgICAgcGFkZGluZy1sZWZ0OiAycmVtXG4gICAgbGlcbiAgICAgICYgPiBwLFxuICAgICAgJiA+IG9sLFxuICAgICAgJiA+IHVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIHBhZGRpbmctbGVmdDogMXJlbVxuICAgICAgZm9udC1zdHlsZTogaXRhbGljXG4gICAgICBwXG4gICAgICAgIG1hcmdpbjogMFxuXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBNYXJrLCBnZXRNYXJrQXR0cmlidXRlcyB9IGZyb20gJ0B0aXB0YXAvdnVlLTMnXG4vLyBpbXBvcnQgeyB0b2dnbGVNYXJrIH0gZnJvbSAndGlwdGFwLWNvbW1hbmRzJ1xuLy8gRXNzZW50aWFsczpcbmltcG9ydCB7IERvY3VtZW50IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tZG9jdW1lbnQnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dCdcbi8vIE1hcmtzOlxuaW1wb3J0IHsgQm9sZCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJvbGQnXG5pbXBvcnQgeyBDb2RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZSdcbmltcG9ydCB7IEl0YWxpYyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWl0YWxpYydcbmltcG9ydCB7IExpbmsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saW5rJ1xuaW1wb3J0IHsgU3RyaWtlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3RyaWtlJ1xuaW1wb3J0IHsgVW5kZXJsaW5lIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lJ1xuLy8gTm9kZXM6XG5pbXBvcnQgeyBCbG9ja3F1b3RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYmxvY2txdW90ZSdcbmltcG9ydCB7IENvZGVCbG9jayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2snXG5pbXBvcnQgeyBIYXJkQnJlYWsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oYXJkLWJyZWFrJ1xuaW1wb3J0IHsgSGVhZGluZyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhlYWRpbmcnXG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1wYXJhZ3JhcGgnXG5pbXBvcnQgeyBIb3Jpem9udGFsUnVsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhvcml6b250YWwtcnVsZSdcbmltcG9ydCB7IE9yZGVyZWRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tb3JkZXJlZC1saXN0J1xuaW1wb3J0IHsgQnVsbGV0TGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJ1bGxldC1saXN0J1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saXN0LWl0ZW0nXG4vLyBUT0RPOlxuLy8gaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pbWFnZSdcbi8vIGltcG9ydCB7IE1lbnRpb24gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1tZW50aW9uJ1xuLy8gaW1wb3J0IHsgQ29kZUJsb2NrSGlnaGxpZ2h0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jay1oaWdobGlnaHQnXG4vLyBpbXBvcnQgeyBUYWJsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlJ1xuLy8gaW1wb3J0IHsgVGFibGVDZWxsIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtY2VsbCdcbi8vIGltcG9ydCB7IFRhYmxlSGVhZGVyIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtaGVhZGVyJ1xuLy8gaW1wb3J0IHsgVGFibGVOb2RlcyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLW5vZGVzJ1xuLy8gaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1yb3cnXG4vLyBpbXBvcnQgeyBUYXNrTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2stbGlzdCdcbi8vIGltcG9ydCB7IFRhc2tJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1pdGVtJ1xuLy8gVG9vbHM6XG5pbXBvcnQgeyBIaXN0b3J5IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGlzdG9yeSdcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIHVuZGVyc2NvcmUsIGh5cGhlbmF0ZSwgZGVib3VuY2UsIGNhbWVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtYXJrdXAnLCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBFZGl0b3JDb250ZW50LFxuICAgIEljb25cbiAgfSxcblxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGVkaXRvciA9PiB0aGlzLm9uQ2xpY2tMaW5rKGVkaXRvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgLy8gRG8gbm90IHNob3cgdGhlIHBhcmFncmFwaCBjb21tYW5kIGFzIGFjdGl2ZSBpZiBhbnkgb2YgdGhlIGJsb2NrXG4gICAgICAgIC8vIGNvbW1hbmRzIGFyZSBhbHNvIGFjdGl2ZTpcbiAgICAgICAgICBpZ25vcmVBY3RpdmU6ICgpID0+XG4gICAgICAgICAgICB0aGlzLm90aGVyTm9kZUJ1dHRvbnMuc29tZShidXR0b24gPT4gYnV0dG9uLmlzQWN0aXZlKVxuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cmlidXRlOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGVkaXRvciA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHRoaXMudmFsdWUgPSBlZGl0b3IuZ2V0SFRNTCgpXG4gICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGVkaXRvcilcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldENvbnRlbnQodmFsdWUsIGZhbHNlLCB0aGlzLnBhcnNlT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnRoaXMuZWRpdG9yT3B0aW9ucyxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZ2V0RXh0ZW5zaW9ucygpLFxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgYmVmb3JlVW5tb3VudCgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGVkaXRvcikge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiBnZXRNYXJrQXR0cmlidXRlcyh0aGlzLmVkaXRvci5zdGF0ZSwgJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyaWJ1dGVzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LFxuICAgICAgICAgIC8vIHByZWZpeCBpdCB3aXRoIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwczovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRMaW5rKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy51bnNldExpbmsoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIEVzc2VudGlhbHM6XG4gICAgICAgIERvY3VtZW50LFxuICAgICAgICBUZXh0LFxuICAgICAgICBQYXJhZ3JhcGgsIC8vIGJ1dHRvbiBjYW4gYmUgY29udHJvbGxlZCwgYnV0IG5vZGUgbmVlZHMgdG8gYmUgb24uXG5cbiAgICAgICAgLy8gTWFya3M6IGBzY2hlbWEubWFya3NgXG4gICAgICAgIG1hcmtzLmJvbGQgJiYgQm9sZCxcbiAgICAgICAgbWFya3MuaXRhbGljICYmIEl0YWxpYyxcbiAgICAgICAgbWFya3MudW5kZXJsaW5lICYmIFVuZGVybGluZSxcbiAgICAgICAgbWFya3Muc3RyaWtlICYmIFN0cmlrZSxcbiAgICAgICAgbWFya3Muc21hbGwgJiYgU21hbGwsXG4gICAgICAgIG1hcmtzLmNvZGUgJiYgQ29kZSxcbiAgICAgICAgbWFya3MubGluayAmJiBMaW5rV2l0aFRpdGxlLFxuXG4gICAgICAgIC8vIE5vZGVzOiBgc2NoZW1hLm5vZGVzYFxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIEJsb2NrcXVvdGUsXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBDb2RlQmxvY2ssXG4gICAgICAgIEhhcmRCcmVhaywgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWx3YXlzIG9uP1xuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIEhlYWRpbmcuY29uZmlndXJlKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBIb3Jpem9udGFsUnVsZSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIExpc3RJdGVtLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIEJ1bGxldExpc3QsXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIE9yZGVyZWRMaXN0LFxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvSXRlbSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0xpc3QsXG5cbiAgICAgICAgLy8gVG9vbHM6IGBzY2hlbWEudG9vbHNgXG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgSGlzdG9yeVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cmlidXRlcywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IChcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmlzQWN0aXZlKG5hbWUsIGF0dHJpYnV0ZXMpICYmXG4gICAgICAgICAgICAoaWdub3JlQWN0aXZlID09IG51bGwgfHwgIWlnbm9yZUFjdGl2ZSgpKVxuICAgICAgICAgICksXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYHRvZ2dsZSR7Y2FtZWxpemUobmFtZSwgdHJ1ZSl9YFxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLmNvbW1hbmRzW2tleV0pIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpW2tleV0oYXR0cmlidXRlcykuZm9jdXMoKS5ydW4oKVxuICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgPyBvbkNsaWNrKHRoaXMuZWRpdG9yLCBhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIDogY29tbWFuZChhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0cmlidXRlLCB2YWx1ZXMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlcykgJiYgaXNBcnJheShzZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBoZWFkaW5nIGxldmVsIGF0dHJzOlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgJHtpY29ufS0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IFthdHRyaWJ1dGVdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgdGhpcy5lZGl0b3IuZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgU21hbGwgPSBNYXJrLmNyZWF0ZSh7XG4gIG5hbWU6ICdzbWFsbCcsXG5cbiAgcGFyc2VIVE1MKCkge1xuICAgIHJldHVybiBbeyB0YWc6ICdzbWFsbCcgfV1cbiAgfSxcblxuICByZW5kZXJIVE1MKCkge1xuICAgIHJldHVybiBbJ3NtYWxsJywgMF1cbiAgfSxcblxuICBhZGRDb21tYW5kcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2V0U21hbGw6IGF0dHJpYnV0ZXMgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0TWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICB9LFxuICAgICAgdG9nZ2xlU21hbGw6IGF0dHJpYnV0ZXMgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICByZXR1cm4gY29tbWFuZHMudG9nZ2xlTWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICB9LFxuICAgICAgdW5zZXRTbWFsbDogKCkgPT4gKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICByZXR1cm4gY29tbWFuZHMudW5zZXRNYXJrKHRoaXMubmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IExpbmtXaXRoVGl0bGUgPSBMaW5rLmV4dGVuZCh7XG4gIGluY2x1c2l2ZTogZmFsc2UsXG4gIHNjaGVtYToge1xuICAgIGF0dHJzOiB7XG4gICAgICBocmVmOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0sXG4gICAgICB0aXRsZToge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcnNlSFRNTCgpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgZ2V0QXR0cnM6IGVsZW1lbnQgPT4gKHtcbiAgICAgICAgICBocmVmOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgIHRpdGxlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuICAgICAgICB9KVxuICAgICAgfV1cbiAgICB9LFxuXG4gICAgcmVuZGVySFRNTChub2RlKSB7XG4gICAgICByZXR1cm4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgdnVlLW11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuICBAaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QuY3NzJ1xuXG4gICRzcGlubmVyLXdpZHRoOiAkc2VsZWN0LWFycm93LXdpZHRoXG4gICR0YWctaWNvbi13aWR0aDogMS44ZW1cbiAgJHRhZy1tYXJnaW46IDJweFxuICAkdGFnLXBhZGRpbmc6IDNweFxuICAkdGFnLWxpbmUtaGVpZ2h0OiAxLjFlbVxuXG4gIC5kaXRvLW11bHRpc2VsZWN0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICAubXVsdGlzZWxlY3RcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgY29sb3I6ICRjb2xvci1ibGFja1xuXG4gICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0XG4gICAgICBwYWRkaW5nOiAwICRzcGlubmVyLXdpZHRoIDAgMFxuICAgICAgLy8gU28gdGFncyBjYW4gZmxvYXQgb24gbXVsdGlwbGUgbGluZXMgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnM6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW5cblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnXG4gICAgICBmbG9hdDogbGVmdFxuICAgICAgbWFyZ2luOiAkdGFnLW1hcmdpbiAwIDAgJHRhZy1tYXJnaW5cbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgcGFkZGluZzogJHRhZy1wYWRkaW5nICR0YWctaWNvbi13aWR0aCAkdGFnLXBhZGRpbmcgMC44ZW1cbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3Mtd3JhcFxuICAgICAgb3ZlcmZsb3c6IGF1dG9cbiAgICAgIGxpbmUtaGVpZ2h0OiAwXG5cbiAgICAubXVsdGlzZWxlY3RfX3NpbmdsZSxcbiAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyLFxuICAgIC5tdWx0aXNlbGVjdF9faW5wdXRcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IDBcbiAgICAgIG1hcmdpbjogMCAwIDFweCAwXG4gICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIHN0eWxlPVwicGFkZGluZzogLi4uO1wiIGluIGFkZGl0aW9uIHRvIHVzaW5nXG4gICAgICAvLyBjbGFzc2VzLCBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcgIWltcG9ydGFudFxuICAgICAgLy8gU28gaW5wdXQgY2FuIGZsb2F0IG5leHQgdG8gdGFncyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2lucyB3aXRoXG4gICAgICAvLyAubXVsdGlzZWxlY3RfX3RhZ3M6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50XG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG5cbiAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyLFxuICAgIC5tdWx0aXNlbGVjdF9faW5wdXQ6OnBsYWNlaG9sZGVyXG4gICAgICBjb2xvcjogJGNvbG9yLXBsYWNlaG9sZGVyXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlclxuICAgICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG5cbiAgICAubXVsdGlzZWxlY3RfX3NlbGVjdCxcbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIC8vICRib3JkZXItd2lkdGggdG8gcHJldmVudCBtYXNraW5nIGJvcmRlciB3aXRoIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgdG9wOiAkYm9yZGVyLXdpZHRoXG4gICAgICByaWdodDogJGJvcmRlci13aWR0aFxuICAgICAgYm90dG9tOiAkYm9yZGVyLXdpZHRoXG4gICAgICBoZWlnaHQ6IGluaGVyaXRcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAubXVsdGlzZWxlY3RfX3NlbGVjdFxuICAgICAgd2lkdGg6IDBcbiAgICAgIG1hcmdpbi1yaWdodDogY2FsYygkc2VsZWN0LWFycm93LXdpZHRoIC8gMilcbiAgICAgICY6OmJlZm9yZVxuICAgICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tXG4gICAgICAgIHJpZ2h0OiBjYWxjKC0xICogJHNlbGVjdC1hcnJvdy1zaXplIC8gMilcblxuICAgIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoXG4gICAgICAmOjpiZWZvcmUsXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAzcHhcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBpbnNldDogMFxuICAgICAgICBtYXJnaW46IGF1dG9cblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uXG4gICAgICBtaW4taGVpZ2h0OiB1bnNldFxuICAgICAgaGVpZ2h0OiB1bnNldFxuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBJbnN0cnVjdGlvbiB0ZXh0IGZvciBvcHRpb25zXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0tZGlzYWJsZWRcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLWljb25cbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbVxuICAgICAgd2lkdGg6ICR0YWctaWNvbi13aWR0aFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG4gICAgICAgIGZvbnQtc2l6ZTogMS4zZW1cbiAgICAgICY6aG92ZXI6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLXNlbGVjdGVkXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHRcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgICYubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWcsXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3MsXG4gICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcblxuICAgICYuZGl0by1tdWx0aXNlbGVjdC1zaW5nbGVcbiAgICAgIC0taW5wdXQtd2lkdGg6IDEwMCVcbiAgICAmLmRpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGVcbiAgICAgIC0taW5wdXQtd2lkdGg6IGF1dG9cblxuICAgIC5tdWx0aXNlbGVjdC0tYWN0aXZlXG4gICAgICAubXVsdGlzZWxlY3RfX3NpbmdsZSxcbiAgICAgIC5tdWx0aXNlbGVjdF9faW5wdXRcbiAgICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBgc3R5bGU9XCJ3aWR0aFwiYCBpbiBhZGRpdGlvbiB0byB1c2luZyBjbGFzc2VzXG4gICAgICAgIC8vIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICAgIHdpZHRoOiB2YXIoLS1pbnB1dC13aWR0aCkgIWltcG9ydGFudFxuXG4gICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDBcblxuICAgICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgICAgICBtYXJnaW46IC0xcHggMCAwXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDBcblxuICAgICAgJi5tdWx0aXNlbGVjdC0tYWJvdmVcbiAgICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDBcbiAgICAgICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgICBtYXJnaW46IDAgMCAtMXB4XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDBcblxuICAgICYuZGl0by1oYXMtZXJyb3JzXG4gICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItZXJyb3JcblxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcbmltcG9ydCBWdWVNdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAvLyBJZiBhbiBvcHRpb24gY2Fubm90IGJlIGZvdW5kLCB3ZSBtYXkgYmUgaW4gdGFnZ2FibGUgbW9kZSBhbmRcbiAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgdmFsdWUgPT4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG9wdGlvbnMgdGhhdCB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIHJlYWxseSBzaG91bGQgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyIHx8IChcbiAgICAgICAgc2VhcmNoYWJsZSAmJiB0YWdnYWJsZSA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiBzZWFyY2hhYmxlID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlIHRvXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gJydcbiAgICAgICAgICA/IHRoaXMuaXNJbnRlZ2VyID8gcGFyc2VJbnQodmFsdWUsIDEwKSA6IHBhcnNlRmxvYXQodmFsdWUpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyID8gJ2FueScgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID0gbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9IG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgW3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOm1pbj1cIm1pblwiXG4gIDptYXg9XCJtYXhcIlxuICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuICBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOm5vdChbc3RlcF0pXG4gICAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uXG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIG1hcmdpbjogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ251bWJlcicsICdpbnRlZ2VyJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLy0gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgIDpsYWJlbD1cIm9iamVjdExhYmVsXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgKVxuICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICA6cGF0aD1cInBhdGhcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1vYmplY3RcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICBtYXJnaW46IDBcbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50XG4gICAgICBmbGV4OiAwIDEgMTAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgZmxleDogMSAwIDAlXG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9iamVjdExhYmVsKCkge1xuICAgICAgLy8gT25seSBzaG93IGEgbGFiZWwgaWYgdGhlIG9iamVjdCBpcyBjb2xsYXBzaWJsZS5cbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlXG4gICAgICAgID8gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIHRoaXMub2JqZWN0RGF0YSwgeyBhc09iamVjdDogdHJ1ZSB9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgZGF0YTogdGhpcy5vYmplY3REYXRhIH0pXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSksXG4gICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICAgICAgbmVzdGVkLCBmbGF0dGVuLFxuICAgICAgICBwcm9jZXNzXG4gICAgICApXG4gICAgXSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRQYWRkaW5nOiB0cnVlLFxuXG4gIGdldFBhbmVsU2NoZW1hKHNjaGVtYSkge1xuICAgIC8vIEZvciBhIFR5cGVQYW5lbCwgdGhlIGNvbXBvbmVudCBzY2hlbWEgaXMgYWxzbyB0aGUgcGFuZWwgc2NoZW1hLCBidXRcbiAgICAvLyByZW1vdmUgdGhlIGFkZGVkIG5hbWUsIHNvIGl0IGRvZXNuJ3QgZ2V0IGFwcGVuZGVkIHR3aWNlIHRvIGRhdGEtcGF0aC5cbiAgICBjb25zdCB7IG5hbWUsIC4uLnBhbmVsIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gcGFuZWxcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiByYW5nZVsxXSAtIHJhbmdlWzBdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAuZGl0by1yYWRpby1idXR0b25zXG4gICAgbGFiZWxcbiAgICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3NcbiAgICAuZGl0by1yYWRpby1idXR0b25cbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNlY3Rpb24oXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbilcbiAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc2VjdGlvblxuICAgICYuZGl0by1zZWN0aW9uLWxhYmVsbGVkXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oXG4gICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cydcblxuICAvLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiAgJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKVxuXG4gIC5kaXRvLXNlbGVjdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgc2VsZWN0XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoXG5cbiAgICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgc2VsZWN0XG4gICAgICAgIHdpZHRoOiAxMDAlXG5cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pXG5cbiAgICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyXG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNsaWRlclxuICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXNsaWRlclxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLXJhbmdlXG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKVxuICAgIC5kaXRvLW51bWJlclxuICAgICAgYm9yZGVyOiAwXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzeW5jPVwidHJ1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5pbnB1dC1maWVsZC5kaXRvLXRleHQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5jb25zdCBtYXNrZWRQYXNzd29yZCA9ICcqKioqKioqKioqKioqKioqJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ3RleHQnLCAnZW1haWwnLCAndXJsJywgJ2hvc3RuYW1lJywgJ2RvbWFpbicsICd0ZWwnLCAncGFzc3dvcmQnLCAnY3JlZGl0Y2FyZCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFR5cGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgIGRvbWFpbjogJ3RleHQnXG4gICAgICB9W3RoaXMudHlwZV0gfHwgdGhpcy50eXBlXG4gICAgfSxcblxuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiZcbiAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgIClcbiAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICBob3N0bmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgIGNyZWRpdGNhcmQ6ICdjcmVkaXRjYXJkJ1xuICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdGV4dGFyZWFcbiAgICBkaXNwbGF5OiBibG9ja1xuICAgIHJlc2l6ZTogbm9uZVxuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3sgMiAqICRpbnB1dC1wYWRkaW5nLXZlciB9KVxuICAgICYuZGl0by1yZXNpemFibGVcbiAgICAgIHJlc2l6ZTogdmVydGljYWxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgNFxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1saXN0XG4gIGRpdG8tc2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8tIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnXG5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgQGV4dGVuZCAlZmllbGRcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgID4gLmRpdG8tdHJlZS1pdGVtXG4gICAgICAgIGZsZXg6IDEgMSAyNSVcbiAgICAgID4gLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lclxuICAgICAgICBmbGV4OiAwIDEgNzUlXG4gICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXZlcikgKC0kaW5wdXQtcGFkZGluZy1ob3IpXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7XG4gIGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzLCByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gIH0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgfSxcblxuICAgIHRyZWVEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWRcbiAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8ge1xuICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAuLi50aGlzLnNjaGVtYVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlRm9ybXModGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gdHJ1ZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5wcm9wZXJ0aWVzKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgICAgICBuZXN0ZWQsIGZsYXR0ZW4sXG4gICAgICAgIC8vIFBhc3MgcHJvY2VzcygpIHRvIGFkZCBtb3JlIHJvdXRlcyB0byBjaGlsZFJvdXRlczpcbiAgICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgIC8vIEFkZCBgdHlwZWAgdG8gdGhlIG5lc3RlZCB0cmVlIGxpc3QuXG4gICAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgYHByb2Nlc3NTY2hlbWEoKWAgZm9yIHRoZSBuZXN0ZWQgdHJlZSBsaXN0OlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICAgICAgYXBpLCBjaGlsZHJlbiwgY2hpbGRyZW4ubmFtZSwgY2hpbGRSb3V0ZXMsIGxldmVsLFxuICAgICAgICAgICAgICBuZXN0ZWQsIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIF0pXG4gIH0sXG5cbiAgZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nKHNjaGVtYSwgY29udGV4dCkge1xuICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIGNoaWxkcmVuXG4gICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICA6IG51bGxcbiAgICApXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICB2dWUtc29ydGFibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICBpdGVtS2V5PVwia2V5XCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNpdGVtPVwieyBlbGVtZW50OiBmaWxlLCBpbmRleCB9XCIpXG4gICAgICAgIHRyXG4gICAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgICB0ZCB7eyBmb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpIH19XG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgICApXG4gICAgdGZvb3RcbiAgICAgIHRyXG4gICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJpc1VwbG9hZFJlYWR5XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgKSBVcGxvYWQgQWxsXG4gICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbGU9XCJpbnB1dEZpbGVcIlxuICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJ1xuXG4gIC5kaXRvLXVwbG9hZFxuICAgIC5kaXRvLXRhYmxlXG4gICAgICB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXG4gICAgLmRpdG8tYnV0dG9uLWFkZC11cGxvYWRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gKlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgICAgLmRpdG8tcHJvZ3Jlc3NcbiAgICAgICAgZmxleDogYXV0b1xuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IFZ1ZVVwbG9hZCBmcm9tICd2dWUtdXBsb2FkLWNvbXBvbmVudCdcbmltcG9ydCB7IFNvcnRhYmxlIGFzIFZ1ZVNvcnRhYmxlIH0gZnJvbSAnc29ydGFibGVqcy12dWUzJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQsIFZ1ZVNvcnRhYmxlIH0sXG4gIG1peGluczogW09yZGVyZWRNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArIGZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvcm1hdEZpbGVTaXplLFxuXG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKGZpbGUgJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlW2luZGV4XSA9IG5ld0ZpbGVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3RmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVGaWxlKGZpbGUpIHtcbiAgICAgIHRoaXMucmVwbGFjZUZpbGUoZmlsZSwgbnVsbClcbiAgICB9LFxuXG4gICAgaW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHtcbiAgICAgICAgICAgIGFib3J0OiAnVXBsb2FkIGFib3J0ZWQnLFxuICAgICAgICAgICAgZGVuaWVkOiAnVXBsb2FkIGRlbmllZCcsXG4gICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29yayBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgIHNlcnZlcjogJ1NlcnZlciBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICB0aW1lb3V0OiAnVGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJ1xuXG4gICAgICAgICAgfVtlcnJvcl0gfHwgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5wdXRGaWx0ZXIobmV3RmlsZS8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBuZXdseSBhZGRlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgY29uc3QgZmlsZXMgPSBhc0ZpbGVzKHZhbHVlKVxuICAgICAgLm1hcChcbiAgICAgICAgKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICF1cGxvYWQgfHwgdXBsb2FkLnN1Y2Nlc3MgPyBmaWxlIDogbnVsbFxuICAgICAgKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cblxuPC9zY3JpcHQ+XG4iLCJjb25zdCBsb2dnZWREZXByZWNhdGlvbnMgPSBuZXcgU2V0KClcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHJlY2F0ZShtZXNzYWdlKSB7XG4gIC8vIE9ubHkgbG9nIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIG9uY2UuXG4gIGlmICghbG9nZ2VkRGVwcmVjYXRpb25zLmhhcyhtZXNzYWdlKSkge1xuICAgIGxvZ2dlZERlcHJlY2F0aW9ucy5hZGQobWVzc2FnZSlcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSlcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2Nsb3NlJywgJ2Nsb3NlZCcsXG4gICdjYW5jZWwnLCAnY2FuY2VsbGVkJyxcbiAgJ2RyYWcnLCAnZHJhZ2dlZCdcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCB7IGNyZWF0ZUFwcCwgaCBhcyBjcmVhdGVFbGVtZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVXZWJIaXN0b3J5IH0gZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ0BreXZnL3Z1ZTMtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzQXJyYXksIGFzQXJyYXksIGlzQWJzb2x1dGVVcmwsXG4gIG1lcmdlLCBoeXBoZW5hdGUsIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBkZXByZWNhdGUgfSBmcm9tICcuL3V0aWxzL2RlcHJlY2F0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IG1lcmdlKHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dGluZ3M6XG4gICAgYXBpLmxvY2FsZSB8fD0gJ2VuLVVTJ1xuICAgIGFwaS5mb3JtYXRzID0gbWVyZ2Uoe30sIGRlZmF1bHRGb3JtYXRzLCBhcGkuZm9ybWF0cylcbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiByZXF1ZXN0KGFwaSwgb3B0aW9ucylcbiAgICBhcGkuZ2V0QXBpVXJsIHx8PSBvcHRpb25zID0+IGdldEFwaVVybChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmlzQXBpVXJsIHx8PSB1cmwgPT4gaXNBcGlVcmwoYXBpLCB1cmwpXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gaHlwaGVuYXRlIDogdmFsID0+IHZhbFxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGNhbWVsaXplIDogdmFsID0+IHZhbFxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGFwaS51c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXNzdW1lIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSByb290LWxldmVsIGNvbGxlY3Rpb24gcm91dGVzLFxuICAgICAgICAvLyB0byBhdm9pZCBleGNlc3NpdmUgbmVzdGluZyBvZiAoc3ViLSljb2xsZWN0aW9uIHJvdXRlcy5cbiAgICAgICAgcmV0dXJuIGAke3Jlc291cmNlLnBhdGh9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8gU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIGNvbnN0IGFwcCA9IHRoaXMuYXBwID0gY3JlYXRlQXBwKHtcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRGl0b1Jvb3QsXG4gICAgICAgIFZ1ZU5vdGlmaWNhdGlvbnMsXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgIC4uLnR5cGVzXG4gICAgICB9LFxuXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogKCkgPT4gY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICByZWY6ICdyb290JyxcbiAgICAgICAgY2xhc3M6IGRpdG8uc2V0dGluZ3Mucm9vdENsYXNzLFxuICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICBvcHRpb25zXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBhcHAudXNlKFZ1ZU5vdGlmaWNhdGlvbnMsIHtcbiAgICAgIG5hbWU6ICdub3RpZnknLFxuICAgICAgY29tcG9uZW50TmFtZTogJ1Z1ZU5vdGlmaWNhdGlvbnMnXG4gICAgfSlcblxuICAgIC8vIHJvb3QuY29tcG9uZW50KCd2dWUtbW9kYWwnLCBWdWVNb2RhbClcblxuICAgIGFwcC51c2UoY3JlYXRlUm91dGVyKHtcbiAgICAgIC8vIFN0YXJ0IHdpdGggYSBjYXRjaC1hbGwgcm91dGUsIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBhY3R1YWwgcm91dGVzIG9uY2VcbiAgICAgIC8vIHRoZSBzY2hlbWFzIGFyZSBsb2FkZWQsIHRvIHByZXZlbnQgdnVlLXJvdXRlciBmcm9tIGNvbXBsYWluaW5nLCBzZWU6XG4gICAgICAvLyBgcmVzb2x2ZVZpZXdzKClgIGluIGBEaXRvUm9vdGAgZm9yIHRoZSBhY3R1YWwgcm91dGUgc2V0dXAuXG4gICAgICByb3V0ZXM6IFt7XG4gICAgICAgIG5hbWU6ICdjYXRjaC1hbGwnLFxuICAgICAgICBwYXRoOiAnLzpfKC4qKScsXG4gICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICB9XSxcbiAgICAgIGhpc3Rvcnk6IGNyZWF0ZVdlYkhpc3RvcnkoZGl0by5iYXNlKSxcbiAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICB9KSlcblxuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2RpdG8tYXBwJylcbiAgICBhcHAubW91bnQoZWwpXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFR5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtyZXNwb25zZS5zdGF0dXNUZXh0fSlgKVxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoYXBpLCB7XG4gIHVybCxcbiAgbWV0aG9kID0gJ2dldCcsXG4gIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSxcbiAgLy8gcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6IGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgPyAnaW5jbHVkZSdcbiAgICAgIDogJ3NhbWUtb3JpZ2luJ1xuICB9KVxuXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihyZXNwb25zZSlcbiAgfVxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gaXNBcGlVcmwoYXBpLCB1cmwpIHtcbiAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbn1cblxuZnVuY3Rpb24gZ2V0QXBpVXJsKGFwaSwgeyB1cmwsIHF1ZXJ5IH0pIHtcbiAgaWYgKCFpc0Fic29sdXRlVXJsKHVybCkpIHtcbiAgICB1cmwgPSBjb21iaW5lVXJscyhhcGkudXJsLCB1cmwpXG4gIH1cbiAgLy8gU3VwcG9ydCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzLCB0byBiZSBhcmUgYWRkZWQgdG8gdGhlIFVSTC5cbiAgY29uc3Qgc2VhcmNoID0gZm9ybWF0UXVlcnkocXVlcnkpXG4gIHJldHVybiBzZWFyY2ggPyBgJHt1cmx9PyR7c2VhcmNofWAgOiB1cmxcbn1cblxuZnVuY3Rpb24gY29tYmluZVVybHMoYmFzZVVybCwgcmVsYXRpdmVVcmwpIHtcbiAgLy8gVXNlIHNhbWUgYXBwcm9hY2ggYXMgYXhpb3MgYGNvbWJpbmVVUkxzKClgIHRvIGpvaW4gYmFzZVVybCAmIHJlbGF0aXZlVXJsOlxuICByZXR1cm4gYCR7YmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtyZWxhdGl2ZVVybC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gXG59XG5cbmZ1bmN0aW9uIGZvcm1hdFF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IGVudHJpZXMgPSBxdWVyeVxuICAgID8gaXNBcnJheShxdWVyeSlcbiAgICAgID8gcXVlcnlcbiAgICAgIDogT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgOiBbXVxuICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAvLyBFeHBhbmQgYXJyYXkgdmFsdWVzIGludG8gbXVsdGlwbGUgZW50cmllcyB1bmRlciB0aGUgc2FtZSBrZXksIHNvXG4gICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICBlbnRyaWVzLnJlZHVjZShcbiAgICAgIChlbnRyaWVzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgYXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsXSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgfSxcbiAgICAgIFtdXG4gICAgKVxuICApLnRvU3RyaW5nKClcbn1cbiJdLCJuYW1lcyI6WyJhcHBTdGF0ZSIsInJlYWN0aXZlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbnRleHRzIiwiZ2V0IiwiY29udGV4dCIsImtleSIsImRlZmF1bHRWYWx1ZSIsIm9iamVjdCIsInRvUmF3IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJwYXJlbnRJdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImxpc3RlbmVycyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiX2EiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNTdHJpbmciLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJhc0FycmF5IiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsInR5cGUiLCJjb252ZXJ0VHlwZSIsImNvbnZlcnRlciIsImhhc1Jlc291cmNlIiwic2NoZW1hIiwiZ2V0UmVzb3VyY2UiLCJkZWZhdWx0cyIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsIkRpdG9NaXhpbiIsInVpZCIsIm5leHRVaWQiLCJrZXlPckRhdGFQYXRoIiwiZGVmIiwiY29udmVydGVkIiwibmFtZSIsImxhYmVsaXplIiwiYnV0dG9uIiwidmVyYiIsImRyYWdnYWJsZSIsImZhbGxiYWNrIiwicXVlcnkiLCJ1cmwiLCJtZXRob2QiLCJpbnRlcm5hbCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY29tcG9uZW50cyIsImJ1dHRvbnMiLCJzZXR0aW5ncyIsImNhY2hlIiwiY2FjaGVQYXJlbnQiLCJsb2FkQ2FjaGUiLCJjYWNoZUtleSIsImxvY2FsZSIsImZvcm1hdCIsImEiLCJib2R5IiwiYWNjZXNzb3IiLCJ3YXRjaCIsImV2ZW50cyIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZ2V0Q29udGV4dCIsInBhcmFtcyIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwibWF0Y2giLCJpc0RvbWFpbiIsImlzRW1haWwiLCJpc0hvc3RuYW1lIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwiZ2V0U3RvcmVBY2Nlc3NvciIsIlR5cGVNaXhpbiIsImNvbXB1dGVWYWx1ZSIsInBhcnNlIiwic2NoZW1hQ29tcG9uZW50IiwibGFiZWwiLCJuYXRpdmVGaWVsZCIsInRleHRGaWVsZCIsImF0dHJpYnV0ZXMiLCJjYW1lbGl6ZSIsImFkZCIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvbklucHV0Iiwib25DaGFuZ2UiLCJlbGVtZW50IiwiX2IiLCJ1aWRNYXAiLCJnZXRVaWQiLCJpdGVtSWQiLCJTY2hlbWFHcmFwaCIsIl9fcHVibGljRmllbGQiLCJzdWJHcmFwaCIsInBhcnQiLCJyZWxhdGVkRGF0YVBhdGgiLCJuYW5vaWQiLCJmbGF0dGVuIiwiZ3JhcGgiLCJlbnRyaWVzIiwiJHNldHRpbmdzIiwic3ViS2V5Iiwic291cmNlU2NoZW1hIiwiY2xpcGJvYXJkIiwicmVsYXRlZCIsInJlZmVyZW5jZSIsInNvdXJjZSIsInJlbGF0aW9uIiwidmFsdWVzIiwicmVtb3ZlSWQiLCJyZWZlcmVuY2VJZCIsInJlZktleSIsInJldlZhbHVlIiwidHlwZUNvbXBvbmVudHMiLCJ1bmtub3duVHlwZVJlcG9ydGVkIiwicmVnaXN0ZXJUeXBlQ29tcG9uZW50IiwiZ2V0VHlwZUNvbXBvbmVudCIsImFsbG93TnVsbCIsImZvckVhY2hTY2hlbWFDb21wb25lbnQiLCJpc1NpbmdsZUNvbXBvbmVudFZpZXciLCJzY2hlbWFzIiwic29tZVNjaGVtYUNvbXBvbmVudCIsImlzU2NoZW1hIiwiaXNGb3JtIiwiaXNWaWV3IiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJtYXBDb25jdXJyZW50bHkiLCJpdGVtIiwicmVzb2x2ZVBhbmVscyIsInBhbmVscyIsInJlc29sdmVTY2hlbWFDb21wb25lbnQiLCJtYXJrUmF3IiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMiLCJwcm9jZXNzVmlldyIsImFwaSIsImNoaWxkcmVuIiwicHJvY2Vzc1JvdXRlU2NoZW1hIiwibGV2ZWwiLCJwcm9jZXNzQ29tcG9uZW50IiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJyb3V0ZXMiLCJnZXRUeXBlT3B0aW9ucyIsInByb21pc2VzIiwicHJvY2Vzc0Zvcm1zIiwiZm9ybSIsImZvcm1zIiwicmVzb2x2ZUZvcm0iLCJoYXNGb3JtU2NoZW1hIiwiaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyIsImdldFZpZXdGb3JtU2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJnZXRWaWV3U2NoZW1hIiwiZ2V0Vmlld0VkaXRQYXRoIiwiZ2V0Rm9ybVNjaGVtYXMiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJoYXNMYWJlbCIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwic2hvdWxkT21pdFBhZGRpbmciLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwiaGFzTGFiZWxzIiwiY2hlY2tDb21wb25lbnRzIiwic2V0RGVmYXVsdHMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsInJvb3REYXRhIiwiY29tcHV0ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwicHJvY2VzcyIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsInByb2Nlc3NlZEl0ZW0iLCJ0YWIiLCJwYW5lbCIsImdldEFsbFBhbmVsU2NoZW1hcyIsImdldE5hbWVkU2NoZW1hcyIsInRvT2JqZWN0IiwiYXJyYXkiLCJ0b1NjaGVtYSIsImdldEJ1dHRvblNjaGVtYXMiLCJnZXRUeXBlIiwic2NoZW1hT3JUeXBlIiwiZ2V0U291cmNlVHlwZSIsImdldFBhbmVsU2NoZW1hIiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtSWQiLCJnZXRJdGVtVWlkIiwicmVzb2x2ZU1lcmdlZE9wdGlvbnMiLCJtaXhpbnMiLCJtZXJnZU9wdGlvbnMiLCJ0byIsImZyb20iLCJtaXhpbiIsImRpdG9PcHRpb25LZXlzIiwiRGl0b0NvbXBvbmVudCIsImRlZmluaXRpb24iLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJSb3V0ZU1peGluIiwicm91dGVDb21wb25lbnQiLCJtYXRjaGVkIiwiaSIsInJlY29yZCIsImJyZWFkY3J1bWIiLCJyb3V0ZUNvbXBvbmVudHMiLCJvayIsInRlbXBsYXRlUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwiaXNMb2FkaW5nIiwiY29weURhdGUiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiX3NmY19tYWluIiwid2Vla2RheU5hbWVzIiwibW9udGhOYW1lcyIsImdldExvY2FsZU5hbWVzIiwibW9kZSIsIm92ZXJyaWRlcyIsInN0ZXAiLCJjdXJyZW50VmFsdWUiLCJzdGF0ZSIsImhvciIsInZlciIsImVudGVyIiwiY3VycmVudE1vZGUiLCJzdGFydFllYXIiLCJmaXJzdERheVdlZWsiLCJudW1EYXlzIiwicHJldk1vbnRoIiwicHJldk1vbnRoTnVtRGF5cyIsInRvZGF5IiwiaXNEYXkiLCJuZXh0TW9udGhOZWVkIiwibmV4dE1vbnRoIiwibG9jYWxlTmFtZXMiLCJuYW1lcyIsImFkZEV2ZW50cyIsImdldEtleSIsImdldEtleU5hdmlnYXRpb24iLCJjbGFzc2VzIiwic2hvdyIsInRyaWdnZXIiLCJwb3B1cCIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwic2l6ZSIsImdldExlbmd0aCIsIlRyaWdnZXIiLCJDYWxlbmRhciIsIklucHV0RmllbGQiLCJkZWZhdWx0Rm9ybWF0cyIsInNjcm9sbFRvIiwiZHVyYXRpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwZXJUaWNrIiwic2V0U2VsZWN0aW9uIiwiZmllbGQiLCJzdGFydCIsImVuZCIsInJhbmdlIiwiZm9yY2UiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0Iiwic2VsZWN0ZWQiLCJsZW5ndGgiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsInBhZ2UiLCJwYWdlU2l6ZSIsImN1cnJlbnRQYWdlU2l6ZSIsInNob3dQcmV2Iiwic2hvd05leHQiLCJ0b3RhbCIsImN1cnJlbnRQYWdlIiwic2hvd0xlbmd0aCIsIm51bVBhZ2VzIiwicGFnZVJhbmdlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwidW5jaGVja2VkIiwibW9kZWxWYWx1ZSIsIlRyYW5zaXRpb25IZWlnaHQiLCJlbmFibGVkIiwic2xvdHMiLCJjcmVhdGVFbGVtZW50IiwiVHJhbnNpdGlvbiIsInByb3BzIiwic2V0U3R5bGUiLCJzdHlsZSIsImZvcmNlUmVwYWludCIsIndpZHRoIiwiaGVpZ2h0IiwiZGlhbG9nRGF0YSIsIkRvbU1peGluIiwicmVtb3ZlIiwiaGFuZGxlciIsIkRpdG9EaWFsb2ciLCJlcnIiLCJ0aXRsZSIsInRleHQiLCJsb2ciLCJzdHJpcFRhZ3MiLCJub3RpZmljYXRpb25zIiwiZHVyYXRpb25GYWN0b3IiLCJyZWplY3QiLCJkaWFsb2dJZCIsImFkZGl0aW9uYWxDb21wb25lbnRzIiwicmVkaXJlY3RBZnRlckxvZ2luIiwibG9naW5EYXRhIiwidXNlciIsIkRpdG9WaWV3IiwiZnVsbFBhdGgiLCJhZGRSb3V0ZXMiLCJyb3V0ZXIiLCJyZW1vdmVycyIsInJvdXRlIiwicmVtb3ZlUm91dGUiLCJEaXRvU3Bpbm5lciIsImNvbG9yIiwiUHVsbGRvd25NaXhpbiIsInN0YXJ0VGltZSIsIm9wZW4iLCJjb250ZW50IiwiYXNPYmplY3QiLCJJdGVtTWl4aW4iLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsInByZWZpeCIsInN1ZmZpeCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsInBhbmUiLCJjdXJyZW50VGFiIiwiZmlyc3QiLCJkZWZhdWx0VGFiIiwiZGF0YVBhdGhPck5hbWUiLCJleHBhbmQiLCJjb21wb25lbnRzQnlEYXRhUGF0aCIsImRhdGFQYXRocyIsImNoZWNrIiwidW5tYXRjaGVkIiwiZXJycyIsImZ1bGxEYXRhUGF0aCIsImRhdGFQYXRoUGFydHMiLCJmb3VuZCIsInByb3BlcnR5Iiwic3ViQ29tcG9uZW50cyIsInJlZ2lzdHJ5IiwiZW50cmllc0J5RGF0YVBhdGgiLCJfaG9pc3RlZF8xIiwiX29wZW5CbG9jayIsIl9jcmVhdGVFbGVtZW50QmxvY2siLCJfRnJhZ21lbnQiLCJfcmVuZGVyTGlzdCIsIl9jdHgiLCJfaG9pc3RlZF8yIiwiX2NyZWF0ZUJsb2NrIiwiX2NvbXBvbmVudF9kaXRvX2NvbnRhaW5lciIsIm5lc3RlZERhdGFQYXRoIiwic3RvcmUiLCJfaG9pc3RlZF8zIiwicGFyc2VGcmFjdGlvbiIsImRpdmlkZW5kIiwiZGl2aXNvciIsImNvbnRhaW5lckNsYXNzIiwiYmFzaXMiLCJncm93Iiwic2hyaW5rIiwiYmFzaXNJc0F1dG8iLCJoYXNWTm9kZUNvbnRlbnQiLCJ2bm9kZSIsIkNvbW1lbnQiLCJoYXNTbG90Q29udGVudCIsInNsb3QiLCJ1c2VTbG90cyIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCJyZXBvcnQiLCJqc29uIiwiX2QiLCJfYyIsImRlaW5kZW50IiwiJHNjaGVtYSIsIl9lIiwiTG9hZGluZ01peGluIiwidXBkYXRlUm9vdCIsInVwZGF0ZVZpZXciLCJSZXNvdXJjZU1peGluIiwiYW1vdW50IiwidmVyYnMiLCJjbGVhciIsImxvYWRpbmdPcHRpb25zIiwicmVxdWVzdCIsInNldERhdGEiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwibm90aWZ5U3VjY2VzcyIsIm5vdGlmeUVycm9yIiwicmVzb2x2ZVBhdGgiLCJpc0NyZWF0aW5nIiwicHJvdmlkZXNEYXRhIiwibWVyZ2UiLCJkYXRhUGFydHMiLCJwYXRoUGFydHMiLCJyb3V0ZVBhcnRzIiwibGFzdERhdGFQYXJ0IiwibCIsImRhdGFQYXJ0IiwibWFpblNjaGVtYUNvbXBvbmVudCIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dG9uUmVzb3VyY2UiLCJzdWNjZXNzIiwiX3Jlc291cmNlIiwiX21ldGhvZCIsIkRpdG9Gb3JtIiwic2NvcGUiLCJQYWdpbmF0aW9uIiwiT3JkZXJlZE1peGluIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsImxpc3QiLCJwYWdpbmF0aW9uUmFuZ2UiLCJvZmZzZXQiLCJfbm9ybWFsaXplU3R5bGUiLCJfY2FjaGUiLCJfd2l0aE1vZGlmaWVycyIsIiRldmVudCIsIl9ub3JtYWxpemVDbGFzcyIsIl9jcmVhdGVFbGVtZW50Vk5vZGUiLCJfaG9pc3RlZF80IiwiX3RvRGlzcGxheVN0cmluZyIsIl9ob2lzdGVkXzUiLCJfaG9pc3RlZF83IiwiX21lcmdlUHJvcHMiLCJfd2l0aERpcmVjdGl2ZXMiLCJfaG9pc3RlZF84IiwiX2NvbXBvbmVudF9kaXRvX2xhYmVsIiwiX2NyZWF0ZVZOb2RlIiwiX2NvbXBvbmVudF9kaXRvX3RhYmxlX2NlbGwiLCJfY29tcG9uZW50X3Z1ZV9zb3J0YWJsZSIsIl93aXRoQ3R4IiwiX2NvbXBvbmVudF9kaXRvX3RyZWVfaXRlbSIsIlZ1ZVNvcnRhYmxlIiwiY2hpbGRyZW5TY2hlbWEiLCJjaGlsZHJlbkxpc3QiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJvcmRlciIsImNvbHVtbiIsInJlbmRlciIsImVzY2FwZUh0bWwiLCJEaXRvVk5vZGUiLCJUeXBlQ29tcG9uZW50JDEiLCJUeXBlQ29tcG9uZW50Iiwib25DbGljayIsIkRhdGFNaXhpbiIsInJlc29sdmVDb3VudGVyIiwiYXN5bmNFbnRyeSIsInJlc29sdmVkRGF0YSIsImxvYWQiLCJPcHRpb25zTWl4aW4iLCJjb252ZXJ0VmFsdWUiLCJjb252ZXJ0Iiwic2VhcmNoIiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwib3B0aW9uIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJmb2N1c2VkIiwiRGF0ZVRpbWVQaWNrZXIiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiY29sbGFwc2libGUiLCJsaXN0RGF0YSIsIm9uQ29tcGxldGUiLCJvcGVuZWQiLCJjYWxsT25Db21wbGV0ZSIsImlubGluZWQiLCJwYXJhbSIsIm1ldGEiLCJmb3JtTWV0YSIsImNoaWxkUm91dGVzIiwiZ2V0UGF0aFdpdGhQYXJhbSIsInNvdXJjZVBhdGgiLCJmb3JtUm91dGUiLCJmbGF0Um91dGVzIiwic3ViUm91dGVzIiwiY2hpbGRSb3V0ZSIsImZpbHRlckNvbXBvbmVudHMiLCJkYXRlRm9ybWF0IiwiZ2V0RmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInByb3h5IiwicGFyc2VGaWx0ZXJzRGF0YSIsImdldEZpbHRlcnNDb21wb25lbnRzIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsIl9jb21wb25lbnRfZGl0b190YWJsZV9oZWFkIiwiX2NvbXBvbmVudF9kaXRvX3NjaGVtYV9pbmxpbmVkIiwiX3Jlc29sdmVEeW5hbWljQ29tcG9uZW50IiwiX2NvbXBvbmVudF9kaXRvX2VkaXRfYnV0dG9ucyIsIl9ob2lzdGVkXzkiLCJnZXRMaXN0Q29tcG9uZW50Iiwib2JqIiwiZmlsdGVyc0RhdGFQYXRoIiwiRWRpdG9yQ29udGVudCIsIkljb24iLCJlZGl0b3IiLCJtYXJrQnV0dG9ucyIsImJhc2ljTm9kZUJ1dHRvbnMiLCJvdGhlck5vZGVCdXR0b25zIiwidG9vbEJ1dHRvbnMiLCJlbmFibGVSdWxlcyIsInNldFZhbHVlRGVib3VuY2VkIiwib25VcGRhdGUiLCJFZGl0b3IiLCJnZXRQb2ludCIsIngiLCJ5IiwicHJldlkiLCJtb3VzZW1vdmUiLCJkaWFsb2dDb21wb25lbnQiLCJnZXRNYXJrQXR0cmlidXRlcyIsImhyZWYiLCJtYXJrcyIsIm5vZGVzIiwidG9vbHMiLCJEb2N1bWVudCIsIlRleHQiLCJQYXJhZ3JhcGgiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiU21hbGwiLCJDb2RlIiwiTGlua1dpdGhUaXRsZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIYXJkQnJlYWsiLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkhpc3RvcnkiLCJleHRlbnNpb24iLCJzZXR0aW5nc05hbWUiLCJkZXNjcmlwdGlvbnMiLCJhZGRCdXR0b24iLCJpY29uIiwiaWdub3JlQWN0aXZlIiwiZGVzY3JpcHRpb24iLCJzZXR0aW5nTmFtZSIsInVuZGVyc2NvcmUiLCJhdHRyaWJ1dGUiLCJNYXJrIiwiY29tbWFuZHMiLCJMaW5rIiwibm9kZSIsIl9jb21wb25lbnRfdnVlX211bHRpc2VsZWN0IiwiVnVlTXVsdGlzZWxlY3QiLCJwbGFjZWhvbGRlciIsInNlYXJjaGFibGUiLCJ0YWdnYWJsZSIsInRhZyIsIk51bWJlck1peGluIiwiU3dpdGNoQnV0dG9uIiwibWFza2VkUGFzc3dvcmQiLCJoYXNFZGl0YWJsZUZvcm1zIiwiZm9ybWF0RmlsZVNpemUiLCJmaWxlc2l6ZSIsIlZ1ZVVwbG9hZCIsImFzRmlsZXMiLCJhY2NlcHQiLCJtYXhTaXplIiwicGFyc2VGaWxlU2l6ZSIsImZpbGUiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImZpbGVzIiwidXBsb2FkIiwibG9nZ2VkRGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlIiwiRGl0b0FkbWluIiwiZGl0byIsInZpZXdzIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ2YWwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJhcHAiLCJjcmVhdGVBcHAiLCJEaXRvUm9vdCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJjcmVhdGVSb3V0ZXIiLCJjcmVhdGVXZWJIaXN0b3J5IiwiUmVxdWVzdEVycm9yIiwiaGVhZGVycyIsImlzQWJzb2x1dGVVcmwiLCJjb21iaW5lVXJscyIsImZvcm1hdFF1ZXJ5IiwiYmFzZVVybCIsInJlbGF0aXZl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