@prisma/studio-core 0.0.0-dev.202601011155 → 0.0.0-dev.202601011224

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.
@@ -6,5 +6,5 @@ function require(mod) {
6
6
  if (mod === 'react-dom') return ___react_dom___;
7
7
  throw new Error(`Unknown module ${mod}`);
8
8
  }
9
- import{a as j}from"../../chunk-R55ES2HZ.js";import{a as u}from"../../chunk-I4OGOLAT.js";import{A as Q,D as L,p as T,q as d,r as O,s as B,x as D,z as f}from"../../chunk-R7UWW2TY.js";import{e as s}from"../../chunk-GDQBQ7MK.js";s();s();s();var N={BLOB:{group:"raw"},INTEGER:{group:"numeric"},NULL:{group:"raw"},NUMERIC:{group:"numeric"},REAL:{group:"numeric"},TEXT:{group:"string"}};function S(r){if(!r)return"BLOB";let t=r.toUpperCase();return t.includes("INT")?"INTEGER":t.includes("TEXT")||t.includes("CHAR")||t.includes("CLOB")?"TEXT":t.includes("BLOB")?"BLOB":t.includes("REAL")||t.includes("FLOA")||t.includes("DOUB")?"REAL":"NUMERIC"}s();s();function y(r){return D({...r,Adapter:B,QueryCompiler:O})}function U(r,t){let{filter:o={after:"and",filters:[],kind:"FilterGroup"},pageIndex:l,pageSize:n,sortOrder:e,table:{columns:a,name:i}}=r,c=y(t),g=L(o.filters,a),p="__ps_agg__",_="__ps_count__",k=c.selectFrom(i).where(g).select(m=>m.cast(m.fn.coalesce(m.fn.countAll(),d.lit(0)),"text").as(_));return f(c.with(p,()=>k).selectFrom(i).innerJoin(p,m=>m.onTrue()).where(g).select(`${p}.${_}`).select(Object.keys(a)).$call(m=>e.reduce((R,b)=>R.orderBy(b.column,b.direction),m)).limit(n).offset(d.lit(BigInt(l)*BigInt(n))))}function le(){return[{created_at:new Date("2025-01-26T21:56:12.345Z"),deleted_at:null,id:1,name:"John Doe",__ps_count__:"2",role:"admin",name_role:"Jonn Doe - admin"},{created_at:new Date("2025-01-26T20:56:12.345Z"),deleted_at:null,id:2,name:"Jane Doe",__ps_count__:"2",role:"poweruser",name_role:"Jane Doe - poweruser"}]}function C(r,t){let{rows:o,table:{columns:l,name:n}}=r,e=y(t);return f(e.deleteFrom(n).$call(Q(o,l)).returning(Object.keys(l)).returning(x().as("__ps_deleted_at__")))}function F(r,t){let{table:{columns:o,name:l},rows:n}=r,e=y(t);return f(e.insertInto(l).values(n.map(a=>Object.keys(a).length===0?{[Object.keys(o)[0]]:null}:a)).returning(Object.keys(o)).returning(x().as("__ps_inserted_at__")))}function M(r,t){let{changes:o,row:l,table:{columns:n,name:e}}=r,a=y(t);return f(a.updateTable(e).set(o).$call(Q([l],n)).returning(Object.keys(n)).returning(x().as("__ps_updated_at__")))}function x(){let r=T();return r.cast(r.cast(d`(julianday('now') - 2440587.5) * 86400000.0`,"integer"),"text")}s();s();function P(r){return d`(select coalesce(json_group_array(json_object(${d.join(J(r.toOperationNode(),"agg"))})), '[]') from ${r} as agg)`}function J(r,t){try{return j(r,t)}catch{throw new Error("SQLite jsonArrayFrom and jsonObjectFrom functions can only handle explicit selections due to limitations of the json_object function. selectAll() is not allowed in the subquery.")}}function G(r){return f(y(r).selectFrom(T().fn("pragma_table_list",[]).as("tl")).leftJoin("sqlite_schema as ss",t=>t.onRef("ss.type","=","tl.type").onRef("ss.name","=","tl.name")).where("tl.type","in",["table","view"]).where("tl.schema","=","main").where("tl.name","not like","sqlite_%").select(["tl.name","ss.sql"]).$narrowType().select(t=>[P(t.selectFrom(t.fn("pragma_table_xinfo",["tl.name"]).as("txi")).leftJoin(t.fn("pragma_foreign_key_list",["tl.name"]).as("fkl"),"fkl.from","txi.name").where("txi.hidden","!=",1).select(["txi.dflt_value as default","txi.name","txi.pk","txi.type as datatype","fkl.table as fk_table","fkl.to as fk_column"]).select(o=>[o("txi.hidden","in",[2,3]).as("computed"),o("txi.notnull","=",0).as("nullable")])).as("columns")]),{transformations:{columns:"json-parse"}})}function v(){return[{name:"animals",sql:"CREATE TABLE animals (id INTEGER PRIMARY KEY, name TEXT);",columns:[{name:"id",datatype:"INTEGER",default:null,pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"users",sql:"CREATE TABLE users (id UUID PRIMARY KEY, created_at TIMESTAMP, deleted_at TIMESTAMP, role varchar, name varchar, name_role text);",columns:[{name:"id",datatype:"UUID",default:null,pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"created_at",datatype:"TIMESTAMP",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"deleted_at",datatype:"TIMESTAMP",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"role",datatype:"varchar",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name",datatype:"varchar",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name_role",datatype:"text",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"composite_pk",sql:"CREATE TABLE composite_pk (id UUID, name TEXT, created_at timestamp, PRIMARY KEY (id, name));",columns:[{name:"id",datatype:"UUID",default:null,pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",default:null,pk:2,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"created_at",datatype:"timestamp",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]}]}var E="main",K=["=","!=",">",">=","<","<=","is","is not","like","not like"];function Te(r){let{executor:t,...o}=r;return{defaultSchema:E,async delete(l,n){try{let e=C(l,o),[a]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{...l,query:e}]}catch(e){return u({error:e})}},async insert(l,n){try{let e=F(l,o),[a,i]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{rows:i,query:e}]}catch(e){return u({error:e})}},async introspect(l){try{let n=G(r),[e,a]=await t.execute(n,l);return e?u({error:e,query:n}):[null,X({query:n,tables:a})]}catch(n){return u({error:n})}},async query(l,n){try{let e=U(l,o),[a,i]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{filteredRowCount:i[0]?.__ps_count__||"0",rows:i,query:e}]}catch(e){return u({error:e})}},async update(l,n){try{let e=M(l,o),[a,i]=await t.execute(e,n);if(a)return u({error:a,query:e});let[c]=i;return c?[null,{row:c,query:e}]:u({error:new Error("Update failed"),query:e})}catch(e){return u({error:e})}}}}var Y=/WITHOUT\s+ROWID/i;function X(r){let{tables:t,query:o}=r;return{filterOperators:K,query:o,schemas:t.reduce((l,n)=>{let{columns:e,name:a,sql:i}=n,c=e.reduce((g,p)=>{let{datatype:_,default:k,fk_column:m,name:R,pk:b}=p,h=S(_),I=_.toUpperCase()==="INTEGER"&&b===1&&!e.some(function($){return $.pk>1})&&!Y.test(i),w=!!p.computed,q=!!p.nullable&&!I;return g[R]={datatype:{...N[h],affinity:h,isArray:!1,isNative:!0,name:_,options:[],schema:E},defaultValue:k,fkColumn:m,fkSchema:m?E:null,fkTable:p.fk_table,isAutoincrement:I,isComputed:w,isRequired:!q&&!I&&!w&&k==null,name:R,nullable:q,pkPosition:b>0?b:null,schema:E,table:a},g},{});return l.main.tables[a]={columns:c,name:a,schema:"main"},l},{main:{tables:{},name:"main"}}),timezone:"UTC"}}function Ee(){let r={parameters:[],sql:"<mocked>"},t=v();return X({query:r,tables:t})}export{Te as createSQLiteAdapter,C as getDeleteQuery,F as getInsertQuery,U as getSelectQuery,G as getTablesQuery,M as getUpdateQuery,Ee as mockIntrospect,le as mockSelectQuery,v as mockTablesQuery};
10
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbmRleC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2FkYXB0ZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2RtbC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2J1aWxkZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9zcWxpdGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyUmVxdWlyZW1lbnRzLFxuICB0eXBlIEFkYXB0ZXJVcGRhdGVSZXN1bHQsXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSwgU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBIH0gZnJvbSBcIi4vZGF0YXR5cGVcIjtcbmltcG9ydCB7IGdldERlbGV0ZVF1ZXJ5LCBnZXRJbnNlcnRRdWVyeSwgZ2V0U2VsZWN0UXVlcnksIGdldFVwZGF0ZVF1ZXJ5IH0gZnJvbSBcIi4vZG1sXCI7XG5pbXBvcnQgeyBnZXRUYWJsZXNRdWVyeSwgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzID0gQWRhcHRlclJlcXVpcmVtZW50cztcblxuY29uc3Qgc2NoZW1hID0gXCJtYWluXCI7XG5cbmNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IFtcbiAgXCI9XCIsXG4gIFwiIT1cIixcbiAgXCI+XCIsXG4gIFwiPj1cIixcbiAgXCI8XCIsXG4gIFwiPD1cIixcbiAgXCJpc1wiLFxuICBcImlzIG5vdFwiLFxuICBcImxpa2VcIixcbiAgXCJub3QgbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNRTGl0ZUFkYXB0ZXIocmVxdWlyZW1lbnRzOiBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBzY2hlbWEsXG5cbiAgICBhc3luYyBkZWxldGUoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckRlbGV0ZVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0RGVsZXRlUXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIC8vIFRPRE86IHVzZSByZXN1bHRzIHRvby5cbiAgICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgLi4uZGV0YWlscywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnNlcnQoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckluc2VydFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbdGFibGVzRXJyb3IsIHRhYmxlc10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeTogdGFibGVzUXVlcnksIHRhYmxlcyB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBxdWVyeShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyUXVlcnlSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFNlbGVjdFF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5fX3BzX2NvdW50X18gfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRVcGRhdGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGUgZmFpbGVkXCIpLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBXSVRIT1VUX1JPV0lEX1JFR0VYID0gL1dJVEhPVVRcXHMrUk9XSUQvaTtcblxuZnVuY3Rpb24gY3JlYXRlSW50cm9zcGVjdGlvbihhcmdzOiB7XG4gIHRhYmxlczogUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5PjtcbiAgcXVlcnk6IFF1ZXJ5O1xufSk6IEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IHtcbiAgY29uc3QgeyB0YWJsZXMsIHF1ZXJ5OiB0YWJsZXNRdWVyeSB9ID0gYXJncztcblxuICByZXR1cm4ge1xuICAgIGZpbHRlck9wZXJhdG9ycyxcbiAgICBxdWVyeTogdGFibGVzUXVlcnksXG4gICAgc2NoZW1hczogdGFibGVzLnJlZHVjZShcbiAgICAgIChzY2hlbWFzLCB0YWJsZSkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc3FsIH0gPSB0YWJsZTtcblxuICAgICAgICBjb25zdCBjb2x1bW5zUmVjb3JkID0gY29sdW1ucy5yZWR1Y2UoXG4gICAgICAgICAgKGNvbHVtbnNSZWNvcmQsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhdHlwZSwgZGVmYXVsdDogZGVmYXVsdFZhbHVlLCBma19jb2x1bW4sIG5hbWU6IGNvbHVtbk5hbWUsIHBrIH0gPSBjb2x1bW47XG5cbiAgICAgICAgICAgIGNvbnN0IGFmZmluaXR5ID0gZGV0ZXJtaW5lQ29sdW1uQWZmaW5pdHkoZGF0YXR5cGUpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGBJTlRFR0VSIFBSSU1BUlkgS0VZYCBjb2x1bW5zIGFjdCBhcyBgcm93aWRgIGFsaWFzLiBgcm93aWRgIGNvbHVtbnNcbiAgICAgICAgICAgICAqIGFyZSBhdXRvLWdlbmVyYXRlZCB1bmlxdWUgbnVtYmVycyB0aGF0IGV4aXN0IGluIGV2ZXJ5IFNRTGl0ZSB0YWJsZVxuICAgICAgICAgICAgICogdW5sZXNzIGEgdGFibGUgaXMgY3JlYXRlZCB1c2luZyBgV0lUSE9VVCBST1dJRGAgb3B0aW9uLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBpc1Jvd0lkID1cbiAgICAgICAgICAgICAgZGF0YXR5cGUudG9VcHBlckNhc2UoKSA9PT0gXCJJTlRFR0VSXCIgJiZcbiAgICAgICAgICAgICAgcGsgPT09IDEgJiZcbiAgICAgICAgICAgICAgIWNvbHVtbnMuc29tZShmdW5jdGlvbiBpc0Fsc29JblByaW1hcnlLZXkoY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5wayA+IDE7XG4gICAgICAgICAgICAgIH0pICYmXG4gICAgICAgICAgICAgICFXSVRIT1VUX1JPV0lEX1JFR0VYLnRlc3Qoc3FsKTtcblxuICAgICAgICAgICAgY29uc3QgaXNDb21wdXRlZCA9IEJvb2xlYW4oY29sdW1uLmNvbXB1dGVkKTtcbiAgICAgICAgICAgIC8vIGByb3dpZGAgY29sdW1ucyBhcmUgaW1wbGljaXRseSBub3QgbnVsbGFibGUuXG4gICAgICAgICAgICBjb25zdCBudWxsYWJsZSA9IEJvb2xlYW4oY29sdW1uLm51bGxhYmxlKSAmJiAhaXNSb3dJZDtcblxuICAgICAgICAgICAgY29sdW1uc1JlY29yZFtjb2x1bW5OYW1lXSA9IHtcbiAgICAgICAgICAgICAgZGF0YXR5cGU6IHtcbiAgICAgICAgICAgICAgICAuLi5TUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEFbYWZmaW5pdHldLFxuICAgICAgICAgICAgICAgIGFmZmluaXR5LFxuICAgICAgICAgICAgICAgIGlzQXJyYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzTmF0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGF0eXBlLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IHVzZSBgdGFibGUuc3FsYCB0byBkZXRlcm1pbmUgZW51bSBvcHRpb25zIGZyb20gYGNoZWNrYCBjb25zdHJhaW50cy5cbiAgICAgICAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgZmtDb2x1bW46IGZrX2NvbHVtbixcbiAgICAgICAgICAgICAgZmtTY2hlbWE6IGZrX2NvbHVtbiA/IHNjaGVtYSA6IG51bGwsXG4gICAgICAgICAgICAgIGZrVGFibGU6IGNvbHVtbi5ma190YWJsZSxcbiAgICAgICAgICAgICAgLy8gc2luY2UgYHJvd2lkYCBpcyBhdXRvIGdlbmVyYXRlZCB1bmlxdWUgbnVtYmVyLCBhbmQgYEFVVE8gSU5DUkVNRU5UYFxuICAgICAgICAgICAgICAvLyBjYW4gb25seSBiZSBhcHBsaWVkIHRvIHN1Y2ggY29sdW1ucywgd2UgY29uc2lkZXIgdGhlbSBhdXRvaW5jcmVtZW50XG4gICAgICAgICAgICAgIC8vIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSBtb2RpZmllciBpblxuICAgICAgICAgICAgICAvLyB0aGUgYENSRUFURSBUQUJMRWAgc3RhdGVtZW50LlxuICAgICAgICAgICAgICBpc0F1dG9pbmNyZW1lbnQ6IGlzUm93SWQsXG4gICAgICAgICAgICAgIGlzQ29tcHV0ZWQsXG4gICAgICAgICAgICAgIGlzUmVxdWlyZWQ6ICFudWxsYWJsZSAmJiAhaXNSb3dJZCAmJiAhaXNDb21wdXRlZCAmJiBkZWZhdWx0VmFsdWUgPT0gbnVsbCxcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgbnVsbGFibGUsXG4gICAgICAgICAgICAgIHBrUG9zaXRpb246IHBrID4gMCA/IHBrIDogbnVsbCxcbiAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbnNSZWNvcmQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICAgICk7XG5cbiAgICAgICAgc2NoZW1hcy5tYWluIS50YWJsZXNbdGFibGVOYW1lXSA9IHtcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zUmVjb3JkLFxuICAgICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcbiAgICAgICAgICBzY2hlbWE6IFwibWFpblwiLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzY2hlbWFzO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWFpbjogeyB0YWJsZXM6IHt9LCBuYW1lOiBcIm1haW5cIiB9LFxuICAgICAgfSBzYXRpc2ZpZXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHRbXCJzY2hlbWFzXCJdIGFzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0W1wic2NoZW1hc1wiXSxcbiAgICApLFxuICAgIHRpbWV6b25lOiBcIlVUQ1wiLFxuICB9O1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja0ludHJvc3BlY3QoKSB7XG4gIGNvbnN0IHF1ZXJ5ID0geyBwYXJhbWV0ZXJzOiBbXSwgc3FsOiBcIjxtb2NrZWQ+XCIgfSBhcyBRdWVyeTtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG5cbiAgcmV0dXJuIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeSwgdGFibGVzIH0pIGFzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCwgbm8gbmVlZCBnbyBvdmVyYm9hcmQuXG4gICAgc2NoZW1hczoge1xuICAgICAgbWFpbjoge1xuICAgICAgICBuYW1lOiBcIm1haW5cIjtcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHN0cmluZztcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IERhdGFUeXBlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IHR5cGUgU1FMaXRlQWZmaW5pdHkgPSBcIkJMT0JcIiB8IFwiSU5URUdFUlwiIHwgXCJOVUxMXCIgfCBcIk5VTUVSSUNcIiB8IFwiUkVBTFwiIHwgXCJURVhUXCI7XG5cbmV4cG9ydCBjb25zdCBTUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEE6IFJlY29yZDxTUUxpdGVBZmZpbml0eSwgUGljazxEYXRhVHlwZSwgXCJmb3JtYXRcIiB8IFwiZ3JvdXBcIj4+ID0ge1xuICBCTE9COiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIElOVEVHRVI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIE5VTEw6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgTlVNRVJJQzoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgUkVBTDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgVEVYVDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxufTtcblxuLyoqXG4gKiBodHRwczovL3NxbGl0ZS5vcmcvZGF0YXR5cGUzLmh0bWwjZGV0ZXJtaW5hdGlvbl9vZl9jb2x1bW5fYWZmaW5pdHlcbiAqXG4gKiBETyBOT1QgQ0hBTkdFIFRIRSBPUkRFUiBPRiBUSEUgQ0hFQ0tTIElOIFRISVMgRlVOQ1RJT04hXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eShkZWNsYXJlZERhdGFUeXBlOiBzdHJpbmcgfCBudWxsKTogU1FMaXRlQWZmaW5pdHkge1xuICBpZiAoIWRlY2xhcmVkRGF0YVR5cGUpIHtcbiAgICByZXR1cm4gXCJCTE9CXCI7XG4gIH1cblxuICBjb25zdCB1cHBlclR5cGUgPSBkZWNsYXJlZERhdGFUeXBlLnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIklOVFwiKSkge1xuICAgIHJldHVybiBcIklOVEVHRVJcIjtcbiAgfVxuXG4gIGlmICh1cHBlclR5cGUuaW5jbHVkZXMoXCJURVhUXCIpIHx8IHVwcGVyVHlwZS5pbmNsdWRlcyhcIkNIQVJcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiQ0xPQlwiKSkge1xuICAgIHJldHVybiBcIlRFWFRcIjtcbiAgfVxuXG4gIGlmICh1cHBlclR5cGUuaW5jbHVkZXMoXCJCTE9CXCIpKSB7XG4gICAgcmV0dXJuIFwiQkxPQlwiO1xuICB9XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIlJFQUxcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiRkxPQVwiKSB8fCB1cHBlclR5cGUuaW5jbHVkZXMoXCJET1VCXCIpKSB7XG4gICAgcmV0dXJuIFwiUkVBTFwiO1xuICB9XG5cbiAgcmV0dXJuIFwiTlVNRVJJQ1wiO1xufVxuIiwgImltcG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyLCB0eXBlIEluZmVyUmVzdWx0LCBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBTaW1wbGVSZWZlcmVuY2VFeHByZXNzaW9uIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgdHlwZSB7IEFkYXB0ZXJEZWxldGVEZXRhaWxzLCBBZGFwdGVySW5zZXJ0RGV0YWlscywgQWRhcHRlclF1ZXJ5RGV0YWlscywgQWRhcHRlclVwZGF0ZURldGFpbHMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMsIHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBCaWdJbnRTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZS11dGlsc1wiO1xuaW1wb3J0IHsgZ2V0U1FMaXRlQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcbmltcG9ydCB7IG1vY2tUYWJsZXNRdWVyeSB9IGZyb20gXCIuL2ludHJvc3BlY3Rpb25cIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBzZWxlY3RzIGFsbCBjb2x1bW5zIGZyb20gYSB0YWJsZSB3aXRoIGFuIHVuYm91bmQgcm93IGNvdW50IGFzIGBfX3BzX2NvdW50X19gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJRdWVyeURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGZpbHRlciA9IHsgYWZ0ZXI6IFwiYW5kXCIsIGZpbHRlcnM6IFtdLCBraW5kOiBcIkZpbHRlckdyb3VwXCIgfSxcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydE9yZGVyLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0U1FMaXRlQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgY29uc3QgZmlsdGVyRXhwcmVzc2lvbiA9IGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oZmlsdGVyLmZpbHRlcnMsIGNvbHVtbnMpO1xuXG4gIGNvbnN0IEFHR19OQU1FID0gXCJfX3BzX2FnZ19fXCI7XG4gIGNvbnN0IENPVU5UX1JFRiA9IFwiX19wc19jb3VudF9fXCI7XG5cbiAgY29uc3QgY291bnRRdWVyeSA9IGJ1aWxkZXJcbiAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgLnNlbGVjdCgoZWIpID0+IGViLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5mbi5jb2FsZXNjZShlYi5mbi5jb3VudEFsbCgpLCBzcWwubGl0KDApKSwgXCJ0ZXh0XCIpLmFzKENPVU5UX1JFRikpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoKEFHR19OQU1FLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLnNlbGVjdEZyb20odGFibGVOYW1lKVxuICAgICAgLmlubmVySm9pbihBR0dfTkFNRSwgKGpiKSA9PiBqYi5vblRydWUoKSlcbiAgICAgIC8vIFRPRE86IGN1cnNvciBwYWdpbmF0aW9uP1xuICAgICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgICAuc2VsZWN0KFxuICAgICAgICBgJHtBR0dfTkFNRX0uJHtDT1VOVF9SRUZ9YCBzYXRpc2ZpZXMgU2ltcGxlUmVmZXJlbmNlRXhwcmVzc2lvbjxcbiAgICAgICAgICB7IFtBR0dfTkFNRV06IEluZmVyUmVzdWx0PHR5cGVvZiBjb3VudFF1ZXJ5PltudW1iZXJdIH0sXG4gICAgICAgICAgdHlwZW9mIEFHR19OQU1FXG4gICAgICAgID4sXG4gICAgICApXG4gICAgICAuc2VsZWN0KE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLiRjYWxsKChxYikgPT4gc29ydE9yZGVyLnJlZHVjZSgocWIsIGl0ZW0pID0+IHFiLm9yZGVyQnkoaXRlbS5jb2x1bW4sIGl0ZW0uZGlyZWN0aW9uKSwgcWIpKVxuICAgICAgLmxpbWl0KHBhZ2VTaXplKVxuICAgICAgLy8gd2UncmUgaW5qZWN0aW5nIHRoZSBvZmZzZXQgdmFsdWUgaGVyZSB0byBhdm9pZCBzZXJpYWxpemF0aW9uIGNvbXBsZXhpdHkgKGBiaWdpbnRgIGlzIGEgbm8tZ28gZm9yIGBKU09OLnN0cmluZ2lmeWApLlxuICAgICAgLm9mZnNldChzcWwubGl0KEJpZ0ludChwYWdlSW5kZXgpICogQmlnSW50KHBhZ2VTaXplKSkpLFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NlbGVjdFF1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKFwiMjAyNS0wMS0yNlQyMTo1NjoxMi4zNDVaXCIpLFxuICAgICAgZGVsZXRlZF9hdDogbnVsbCxcbiAgICAgIGlkOiAxLFxuICAgICAgbmFtZTogXCJKb2huIERvZVwiLFxuICAgICAgX19wc19jb3VudF9fOiBcIjJcIixcbiAgICAgIHJvbGU6IFwiYWRtaW5cIixcbiAgICAgIG5hbWVfcm9sZTogXCJKb25uIERvZSAtIGFkbWluXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjA6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMixcbiAgICAgIG5hbWU6IFwiSmFuZSBEb2VcIixcbiAgICAgIF9fcHNfY291bnRfXzogXCIyXCIsXG4gICAgICByb2xlOiBcInBvd2VydXNlclwiLFxuICAgICAgbmFtZV9yb2xlOiBcIkphbmUgRG9lIC0gcG93ZXJ1c2VyXCIsXG4gICAgfSxcbiAgXSBhcyBjb25zdCBzYXRpc2ZpZXMge1xuICAgIC8vIGJlc3QgZWZmb3J0IG5vIG5lZWQgdG8gZ28gb3ZlcmJvYXJkXG4gICAgW0sgaW4gUmV0dXJuVHlwZTx0eXBlb2YgbW9ja1RhYmxlc1F1ZXJ5PlsxXVtcImNvbHVtbnNcIl1bbnVtYmVyXVtcIm5hbWVcIl0gfCBcIl9fcHNfY291bnRfX1wiXTogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IGRlbGV0ZXMgYSBnaXZlbiBzZXQgb2Ygcm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgcm93cyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFNRTGl0ZUJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5kZWxldGVGcm9tKHRhYmxlTmFtZSlcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhyb3dzLCBjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfZGVsZXRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIG9uZSBvciBtb3JlIHJvd3MgaW50byBhIHRhYmxlIGFuZCByZXR1cm5zIHRoZSBpbnNlcnRlZCByb3dzIGFsb25nIHdpdGggdGhlaXIgYGN0aWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgICByb3dzLFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0U1FMaXRlQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLmluc2VydEludG8odGFibGVOYW1lKVxuICAgICAgLnZhbHVlcyhyb3dzLm1hcCgocm93KSA9PiAoT2JqZWN0LmtleXMocm93KS5sZW5ndGggPT09IDAgPyB7IFtPYmplY3Qua2V5cyhjb2x1bW5zKVswXSFdOiBudWxsIH0gOiByb3cpKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfaW5zZXJ0ZWRfYXRfX1wiKSksXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgdXBkYXRlcyBhIGdpdmVuIHJvdyBpbiBhIHRhYmxlIHdpdGggZ2l2ZW4gY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICByb3csXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAudXBkYXRlVGFibGUodGFibGVOYW1lKVxuICAgICAgLnNldChjaGFuZ2VzKVxuICAgICAgLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKFtyb3ddLCBjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfdXBkYXRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpIHtcbiAgY29uc3QgZWIgPSBleHByZXNzaW9uQnVpbGRlcigpO1xuXG4gIHJldHVybiBlYi5jYXN0PEJpZ0ludFN0cmluZz4oZWIuY2FzdChzcWxgKGp1bGlhbmRheSgnbm93JykgLSAyNDQwNTg3LjUpICogODY0MDAwMDAuMGAsIFwiaW50ZWdlclwiKSwgXCJ0ZXh0XCIpO1xufVxuIiwgImltcG9ydCB7IHR5cGUgS3lzZWx5LCBTcWxpdGVBZGFwdGVyLCBTcWxpdGVRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRTUUxpdGVCdWlsZGVyPERhdGFiYXNlID0gYW55PihcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbik6IEt5c2VseTxEYXRhYmFzZT4ge1xuICByZXR1cm4gZ2V0QnVpbGRlcjxEYXRhYmFzZT4oe1xuICAgIC4uLnJlcXVpcmVtZW50cyxcbiAgICBBZGFwdGVyOiBTcWxpdGVBZGFwdGVyLFxuICAgIFF1ZXJ5Q29tcGlsZXI6IFNxbGl0ZVF1ZXJ5Q29tcGlsZXIsXG4gIH0pO1xufVxuIiwgIi8qKlxuICogU1FMaXRlIGludHJvc3BlY3Rpb24gcXVlcmllcyB0byBiZSB1c2VkIGJ5IHRoZSBTUUxpdGUgYWRhcHRlcidzIGludHJvc3BlY3QgbWV0aG9kLlxuICogQG1vZHVsZSBzcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uXG4gKlxuICogUmVmZXJlbmNlczpcbiAqIGh0dHBzOi8vc3FsaXRlLm9yZy9wcmFnbWEuaHRtbFxuICogaHR0cHM6Ly9zcWxpdGUub3JnL3NjaGVtYXRhYi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZXhwcmVzc2lvbkJ1aWxkZXIsIHR5cGUgTm90TnVsbCB9IGZyb20gXCJreXNlbHlcIjtcbmltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tIFwia3lzZWx5L2hlbHBlcnMvc3FsaXRlXCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0U1FMaXRlQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcblxuaW50ZXJmYWNlIERhdGFiYXNlIHtcbiAgLyoqIHRoZSBtYWluIHN5c3RlbSB0YWJsZSAqL1xuICBzcWxpdGVfc2NoZW1hOiB7XG4gICAgLyoqIG9iamVjdCBuYW1lICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBwYWdlIG51bWJlciBpbiByb290IGluZGV4IHdoZW4gb2JqZWN0IGlzIGEgdGFibGUuICovXG4gICAgcm9vdHBhZ2U6IG51bWJlcjtcbiAgICAvKiogc3FsIHN0YXRlbWVudCB0aGF0IGNhbiByZWNyZWF0ZSB0aGUgb2JqZWN0LiBudWxsIHdoZW4gaW50ZXJuYWwgaW5kZXggb2JqZWN0LiAqL1xuICAgIHNxbDogc3RyaW5nIHwgbnVsbDtcbiAgICAvKiogcmVsYXRlZCB0YWJsZS92aWV3IG5hbWUgd2hlbiBvYmplY3QgaXMgYW4gaW5kZXgvdHJpZ2dlci4gKi9cbiAgICB0YmxfbmFtZTogc3RyaW5nO1xuICAgIC8qKiBvYmplY3QgdHlwZSAqL1xuICAgIHR5cGU6IFwiaW5kZXhcIiB8IFwidGFibGVcIiB8IFwidHJpZ2dlclwiIHwgXCJ2aWV3XCI7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIHNoYXBlIG9mIGVhY2ggcm93IHJldHVybmVkIGJ5IGBwcmFnbWFfdGFibGVfbGlzdCh0YWJsZU5hbWU/KWAuXG4gKi9cbmludGVyZmFjZSBQcmFnbWFUYWJsZUxpc3Qge1xuICAvKiogb2JqZWN0IG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogc2NoZW1hIG5hbWUgKi9cbiAgc2NoZW1hOiBcIm1haW5cIiB8IFwidGVtcFwiO1xuICAvKiogb2JqZWN0IHR5cGUgKi9cbiAgdHlwZTogXCJzaGFkb3dcIiB8IFwidGFibGVcIiB8IFwidmlld1wiIHwgXCJ2aXJ0dWFsXCI7XG59XG5cbi8qKlxuICogVGhlIHNoYXBlIG9mIGVhY2ggcm93IHJldHVybmVkIGJ5IGBwcmFnbWFfdGFibGVfeGluZm8odGFibGVOYW1lKWAuXG4gKi9cbmludGVyZmFjZSBQcmFnbWFUYWJsZVhJbmZvIHtcbiAgLyoqIFwicmFuayB3aXRoaW4gY3VycmVudCByZXN1bHQgc2V0XCIgKi9cbiAgY2lkOiBudW1iZXI7XG4gIC8qKiBkZWZhdWx0IHZhbHVlICovXG4gIGRmbHRfdmFsdWU6IHN0cmluZyB8IG51bGw7XG4gIC8qKiAwIC0gbm9ybWFsLCAxIC0gaGlkZGVuLCAyLTMgLSBkeW5hbWljL3N0b3JlZCBnZW5lcmF0ZWQgKi9cbiAgaGlkZGVuOiAwIHwgMSB8IDIgfCAzO1xuICAvKiogY29sdW1uIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogd2hldGhlciB0aGUgY29sdW1uIGNhbiBiZSBudWxsICovXG4gIG5vdG51bGw6IDAgfCAxO1xuICAvKiogMCBpZiBub3QgcGFydCBvZiB0aGUgcHJpbWFyeSBrZXksIG90aGVyd2lzZSB0aGUgMS1iYXNlZCBvcmRpbmFsIG51bWJlciBvZiB0aGUgY29sdW1uIGluIHRoZSBwcmltYXJ5IGtleSAqL1xuICBwazogbnVtYmVyO1xuICAvKiogZGF0YSB0eXBlICovXG4gIHR5cGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc2hhcGUgb2YgZWFjaCByb3cgcmV0dXJuZWQgYnkgYHByYWdtYV9mb3JlaWduX2tleV9saXN0KHRhYmxlTmFtZSlgLlxuICovXG5pbnRlcmZhY2UgUHJhZ21hRm9yZWlnbktleUxpc3Qge1xuICAvKiogY29sdW1uIG5hbWUgKi9cbiAgZnJvbTogc3RyaW5nO1xuICAvKiogb3JkaW5hbCBudW1iZXIgb2YgY29sdW1uIHdpdGhpbiB0aGUgZm9yZWlnbiBrZXkgKi9cbiAgc2VxOiBudW1iZXI7XG4gIC8qKiBmb3JlaWduIHRhYmxlIG5hbWUgKi9cbiAgdGFibGU6IHN0cmluZztcbiAgLyoqIGNvbHVtbiBuYW1lIGluIHRoZSBmb3JlaWduIHRhYmxlICovXG4gIHRvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZXNRdWVyeShyZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+KSB7XG4gIHJldHVybiBjb21waWxlKFxuICAgIGdldFNRTGl0ZUJ1aWxkZXI8RGF0YWJhc2U+KHJlcXVpcmVtZW50cylcbiAgICAgIC5zZWxlY3RGcm9tKGV4cHJlc3Npb25CdWlsZGVyKCkuZm48UHJhZ21hVGFibGVMaXN0PihcInByYWdtYV90YWJsZV9saXN0XCIsIFtdKS5hcyhcInRsXCIpKVxuICAgICAgLmxlZnRKb2luKFwic3FsaXRlX3NjaGVtYSBhcyBzc1wiLCAoamIpID0+IGpiLm9uUmVmKFwic3MudHlwZVwiLCBcIj1cIiwgXCJ0bC50eXBlXCIpLm9uUmVmKFwic3MubmFtZVwiLCBcIj1cIiwgXCJ0bC5uYW1lXCIpKVxuICAgICAgLndoZXJlKFwidGwudHlwZVwiLCBcImluXCIsIFtcInRhYmxlXCIsIFwidmlld1wiXSlcbiAgICAgIC8vIGV4Y2x1ZGUgdGVtcG9yYXJ5IHRhYmxlcy92aWV3c1xuICAgICAgLndoZXJlKFwidGwuc2NoZW1hXCIsIFwiPVwiLCBcIm1haW5cIilcbiAgICAgIC8vIGV4Y2x1ZGUgc3lzdGVtIHRhYmxlcy92aWV3c1xuICAgICAgLndoZXJlKFwidGwubmFtZVwiLCBcIm5vdCBsaWtlXCIsIFwic3FsaXRlXyVcIilcbiAgICAgIC5zZWxlY3QoW1widGwubmFtZVwiLCBcInNzLnNxbFwiXSlcbiAgICAgIC8vIHNpbmNlIHdlJ3JlIGV4Y2x1ZGluZyBzeXN0ZW0gdGFibGVzLCBgc3Muc3FsYCBzaG91bGQgbmV2ZXIgYmUgbnVsbCBoZXJlLlxuICAgICAgLiRuYXJyb3dUeXBlPHsgc3FsOiBOb3ROdWxsIH0+KClcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgIGpzb25BcnJheUZyb20oXG4gICAgICAgICAgZWJcbiAgICAgICAgICAgIC5zZWxlY3RGcm9tKGViLmZuPFByYWdtYVRhYmxlWEluZm8+KFwicHJhZ21hX3RhYmxlX3hpbmZvXCIsIFtcInRsLm5hbWVcIl0pLmFzKFwidHhpXCIpKVxuICAgICAgICAgICAgLmxlZnRKb2luKFxuICAgICAgICAgICAgICBlYi5mbjxQcmFnbWFGb3JlaWduS2V5TGlzdD4oXCJwcmFnbWFfZm9yZWlnbl9rZXlfbGlzdFwiLCBbXCJ0bC5uYW1lXCJdKS5hcyhcImZrbFwiKSxcbiAgICAgICAgICAgICAgXCJma2wuZnJvbVwiLFxuICAgICAgICAgICAgICBcInR4aS5uYW1lXCIsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBleGNsdWRlIGhpZGRlbiBjb2x1bW5zXG4gICAgICAgICAgICAud2hlcmUoXCJ0eGkuaGlkZGVuXCIsIFwiIT1cIiwgMSlcbiAgICAgICAgICAgIC5zZWxlY3QoW1xuICAgICAgICAgICAgICBcInR4aS5kZmx0X3ZhbHVlIGFzIGRlZmF1bHRcIixcbiAgICAgICAgICAgICAgXCJ0eGkubmFtZVwiLFxuICAgICAgICAgICAgICBcInR4aS5wa1wiLFxuICAgICAgICAgICAgICBcInR4aS50eXBlIGFzIGRhdGF0eXBlXCIsXG4gICAgICAgICAgICAgIFwiZmtsLnRhYmxlIGFzIGZrX3RhYmxlXCIsXG4gICAgICAgICAgICAgIFwiZmtsLnRvIGFzIGZrX2NvbHVtblwiLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIC5zZWxlY3QoKGViKSA9PiBbZWIoXCJ0eGkuaGlkZGVuXCIsIFwiaW5cIiwgWzIsIDNdKS5hcyhcImNvbXB1dGVkXCIpLCBlYihcInR4aS5ub3RudWxsXCIsIFwiPVwiLCAwKS5hcyhcIm51bGxhYmxlXCIpXSksXG4gICAgICAgICkuYXMoXCJjb2x1bW5zXCIpLFxuICAgICAgXSksXG4gICAgeyB0cmFuc2Zvcm1hdGlvbnM6IHsgY29sdW1uczogXCJqc29uLXBhcnNlXCIgfSB9LFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RhYmxlc1F1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiYW5pbWFsc1wiLFxuICAgICAgc3FsOiBcIkNSRUFURSBUQUJMRSBhbmltYWxzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBuYW1lIFRFWFQpO1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIklOVEVHRVJcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRFWFRcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInVzZXJzXCIsXG4gICAgICBzcWw6IFwiQ1JFQVRFIFRBQkxFIHVzZXJzIChpZCBVVUlEIFBSSU1BUlkgS0VZLCBjcmVhdGVkX2F0IFRJTUVTVEFNUCwgZGVsZXRlZF9hdCBUSU1FU1RBTVAsIHJvbGUgdmFyY2hhciwgbmFtZSB2YXJjaGFyLCBuYW1lX3JvbGUgdGV4dCk7XCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVVVJRFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVElNRVNUQU1QXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImRlbGV0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJUSU1FU1RBTVBcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXJcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXJcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZV9yb2xlXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29tcG9zaXRlX3BrXCIsXG4gICAgICBzcWw6IFwiQ1JFQVRFIFRBQkxFIGNvbXBvc2l0ZV9wayAoaWQgVVVJRCwgbmFtZSBURVhULCBjcmVhdGVkX2F0IHRpbWVzdGFtcCwgUFJJTUFSWSBLRVkgKGlkLCBuYW1lKSk7XCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVVVJRFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVEVYVFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDIsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NxbGl0ZS5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG5pbXBvcnQgeyBnZXRKc29uT2JqZWN0QXJncyB9IGZyb20gJy4uL3V0aWwvanNvbi1vYmplY3QtYXJncy5qcyc7XG4vKipcbiAqIEEgU1FMaXRlIGhlbHBlciBmb3IgYWdncmVnYXRpbmcgYSBzdWJxdWVyeSBpbnRvIGEgSlNPTiBhcnJheS5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiB5b3UndmUgaW5zdGFsbGVkIHRoZSBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAuXG4gKiBPdGhlcndpc2UgdGhlIG5lc3RlZCBzZWxlY3Rpb25zIHdpbGwgYmUgcmV0dXJuZWQgYXMgSlNPTiBzdHJpbmdzLlxuICpcbiAqIFRoZSBwbHVnaW4gY2FuIGJlIGluc3RhbGxlZCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNxbGl0ZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbiAqIGltcG9ydCB7IEt5c2VseSwgUGFyc2VKU09OUmVzdWx0c1BsdWdpbiwgU3FsaXRlRGlhbGVjdCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICpcbiAqIGNvbnN0IGRiID0gbmV3IEt5c2VseTxEYXRhYmFzZT4oe1xuICogICBkaWFsZWN0OiBuZXcgU3FsaXRlRGlhbGVjdCh7XG4gKiAgICAgZGF0YWJhc2U6IG5ldyBTcWxpdGUoJzptZW1vcnk6JylcbiAqICAgfSksXG4gKiAgIHBsdWdpbnM6IFtuZXcgUGFyc2VKU09OUmVzdWx0c1BsdWdpbigpXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvc3FsaXRlJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkFycmF5RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLm9yZGVyQnkoJ3BldC5uYW1lJylcbiAqICAgICApLmFzKCdwZXRzJylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXS5wZXRfaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXS5uYW1lXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoU1FMaXRlKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIChcbiAqICAgc2VsZWN0IGNvYWxlc2NlKGpzb25fZ3JvdXBfYXJyYXkoanNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIFwiYWdnXCIuXCJwZXRfaWRcIixcbiAqICAgICAnbmFtZScsIFwiYWdnXCIuXCJuYW1lXCJcbiAqICAgKSksICdbXScpIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIG9yZGVyIGJ5IFwicGV0XCIuXCJuYW1lXCJcbiAqICAgKSBhcyBcImFnZ1wiXG4gKiApIGFzIFwicGV0c1wiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkFycmF5RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBjb2FsZXNjZShqc29uX2dyb3VwX2FycmF5KGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MoZXhwci50b09wZXJhdGlvbk5vZGUoKSwgJ2FnZycpKX0pKSwgJ1tdJykgZnJvbSAke2V4cHJ9IGFzIGFnZylgO1xufVxuLyoqXG4gKiBBIFNRTGl0ZSBoZWxwZXIgZm9yIHR1cm5pbmcgYSBzdWJxdWVyeSBpbnRvIGEgSlNPTiBvYmplY3QuXG4gKlxuICogVGhlIHN1YnF1ZXJ5IG11c3Qgb25seSByZXR1cm4gb25lIHJvdy5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiB5b3UndmUgaW5zdGFsbGVkIHRoZSBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAuXG4gKiBPdGhlcndpc2UgdGhlIG5lc3RlZCBzZWxlY3Rpb25zIHdpbGwgYmUgcmV0dXJuZWQgYXMgSlNPTiBzdHJpbmdzLlxuICpcbiAqIFRoZSBwbHVnaW4gY2FuIGJlIGluc3RhbGxlZCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNxbGl0ZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbiAqIGltcG9ydCB7IEt5c2VseSwgUGFyc2VKU09OUmVzdWx0c1BsdWdpbiwgU3FsaXRlRGlhbGVjdCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICpcbiAqIGNvbnN0IGRiID0gbmV3IEt5c2VseTxEYXRhYmFzZT4oe1xuICogICBkaWFsZWN0OiBuZXcgU3FsaXRlRGlhbGVjdCh7XG4gKiAgICAgZGF0YWJhc2U6IG5ldyBTcWxpdGUoJzptZW1vcnk6JylcbiAqICAgfSksXG4gKiAgIHBsdWdpbnM6IFtuZXcgUGFyc2VKU09OUmVzdWx0c1BsdWdpbigpXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uT2JqZWN0RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3NxbGl0ZSdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25PYmplY3RGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAud2hlcmUoJ3BldC5pc19mYXZvcml0ZScsICc9JywgdHJ1ZSlcbiAqICAgICApLmFzKCdmYXZvcml0ZV9wZXQnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/LnBldF9pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/Lm5hbWVcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChTUUxpdGUpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwgKFxuICogICBzZWxlY3QganNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIFwib2JqXCIuXCJwZXRfaWRcIixcbiAqICAgICAnbmFtZScsIFwib2JqXCIuXCJuYW1lXCJcbiAqICAgKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBhbmQgXCJwZXRcIi5cImlzX2Zhdm9yaXRlXCIgPSA/XG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIFwiZmF2b3JpdGVfcGV0XCJcbiAqIGZyb20gXCJwZXJzb25cIjtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbk9iamVjdEZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QganNvbl9vYmplY3QoJHtzcWwuam9pbihnZXRTcWxpdGVKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnb2JqJykpfSkgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgU1FMaXRlIGBqc29uX29iamVjdGAgZnVuY3Rpb24uXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gLlxuICogT3RoZXJ3aXNlIHRoZSBuZXN0ZWQgc2VsZWN0aW9ucyB3aWxsIGJlIHJldHVybmVkIGFzIEpTT04gc3RyaW5ncy5cbiAqXG4gKiBUaGUgcGx1Z2luIGNhbiBiZSBpbnN0YWxsZWQgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgKiBhcyBTcWxpdGUgZnJvbSAnYmV0dGVyLXNxbGl0ZTMnXG4gKiBpbXBvcnQgeyBLeXNlbHksIFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4sIFNxbGl0ZURpYWxlY3QgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBjb25zdCBkYiA9IG5ldyBLeXNlbHk8RGF0YWJhc2U+KHtcbiAqICAgZGlhbGVjdDogbmV3IFNxbGl0ZURpYWxlY3Qoe1xuICogICAgIGRhdGFiYXNlOiBuZXcgU3FsaXRlKCc6bWVtb3J5OicpXG4gKiAgIH0pLFxuICogICBwbHVnaW5zOiBbbmV3IFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4oKV1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHsganNvbkJ1aWxkT2JqZWN0IH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvc3FsaXRlJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAqICAgICAgIGZpcnN0OiBlYi5yZWYoJ2ZpcnN0X25hbWUnKSxcbiAqICAgICAgIGxhc3Q6IGViLnJlZignbGFzdF9uYW1lJyksXG4gKiAgICAgICBmdWxsOiBzcWw8c3RyaW5nPmBmaXJzdF9uYW1lIHx8XHUwMEEwJyAnIHx8IGxhc3RfbmFtZWBcbiAqICAgICB9KS5hcygnbmFtZScpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/Lm5hbWUuZmlyc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5sYXN0XG4gKiByZXN1bHRbMF0/Lm5hbWUuZnVsbFxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCBqc29uX29iamVjdChcbiAqICAgJ2ZpcnN0JywgZmlyc3RfbmFtZSxcbiAqICAgJ2xhc3QnLCBsYXN0X25hbWUsXG4gKiAgICdmdWxsJywgXCJmaXJzdF9uYW1lXCIgfHwgJyAnIHx8IFwibGFzdF9uYW1lXCJcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG5mdW5jdGlvbiBnZXRTcWxpdGVKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBnZXRKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTUUxpdGUganNvbkFycmF5RnJvbSBhbmQganNvbk9iamVjdEZyb20gZnVuY3Rpb25zIGNhbiBvbmx5IGhhbmRsZSBleHBsaWNpdCBzZWxlY3Rpb25zIGR1ZSB0byBsaW1pdGF0aW9ucyBvZiB0aGUganNvbl9vYmplY3QgZnVuY3Rpb24uIHNlbGVjdEFsbCgpIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBzdWJxdWVyeS4nKTtcbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7OztpT0FBQUEsSUNBQUMsSUNBQUMsSUFJTyxJQUFNQyxFQUEwRixDQUNyRyxLQUFNLENBQ0osTUFBTyxLQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLEtBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFFBQ1QsQ0FDRixFQU9PLFNBQVNDLEVBQXdCQyxFQUFpRCxDQUN2RixHQUFJLENBQUNBLEVBQ0gsTUFBTyxPQUdULElBQU1DLEVBQVlELEVBQWlCLFlBQVksRUFFL0MsT0FBSUMsRUFBVSxTQUFTLEtBQUssRUFDbkIsVUFHTEEsRUFBVSxTQUFTLE1BQU0sR0FBS0EsRUFBVSxTQUFTLE1BQU0sR0FBS0EsRUFBVSxTQUFTLE1BQU0sRUFDaEYsT0FHTEEsRUFBVSxTQUFTLE1BQU0sRUFDcEIsT0FHTEEsRUFBVSxTQUFTLE1BQU0sR0FBS0EsRUFBVSxTQUFTLE1BQU0sR0FBS0EsRUFBVSxTQUFTLE1BQU0sRUFDaEYsT0FHRixTQUNULENDdERBQyxJQ0FBQyxJQUtPLFNBQVNDLEVBQ2RDLEVBQ2tCLENBQ2xCLE9BQU9DLEVBQXFCLENBQzFCLEdBQUdE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LEtBQU0sQ0FBRSxPQUFRLENBQUMsRUFBRyxLQUFNLE1BQU8sQ0FDbkMsQ0FDRixFQUNBLFNBQVUsS0FDWixDQUNGLENBS08sU0FBU2tCLElBQWlCLENBQy9CLElBQU1uQyxFQUFRLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSyxVQUFXLEVBQzFDUyxFQUFTMkIsRUFBZ0IsRUFFL0IsT0FBTzFCLEVBQW9CLENBQUUsTUFBQVYsRUFBTyxPQUFBUyxDQUFPLENBQUMsQ0FjOUMiLAogICJuYW1lcyI6IFsiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBIiwgImRldGVybWluZUNvbHVtbkFmZmluaXR5IiwgImRlY2xhcmVkRGF0YVR5cGUiLCAidXBwZXJUeXBlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImdldFNRTGl0ZUJ1aWxkZXIiLCAicmVxdWlyZW1lbnRzIiwgImdldEJ1aWxkZXIiLCAiU3FsaXRlQWRhcHRlciIsICJTcWxpdGVRdWVyeUNvbXBpbGVyIiwgImdldFNlbGVjdFF1ZXJ5IiwgImRldGFpbHMiLCAicmVxdWlyZW1lbnRzIiwgImZpbHRlciIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydE9yZGVyIiwgImNvbHVtbnMiLCAidGFibGVOYW1lIiwgImJ1aWxkZXIiLCAiZ2V0U1FMaXRlQnVpbGRlciIsICJmaWx0ZXJFeHByZXNzaW9uIiwgImdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24iLCAiQUdHX05BTUUiLCAiQ09VTlRfUkVGIiwgImNvdW50UXVlcnkiLCAiZWIiLCAic3FsIiwgImNvbXBpbGUiLCAiamIiLCAicWIiLCAiaXRlbSIsICJtb2NrU2VsZWN0UXVlcnkiLCAiZ2V0RGVsZXRlUXVlcnkiLCAicm93cyIsICJhcHBseUluZmVycmVkUm93RmlsdGVycyIsICJnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzIiwgImdldEluc2VydFF1ZXJ5IiwgInJvdyIsICJnZXRVcGRhdGVRdWVyeSIsICJjaGFuZ2VzIiwgImV4cHJlc3Npb25CdWlsZGVyIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImpzb25BcnJheUZyb20iLCAiZXhwciIsICJzcWwiLCAiZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MiLCAiZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MiLCAibm9kZSIsICJ0YWJsZSIsICJnZXRKc29uT2JqZWN0QXJncyIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRTUUxpdGVCdWlsZGVyIiwgImV4cHJlc3Npb25CdWlsZGVyIiwgImpiIiwgImViIiwgImpzb25BcnJheUZyb20iLCAibW9ja1RhYmxlc1F1ZXJ5IiwgInNjaGVtYSIsICJmaWx0ZXJPcGVyYXRvcnMiLCAiY3JlYXRlU1FMaXRlQWRhcHRlciIsICJyZXF1aXJlbWVudHMiLCAiZXhlY3V0b3IiLCAib3RoZXJSZXF1aXJlbWVudHMiLCAiZGV0YWlscyIsICJvcHRpb25zIiwgInF1ZXJ5IiwgImdldERlbGV0ZVF1ZXJ5IiwgImVycm9yIiwgImNyZWF0ZUFkYXB0ZXJFcnJvciIsICJnZXRJbnNlcnRRdWVyeSIsICJyb3dzIiwgInRhYmxlc1F1ZXJ5IiwgImdldFRhYmxlc1F1ZXJ5IiwgInRhYmxlc0Vycm9yIiwgInRhYmxlcyIsICJjcmVhdGVJbnRyb3NwZWN0aW9uIiwgImdldFNlbGVjdFF1ZXJ5IiwgInJlc3VsdHMiLCAiZ2V0VXBkYXRlUXVlcnkiLCAicm93IiwgIldJVEhPVVRfUk9XSURfUkVHRVgiLCAiYXJncyIsICJzY2hlbWFzIiwgInRhYmxlIiwgImNvbHVtbnMiLCAidGFibGVOYW1lIiwgInNxbCIsICJjb2x1bW5zUmVjb3JkIiwgImNvbHVtbiIsICJkYXRhdHlwZSIsICJkZWZhdWx0VmFsdWUiLCAiZmtfY29sdW1uIiwgImNvbHVtbk5hbWUiLCAicGsiLCAiYWZmaW5pdHkiLCAiZGV0ZXJtaW5lQ29sdW1uQWZmaW5pdHkiLCAiaXNSb3dJZCIsICJpc0NvbXB1dGVkIiwgIm51bGxhYmxlIiwgIlNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQSIsICJtb2NrSW50cm9zcGVjdCIsICJtb2NrVGFibGVzUXVlcnkiXQp9Cg==
9
+ import{a as N}from"../../chunk-R55ES2HZ.js";import{a as u}from"../../chunk-I4OGOLAT.js";import{A as x,D as S,p as T,q as d,r as D,s as L,x as j,z as f}from"../../chunk-R7UWW2TY.js";import{e as s}from"../../chunk-GDQBQ7MK.js";s();s();s();var U={BLOB:{group:"raw"},INTEGER:{group:"numeric"},NULL:{group:"raw"},NUMERIC:{group:"numeric"},REAL:{group:"numeric"},TEXT:{group:"string"}};function C(r){if(!r)return"BLOB";let t=r.toUpperCase();return t.includes("INT")?"INTEGER":t.includes("TEXT")||t.includes("CHAR")||t.includes("CLOB")?"TEXT":t.includes("BLOB")?"BLOB":t.includes("REAL")||t.includes("FLOA")||t.includes("DOUB")?"REAL":"NUMERIC"}s();s();function y(r){return j({...r,Adapter:L,QueryCompiler:D})}function F(r,t){let{filter:o={after:"and",filters:[],kind:"FilterGroup"},pageIndex:l,pageSize:n,sortOrder:e,table:{columns:a,name:i}}=r,p=y(t),g=S(o.filters,a),_="__ps_agg__",c="__ps_count__",I=p.selectFrom(i).where(g).select(m=>m.cast(m.fn.coalesce(m.fn.countAll(),d.lit(0)),"text").as(c));return f(p.with(_,()=>I).selectFrom(i).innerJoin(_,m=>m.onTrue()).where(g).select(`${_}.${c}`).select(Object.keys(a)).$call(m=>e.reduce((k,A)=>k.orderBy(A.column,A.direction),m)).limit(n).offset(d.lit(BigInt(l)*BigInt(n))))}function se(){return[{created_at:new Date("2025-01-26T21:56:12.345Z"),deleted_at:null,id:1,name:"John Doe",__ps_count__:"2",role:"admin",name_role:"Jonn Doe - admin"},{created_at:new Date("2025-01-26T20:56:12.345Z"),deleted_at:null,id:2,name:"Jane Doe",__ps_count__:"2",role:"poweruser",name_role:"Jane Doe - poweruser"}]}function M(r,t){let{rows:o,table:{columns:l,name:n}}=r,e=y(t);return f(e.deleteFrom(n).$call(x(o,l)).returning(Object.keys(l)).returning(h().as("__ps_deleted_at__")))}function P(r,t){let{table:{columns:o,name:l},rows:n}=r,e=y(t);return f(e.insertInto(l).values(n.map(a=>Object.keys(a).length===0?{[Object.keys(o)[0]]:null}:a)).returning(Object.keys(o)).returning(h().as("__ps_inserted_at__")))}function G(r,t){let{changes:o,row:l,table:{columns:n,name:e}}=r,a=y(t);return f(a.updateTable(e).set(o).$call(x([l],n)).returning(Object.keys(n)).returning(h().as("__ps_updated_at__")))}function h(){let r=T();return r.cast(r.cast(d`(julianday('now') - 2440587.5) * 86400000.0`,"integer"),"text")}s();s();function v(r){return d`(select coalesce(json_group_array(json_object(${d.join(Y(r.toOperationNode(),"agg"))})), '[]') from ${r} as agg)`}function Y(r,t){try{return N(r,t)}catch{throw new Error("SQLite jsonArrayFrom and jsonObjectFrom functions can only handle explicit selections due to limitations of the json_object function. selectAll() is not allowed in the subquery.")}}function X(r){return f(y(r).selectFrom(T().fn("pragma_table_list",[]).as("tl")).leftJoin("sqlite_schema as ss",t=>t.onRef("ss.type","=","tl.type").onRef("ss.name","=","tl.name")).where("tl.type","in",["table","view"]).where("tl.schema","=","main").where("tl.name","not like","sqlite_%").select(["tl.name","ss.sql"]).$narrowType().select(t=>[v(t.selectFrom(t.fn("pragma_table_xinfo",["tl.name"]).as("txi")).leftJoin(t.fn("pragma_foreign_key_list",["tl.name"]).as("fkl"),"fkl.from","txi.name").where("txi.hidden","!=",1).select(["txi.dflt_value as default","txi.name","txi.pk","txi.type as datatype","fkl.table as fk_table","fkl.to as fk_column"]).select(o=>[o("txi.hidden","in",[2,3]).as("computed"),o("txi.notnull","=",0).as("nullable")])).as("columns")]),{transformations:{columns:"json-parse"}})}function $(){return[{name:"animals",sql:"CREATE TABLE animals (id INTEGER PRIMARY KEY, name TEXT);",columns:[{name:"id",datatype:"INTEGER",default:null,pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"users",sql:"CREATE TABLE users (id UUID PRIMARY KEY, created_at TIMESTAMP, deleted_at TIMESTAMP, role varchar, name varchar, name_role text);",columns:[{name:"id",datatype:"UUID",default:null,pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"created_at",datatype:"TIMESTAMP",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"deleted_at",datatype:"TIMESTAMP",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"role",datatype:"varchar",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name",datatype:"varchar",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"name_role",datatype:"text",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]},{name:"composite_pk",sql:"CREATE TABLE composite_pk (id UUID, name TEXT, created_at timestamp, PRIMARY KEY (id, name));",columns:[{name:"id",datatype:"UUID",default:null,pk:1,computed:0,nullable:0,fk_table:null,fk_column:null},{name:"name",datatype:"TEXT",default:null,pk:2,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"created_at",datatype:"timestamp",default:null,pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]}]}var E="main",W=["=","!=",">",">=","<","<=","is","is not","like","not like"];function Ie(r){let{executor:t,...o}=r;return{defaultSchema:E,async delete(l,n){try{let e=M(l,o),[a]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{...l,query:e}]}catch(e){return u({error:e})}},async insert(l,n){try{let e=P(l,o),[a,i]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{rows:i,query:e}]}catch(e){return u({error:e})}},async introspect(l){try{let n=X(r),[e,a]=await t.execute(n,l);return e?u({error:e,query:n}):[null,K({query:n,tables:a})]}catch(n){return u({error:n})}},async query(l,n){try{let e=F(l,o),[a,i]=await t.execute(e,n);return a?u({error:a,query:e}):[null,{filteredRowCount:i[0]?.__ps_count__||"0",rows:i,query:e}]}catch(e){return u({error:e})}},async update(l,n){try{let e=G(l,o),[a,i]=await t.execute(e,n);if(a)return u({error:a,query:e});let[p]=i;return p?[null,{row:p,query:e}]:u({error:new Error("Update failed"),query:e})}catch(e){return u({error:e})}}}}var z=/WITHOUT\s+ROWID/i;function K(r){let{tables:t,query:o}=r;return{filterOperators:W,query:o,schemas:t.reduce((l,n)=>{let{columns:e,name:a,sql:i}=n,p=0,g=e.reduce((_,c,I)=>{let{datatype:m,default:k,fk_column:A,name:w,pk:R}=c;p=Math.max(p,R);let q=C(m),Q=m.toUpperCase()==="INTEGER"&&R===1&&p===1&&!e.slice(I+1).some(function(J){return J.pk>1})&&!z.test(i),O=!!c.computed,B=!!c.nullable&&!Q;return _[w]={datatype:{...U[q],affinity:q,isArray:!1,isNative:!0,name:m,options:[],schema:E},defaultValue:k,fkColumn:A,fkSchema:A?E:null,fkTable:c.fk_table,isAutoincrement:Q,isComputed:O,isRequired:!B&&!Q&&!O&&k==null,name:w,nullable:B,pkPosition:R>0?R:null,schema:E,table:a},_},{});return l.main.tables[a]={columns:g,name:a,schema:"main"},l},{main:{tables:{},name:"main"}}),timezone:"UTC"}}function Qe(){let r={parameters:[],sql:"<mocked>"},t=$();return K({query:r,tables:t})}export{Ie as createSQLiteAdapter,M as getDeleteQuery,P as getInsertQuery,F as getSelectQuery,X as getTablesQuery,G as getUpdateQuery,Qe as mockIntrospect,se as mockSelectQuery,$ as mockTablesQuery};
10
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbmRleC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2FkYXB0ZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2RtbC50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2J1aWxkZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9zcWxpdGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyUmVxdWlyZW1lbnRzLFxuICB0eXBlIEFkYXB0ZXJVcGRhdGVSZXN1bHQsXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSwgU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBIH0gZnJvbSBcIi4vZGF0YXR5cGVcIjtcbmltcG9ydCB7IGdldERlbGV0ZVF1ZXJ5LCBnZXRJbnNlcnRRdWVyeSwgZ2V0U2VsZWN0UXVlcnksIGdldFVwZGF0ZVF1ZXJ5IH0gZnJvbSBcIi4vZG1sXCI7XG5pbXBvcnQgeyBnZXRUYWJsZXNRdWVyeSwgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzID0gQWRhcHRlclJlcXVpcmVtZW50cztcblxuY29uc3Qgc2NoZW1hID0gXCJtYWluXCI7XG5cbmNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IFtcbiAgXCI9XCIsXG4gIFwiIT1cIixcbiAgXCI+XCIsXG4gIFwiPj1cIixcbiAgXCI8XCIsXG4gIFwiPD1cIixcbiAgXCJpc1wiLFxuICBcImlzIG5vdFwiLFxuICBcImxpa2VcIixcbiAgXCJub3QgbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNRTGl0ZUFkYXB0ZXIocmVxdWlyZW1lbnRzOiBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBzY2hlbWEsXG5cbiAgICBhc3luYyBkZWxldGUoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckRlbGV0ZVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0RGVsZXRlUXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIC8vIFRPRE86IHVzZSByZXN1bHRzIHRvby5cbiAgICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgLi4uZGV0YWlscywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnNlcnQoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckluc2VydFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbdGFibGVzRXJyb3IsIHRhYmxlc10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeTogdGFibGVzUXVlcnksIHRhYmxlcyB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBxdWVyeShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyUXVlcnlSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFNlbGVjdFF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5fX3BzX2NvdW50X18gfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRVcGRhdGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGUgZmFpbGVkXCIpLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBXSVRIT1VUX1JPV0lEX1JFR0VYID0gL1dJVEhPVVRcXHMrUk9XSUQvaTtcblxuZnVuY3Rpb24gY3JlYXRlSW50cm9zcGVjdGlvbihhcmdzOiB7XG4gIHRhYmxlczogUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5PjtcbiAgcXVlcnk6IFF1ZXJ5O1xufSk6IEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IHtcbiAgY29uc3QgeyB0YWJsZXMsIHF1ZXJ5OiB0YWJsZXNRdWVyeSB9ID0gYXJncztcblxuICByZXR1cm4ge1xuICAgIGZpbHRlck9wZXJhdG9ycyxcbiAgICBxdWVyeTogdGFibGVzUXVlcnksXG4gICAgc2NoZW1hczogdGFibGVzLnJlZHVjZShcbiAgICAgIChzY2hlbWFzLCB0YWJsZSkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc3FsIH0gPSB0YWJsZTtcblxuICAgICAgICBsZXQgbWF4UEtTZWVuID0gMDtcblxuICAgICAgICBjb25zdCBjb2x1bW5zUmVjb3JkID0gY29sdW1ucy5yZWR1Y2UoXG4gICAgICAgICAgKGNvbHVtbnNSZWNvcmQsIGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YXR5cGUsIGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSwgZmtfY29sdW1uLCBuYW1lOiBjb2x1bW5OYW1lLCBwayB9ID0gY29sdW1uO1xuXG4gICAgICAgICAgICBtYXhQS1NlZW4gPSBNYXRoLm1heChtYXhQS1NlZW4sIHBrKTtcblxuICAgICAgICAgICAgY29uc3QgYWZmaW5pdHkgPSBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eShkYXRhdHlwZSk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogYElOVEVHRVIgUFJJTUFSWSBLRVlgIGNvbHVtbnMgYWN0IGFzIGByb3dpZGAgYWxpYXMuIGByb3dpZGAgY29sdW1uc1xuICAgICAgICAgICAgICogYXJlIGF1dG8tZ2VuZXJhdGVkIHVuaXF1ZSBudW1iZXJzIHRoYXQgZXhpc3QgaW4gZXZlcnkgU1FMaXRlIHRhYmxlXG4gICAgICAgICAgICAgKiB1bmxlc3MgYSB0YWJsZSBpcyBjcmVhdGVkIHVzaW5nIGBXSVRIT1VUIFJPV0lEYCBvcHRpb24uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGlzUm93SWQgPVxuICAgICAgICAgICAgICBkYXRhdHlwZS50b1VwcGVyQ2FzZSgpID09PSBcIklOVEVHRVJcIiAmJlxuICAgICAgICAgICAgICBwayA9PT0gMSAmJlxuICAgICAgICAgICAgICAvLyBubyBvdGhlciBwcmltYXJ5IGtleSBjb2x1bW5zIGJlZm9yZSB0aGlzIGNvbHVtbi5cbiAgICAgICAgICAgICAgbWF4UEtTZWVuID09PSAxICYmXG4gICAgICAgICAgICAgICFjb2x1bW5zLnNsaWNlKGluZGV4ICsgMSkuc29tZShmdW5jdGlvbiBpc0Fsc29JblByaW1hcnlLZXkoY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5wayA+IDE7XG4gICAgICAgICAgICAgIH0pICYmXG4gICAgICAgICAgICAgICFXSVRIT1VUX1JPV0lEX1JFR0VYLnRlc3Qoc3FsKTtcblxuICAgICAgICAgICAgY29uc3QgaXNDb21wdXRlZCA9IEJvb2xlYW4oY29sdW1uLmNvbXB1dGVkKTtcbiAgICAgICAgICAgIC8vIGByb3dpZGAgY29sdW1ucyBhcmUgaW1wbGljaXRseSBub3QgbnVsbGFibGUuXG4gICAgICAgICAgICBjb25zdCBudWxsYWJsZSA9IEJvb2xlYW4oY29sdW1uLm51bGxhYmxlKSAmJiAhaXNSb3dJZDtcblxuICAgICAgICAgICAgY29sdW1uc1JlY29yZFtjb2x1bW5OYW1lXSA9IHtcbiAgICAgICAgICAgICAgZGF0YXR5cGU6IHtcbiAgICAgICAgICAgICAgICAuLi5TUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEFbYWZmaW5pdHldLFxuICAgICAgICAgICAgICAgIGFmZmluaXR5LFxuICAgICAgICAgICAgICAgIGlzQXJyYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzTmF0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGF0eXBlLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IHVzZSBgdGFibGUuc3FsYCB0byBkZXRlcm1pbmUgZW51bSBvcHRpb25zIGZyb20gYGNoZWNrYCBjb25zdHJhaW50cy5cbiAgICAgICAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgZmtDb2x1bW46IGZrX2NvbHVtbixcbiAgICAgICAgICAgICAgZmtTY2hlbWE6IGZrX2NvbHVtbiA/IHNjaGVtYSA6IG51bGwsXG4gICAgICAgICAgICAgIGZrVGFibGU6IGNvbHVtbi5ma190YWJsZSxcbiAgICAgICAgICAgICAgLy8gc2luY2UgYHJvd2lkYCBpcyBhdXRvIGdlbmVyYXRlZCB1bmlxdWUgbnVtYmVyLCBhbmQgYEFVVE8gSU5DUkVNRU5UYFxuICAgICAgICAgICAgICAvLyBjYW4gb25seSBiZSBhcHBsaWVkIHRvIHN1Y2ggY29sdW1ucywgd2UgY29uc2lkZXIgdGhlbSBhdXRvaW5jcmVtZW50XG4gICAgICAgICAgICAgIC8vIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSBtb2RpZmllciBpblxuICAgICAgICAgICAgICAvLyB0aGUgYENSRUFURSBUQUJMRWAgc3RhdGVtZW50LlxuICAgICAgICAgICAgICBpc0F1dG9pbmNyZW1lbnQ6IGlzUm93SWQsXG4gICAgICAgICAgICAgIGlzQ29tcHV0ZWQsXG4gICAgICAgICAgICAgIGlzUmVxdWlyZWQ6ICFudWxsYWJsZSAmJiAhaXNSb3dJZCAmJiAhaXNDb21wdXRlZCAmJiBkZWZhdWx0VmFsdWUgPT0gbnVsbCxcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgbnVsbGFibGUsXG4gICAgICAgICAgICAgIHBrUG9zaXRpb246IHBrID4gMCA/IHBrIDogbnVsbCxcbiAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbnNSZWNvcmQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICAgICk7XG5cbiAgICAgICAgc2NoZW1hcy5tYWluIS50YWJsZXNbdGFibGVOYW1lXSA9IHtcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zUmVjb3JkLFxuICAgICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcbiAgICAgICAgICBzY2hlbWE6IFwibWFpblwiLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzY2hlbWFzO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWFpbjogeyB0YWJsZXM6IHt9LCBuYW1lOiBcIm1haW5cIiB9LFxuICAgICAgfSBzYXRpc2ZpZXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHRbXCJzY2hlbWFzXCJdIGFzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0W1wic2NoZW1hc1wiXSxcbiAgICApLFxuICAgIHRpbWV6b25lOiBcIlVUQ1wiLFxuICB9O1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja0ludHJvc3BlY3QoKSB7XG4gIGNvbnN0IHF1ZXJ5ID0geyBwYXJhbWV0ZXJzOiBbXSwgc3FsOiBcIjxtb2NrZWQ+XCIgfSBhcyBRdWVyeTtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG5cbiAgcmV0dXJuIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeSwgdGFibGVzIH0pIGFzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCwgbm8gbmVlZCBnbyBvdmVyYm9hcmQuXG4gICAgc2NoZW1hczoge1xuICAgICAgbWFpbjoge1xuICAgICAgICBuYW1lOiBcIm1haW5cIjtcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHN0cmluZztcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IERhdGFUeXBlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IHR5cGUgU1FMaXRlQWZmaW5pdHkgPSBcIkJMT0JcIiB8IFwiSU5URUdFUlwiIHwgXCJOVUxMXCIgfCBcIk5VTUVSSUNcIiB8IFwiUkVBTFwiIHwgXCJURVhUXCI7XG5cbmV4cG9ydCBjb25zdCBTUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEE6IFJlY29yZDxTUUxpdGVBZmZpbml0eSwgUGljazxEYXRhVHlwZSwgXCJmb3JtYXRcIiB8IFwiZ3JvdXBcIj4+ID0ge1xuICBCTE9COiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIElOVEVHRVI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIE5VTEw6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgTlVNRVJJQzoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgUkVBTDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgVEVYVDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxufTtcblxuLyoqXG4gKiBodHRwczovL3NxbGl0ZS5vcmcvZGF0YXR5cGUzLmh0bWwjZGV0ZXJtaW5hdGlvbl9vZl9jb2x1bW5fYWZmaW5pdHlcbiAqXG4gKiBETyBOT1QgQ0hBTkdFIFRIRSBPUkRFUiBPRiBUSEUgQ0hFQ0tTIElOIFRISVMgRlVOQ1RJT04hXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eShkZWNsYXJlZERhdGFUeXBlOiBzdHJpbmcgfCBudWxsKTogU1FMaXRlQWZmaW5pdHkge1xuICBpZiAoIWRlY2xhcmVkRGF0YVR5cGUpIHtcbiAgICByZXR1cm4gXCJCTE9CXCI7XG4gIH1cblxuICBjb25zdCB1cHBlclR5cGUgPSBkZWNsYXJlZERhdGFUeXBlLnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIklOVFwiKSkge1xuICAgIHJldHVybiBcIklOVEVHRVJcIjtcbiAgfVxuXG4gIGlmICh1cHBlclR5cGUuaW5jbHVkZXMoXCJURVhUXCIpIHx8IHVwcGVyVHlwZS5pbmNsdWRlcyhcIkNIQVJcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiQ0xPQlwiKSkge1xuICAgIHJldHVybiBcIlRFWFRcIjtcbiAgfVxuXG4gIGlmICh1cHBlclR5cGUuaW5jbHVkZXMoXCJCTE9CXCIpKSB7XG4gICAgcmV0dXJuIFwiQkxPQlwiO1xuICB9XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIlJFQUxcIikgfHwgdXBwZXJUeXBlLmluY2x1ZGVzKFwiRkxPQVwiKSB8fCB1cHBlclR5cGUuaW5jbHVkZXMoXCJET1VCXCIpKSB7XG4gICAgcmV0dXJuIFwiUkVBTFwiO1xuICB9XG5cbiAgcmV0dXJuIFwiTlVNRVJJQ1wiO1xufVxuIiwgImltcG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyLCB0eXBlIEluZmVyUmVzdWx0LCBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBTaW1wbGVSZWZlcmVuY2VFeHByZXNzaW9uIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgdHlwZSB7IEFkYXB0ZXJEZWxldGVEZXRhaWxzLCBBZGFwdGVySW5zZXJ0RGV0YWlscywgQWRhcHRlclF1ZXJ5RGV0YWlscywgQWRhcHRlclVwZGF0ZURldGFpbHMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMsIHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBCaWdJbnRTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZS11dGlsc1wiO1xuaW1wb3J0IHsgZ2V0U1FMaXRlQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcbmltcG9ydCB7IG1vY2tUYWJsZXNRdWVyeSB9IGZyb20gXCIuL2ludHJvc3BlY3Rpb25cIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBzZWxlY3RzIGFsbCBjb2x1bW5zIGZyb20gYSB0YWJsZSB3aXRoIGFuIHVuYm91bmQgcm93IGNvdW50IGFzIGBfX3BzX2NvdW50X19gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJRdWVyeURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGZpbHRlciA9IHsgYWZ0ZXI6IFwiYW5kXCIsIGZpbHRlcnM6IFtdLCBraW5kOiBcIkZpbHRlckdyb3VwXCIgfSxcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydE9yZGVyLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0U1FMaXRlQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgY29uc3QgZmlsdGVyRXhwcmVzc2lvbiA9IGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oZmlsdGVyLmZpbHRlcnMsIGNvbHVtbnMpO1xuXG4gIGNvbnN0IEFHR19OQU1FID0gXCJfX3BzX2FnZ19fXCI7XG4gIGNvbnN0IENPVU5UX1JFRiA9IFwiX19wc19jb3VudF9fXCI7XG5cbiAgY29uc3QgY291bnRRdWVyeSA9IGJ1aWxkZXJcbiAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgLnNlbGVjdCgoZWIpID0+IGViLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5mbi5jb2FsZXNjZShlYi5mbi5jb3VudEFsbCgpLCBzcWwubGl0KDApKSwgXCJ0ZXh0XCIpLmFzKENPVU5UX1JFRikpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoKEFHR19OQU1FLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLnNlbGVjdEZyb20odGFibGVOYW1lKVxuICAgICAgLmlubmVySm9pbihBR0dfTkFNRSwgKGpiKSA9PiBqYi5vblRydWUoKSlcbiAgICAgIC8vIFRPRE86IGN1cnNvciBwYWdpbmF0aW9uP1xuICAgICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgICAuc2VsZWN0KFxuICAgICAgICBgJHtBR0dfTkFNRX0uJHtDT1VOVF9SRUZ9YCBzYXRpc2ZpZXMgU2ltcGxlUmVmZXJlbmNlRXhwcmVzc2lvbjxcbiAgICAgICAgICB7IFtBR0dfTkFNRV06IEluZmVyUmVzdWx0PHR5cGVvZiBjb3VudFF1ZXJ5PltudW1iZXJdIH0sXG4gICAgICAgICAgdHlwZW9mIEFHR19OQU1FXG4gICAgICAgID4sXG4gICAgICApXG4gICAgICAuc2VsZWN0KE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLiRjYWxsKChxYikgPT4gc29ydE9yZGVyLnJlZHVjZSgocWIsIGl0ZW0pID0+IHFiLm9yZGVyQnkoaXRlbS5jb2x1bW4sIGl0ZW0uZGlyZWN0aW9uKSwgcWIpKVxuICAgICAgLmxpbWl0KHBhZ2VTaXplKVxuICAgICAgLy8gd2UncmUgaW5qZWN0aW5nIHRoZSBvZmZzZXQgdmFsdWUgaGVyZSB0byBhdm9pZCBzZXJpYWxpemF0aW9uIGNvbXBsZXhpdHkgKGBiaWdpbnRgIGlzIGEgbm8tZ28gZm9yIGBKU09OLnN0cmluZ2lmeWApLlxuICAgICAgLm9mZnNldChzcWwubGl0KEJpZ0ludChwYWdlSW5kZXgpICogQmlnSW50KHBhZ2VTaXplKSkpLFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NlbGVjdFF1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKFwiMjAyNS0wMS0yNlQyMTo1NjoxMi4zNDVaXCIpLFxuICAgICAgZGVsZXRlZF9hdDogbnVsbCxcbiAgICAgIGlkOiAxLFxuICAgICAgbmFtZTogXCJKb2huIERvZVwiLFxuICAgICAgX19wc19jb3VudF9fOiBcIjJcIixcbiAgICAgIHJvbGU6IFwiYWRtaW5cIixcbiAgICAgIG5hbWVfcm9sZTogXCJKb25uIERvZSAtIGFkbWluXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjA6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMixcbiAgICAgIG5hbWU6IFwiSmFuZSBEb2VcIixcbiAgICAgIF9fcHNfY291bnRfXzogXCIyXCIsXG4gICAgICByb2xlOiBcInBvd2VydXNlclwiLFxuICAgICAgbmFtZV9yb2xlOiBcIkphbmUgRG9lIC0gcG93ZXJ1c2VyXCIsXG4gICAgfSxcbiAgXSBhcyBjb25zdCBzYXRpc2ZpZXMge1xuICAgIC8vIGJlc3QgZWZmb3J0IG5vIG5lZWQgdG8gZ28gb3ZlcmJvYXJkXG4gICAgW0sgaW4gUmV0dXJuVHlwZTx0eXBlb2YgbW9ja1RhYmxlc1F1ZXJ5PlsxXVtcImNvbHVtbnNcIl1bbnVtYmVyXVtcIm5hbWVcIl0gfCBcIl9fcHNfY291bnRfX1wiXTogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IGRlbGV0ZXMgYSBnaXZlbiBzZXQgb2Ygcm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgcm93cyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFNRTGl0ZUJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5kZWxldGVGcm9tKHRhYmxlTmFtZSlcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhyb3dzLCBjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfZGVsZXRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIG9uZSBvciBtb3JlIHJvd3MgaW50byBhIHRhYmxlIGFuZCByZXR1cm5zIHRoZSBpbnNlcnRlZCByb3dzIGFsb25nIHdpdGggdGhlaXIgYGN0aWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgICByb3dzLFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0U1FMaXRlQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLmluc2VydEludG8odGFibGVOYW1lKVxuICAgICAgLnZhbHVlcyhyb3dzLm1hcCgocm93KSA9PiAoT2JqZWN0LmtleXMocm93KS5sZW5ndGggPT09IDAgPyB7IFtPYmplY3Qua2V5cyhjb2x1bW5zKVswXSFdOiBudWxsIH0gOiByb3cpKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfaW5zZXJ0ZWRfYXRfX1wiKSksXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgdXBkYXRlcyBhIGdpdmVuIHJvdyBpbiBhIHRhYmxlIHdpdGggZ2l2ZW4gY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICByb3csXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAudXBkYXRlVGFibGUodGFibGVOYW1lKVxuICAgICAgLnNldChjaGFuZ2VzKVxuICAgICAgLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKFtyb3ddLCBjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfdXBkYXRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpIHtcbiAgY29uc3QgZWIgPSBleHByZXNzaW9uQnVpbGRlcigpO1xuXG4gIHJldHVybiBlYi5jYXN0PEJpZ0ludFN0cmluZz4oZWIuY2FzdChzcWxgKGp1bGlhbmRheSgnbm93JykgLSAyNDQwNTg3LjUpICogODY0MDAwMDAuMGAsIFwiaW50ZWdlclwiKSwgXCJ0ZXh0XCIpO1xufVxuIiwgImltcG9ydCB7IHR5cGUgS3lzZWx5LCBTcWxpdGVBZGFwdGVyLCBTcWxpdGVRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRTUUxpdGVCdWlsZGVyPERhdGFiYXNlID0gYW55PihcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbik6IEt5c2VseTxEYXRhYmFzZT4ge1xuICByZXR1cm4gZ2V0QnVpbGRlcjxEYXRhYmFzZT4oe1xuICAgIC4uLnJlcXVpcmVtZW50cyxcbiAgICBBZGFwdGVyOiBTcWxpdGVBZGFwdGVyLFxuICAgIFF1ZXJ5Q29tcGlsZXI6IFNxbGl0ZVF1ZXJ5Q29tcGlsZXIsXG4gIH0pO1xufVxuIiwgIi8qKlxuICogU1FMaXRlIGludHJvc3BlY3Rpb24gcXVlcmllcyB0byBiZSB1c2VkIGJ5IHRoZSBTUUxpdGUgYWRhcHRlcidzIGludHJvc3BlY3QgbWV0aG9kLlxuICogQG1vZHVsZSBzcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uXG4gKlxuICogUmVmZXJlbmNlczpcbiAqIGh0dHBzOi8vc3FsaXRlLm9yZy9wcmFnbWEuaHRtbFxuICogaHR0cHM6Ly9zcWxpdGUub3JnL3NjaGVtYXRhYi5odG1sXG4gKi9cblxuaW1wb3J0IHsgZXhwcmVzc2lvbkJ1aWxkZXIsIHR5cGUgTm90TnVsbCB9IGZyb20gXCJreXNlbHlcIjtcbmltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tIFwia3lzZWx5L2hlbHBlcnMvc3FsaXRlXCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0U1FMaXRlQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcblxuaW50ZXJmYWNlIERhdGFiYXNlIHtcbiAgLyoqIHRoZSBtYWluIHN5c3RlbSB0YWJsZSAqL1xuICBzcWxpdGVfc2NoZW1hOiB7XG4gICAgLyoqIG9iamVjdCBuYW1lICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBwYWdlIG51bWJlciBpbiByb290IGluZGV4IHdoZW4gb2JqZWN0IGlzIGEgdGFibGUuICovXG4gICAgcm9vdHBhZ2U6IG51bWJlcjtcbiAgICAvKiogc3FsIHN0YXRlbWVudCB0aGF0IGNhbiByZWNyZWF0ZSB0aGUgb2JqZWN0LiBudWxsIHdoZW4gaW50ZXJuYWwgaW5kZXggb2JqZWN0LiAqL1xuICAgIHNxbDogc3RyaW5nIHwgbnVsbDtcbiAgICAvKiogcmVsYXRlZCB0YWJsZS92aWV3IG5hbWUgd2hlbiBvYmplY3QgaXMgYW4gaW5kZXgvdHJpZ2dlci4gKi9cbiAgICB0YmxfbmFtZTogc3RyaW5nO1xuICAgIC8qKiBvYmplY3QgdHlwZSAqL1xuICAgIHR5cGU6IFwiaW5kZXhcIiB8IFwidGFibGVcIiB8IFwidHJpZ2dlclwiIHwgXCJ2aWV3XCI7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIHNoYXBlIG9mIGVhY2ggcm93IHJldHVybmVkIGJ5IGBwcmFnbWFfdGFibGVfbGlzdCh0YWJsZU5hbWU/KWAuXG4gKi9cbmludGVyZmFjZSBQcmFnbWFUYWJsZUxpc3Qge1xuICAvKiogb2JqZWN0IG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogc2NoZW1hIG5hbWUgKi9cbiAgc2NoZW1hOiBcIm1haW5cIiB8IFwidGVtcFwiO1xuICAvKiogb2JqZWN0IHR5cGUgKi9cbiAgdHlwZTogXCJzaGFkb3dcIiB8IFwidGFibGVcIiB8IFwidmlld1wiIHwgXCJ2aXJ0dWFsXCI7XG59XG5cbi8qKlxuICogVGhlIHNoYXBlIG9mIGVhY2ggcm93IHJldHVybmVkIGJ5IGBwcmFnbWFfdGFibGVfeGluZm8odGFibGVOYW1lKWAuXG4gKi9cbmludGVyZmFjZSBQcmFnbWFUYWJsZVhJbmZvIHtcbiAgLyoqIFwicmFuayB3aXRoaW4gY3VycmVudCByZXN1bHQgc2V0XCIgKi9cbiAgY2lkOiBudW1iZXI7XG4gIC8qKiBkZWZhdWx0IHZhbHVlICovXG4gIGRmbHRfdmFsdWU6IHN0cmluZyB8IG51bGw7XG4gIC8qKiAwIC0gbm9ybWFsLCAxIC0gaGlkZGVuLCAyLTMgLSBkeW5hbWljL3N0b3JlZCBnZW5lcmF0ZWQgKi9cbiAgaGlkZGVuOiAwIHwgMSB8IDIgfCAzO1xuICAvKiogY29sdW1uIG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogd2hldGhlciB0aGUgY29sdW1uIGNhbiBiZSBudWxsICovXG4gIG5vdG51bGw6IDAgfCAxO1xuICAvKiogMCBpZiBub3QgcGFydCBvZiB0aGUgcHJpbWFyeSBrZXksIG90aGVyd2lzZSB0aGUgMS1iYXNlZCBvcmRpbmFsIG51bWJlciBvZiB0aGUgY29sdW1uIGluIHRoZSBwcmltYXJ5IGtleSAqL1xuICBwazogbnVtYmVyO1xuICAvKiogZGF0YSB0eXBlICovXG4gIHR5cGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc2hhcGUgb2YgZWFjaCByb3cgcmV0dXJuZWQgYnkgYHByYWdtYV9mb3JlaWduX2tleV9saXN0KHRhYmxlTmFtZSlgLlxuICovXG5pbnRlcmZhY2UgUHJhZ21hRm9yZWlnbktleUxpc3Qge1xuICAvKiogY29sdW1uIG5hbWUgKi9cbiAgZnJvbTogc3RyaW5nO1xuICAvKiogb3JkaW5hbCBudW1iZXIgb2YgY29sdW1uIHdpdGhpbiB0aGUgZm9yZWlnbiBrZXkgKi9cbiAgc2VxOiBudW1iZXI7XG4gIC8qKiBmb3JlaWduIHRhYmxlIG5hbWUgKi9cbiAgdGFibGU6IHN0cmluZztcbiAgLyoqIGNvbHVtbiBuYW1lIGluIHRoZSBmb3JlaWduIHRhYmxlICovXG4gIHRvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZXNRdWVyeShyZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+KSB7XG4gIHJldHVybiBjb21waWxlKFxuICAgIGdldFNRTGl0ZUJ1aWxkZXI8RGF0YWJhc2U+KHJlcXVpcmVtZW50cylcbiAgICAgIC5zZWxlY3RGcm9tKGV4cHJlc3Npb25CdWlsZGVyKCkuZm48UHJhZ21hVGFibGVMaXN0PihcInByYWdtYV90YWJsZV9saXN0XCIsIFtdKS5hcyhcInRsXCIpKVxuICAgICAgLmxlZnRKb2luKFwic3FsaXRlX3NjaGVtYSBhcyBzc1wiLCAoamIpID0+IGpiLm9uUmVmKFwic3MudHlwZVwiLCBcIj1cIiwgXCJ0bC50eXBlXCIpLm9uUmVmKFwic3MubmFtZVwiLCBcIj1cIiwgXCJ0bC5uYW1lXCIpKVxuICAgICAgLndoZXJlKFwidGwudHlwZVwiLCBcImluXCIsIFtcInRhYmxlXCIsIFwidmlld1wiXSlcbiAgICAgIC8vIGV4Y2x1ZGUgdGVtcG9yYXJ5IHRhYmxlcy92aWV3c1xuICAgICAgLndoZXJlKFwidGwuc2NoZW1hXCIsIFwiPVwiLCBcIm1haW5cIilcbiAgICAgIC8vIGV4Y2x1ZGUgc3lzdGVtIHRhYmxlcy92aWV3c1xuICAgICAgLndoZXJlKFwidGwubmFtZVwiLCBcIm5vdCBsaWtlXCIsIFwic3FsaXRlXyVcIilcbiAgICAgIC5zZWxlY3QoW1widGwubmFtZVwiLCBcInNzLnNxbFwiXSlcbiAgICAgIC8vIHNpbmNlIHdlJ3JlIGV4Y2x1ZGluZyBzeXN0ZW0gdGFibGVzLCBgc3Muc3FsYCBzaG91bGQgbmV2ZXIgYmUgbnVsbCBoZXJlLlxuICAgICAgLiRuYXJyb3dUeXBlPHsgc3FsOiBOb3ROdWxsIH0+KClcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgIGpzb25BcnJheUZyb20oXG4gICAgICAgICAgZWJcbiAgICAgICAgICAgIC5zZWxlY3RGcm9tKGViLmZuPFByYWdtYVRhYmxlWEluZm8+KFwicHJhZ21hX3RhYmxlX3hpbmZvXCIsIFtcInRsLm5hbWVcIl0pLmFzKFwidHhpXCIpKVxuICAgICAgICAgICAgLmxlZnRKb2luKFxuICAgICAgICAgICAgICBlYi5mbjxQcmFnbWFGb3JlaWduS2V5TGlzdD4oXCJwcmFnbWFfZm9yZWlnbl9rZXlfbGlzdFwiLCBbXCJ0bC5uYW1lXCJdKS5hcyhcImZrbFwiKSxcbiAgICAgICAgICAgICAgXCJma2wuZnJvbVwiLFxuICAgICAgICAgICAgICBcInR4aS5uYW1lXCIsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBleGNsdWRlIGhpZGRlbiBjb2x1bW5zXG4gICAgICAgICAgICAud2hlcmUoXCJ0eGkuaGlkZGVuXCIsIFwiIT1cIiwgMSlcbiAgICAgICAgICAgIC5zZWxlY3QoW1xuICAgICAgICAgICAgICBcInR4aS5kZmx0X3ZhbHVlIGFzIGRlZmF1bHRcIixcbiAgICAgICAgICAgICAgXCJ0eGkubmFtZVwiLFxuICAgICAgICAgICAgICBcInR4aS5wa1wiLFxuICAgICAgICAgICAgICBcInR4aS50eXBlIGFzIGRhdGF0eXBlXCIsXG4gICAgICAgICAgICAgIFwiZmtsLnRhYmxlIGFzIGZrX3RhYmxlXCIsXG4gICAgICAgICAgICAgIFwiZmtsLnRvIGFzIGZrX2NvbHVtblwiLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIC5zZWxlY3QoKGViKSA9PiBbZWIoXCJ0eGkuaGlkZGVuXCIsIFwiaW5cIiwgWzIsIDNdKS5hcyhcImNvbXB1dGVkXCIpLCBlYihcInR4aS5ub3RudWxsXCIsIFwiPVwiLCAwKS5hcyhcIm51bGxhYmxlXCIpXSksXG4gICAgICAgICkuYXMoXCJjb2x1bW5zXCIpLFxuICAgICAgXSksXG4gICAgeyB0cmFuc2Zvcm1hdGlvbnM6IHsgY29sdW1uczogXCJqc29uLXBhcnNlXCIgfSB9LFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RhYmxlc1F1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiYW5pbWFsc1wiLFxuICAgICAgc3FsOiBcIkNSRUFURSBUQUJMRSBhbmltYWxzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBuYW1lIFRFWFQpO1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIklOVEVHRVJcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRFWFRcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInVzZXJzXCIsXG4gICAgICBzcWw6IFwiQ1JFQVRFIFRBQkxFIHVzZXJzIChpZCBVVUlEIFBSSU1BUlkgS0VZLCBjcmVhdGVkX2F0IFRJTUVTVEFNUCwgZGVsZXRlZF9hdCBUSU1FU1RBTVAsIHJvbGUgdmFyY2hhciwgbmFtZSB2YXJjaGFyLCBuYW1lX3JvbGUgdGV4dCk7XCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVVVJRFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVElNRVNUQU1QXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImRlbGV0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJUSU1FU1RBTVBcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXJcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXJcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZV9yb2xlXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29tcG9zaXRlX3BrXCIsXG4gICAgICBzcWw6IFwiQ1JFQVRFIFRBQkxFIGNvbXBvc2l0ZV9wayAoaWQgVVVJRCwgbmFtZSBURVhULCBjcmVhdGVkX2F0IHRpbWVzdGFtcCwgUFJJTUFSWSBLRVkgKGlkLCBuYW1lKSk7XCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVVVJRFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVEVYVFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDIsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NxbGl0ZS5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG5pbXBvcnQgeyBnZXRKc29uT2JqZWN0QXJncyB9IGZyb20gJy4uL3V0aWwvanNvbi1vYmplY3QtYXJncy5qcyc7XG4vKipcbiAqIEEgU1FMaXRlIGhlbHBlciBmb3IgYWdncmVnYXRpbmcgYSBzdWJxdWVyeSBpbnRvIGEgSlNPTiBhcnJheS5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiB5b3UndmUgaW5zdGFsbGVkIHRoZSBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAuXG4gKiBPdGhlcndpc2UgdGhlIG5lc3RlZCBzZWxlY3Rpb25zIHdpbGwgYmUgcmV0dXJuZWQgYXMgSlNPTiBzdHJpbmdzLlxuICpcbiAqIFRoZSBwbHVnaW4gY2FuIGJlIGluc3RhbGxlZCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNxbGl0ZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbiAqIGltcG9ydCB7IEt5c2VseSwgUGFyc2VKU09OUmVzdWx0c1BsdWdpbiwgU3FsaXRlRGlhbGVjdCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICpcbiAqIGNvbnN0IGRiID0gbmV3IEt5c2VseTxEYXRhYmFzZT4oe1xuICogICBkaWFsZWN0OiBuZXcgU3FsaXRlRGlhbGVjdCh7XG4gKiAgICAgZGF0YWJhc2U6IG5ldyBTcWxpdGUoJzptZW1vcnk6JylcbiAqICAgfSksXG4gKiAgIHBsdWdpbnM6IFtuZXcgUGFyc2VKU09OUmVzdWx0c1BsdWdpbigpXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvc3FsaXRlJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkFycmF5RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLm9yZGVyQnkoJ3BldC5uYW1lJylcbiAqICAgICApLmFzKCdwZXRzJylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXS5wZXRfaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXS5uYW1lXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoU1FMaXRlKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIChcbiAqICAgc2VsZWN0IGNvYWxlc2NlKGpzb25fZ3JvdXBfYXJyYXkoanNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIFwiYWdnXCIuXCJwZXRfaWRcIixcbiAqICAgICAnbmFtZScsIFwiYWdnXCIuXCJuYW1lXCJcbiAqICAgKSksICdbXScpIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIG9yZGVyIGJ5IFwicGV0XCIuXCJuYW1lXCJcbiAqICAgKSBhcyBcImFnZ1wiXG4gKiApIGFzIFwicGV0c1wiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkFycmF5RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBjb2FsZXNjZShqc29uX2dyb3VwX2FycmF5KGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MoZXhwci50b09wZXJhdGlvbk5vZGUoKSwgJ2FnZycpKX0pKSwgJ1tdJykgZnJvbSAke2V4cHJ9IGFzIGFnZylgO1xufVxuLyoqXG4gKiBBIFNRTGl0ZSBoZWxwZXIgZm9yIHR1cm5pbmcgYSBzdWJxdWVyeSBpbnRvIGEgSlNPTiBvYmplY3QuXG4gKlxuICogVGhlIHN1YnF1ZXJ5IG11c3Qgb25seSByZXR1cm4gb25lIHJvdy5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiB5b3UndmUgaW5zdGFsbGVkIHRoZSBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAuXG4gKiBPdGhlcndpc2UgdGhlIG5lc3RlZCBzZWxlY3Rpb25zIHdpbGwgYmUgcmV0dXJuZWQgYXMgSlNPTiBzdHJpbmdzLlxuICpcbiAqIFRoZSBwbHVnaW4gY2FuIGJlIGluc3RhbGxlZCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNxbGl0ZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbiAqIGltcG9ydCB7IEt5c2VseSwgUGFyc2VKU09OUmVzdWx0c1BsdWdpbiwgU3FsaXRlRGlhbGVjdCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICpcbiAqIGNvbnN0IGRiID0gbmV3IEt5c2VseTxEYXRhYmFzZT4oe1xuICogICBkaWFsZWN0OiBuZXcgU3FsaXRlRGlhbGVjdCh7XG4gKiAgICAgZGF0YWJhc2U6IG5ldyBTcWxpdGUoJzptZW1vcnk6JylcbiAqICAgfSksXG4gKiAgIHBsdWdpbnM6IFtuZXcgUGFyc2VKU09OUmVzdWx0c1BsdWdpbigpXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uT2JqZWN0RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3NxbGl0ZSdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25PYmplY3RGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAud2hlcmUoJ3BldC5pc19mYXZvcml0ZScsICc9JywgdHJ1ZSlcbiAqICAgICApLmFzKCdmYXZvcml0ZV9wZXQnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/LnBldF9pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/Lm5hbWVcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChTUUxpdGUpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwgKFxuICogICBzZWxlY3QganNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIFwib2JqXCIuXCJwZXRfaWRcIixcbiAqICAgICAnbmFtZScsIFwib2JqXCIuXCJuYW1lXCJcbiAqICAgKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBhbmQgXCJwZXRcIi5cImlzX2Zhdm9yaXRlXCIgPSA/XG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIFwiZmF2b3JpdGVfcGV0XCJcbiAqIGZyb20gXCJwZXJzb25cIjtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbk9iamVjdEZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QganNvbl9vYmplY3QoJHtzcWwuam9pbihnZXRTcWxpdGVKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnb2JqJykpfSkgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgU1FMaXRlIGBqc29uX29iamVjdGAgZnVuY3Rpb24uXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgb25seSB3b3JrcyBjb3JyZWN0bHkgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gLlxuICogT3RoZXJ3aXNlIHRoZSBuZXN0ZWQgc2VsZWN0aW9ucyB3aWxsIGJlIHJldHVybmVkIGFzIEpTT04gc3RyaW5ncy5cbiAqXG4gKiBUaGUgcGx1Z2luIGNhbiBiZSBpbnN0YWxsZWQgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgKiBhcyBTcWxpdGUgZnJvbSAnYmV0dGVyLXNxbGl0ZTMnXG4gKiBpbXBvcnQgeyBLeXNlbHksIFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4sIFNxbGl0ZURpYWxlY3QgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBjb25zdCBkYiA9IG5ldyBLeXNlbHk8RGF0YWJhc2U+KHtcbiAqICAgZGlhbGVjdDogbmV3IFNxbGl0ZURpYWxlY3Qoe1xuICogICAgIGRhdGFiYXNlOiBuZXcgU3FsaXRlKCc6bWVtb3J5OicpXG4gKiAgIH0pLFxuICogICBwbHVnaW5zOiBbbmV3IFBhcnNlSlNPTlJlc3VsdHNQbHVnaW4oKV1cbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHsganNvbkJ1aWxkT2JqZWN0IH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvc3FsaXRlJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAqICAgICAgIGZpcnN0OiBlYi5yZWYoJ2ZpcnN0X25hbWUnKSxcbiAqICAgICAgIGxhc3Q6IGViLnJlZignbGFzdF9uYW1lJyksXG4gKiAgICAgICBmdWxsOiBzcWw8c3RyaW5nPmBmaXJzdF9uYW1lIHx8XHUwMEEwJyAnIHx8IGxhc3RfbmFtZWBcbiAqICAgICB9KS5hcygnbmFtZScpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/Lm5hbWUuZmlyc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5sYXN0XG4gKiByZXN1bHRbMF0/Lm5hbWUuZnVsbFxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCBqc29uX29iamVjdChcbiAqICAgJ2ZpcnN0JywgZmlyc3RfbmFtZSxcbiAqICAgJ2xhc3QnLCBsYXN0X25hbWUsXG4gKiAgICdmdWxsJywgXCJmaXJzdF9uYW1lXCIgfHwgJyAnIHx8IFwibGFzdF9uYW1lXCJcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG5mdW5jdGlvbiBnZXRTcWxpdGVKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBnZXRKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTUUxpdGUganNvbkFycmF5RnJvbSBhbmQganNvbk9iamVjdEZyb20gZnVuY3Rpb25zIGNhbiBvbmx5IGhhbmRsZSBleHBsaWNpdCBzZWxlY3Rpb25zIGR1ZSB0byBsaW1pdGF0aW9ucyBvZiB0aGUganNvbl9vYmplY3QgZnVuY3Rpb24uIHNlbGVjdEFsbCgpIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBzdWJxdWVyeS4nKTtcbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7OztpT0FBQUEsSUNBQUMsSUNBQUMsSUFJTyxJQUFNQyxFQUEwRixDQUNyRyxLQUFNLENBQ0osTUFBTyxLQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLEtBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFFBQ1QsQ0FDRixFQU9PLFNBQVNDLEVBQXdCQyxFQUFpRCxDQUN2RixHQUFJLENBQUNBLEVBQ0gsTUFBTyxPQUdULElBQU1DLEVBQVlELEVBQWlCLFlBQVksRUFFL0MsT0FBSUMsRUFBVSxTQUFTLEtBQUssRUFDbkIsVUFHTEEsRUFBVSxTQUFTLE1BQU0sR0FBS0EsRUFBVSxT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S0FDL0IsUUFBU2dDLEVBQU8sU0FLaEIsZ0JBQWlCUyxFQUNqQixXQUFBQyxFQUNBLFdBQVksQ0FBQ0MsR0FBWSxDQUFDRixHQUFXLENBQUNDLEdBQWNQLEdBQWdCLEtBQ3BFLEtBQU1FLEVBQ04sU0FBQU0sRUFDQSxXQUFZTCxFQUFLLEVBQUlBLEVBQUssS0FDMUIsT0FBQXRDLEVBQ0EsTUFBTzRCLENBQ1QsRUFFT0csQ0FDVCxFQUNBLENBQUMsQ0FDSCxFQUVBLE9BQUFOLEVBQVEsS0FBTSxPQUFPRyxDQUFTLEVBQUksQ0FDaEMsUUFBU0csRUFDVCxLQUFNSCxFQUNOLE9BQVEsTUFDVixFQUVPSCxDQUNULEVBQ0EsQ0FDRSxLQUFNLENBQUUsT0FBUSxDQUFDLEVBQUcsS0FBTSxNQUFPLENBQ25DLENBQ0YsRUFDQSxTQUFVLEtBQ1osQ0FDRixDQUtPLFNBQVNvQixJQUFpQixDQUMvQixJQUFNckMsRUFBUSxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUssVUFBVyxFQUMxQ1MsRUFBUzZCLEVBQWdCLEVBRS9CLE9BQU81QixFQUFvQixDQUFFLE1BQUFWLEVBQU8sT0FBQVMsQ0FBTyxDQUFDLENBYzlDIiwKICAibmFtZXMiOiBbImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQSIsICJkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSIsICJkZWNsYXJlZERhdGFUeXBlIiwgInVwcGVyVHlwZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJnZXRTUUxpdGVCdWlsZGVyIiwgInJlcXVpcmVtZW50cyIsICJnZXRCdWlsZGVyIiwgIlNxbGl0ZUFkYXB0ZXIiLCAiU3FsaXRlUXVlcnlDb21waWxlciIsICJnZXRTZWxlY3RRdWVyeSIsICJkZXRhaWxzIiwgInJlcXVpcmVtZW50cyIsICJmaWx0ZXIiLCAicGFnZUluZGV4IiwgInBhZ2VTaXplIiwgInNvcnRPcmRlciIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJidWlsZGVyIiwgImdldFNRTGl0ZUJ1aWxkZXIiLCAiZmlsdGVyRXhwcmVzc2lvbiIsICJnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uIiwgIkFHR19OQU1FIiwgIkNPVU5UX1JFRiIsICJjb3VudFF1ZXJ5IiwgImViIiwgInNxbCIsICJjb21waWxlIiwgImpiIiwgInFiIiwgIml0ZW0iLCAibW9ja1NlbGVjdFF1ZXJ5IiwgImdldERlbGV0ZVF1ZXJ5IiwgInJvd3MiLCAiYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMiLCAiZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcyIsICJnZXRJbnNlcnRRdWVyeSIsICJyb3ciLCAiZ2V0VXBkYXRlUXVlcnkiLCAiY2hhbmdlcyIsICJleHByZXNzaW9uQnVpbGRlciIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJqc29uQXJyYXlGcm9tIiwgImV4cHIiLCAic3FsIiwgImdldFNxbGl0ZUpzb25PYmplY3RBcmdzIiwgImdldFNxbGl0ZUpzb25PYmplY3RBcmdzIiwgIm5vZGUiLCAidGFibGUiLCAiZ2V0SnNvbk9iamVjdEFyZ3MiLCAiZ2V0VGFibGVzUXVlcnkiLCAicmVxdWlyZW1lbnRzIiwgImNvbXBpbGUiLCAiZ2V0U1FMaXRlQnVpbGRlciIsICJleHByZXNzaW9uQnVpbGRlciIsICJqYiIsICJlYiIsICJqc29uQXJyYXlGcm9tIiwgIm1vY2tUYWJsZXNRdWVyeSIsICJzY2hlbWEiLCAiZmlsdGVyT3BlcmF0b3JzIiwgImNyZWF0ZVNRTGl0ZUFkYXB0ZXIiLCAicmVxdWlyZW1lbnRzIiwgImV4ZWN1dG9yIiwgIm90aGVyUmVxdWlyZW1lbnRzIiwgImRldGFpbHMiLCAib3B0aW9ucyIsICJxdWVyeSIsICJnZXREZWxldGVRdWVyeSIsICJlcnJvciIsICJjcmVhdGVBZGFwdGVyRXJyb3IiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAicm93cyIsICJ0YWJsZXNRdWVyeSIsICJnZXRUYWJsZXNRdWVyeSIsICJ0YWJsZXNFcnJvciIsICJ0YWJsZXMiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJnZXRTZWxlY3RRdWVyeSIsICJyZXN1bHRzIiwgImdldFVwZGF0ZVF1ZXJ5IiwgInJvdyIsICJXSVRIT1VUX1JPV0lEX1JFR0VYIiwgImFyZ3MiLCAic2NoZW1hcyIsICJ0YWJsZSIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJzcWwiLCAibWF4UEtTZWVuIiwgImNvbHVtbnNSZWNvcmQiLCAiY29sdW1uIiwgImluZGV4IiwgImRhdGF0eXBlIiwgImRlZmF1bHRWYWx1ZSIsICJma19jb2x1bW4iLCAiY29sdW1uTmFtZSIsICJwayIsICJhZmZpbml0eSIsICJkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSIsICJpc1Jvd0lkIiwgImlzQ29tcHV0ZWQiLCAibnVsbGFibGUiLCAiU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBIiwgIm1vY2tJbnRyb3NwZWN0IiwgIm1vY2tUYWJsZXNRdWVyeSJdCn0K