@prisma/studio-core 0.19.1 → 0.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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 p,b as q,c as r,d as s,e as t,f as u,g as v,h as w,i as x,j as y,k as z,l as A}from"../../chunk-GFC3LDB7.js";import{a as B,b as C}from"../../chunk-6EVUFNZS.js";import"../../chunk-UQDXNCLC.js";import{a as l,b as m,c as n,d as o}from"../../chunk-DTFJIWXL.js";import{a,b,c,d,e,f,g,h,i,j,l as k}from"../../chunk-PI3N7ZW6.js";import"../../chunk-N6ZIYSZ5.js";import"../../chunk-TB3YFW43.js";import"../../chunk-6QJ7HVIC.js";export{e as FULL_TABLE_SEARCH_MAX_TEXT_COLUMNS,d as FULL_TABLE_SEARCH_MIN_QUERY_LENGTH,c as FULL_TABLE_SEARCH_MYSQL_LOCK_WAIT_TIMEOUT_SECONDS,b as FULL_TABLE_SEARCH_POSTGRES_LOCK_TIMEOUT_MS,f as FULL_TABLE_SEARCH_TIMEOUT_MESSAGE,a as FULL_TABLE_SEARCH_TIMEOUT_MS,g as FullTableSearchTimeoutError,m as SQL_LINT_ALLOWED_STATEMENT_KEYWORDS,l as SQL_LINT_MAX_LENGTH,p as buildFullTableSearchPlan,h as createFullTableSearchExecutionState,o as createLintDiagnosticsFromPostgresError,z as createPostgresAdapter,j as executeQueryWithFullTableSearchGuardrails,C as getCancelQuery,u as getDeleteQuery,k as getFullTableSearchExpression,q as getInsertQuery,B as getPIDQuery,r as getSelectQuery,v as getTablesQuery,x as getTimezoneQuery,t as getUpdateQuery,i as isFullTableSearchRequest,A as mockIntrospect,s as mockSelectQuery,w as mockTablesQuery,y as mockTimezoneQuery,n as validateSqlForLint};
9
+ import{a as p,b as q,c as r,d as s,e as t,f as u,g as v,h as w,i as x,j as y,k as z,l as A}from"../../chunk-5TS6UALC.js";import"../../chunk-UQDXNCLC.js";import{a,b,c,d,e,f,g,h,i,j,l as k}from"../../chunk-PI3N7ZW6.js";import"../../chunk-N6ZIYSZ5.js";import{a as B,b as C}from"../../chunk-6EVUFNZS.js";import{a as l,b as m,c as n,d as o}from"../../chunk-DTFJIWXL.js";import"../../chunk-TB3YFW43.js";import"../../chunk-6QJ7HVIC.js";export{e as FULL_TABLE_SEARCH_MAX_TEXT_COLUMNS,d as FULL_TABLE_SEARCH_MIN_QUERY_LENGTH,c as FULL_TABLE_SEARCH_MYSQL_LOCK_WAIT_TIMEOUT_SECONDS,b as FULL_TABLE_SEARCH_POSTGRES_LOCK_TIMEOUT_MS,f as FULL_TABLE_SEARCH_TIMEOUT_MESSAGE,a as FULL_TABLE_SEARCH_TIMEOUT_MS,g as FullTableSearchTimeoutError,m as SQL_LINT_ALLOWED_STATEMENT_KEYWORDS,l as SQL_LINT_MAX_LENGTH,p as buildFullTableSearchPlan,h as createFullTableSearchExecutionState,o as createLintDiagnosticsFromPostgresError,z as createPostgresAdapter,j as executeQueryWithFullTableSearchGuardrails,C as getCancelQuery,u as getDeleteQuery,k as getFullTableSearchExpression,q as getInsertQuery,B as getPIDQuery,r as getSelectQuery,v as getTablesQuery,x as getTimezoneQuery,t as getUpdateQuery,i as isFullTableSearchRequest,A as mockIntrospect,s as mockSelectQuery,w as mockTablesQuery,y as mockTimezoneQuery,n as validateSqlForLint};
10
10
  //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
@@ -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 b,b as p}from"../../chunk-6EVUFNZS.js";import{c as q,d}from"../../chunk-DTFJIWXL.js";import"../../chunk-TB3YFW43.js";import{a as y,b as c}from"../../chunk-KHDR47QR.js";import"../../chunk-6QJ7HVIC.js";var h="1000ms",E="100ms",S="1000ms";function N(i){return{execute:async(t,a)=>{let{abortSignal:o}=a||{};if(!o)try{return[null,await i.unsafe(t.sql,t.parameters)]}catch(s){return[s]}if(o.aborted)return c();let l,n;try{let s,u=new Promise(P=>s=P);o.addEventListener("abort",l=()=>s());let f=i.reserve(),m=await Promise.race([f,u]);if(!m)return f.catch(()=>{}),c();if(n=m,o.aborted)return n.release(),c();let e=L(n),r=await Promise.race([e,u]);if(r===void 0)return e.catch(()=>{}).finally(()=>n?.release()),c();if(o.aborted)return n.release(),c();let v=n.unsafe(t.sql,t.parameters),w=await Promise.race([v,u]);return w?(n.release(),[null,w]):(Promise.allSettled([_(i,r),v]).finally(()=>n?.release()),c())}catch(s){return n?.release(),[s]}finally{l&&o?.removeEventListener("abort",l)}},async lintSql(t,a){let o=q(t.sql);if(!o.ok)return[null,{diagnostics:[o.diagnostic],schemaVersion:t.schemaVersion}];let l=async e=>{await i.begin(async r=>{await r.unsafe(`set local statement_timeout = '${h}'`),await r.unsafe(`set local lock_timeout = '${E}'`),await r.unsafe(`set local idle_in_transaction_session_timeout = '${S}'`),await r.unsafe(`EXPLAIN (FORMAT JSON) ${e}`)})},{abortSignal:n}=a||{},s=[];if(!n){for(let e of o.statements)try{await l(e.statement)}catch(r){s.push(...d({error:r,positionOffset:e.from,sql:e.statement}))}return[null,{diagnostics:s,schemaVersion:t.schemaVersion}]}if(n.aborted)return c();let u=()=>{},f=new Promise((e,r)=>{u=r}),m=()=>u(new y);n.addEventListener("abort",m);try{for(let e of o.statements)try{await Promise.race([l(e.statement),f])}catch(r){if(r instanceof y)return[r];s.push(...d({error:r,positionOffset:e.from,sql:e.statement}))}return[null,{diagnostics:s,schemaVersion:t.schemaVersion}]}catch(e){return e instanceof y?[e]:[null,{diagnostics:d({error:e,sql:t.sql}),schemaVersion:t.schemaVersion}]}finally{n.removeEventListener("abort",m)}}}}async function _(i,t){let a=p(t);try{await i.unsafe(a.sql,a.parameters)}catch(o){console.error("Failed to cancel query:",o)}}async function L(i){let t=b();try{let[a]=await i.unsafe(t.sql,t.parameters);return a?.pid}catch(a){console.error("Failed to get connection PID:",a);return}}export{N as createPostgresJSExecutor};
9
+ import{a as y,b as c}from"../../chunk-KHDR47QR.js";import{a as b,b as p}from"../../chunk-6EVUFNZS.js";import{c as q,d}from"../../chunk-DTFJIWXL.js";import"../../chunk-TB3YFW43.js";import"../../chunk-6QJ7HVIC.js";var h="1000ms",E="100ms",S="1000ms";function N(i){return{execute:async(t,a)=>{let{abortSignal:o}=a||{};if(!o)try{return[null,await i.unsafe(t.sql,t.parameters)]}catch(s){return[s]}if(o.aborted)return c();let l,n;try{let s,u=new Promise(P=>s=P);o.addEventListener("abort",l=()=>s());let f=i.reserve(),m=await Promise.race([f,u]);if(!m)return f.catch(()=>{}),c();if(n=m,o.aborted)return n.release(),c();let e=L(n),r=await Promise.race([e,u]);if(r===void 0)return e.catch(()=>{}).finally(()=>n?.release()),c();if(o.aborted)return n.release(),c();let v=n.unsafe(t.sql,t.parameters),w=await Promise.race([v,u]);return w?(n.release(),[null,w]):(Promise.allSettled([_(i,r),v]).finally(()=>n?.release()),c())}catch(s){return n?.release(),[s]}finally{l&&o?.removeEventListener("abort",l)}},async lintSql(t,a){let o=q(t.sql);if(!o.ok)return[null,{diagnostics:[o.diagnostic],schemaVersion:t.schemaVersion}];let l=async e=>{await i.begin(async r=>{await r.unsafe(`set local statement_timeout = '${h}'`),await r.unsafe(`set local lock_timeout = '${E}'`),await r.unsafe(`set local idle_in_transaction_session_timeout = '${S}'`),await r.unsafe(`EXPLAIN (FORMAT JSON) ${e}`)})},{abortSignal:n}=a||{},s=[];if(!n){for(let e of o.statements)try{await l(e.statement)}catch(r){s.push(...d({error:r,positionOffset:e.from,sql:e.statement}))}return[null,{diagnostics:s,schemaVersion:t.schemaVersion}]}if(n.aborted)return c();let u=()=>{},f=new Promise((e,r)=>{u=r}),m=()=>u(new y);n.addEventListener("abort",m);try{for(let e of o.statements)try{await Promise.race([l(e.statement),f])}catch(r){if(r instanceof y)return[r];s.push(...d({error:r,positionOffset:e.from,sql:e.statement}))}return[null,{diagnostics:s,schemaVersion:t.schemaVersion}]}catch(e){return e instanceof y?[e]:[null,{diagnostics:d({error:e,sql:t.sql}),schemaVersion:t.schemaVersion}]}finally{n.removeEventListener("abort",m)}}}}async function _(i,t){let a=p(t);try{await i.unsafe(a.sql,a.parameters)}catch(o){console.error("Failed to cancel query:",o)}}async function L(i){let t=b();try{let[a]=await i.unsafe(t.sql,t.parameters);return a?.pid}catch(a){console.error("Failed to get connection PID:",a);return}}export{N as createPostgresJSExecutor};
10
10
  //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9wb3N0Z3Jlc2pzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgdHlwZSB7IFJlc2VydmVkU3FsLCBTcWwgfSBmcm9tIFwicG9zdGdyZXNcIjtcblxuaW1wb3J0IHsgQWJvcnRFcnJvciwgdHlwZSBFeGVjdXRvciwgZ2V0QWJvcnRSZXN1bHQgfSBmcm9tIFwiLi4vZXhlY3V0b3JcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUxpbnREaWFnbm9zdGljc0Zyb21Qb3N0Z3Jlc0Vycm9yLFxuICB2YWxpZGF0ZVNxbEZvckxpbnQsXG59IGZyb20gXCIuLi9wb3N0Z3Jlcy1jb3JlL3NxbC1saW50XCI7XG5pbXBvcnQgeyBnZXRDYW5jZWxRdWVyeSwgZ2V0UElEUXVlcnkgfSBmcm9tIFwiLi4vcG9zdGdyZXMtY29yZS91dGlsaXR5XCI7XG5pbXBvcnQgdHlwZSB7IFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmNvbnN0IFNRTF9MSU5UX1NUQVRFTUVOVF9USU1FT1VUID0gXCIxMDAwbXNcIjtcbmNvbnN0IFNRTF9MSU5UX0xPQ0tfVElNRU9VVCA9IFwiMTAwbXNcIjtcbmNvbnN0IFNRTF9MSU5UX0lETEVfSU5fVFJBTlNBQ1RJT05fVElNRU9VVCA9IFwiMTAwMG1zXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb3N0Z3Jlc0pTRXhlY3V0b3IocG9zdGdyZXNqczogU3FsKTogRXhlY3V0b3Ige1xuICByZXR1cm4ge1xuICAgIGV4ZWN1dGU6IGFzeW5jIChxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgeyBhYm9ydFNpZ25hbCB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgaWYgKCFhYm9ydFNpZ25hbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvc3RncmVzanMudW5zYWZlKFxuICAgICAgICAgICAgcXVlcnkuc3FsLFxuICAgICAgICAgICAgcXVlcnkucGFyYW1ldGVycyBhcyBuZXZlcixcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIFtudWxsLCByZXN1bHQgYXMgbmV2ZXJdO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgIHJldHVybiBbZXJyb3IgYXMgRXJyb3JdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgYWJvcnRMaXN0ZW5lcjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGNvbm5lY3Rpb246IFJlc2VydmVkU3FsIHwgdW5kZWZpbmVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgYWJvcnRlZDogKCkgPT4gdm9pZDtcbiAgICAgICAgY29uc3QgYWJvcnRpb25Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oXG4gICAgICAgICAgKHJlc29sdmUpID0+IChhYm9ydGVkID0gcmVzb2x2ZSksXG4gICAgICAgICk7XG5cbiAgICAgICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBcImFib3J0XCIsXG4gICAgICAgICAgKGFib3J0TGlzdGVuZXIgPSAoKSA9PiBhYm9ydGVkKCkpLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm9taXNlID0gcG9zdGdyZXNqcy5yZXNlcnZlKCk7XG5cbiAgICAgICAgY29uc3QgY29ubmVjdGlvblJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgY29ubmVjdGlvblByb21pc2UsXG4gICAgICAgICAgYWJvcnRpb25Qcm9taXNlLFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoIWNvbm5lY3Rpb25SZXN1bHQpIHtcbiAgICAgICAgICB2b2lkIGNvbm5lY3Rpb25Qcm9taXNlLmNhdGNoKCgpID0+IHt9KTtcblxuICAgICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25SZXN1bHQ7XG5cbiAgICAgICAgaWYgKGFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICBjb25uZWN0aW9uLnJlbGVhc2UoKTtcblxuICAgICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGlkUHJvbWlzZSA9IGdldENvbm5lY3Rpb25QSUQoY29ubmVjdGlvbik7XG5cbiAgICAgICAgY29uc3QgcGlkUmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtwaWRQcm9taXNlLCBhYm9ydGlvblByb21pc2VdKTtcblxuICAgICAgICBpZiAocGlkUmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2b2lkIHBpZFByb21pc2UuY2F0Y2goKCkgPT4ge30pLmZpbmFsbHkoKCkgPT4gY29ubmVjdGlvbj8ucmVsZWFzZSgpKTtcblxuICAgICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICBjb25uZWN0aW9uLnJlbGVhc2UoKTtcblxuICAgICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVlcnlQcm9taXNlID0gY29ubmVjdGlvbi51bnNhZmUoXG4gICAgICAgICAgcXVlcnkuc3FsLFxuICAgICAgICAgIHF1ZXJ5LnBhcmFtZXRlcnMgYXMgbmV2ZXIsXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW3F1ZXJ5UHJvbWlzZSwgYWJvcnRpb25Qcm9taXNlXSk7XG5cbiAgICAgICAgaWYgKCFxdWVyeVJlc3VsdCkge1xuICAgICAgICAgIHZvaWQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgICAgICAgIGNhbmNlbFF1ZXJ5KHBvc3RncmVzanMsIHBpZFJlc3VsdCEpLFxuICAgICAgICAgICAgcXVlcnlQcm9taXNlLFxuICAgICAgICAgIF0pLmZpbmFsbHkoKCkgPT4gY29ubmVjdGlvbj8ucmVsZWFzZSgpKTtcblxuICAgICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29ubmVjdGlvbi5yZWxlYXNlKCk7XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCBxdWVyeVJlc3VsdCBhcyBuZXZlcl07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25uZWN0aW9uPy5yZWxlYXNlKCk7XG5cbiAgICAgICAgcmV0dXJuIFtlcnJvciBhcyBFcnJvcl07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoYWJvcnRMaXN0ZW5lcikge1xuICAgICAgICAgIGFib3J0U2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbGludFNxbChkZXRhaWxzLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVTcWxGb3JMaW50KGRldGFpbHMuc3FsKTtcblxuICAgICAgaWYgKCF2YWxpZGF0aW9uLm9rKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaWFnbm9zdGljczogW3ZhbGlkYXRpb24uZGlhZ25vc3RpY10sXG4gICAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBkZXRhaWxzLnNjaGVtYVZlcnNpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhlY3V0ZUxpbnQgPSBhc3luYyAoc3RhdGVtZW50U3FsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgYXdhaXQgcG9zdGdyZXNqcy5iZWdpbihhc3luYyAodHgpID0+IHtcbiAgICAgICAgICBhd2FpdCB0eC51bnNhZmUoXG4gICAgICAgICAgICBgc2V0IGxvY2FsIHN0YXRlbWVudF90aW1lb3V0ID0gJyR7U1FMX0xJTlRfU1RBVEVNRU5UX1RJTUVPVVR9J2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0eC51bnNhZmUoXG4gICAgICAgICAgICBgc2V0IGxvY2FsIGxvY2tfdGltZW91dCA9ICcke1NRTF9MSU5UX0xPQ0tfVElNRU9VVH0nYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHR4LnVuc2FmZShcbiAgICAgICAgICAgIGBzZXQgbG9jYWwgaWRsZV9pbl90cmFuc2FjdGlvbl9zZXNzaW9uX3RpbWVvdXQgPSAnJHtTUUxfTElOVF9JRExFX0lOX1RSQU5TQUNUSU9OX1RJTUVPVVR9J2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0eC51bnNhZmUoYEVYUExBSU4gKEZPUk1BVCBKU09OKSAke3N0YXRlbWVudFNxbH1gKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7IGFib3J0U2lnbmFsIH0gPSBvcHRpb25zIHx8IHt9O1xuICAgICAgY29uc3QgZGlhZ25vc3RpY3M6IE5vbk51bGxhYmxlPFxuICAgICAgICBBd2FpdGVkPFJldHVyblR5cGU8Tm9uTnVsbGFibGU8RXhlY3V0b3JbXCJsaW50U3FsXCJdPj4+WzFdXG4gICAgICA+W1wiZGlhZ25vc3RpY3NcIl0gPSBbXTtcblxuICAgICAgaWYgKCFhYm9ydFNpZ25hbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiB2YWxpZGF0aW9uLnN0YXRlbWVudHMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZUxpbnQoc3RhdGVtZW50LnN0YXRlbWVudCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goXG4gICAgICAgICAgICAgIC4uLmNyZWF0ZUxpbnREaWFnbm9zdGljc0Zyb21Qb3N0Z3Jlc0Vycm9yKHtcbiAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICBwb3NpdGlvbk9mZnNldDogc3RhdGVtZW50LmZyb20sXG4gICAgICAgICAgICAgICAgc3FsOiBzdGF0ZW1lbnQuc3RhdGVtZW50LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IGRpYWdub3N0aWNzLCBzY2hlbWFWZXJzaW9uOiBkZXRhaWxzLnNjaGVtYVZlcnNpb24gfV07XG4gICAgICB9XG5cbiAgICAgIGlmIChhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVqZWN0QWJvcnQ6IChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkID0gKCkgPT4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgYWJvcnRpb25Qcm9taXNlID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVqZWN0QWJvcnQgPSByZWplY3Q7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiByZWplY3RBYm9ydChuZXcgQWJvcnRFcnJvcigpKTtcbiAgICAgIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgdmFsaWRhdGlvbi5zdGF0ZW1lbnRzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgICAgIGV4ZWN1dGVMaW50KHN0YXRlbWVudC5zdGF0ZW1lbnQpLFxuICAgICAgICAgICAgICBhYm9ydGlvblByb21pc2UsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQWJvcnRFcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gW2Vycm9yXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGlhZ25vc3RpY3MucHVzaChcbiAgICAgICAgICAgICAgLi4uY3JlYXRlTGludERpYWdub3N0aWNzRnJvbVBvc3RncmVzRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uT2Zmc2V0OiBzdGF0ZW1lbnQuZnJvbSxcbiAgICAgICAgICAgICAgICBzcWw6IHN0YXRlbWVudC5zdGF0ZW1lbnQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgZGlhZ25vc3RpY3MsIHNjaGVtYVZlcnNpb246IGRldGFpbHMuc2NoZW1hVmVyc2lvbiB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFib3J0RXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gW2Vycm9yXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaWFnbm9zdGljczogY3JlYXRlTGludERpYWdub3N0aWNzRnJvbVBvc3RncmVzRXJyb3Ioe1xuICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgc3FsOiBkZXRhaWxzLnNxbCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2NoZW1hVmVyc2lvbjogZGV0YWlscy5zY2hlbWFWZXJzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuYXN5bmMgZnVuY3Rpb24gY2FuY2VsUXVlcnkocG9zdGdyZXNqczogU3FsLCBwaWQ6IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHF1ZXJ5ID0gZ2V0Q2FuY2VsUXVlcnkocGlkKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHBvc3RncmVzanMudW5zYWZlKHF1ZXJ5LnNxbCwgcXVlcnkucGFyYW1ldGVycyBhcyBuZXZlcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjYW5jZWwgcXVlcnk6XCIsIGVycm9yKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb25uZWN0aW9uUElEKGNvbm5lY3Rpb246IFJlc2VydmVkU3FsKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IHF1ZXJ5ID0gZ2V0UElEUXVlcnkoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgY29ubmVjdGlvbi51bnNhZmU8UXVlcnlSZXN1bHQ8dHlwZW9mIHF1ZXJ5Pj4oXG4gICAgICBxdWVyeS5zcWwsXG4gICAgICBxdWVyeS5wYXJhbWV0ZXJzIGFzIG5ldmVyLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0Py5waWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBnZXQgY29ubmVjdGlvbiBQSUQ6XCIsIGVycm9yKTtcblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1c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TyxDQUNsRCxDQUNGLENBQ0YsQ0FDRixDQUdBLGVBQWViLEVBQVlsQixFQUFpQmlDLEVBQXdCLENBQ2xFLElBQU1oQyxFQUFRaUMsRUFBZUQsQ0FBRyxFQUVoQyxHQUFJLENBQ0YsTUFBTWpDLEVBQVcsT0FBT0MsRUFBTSxJQUFLQSxFQUFNLFVBQW1CLENBQzlELE9BQVNHLEVBQU8sQ0FDZCxRQUFRLE1BQU0sMEJBQTJCQSxDQUFLLENBQ2hELENBQ0YsQ0FFQSxlQUFlVSxFQUFpQlAsRUFBMkMsQ0FDekUsSUFBTU4sRUFBUWtDLEVBQVksRUFFMUIsR0FBSSxDQUNGLEdBQU0sQ0FBQ0MsQ0FBTSxFQUFJLE1BQU03QixFQUFXLE9BQ2hDTixFQUFNLElBQ05BLEVBQU0sVUFDUixFQUVBLE9BQU9tQyxHQUFRLEdBQ2pCLE9BQVNoQyxFQUFPLENBQ2QsUUFBUSxNQUFNLGdDQUFpQ0EsQ0FBSyxFQUVwRCxNQUNGLENBQ0YiLAogICJuYW1lcyI6IFsiU1FMX0xJTlRfU1RBVEVNRU5UX1RJTUVPVVQiLCAiU1FMX0xJTlRfTE9DS19USU1FT1VUIiwgIlNRTF9MSU5UX0lETEVfSU5fVFJBTlNBQ1RJT05fVElNRU9VVCIsICJjcmVhdGVQb3N0Z3Jlc0pTRXhlY3V0b3IiLCAicG9zdGdyZXNqcyIsICJxdWVyeSIsICJvcHRpb25zIiwgImFib3J0U2lnbmFsIiwgImVycm9yIiwgImdldEFib3J0UmVzdWx0IiwgImFib3J0TGlzdGVuZXIiLCAiY29ubmVjdGlvbiIsICJhYm9ydGVkIiwgImFib3J0aW9uUHJvbWlzZSIsICJyZXNvbHZlIiwgImNvbm5lY3Rpb25Qcm9taXNlIiwgImNvbm5lY3Rpb25SZXN1bHQiLCAicGlkUHJvbWlzZSIsICJnZXRDb25uZWN0aW9uUElEIiwgInBpZFJlc3VsdCIsICJxdWVyeVByb21pc2UiLCAicXVlcnlSZXN1bHQiLCAiY2FuY2VsUXVlcnkiLCAiZGV0YWlscyIsICJ2YWxpZGF0aW9uIiwgInZhbGlkYXRlU3FsRm9yTGludCIsICJleGVjdXRlTGludCIsICJzdGF0ZW1lbnRTcWwiLCAidHgiLCAiZGlhZ25vc3RpY3MiLCAic3RhdGVtZW50IiwgImNyZWF0ZUxpbnREaWFnbm9zdGljc0Zyb21Qb3N0Z3Jlc0Vycm9yIiwgInJlamVjdEFib3J0IiwgIl8iLCAicmVqZWN0IiwgIm9uQWJvcnQiLCAiQWJvcnRFcnJvciIsICJwaWQiLCAiZ2V0Q2FuY2VsUXVlcnkiLCAiZ2V0UElEUXVlcnkiLCAicmVzdWx0Il0KfQo=
@@ -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 v}from"../../chunk-FJ7M2BJG.js";import{a as c}from"../../chunk-UQDXNCLC.js";import{c as G}from"../../chunk-DTFJIWXL.js";import{h as D,j as B,k as F,l as N}from"../../chunk-PI3N7ZW6.js";import{a as U}from"../../chunk-N6ZIYSZ5.js";import{A as q,C as S,D as M,p as k,q as y,r as C,s as P,x as j,y as w,z as g}from"../../chunk-TB3YFW43.js";import"../../chunk-6QJ7HVIC.js";var $={BLOB:{group:"raw"},INTEGER:{group:"numeric"},NULL:{group:"raw"},NUMERIC:{group:"numeric"},REAL:{group:"numeric"},TEXT:{group:"string"}};function K(t){if(!t)return"BLOB";let e=t.toUpperCase();return e.includes("INT")?"INTEGER":e.includes("TEXT")||e.includes("CHAR")||e.includes("CLOB")?"TEXT":e.includes("BLOB")?"BLOB":e.includes("REAL")||e.includes("FLOA")||e.includes("DOUB")?"REAL":"NUMERIC"}function b(t){return j({...t,Adapter:P,QueryCompiler:C})}function X(t,e){let{filter:o={after:"and",filters:[],kind:"FilterGroup"},fullTableSearchTerm:s,pageIndex:l,pageSize:i,sortOrder:n,table:{columns:a,name:r}}=t,u=b(e),m=M(o.filters,a),d=F({searchTerm:s,table:t.table}),T=d.predicates.length>0?p=>p.and([m(p),N(d,{dialect:"sqlite"})(p)]):m,f="__ps_agg__",A="__ps_count__",R=u.selectFrom(r).where(T).select(p=>p.cast(p.fn.coalesce(p.fn.countAll(),y.lit(0)),"text").as(A));return g(u.with(f,()=>R).selectFrom(r).innerJoin(f,p=>p.onTrue()).where(T).select(`${f}.${A}`).select(Object.keys(a)).$call(p=>n.reduce((_,E)=>_.orderBy(E.column,E.direction),p)).limit(i).offset(y.lit(BigInt(l)*BigInt(i))))}function Ee(){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 J(t,e){let{rows:o,table:{columns:s,name:l}}=t,i=b(e);return g(i.deleteFrom(l).$call(q(o,s)).returning(Object.keys(s)).returning(I().as("__ps_deleted_at__")))}function W(t,e){let{table:{columns:o,name:s},rows:l}=t,i=b(e);return g(i.insertInto(s).values(S({columns:o,context:"insert",supportsDefaultKeyword:!1,values:l})).returning(Object.keys(o)).returning(I().as("__ps_inserted_at__")))}function Y(t,e){let{changes:o,row:s,table:{columns:l,name:i}}=t,n=b(e);return g(n.updateTable(i).set(S({columns:l,context:"update",supportsDefaultKeyword:!1,values:o})).$call(q([s],l)).returning(Object.keys(l)).returning(I().as("__ps_updated_at__")))}function I(){let t=k();return t.cast(t.cast(y`(julianday('now') - 2440587.5) * 86400000.0`,"integer"),"text")}function V(t){return y`(select coalesce(json_group_array(json_object(${y.join(ae(t.toOperationNode(),"agg"))})), '[]') from ${t} as agg)`}function ae(t,e){try{return v(t,e)}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 z(t){return g(b(t).selectFrom(k().fn("pragma_table_list",[]).as("tl")).leftJoin("sqlite_schema as ss",e=>e.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(e=>[V(e.selectFrom(e.fn("pragma_table_xinfo",["tl.name"]).as("txi")).leftJoin(e.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 H(){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:1,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:"INTEGER",default:null,pk:1,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"created_at",datatype:"TIMESTAMP",default:"1970-01-01 00:00:00.000",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:1,nullable:0,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:"text",default:null,pk:1,computed:0,nullable:1,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:"1970-01-01 00:00:00.000",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]}]}function Z(t){let{error:e,sql:o}=t,s=Math.max(0,t.positionOffset??0),l=se(o.length);if(!(e instanceof Error))return[{from:l.from+s,message:"SQL lint failed.",severity:"error",source:"sqlite",to:l.to+s}];let i=oe(e),n=ie(o,e.message)??l;return[{code:i,from:n.from+s,message:le(e.message),severity:"error",source:"sqlite",to:n.to+s}]}async function ee(t,e,o){let s=G(e.sql);if(!s.ok)return[null,{diagnostics:[s.diagnostic],schemaVersion:e.schemaVersion}];let l=[];for(let i of s.statements)try{let n=w(`EXPLAIN ${i.statement}`),[a]=await t.execute(n,o);if(!a)continue;l.push(...Z({error:a,positionOffset:i.from,sql:i.statement}))}catch(n){l.push(...Z({error:n,positionOffset:i.from,sql:i.statement}))}return[null,{diagnostics:l,schemaVersion:e.schemaVersion}]}function oe(t){let e=t;return typeof e.code=="string"?e.code:void 0}function le(t){return t.toLowerCase().includes("interrupted")?"Lint query timed out. Simplify the statement and try again.":t}function se(t){return t<=0?{from:0,to:0}:{from:0,to:1}}function ie(t,e){let o=/near\s+["'`]([^"'`]+)["'`]/i.exec(e);if(o?.[1])return L(t,o[1]);let s=/no such table:\s*([^\s]+)/i.exec(e);if(s?.[1])return L(t,s[1]);let l=/no such column:\s*([^\s]+)/i.exec(e);return l?.[1]?L(t,l[1]):null}function L(t,e){let o=e.trim().replace(/^['"`]|['"`]$/g,"");if(o.length===0)return null;let s=t.toLowerCase(),l=o.toLowerCase(),i=s.indexOf(l);if(i>=0)return{from:i,to:Math.min(t.length,i+o.length)};let n=l.split(".").at(-1);if(!n)return null;let a=s.indexOf(n);return a<0?null:{from:a,to:Math.min(t.length,a+n.length)}}var h="main",ue=["=","!=",">",">=","<","<=","is","is not","like","not like"];function Ue(t){let{executor:e,...o}=t,s=D(),l=typeof e.lintSql=="function";async function i(n){try{let a=z(t),[r,u]=await e.execute(a,n);return r?c({error:r,query:a}):[null,re({query:a,tables:u})]}catch(a){return c({error:a})}}return{defaultSchema:h,capabilities:{fullTableSearch:!0,sqlDialect:"sqlite",sqlEditorAutocomplete:!0,sqlEditorLint:!0},async delete(n,a){try{let r=J(n,o),[u]=await e.execute(r,a);return u?c({error:u,query:r}):[null,{...n,query:r}]}catch(r){return c({error:r})}},async insert(n,a){try{let r=W(n,o),[u,m]=await e.execute(r,a);return u?c({error:u,query:r}):[null,{rows:m,query:r}]}catch(r){return c({error:r})}},async introspect(n){return await i(n)},async sqlSchema(n,a){let[r,u]=await i(a);return r?[r]:[null,U({defaultSchema:h,dialect:"sqlite",introspection:u})]},async sqlLint(n,a){if(l&&typeof e.lintSql=="function")try{let[r,u]=await e.lintSql(n,a);if(!r)return[null,u];if(!te(r))return c({error:r});l=!1}catch(r){if(!te(r))return c({error:r});l=!1}return await ee(e,n,a)},async query(n,a){try{let r=X(n,o),[u,m]=await B({executor:e,options:a,query:r,searchTerm:n.fullTableSearchTerm,state:s});return u?c({error:u,query:r}):[null,{filteredRowCount:m[0]?.__ps_count__||"0",rows:m,query:r}]}catch(r){return c({error:r})}},async raw(n,a){try{let r=w(n.sql),[u,m]=await e.execute(r,a);return u?c({error:u,query:r}):[null,{query:r,rowCount:m.length,rows:m}]}catch(r){return c({error:r})}},async update(n,a){try{let r=Y(n,o),[u,m]=await e.execute(r,a);if(u)return c({error:u,query:r});let[d]=m;return d?[null,{row:d,query:r}]:c({error:new Error("Update failed"),query:r})}catch(r){return c({error:r})}}}}function te(t){if(!(t instanceof Error))return!1;let e=t.message.toLowerCase();return e.includes("invalid procedure")||e.includes("not supported")||e.includes("method not allowed")}var ce=/WITHOUT\s+ROWID/i;function re(t){let{tables:e,query:o}=t;return{filterOperators:ue,query:o,schemas:e.reduce((s,l)=>{let{columns:i,name:n,sql:a}=l,r=0,u=i.reduce((m,d,T)=>{let{datatype:f,default:A,fk_column:R,name:p,pk:_}=d;r=Math.max(r,_);let E=K(f),x=f.toUpperCase()==="INTEGER"&&_===1&&r===1&&!i.slice(T+1).some(function(ne){return ne.pk>1})&&!ce.test(a),Q=!!d.computed,O=!!d.nullable&&!x;return m[p]={datatype:{...$[E],affinity:E,isArray:!1,isNative:!0,name:f,options:[],schema:h},defaultValue:A,fkColumn:R,fkSchema:R?h:null,fkTable:d.fk_table,isAutoincrement:x,isComputed:Q,isRequired:!O&&!x&&!Q&&A==null,name:p,nullable:O,pkPosition:_>0?_:null,schema:h,table:n},m},{});return s.main.tables[n]={columns:u,name:n,schema:"main"},s},{main:{tables:{},name:"main"}}),timezone:"UTC"}}function ve(){let t={parameters:[],sql:"<mocked>"},e=H();return re({query:t,tables:e})}export{Z as createLintDiagnosticsFromSQLiteError,Ue as createSQLiteAdapter,J as getDeleteQuery,W as getInsertQuery,X as getSelectQuery,z as getTablesQuery,Y as getUpdateQuery,ee as lintSQLiteWithExplainFallback,ve as mockIntrospect,Ee as mockSelectQuery,H as mockTablesQuery};
9
+ import{a as v}from"../../chunk-FJ7M2BJG.js";import{a as c}from"../../chunk-UQDXNCLC.js";import{h as D,j as B,k as F,l as N}from"../../chunk-PI3N7ZW6.js";import{a as U}from"../../chunk-N6ZIYSZ5.js";import{c as G}from"../../chunk-DTFJIWXL.js";import{A as q,C as S,D as M,p as k,q as y,r as C,s as P,x as j,y as w,z as g}from"../../chunk-TB3YFW43.js";import"../../chunk-6QJ7HVIC.js";var $={BLOB:{group:"raw"},INTEGER:{group:"numeric"},NULL:{group:"raw"},NUMERIC:{group:"numeric"},REAL:{group:"numeric"},TEXT:{group:"string"}};function K(t){if(!t)return"BLOB";let e=t.toUpperCase();return e.includes("INT")?"INTEGER":e.includes("TEXT")||e.includes("CHAR")||e.includes("CLOB")?"TEXT":e.includes("BLOB")?"BLOB":e.includes("REAL")||e.includes("FLOA")||e.includes("DOUB")?"REAL":"NUMERIC"}function b(t){return j({...t,Adapter:P,QueryCompiler:C})}function X(t,e){let{filter:o={after:"and",filters:[],kind:"FilterGroup"},fullTableSearchTerm:s,pageIndex:l,pageSize:i,sortOrder:n,table:{columns:a,name:r}}=t,u=b(e),m=M(o.filters,a),d=F({searchTerm:s,table:t.table}),T=d.predicates.length>0?p=>p.and([m(p),N(d,{dialect:"sqlite"})(p)]):m,f="__ps_agg__",A="__ps_count__",R=u.selectFrom(r).where(T).select(p=>p.cast(p.fn.coalesce(p.fn.countAll(),y.lit(0)),"text").as(A));return g(u.with(f,()=>R).selectFrom(r).innerJoin(f,p=>p.onTrue()).where(T).select(`${f}.${A}`).select(Object.keys(a)).$call(p=>n.reduce((_,E)=>_.orderBy(E.column,E.direction),p)).limit(i).offset(y.lit(BigInt(l)*BigInt(i))))}function Ee(){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 J(t,e){let{rows:o,table:{columns:s,name:l}}=t,i=b(e);return g(i.deleteFrom(l).$call(q(o,s)).returning(Object.keys(s)).returning(I().as("__ps_deleted_at__")))}function W(t,e){let{table:{columns:o,name:s},rows:l}=t,i=b(e);return g(i.insertInto(s).values(S({columns:o,context:"insert",supportsDefaultKeyword:!1,values:l})).returning(Object.keys(o)).returning(I().as("__ps_inserted_at__")))}function Y(t,e){let{changes:o,row:s,table:{columns:l,name:i}}=t,n=b(e);return g(n.updateTable(i).set(S({columns:l,context:"update",supportsDefaultKeyword:!1,values:o})).$call(q([s],l)).returning(Object.keys(l)).returning(I().as("__ps_updated_at__")))}function I(){let t=k();return t.cast(t.cast(y`(julianday('now') - 2440587.5) * 86400000.0`,"integer"),"text")}function V(t){return y`(select coalesce(json_group_array(json_object(${y.join(ae(t.toOperationNode(),"agg"))})), '[]') from ${t} as agg)`}function ae(t,e){try{return v(t,e)}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 z(t){return g(b(t).selectFrom(k().fn("pragma_table_list",[]).as("tl")).leftJoin("sqlite_schema as ss",e=>e.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(e=>[V(e.selectFrom(e.fn("pragma_table_xinfo",["tl.name"]).as("txi")).leftJoin(e.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 H(){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:1,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:"INTEGER",default:null,pk:1,computed:0,nullable:1,fk_table:null,fk_column:null},{name:"created_at",datatype:"TIMESTAMP",default:"1970-01-01 00:00:00.000",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:1,nullable:0,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:"text",default:null,pk:1,computed:0,nullable:1,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:"1970-01-01 00:00:00.000",pk:0,computed:0,nullable:1,fk_table:null,fk_column:null}]}]}function Z(t){let{error:e,sql:o}=t,s=Math.max(0,t.positionOffset??0),l=se(o.length);if(!(e instanceof Error))return[{from:l.from+s,message:"SQL lint failed.",severity:"error",source:"sqlite",to:l.to+s}];let i=oe(e),n=ie(o,e.message)??l;return[{code:i,from:n.from+s,message:le(e.message),severity:"error",source:"sqlite",to:n.to+s}]}async function ee(t,e,o){let s=G(e.sql);if(!s.ok)return[null,{diagnostics:[s.diagnostic],schemaVersion:e.schemaVersion}];let l=[];for(let i of s.statements)try{let n=w(`EXPLAIN ${i.statement}`),[a]=await t.execute(n,o);if(!a)continue;l.push(...Z({error:a,positionOffset:i.from,sql:i.statement}))}catch(n){l.push(...Z({error:n,positionOffset:i.from,sql:i.statement}))}return[null,{diagnostics:l,schemaVersion:e.schemaVersion}]}function oe(t){let e=t;return typeof e.code=="string"?e.code:void 0}function le(t){return t.toLowerCase().includes("interrupted")?"Lint query timed out. Simplify the statement and try again.":t}function se(t){return t<=0?{from:0,to:0}:{from:0,to:1}}function ie(t,e){let o=/near\s+["'`]([^"'`]+)["'`]/i.exec(e);if(o?.[1])return L(t,o[1]);let s=/no such table:\s*([^\s]+)/i.exec(e);if(s?.[1])return L(t,s[1]);let l=/no such column:\s*([^\s]+)/i.exec(e);return l?.[1]?L(t,l[1]):null}function L(t,e){let o=e.trim().replace(/^['"`]|['"`]$/g,"");if(o.length===0)return null;let s=t.toLowerCase(),l=o.toLowerCase(),i=s.indexOf(l);if(i>=0)return{from:i,to:Math.min(t.length,i+o.length)};let n=l.split(".").at(-1);if(!n)return null;let a=s.indexOf(n);return a<0?null:{from:a,to:Math.min(t.length,a+n.length)}}var h="main",ue=["=","!=",">",">=","<","<=","is","is not","like","not like"];function Ue(t){let{executor:e,...o}=t,s=D(),l=typeof e.lintSql=="function";async function i(n){try{let a=z(t),[r,u]=await e.execute(a,n);return r?c({error:r,query:a}):[null,re({query:a,tables:u})]}catch(a){return c({error:a})}}return{defaultSchema:h,capabilities:{fullTableSearch:!0,sqlDialect:"sqlite",sqlEditorAutocomplete:!0,sqlEditorLint:!0},async delete(n,a){try{let r=J(n,o),[u]=await e.execute(r,a);return u?c({error:u,query:r}):[null,{...n,query:r}]}catch(r){return c({error:r})}},async insert(n,a){try{let r=W(n,o),[u,m]=await e.execute(r,a);return u?c({error:u,query:r}):[null,{rows:m,query:r}]}catch(r){return c({error:r})}},async introspect(n){return await i(n)},async sqlSchema(n,a){let[r,u]=await i(a);return r?[r]:[null,U({defaultSchema:h,dialect:"sqlite",introspection:u})]},async sqlLint(n,a){if(l&&typeof e.lintSql=="function")try{let[r,u]=await e.lintSql(n,a);if(!r)return[null,u];if(!te(r))return c({error:r});l=!1}catch(r){if(!te(r))return c({error:r});l=!1}return await ee(e,n,a)},async query(n,a){try{let r=X(n,o),[u,m]=await B({executor:e,options:a,query:r,searchTerm:n.fullTableSearchTerm,state:s});return u?c({error:u,query:r}):[null,{filteredRowCount:m[0]?.__ps_count__||"0",rows:m,query:r}]}catch(r){return c({error:r})}},async raw(n,a){try{let r=w(n.sql),[u,m]=await e.execute(r,a);return u?c({error:u,query:r}):[null,{query:r,rowCount:m.length,rows:m}]}catch(r){return c({error:r})}},async update(n,a){try{let r=Y(n,o),[u,m]=await e.execute(r,a);if(u)return c({error:u,query:r});let[d]=m;return d?[null,{row:d,query:r}]:c({error:new Error("Update failed"),query:r})}catch(r){return c({error:r})}}}}function te(t){if(!(t instanceof Error))return!1;let e=t.message.toLowerCase();return e.includes("invalid procedure")||e.includes("not supported")||e.includes("method not allowed")}var ce=/WITHOUT\s+ROWID/i;function re(t){let{tables:e,query:o}=t;return{filterOperators:ue,query:o,schemas:e.reduce((s,l)=>{let{columns:i,name:n,sql:a}=l,r=0,u=i.reduce((m,d,T)=>{let{datatype:f,default:A,fk_column:R,name:p,pk:_}=d;r=Math.max(r,_);let E=K(f),x=f.toUpperCase()==="INTEGER"&&_===1&&r===1&&!i.slice(T+1).some(function(ne){return ne.pk>1})&&!ce.test(a),Q=!!d.computed,O=!!d.nullable&&!x;return m[p]={datatype:{...$[E],affinity:E,isArray:!1,isNative:!0,name:f,options:[],schema:h},defaultValue:A,fkColumn:R,fkSchema:R?h:null,fkTable:d.fk_table,isAutoincrement:x,isComputed:Q,isRequired:!O&&!x&&!Q&&A==null,name:p,nullable:O,pkPosition:_>0?_:null,schema:h,table:n},m},{});return s.main.tables[n]={columns:u,name:n,schema:"main"},s},{main:{tables:{},name:"main"}}),timezone:"UTC"}}function ve(){let t={parameters:[],sql:"<mocked>"},e=H();return re({query:t,tables:e})}export{Z as createLintDiagnosticsFromSQLiteError,Ue as createSQLiteAdapter,J as getDeleteQuery,W as getInsertQuery,X as getSelectQuery,z as getTablesQuery,Y as getUpdateQuery,ee as lintSQLiteWithExplainFallback,ve as mockIntrospect,Ee as mockSelectQuery,H as mockTablesQuery};
10
10
  //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL3NxbGl0ZS1jb3JlL2J1aWxkZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9kbWwudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjEwL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9zcWxpdGUuanMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uL2RhdGEvc3FsaXRlLWNvcmUvc3FsLWxpbnQudHMiLCAiLi4vLi4vLi4vZGF0YS9zcWxpdGUtY29yZS9hZGFwdGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgdHlwZSB7IERhdGFUeXBlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IHR5cGUgU1FMaXRlQWZmaW5pdHkgPVxuICB8IFwiQkxPQlwiXG4gIHwgXCJJTlRFR0VSXCJcbiAgfCBcIk5VTExcIlxuICB8IFwiTlVNRVJJQ1wiXG4gIHwgXCJSRUFMXCJcbiAgfCBcIlRFWFRcIjtcblxuZXhwb3J0IGNvbnN0IFNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQTogUmVjb3JkPFxuICBTUUxpdGVBZmZpbml0eSxcbiAgUGljazxEYXRhVHlwZSwgXCJmb3JtYXRcIiB8IFwiZ3JvdXBcIj5cbj4gPSB7XG4gIEJMT0I6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgSU5URUdFUjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgTlVMTDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBOVU1FUklDOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBSRUFMOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBURVhUOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG59O1xuXG4vKipcbiAqIGh0dHBzOi8vc3FsaXRlLm9yZy9kYXRhdHlwZTMuaHRtbCNkZXRlcm1pbmF0aW9uX29mX2NvbHVtbl9hZmZpbml0eVxuICpcbiAqIERPIE5PVCBDSEFOR0UgVEhFIE9SREVSIE9GIFRIRSBDSEVDS1MgSU4gVEhJUyBGVU5DVElPTiFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkFmZmluaXR5KFxuICBkZWNsYXJlZERhdGFUeXBlOiBzdHJpbmcgfCBudWxsLFxuKTogU1FMaXRlQWZmaW5pdHkge1xuICBpZiAoIWRlY2xhcmVkRGF0YVR5cGUpIHtcbiAgICByZXR1cm4gXCJCTE9CXCI7XG4gIH1cblxuICBjb25zdCB1cHBlclR5cGUgPSBkZWNsYXJlZERhdGFUeXBlLnRvVXBwZXJDYXNlKCk7XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIklOVFwiKSkge1xuICAgIHJldHVybiBcIklOVEVHRVJcIjtcbiAgfVxuXG4gIGlmIChcbiAgICB1cHBlclR5cGUuaW5jbHVkZXMoXCJURVhUXCIpIHx8XG4gICAgdXBwZXJUeXBlLmluY2x1ZGVzKFwiQ0hBUlwiKSB8fFxuICAgIHVwcGVyVHlwZS5pbmNsdWRlcyhcIkNMT0JcIilcbiAgKSB7XG4gICAgcmV0dXJuIFwiVEVYVFwiO1xuICB9XG5cbiAgaWYgKHVwcGVyVHlwZS5pbmNsdWRlcyhcIkJMT0JcIikpIHtcbiAgICByZXR1cm4gXCJCTE9CXCI7XG4gIH1cblxuICBpZiAoXG4gICAgdXBwZXJUeXBlLmluY2x1ZGVzKFwiUkVBTFwiKSB8fFxuICAgIHVwcGVyVHlwZS5pbmNsdWRlcyhcIkZMT0FcIikgfHxcbiAgICB1cHBlclR5cGUuaW5jbHVkZXMoXCJET1VCXCIpXG4gICkge1xuICAgIHJldHVybiBcIlJFQUxcIjtcbiAgfVxuXG4gIHJldHVybiBcIk5VTUVSSUNcIjtcbn1cbiIsICJpbXBvcnQgeyB0eXBlIEt5c2VseSwgU3FsaXRlQWRhcHRlciwgU3FsaXRlUXVlcnlDb21waWxlciB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBnZXRCdWlsZGVyIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gZ2V0U1FMaXRlQnVpbGRlcjxEYXRhYmFzZSA9IGFueT4oXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pOiBLeXNlbHk8RGF0YWJhc2U+IHtcbiAgcmV0dXJuIGdldEJ1aWxkZXI8RGF0YWJhc2U+KHtcbiAgICAuLi5yZXF1aXJlbWVudHMsXG4gICAgQWRhcHRlcjogU3FsaXRlQWRhcHRlcixcbiAgICBRdWVyeUNvbXBpbGVyOiBTcWxpdGVRdWVyeUNvbXBpbGVyLFxuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBleHByZXNzaW9uQnVpbGRlciwgdHlwZSBJbmZlclJlc3VsdCwgc3FsIH0gZnJvbSBcImt5c2VseVwiO1xuaW1wb3J0IHsgU2ltcGxlUmVmZXJlbmNlRXhwcmVzc2lvbiB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHR5cGUge1xuICBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgQWRhcHRlckluc2VydERldGFpbHMsXG4gIEFkYXB0ZXJRdWVyeURldGFpbHMsXG4gIEFkYXB0ZXJVcGRhdGVEZXRhaWxzLFxufSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHtcbiAgYnVpbGRGdWxsVGFibGVTZWFyY2hQbGFuLFxuICBnZXRGdWxsVGFibGVTZWFyY2hFeHByZXNzaW9uLFxufSBmcm9tIFwiLi4vZnVsbC10YWJsZS1zZWFyY2hcIjtcbmltcG9ydCB7XG4gIGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzLFxuICBhcHBseVRyYW5zZm9ybWF0aW9ucyxcbiAgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLFxuICBjb21waWxlLFxuICBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uLFxufSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgQmlnSW50U3RyaW5nIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IGdldFNRTGl0ZUJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5pbXBvcnQgeyBtb2NrVGFibGVzUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgc2VsZWN0cyBhbGwgY29sdW1ucyBmcm9tIGEgdGFibGUgd2l0aCBhbiB1bmJvdW5kIHJvdyBjb3VudCBhcyBgX19wc19jb3VudF9fYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBmaWx0ZXIgPSB7IGFmdGVyOiBcImFuZFwiLCBmaWx0ZXJzOiBbXSwga2luZDogXCJGaWx0ZXJHcm91cFwiIH0sXG4gICAgZnVsbFRhYmxlU2VhcmNoVGVybSxcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydE9yZGVyLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID1cbiAgICBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICBjb25zdCBhcHBsaWVkRmlsdGVyRXhwcmVzc2lvbiA9IGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oXG4gICAgZmlsdGVyLmZpbHRlcnMsXG4gICAgY29sdW1ucyxcbiAgKTtcbiAgY29uc3QgZnVsbFRhYmxlU2VhcmNoUGxhbiA9IGJ1aWxkRnVsbFRhYmxlU2VhcmNoUGxhbih7XG4gICAgc2VhcmNoVGVybTogZnVsbFRhYmxlU2VhcmNoVGVybSxcbiAgICB0YWJsZTogZGV0YWlscy50YWJsZSxcbiAgfSk7XG4gIGNvbnN0IGNvbWJpbmVkV2hlcmVFeHByZXNzaW9uID1cbiAgICBmdWxsVGFibGVTZWFyY2hQbGFuLnByZWRpY2F0ZXMubGVuZ3RoID4gMFxuICAgICAgPyAoZWI6IFBhcmFtZXRlcnM8UmV0dXJuVHlwZTx0eXBlb2YgZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbj4+WzBdKSA9PlxuICAgICAgICAgIGViLmFuZChbXG4gICAgICAgICAgICBhcHBsaWVkRmlsdGVyRXhwcmVzc2lvbihlYiksXG4gICAgICAgICAgICBnZXRGdWxsVGFibGVTZWFyY2hFeHByZXNzaW9uKGZ1bGxUYWJsZVNlYXJjaFBsYW4sIHtcbiAgICAgICAgICAgICAgZGlhbGVjdDogXCJzcWxpdGVcIixcbiAgICAgICAgICAgIH0pKGViKSxcbiAgICAgICAgICBdKVxuICAgICAgOiBhcHBsaWVkRmlsdGVyRXhwcmVzc2lvbjtcblxuICBjb25zdCBBR0dfTkFNRSA9IFwiX19wc19hZ2dfX1wiO1xuICBjb25zdCBDT1VOVF9SRUYgPSBcIl9fcHNfY291bnRfX1wiO1xuXG4gIGNvbnN0IGNvdW50UXVlcnkgPSBidWlsZGVyXG4gICAgLnNlbGVjdEZyb20odGFibGVOYW1lKVxuICAgIC53aGVyZShjb21iaW5lZFdoZXJlRXhwcmVzc2lvbilcbiAgICAuc2VsZWN0KChlYikgPT5cbiAgICAgIGViXG4gICAgICAgIC5jYXN0PEJpZ0ludFN0cmluZz4oXG4gICAgICAgICAgZWIuZm4uY29hbGVzY2UoZWIuZm4uY291bnRBbGwoKSwgc3FsLmxpdCgwKSksXG4gICAgICAgICAgXCJ0ZXh0XCIsXG4gICAgICAgIClcbiAgICAgICAgLmFzKENPVU5UX1JFRiksXG4gICAgKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAud2l0aChBR0dfTkFNRSwgKCkgPT4gY291bnRRdWVyeSlcbiAgICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAgIC5pbm5lckpvaW4oQUdHX05BTUUsIChqYikgPT4gamIub25UcnVlKCkpXG4gICAgICAvLyBUT0RPOiBjdXJzb3IgcGFnaW5hdGlvbj9cbiAgICAgIC53aGVyZShjb21iaW5lZFdoZXJlRXhwcmVzc2lvbilcbiAgICAgIC5zZWxlY3QoXG4gICAgICAgIGAke0FHR19OQU1FfS4ke0NPVU5UX1JFRn1gIHNhdGlzZmllcyBTaW1wbGVSZWZlcmVuY2VFeHByZXNzaW9uPFxuICAgICAgICAgIHsgW0FHR19OQU1FXTogSW5mZXJSZXN1bHQ8dHlwZW9mIGNvdW50UXVlcnk+W251bWJlcl0gfSxcbiAgICAgICAgICB0eXBlb2YgQUdHX05BTUVcbiAgICAgICAgPixcbiAgICAgIClcbiAgICAgIC5zZWxlY3QoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAuJGNhbGwoKHFiKSA9PlxuICAgICAgICBzb3J0T3JkZXIucmVkdWNlKFxuICAgICAgICAgIChxYiwgaXRlbSkgPT4gcWIub3JkZXJCeShpdGVtLmNvbHVtbiwgaXRlbS5kaXJlY3Rpb24pLFxuICAgICAgICAgIHFiLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLmxpbWl0KHBhZ2VTaXplKVxuICAgICAgLy8gd2UncmUgaW5qZWN0aW5nIHRoZSBvZmZzZXQgdmFsdWUgaGVyZSB0byBhdm9pZCBzZXJpYWxpemF0aW9uIGNvbXBsZXhpdHkgKGBiaWdpbnRgIGlzIGEgbm8tZ28gZm9yIGBKU09OLnN0cmluZ2lmeWApLlxuICAgICAgLm9mZnNldChzcWwubGl0KEJpZ0ludChwYWdlSW5kZXgpICogQmlnSW50KHBhZ2VTaXplKSkpLFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NlbGVjdFF1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKFwiMjAyNS0wMS0yNlQyMTo1NjoxMi4zNDVaXCIpLFxuICAgICAgZGVsZXRlZF9hdDogbnVsbCxcbiAgICAgIGlkOiAxLFxuICAgICAgbmFtZTogXCJKb2huIERvZVwiLFxuICAgICAgX19wc19jb3VudF9fOiBcIjJcIixcbiAgICAgIHJvbGU6IFwiYWRtaW5cIixcbiAgICAgIG5hbWVfcm9sZTogXCJKb25uIERvZSAtIGFkbWluXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjA6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMixcbiAgICAgIG5hbWU6IFwiSmFuZSBEb2VcIixcbiAgICAgIF9fcHNfY291bnRfXzogXCIyXCIsXG4gICAgICByb2xlOiBcInBvd2VydXNlclwiLFxuICAgICAgbmFtZV9yb2xlOiBcIkphbmUgRG9lIC0gcG93ZXJ1c2VyXCIsXG4gICAgfSxcbiAgXSBhcyBjb25zdCBzYXRpc2ZpZXMge1xuICAgIC8vIGJlc3QgZWZmb3J0IG5vIG5lZWQgdG8gZ28gb3ZlcmJvYXJkXG4gICAgW0sgaW5cbiAgICAgIHwgUmV0dXJuVHlwZTx0eXBlb2YgbW9ja1RhYmxlc1F1ZXJ5PlsxXVtcImNvbHVtbnNcIl1bbnVtYmVyXVtcIm5hbWVcIl1cbiAgICAgIHwgXCJfX3BzX2NvdW50X19cIl06IHVua25vd247XG4gIH1bXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBkZWxldGVzIGEgZ2l2ZW4gc2V0IG9mIHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHJvd3MsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPVxuICAgIGdldFNRTGl0ZUJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5kZWxldGVGcm9tKHRhYmxlTmFtZSlcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhyb3dzLCBjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfZGVsZXRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIG9uZSBvciBtb3JlIHJvd3MgaW50byBhIHRhYmxlIGFuZCByZXR1cm5zIHRoZSBpbnNlcnRlZCByb3dzIGFsb25nIHdpdGggdGhlaXIgYGN0aWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgICByb3dzLFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID1cbiAgICBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAuaW5zZXJ0SW50byh0YWJsZU5hbWUpXG4gICAgICAudmFsdWVzKFxuICAgICAgICBhcHBseVRyYW5zZm9ybWF0aW9ucyh7XG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb250ZXh0OiBcImluc2VydFwiLFxuICAgICAgICAgIHN1cHBvcnRzRGVmYXVsdEtleXdvcmQ6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlczogcm93cyxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAucmV0dXJuaW5nKE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzKCkuYXMoXCJfX3BzX2luc2VydGVkX2F0X19cIikpLFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHVwZGF0ZXMgYSBnaXZlbiByb3cgaW4gYSB0YWJsZSB3aXRoIGdpdmVuIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgcm93LFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID1cbiAgICBnZXRTUUxpdGVCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAudXBkYXRlVGFibGUodGFibGVOYW1lKVxuICAgICAgLnNldChcbiAgICAgICAgYXBwbHlUcmFuc2Zvcm1hdGlvbnMoe1xuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29udGV4dDogXCJ1cGRhdGVcIixcbiAgICAgICAgICBzdXBwb3J0c0RlZmF1bHRLZXl3b3JkOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZXM6IGNoYW5nZXMsXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKFtyb3ddLCBjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfdXBkYXRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpIHtcbiAgY29uc3QgZWIgPSBleHByZXNzaW9uQnVpbGRlcigpO1xuXG4gIHJldHVybiBlYi5jYXN0PEJpZ0ludFN0cmluZz4oXG4gICAgZWIuY2FzdChzcWxgKGp1bGlhbmRheSgnbm93JykgLSAyNDQwNTg3LjUpICogODY0MDAwMDAuMGAsIFwiaW50ZWdlclwiKSxcbiAgICBcInRleHRcIixcbiAgKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc3FsaXRlLmQudHNcIiAvPlxuaW1wb3J0IHsgc3FsIH0gZnJvbSAnLi4vcmF3LWJ1aWxkZXIvc3FsLmpzJztcbmltcG9ydCB7IGdldEpzb25PYmplY3RBcmdzIH0gZnJvbSAnLi4vdXRpbC9qc29uLW9iamVjdC1hcmdzLmpzJztcbi8qKlxuICogQSBTUUxpdGUgaGVscGVyIGZvciBhZ2dyZWdhdGluZyBhIHN1YnF1ZXJ5IGludG8gYSBKU09OIGFycmF5LlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIG9ubHkgd29ya3MgY29ycmVjdGx5IGlmIHlvdSd2ZSBpbnN0YWxsZWQgdGhlIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYC5cbiAqIE90aGVyd2lzZSB0aGUgbmVzdGVkIHNlbGVjdGlvbnMgd2lsbCBiZSByZXR1cm5lZCBhcyBKU09OIHN0cmluZ3MuXG4gKlxuICogVGhlIHBsdWdpbiBjYW4gYmUgaW5zdGFsbGVkIGxpa2UgdGhpczpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgU3FsaXRlIGZyb20gJ2JldHRlci1zcWxpdGUzJ1xuICogaW1wb3J0IHsgS3lzZWx5LCBQYXJzZUpTT05SZXN1bHRzUGx1Z2luLCBTcWxpdGVEaWFsZWN0IH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gKlxuICogY29uc3QgZGIgPSBuZXcgS3lzZWx5PERhdGFiYXNlPih7XG4gKiAgIGRpYWxlY3Q6IG5ldyBTcWxpdGVEaWFsZWN0KHtcbiAqICAgICBkYXRhYmFzZTogbmV3IFNxbGl0ZSgnOm1lbW9yeTonKVxuICogICB9KSxcbiAqICAgcGx1Z2luczogW25ldyBQYXJzZUpTT05SZXN1bHRzUGx1Z2luKCldXG4gKiB9KVxuICogYGBgXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9zcWxpdGUnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQXJyYXlGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAub3JkZXJCeSgncGV0Lm5hbWUnKVxuICogICAgICkuYXMoJ3BldHMnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5wZXRzWzBdLnBldF9pZFxuICogcmVzdWx0WzBdPy5wZXRzWzBdLm5hbWVcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChTUUxpdGUpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwgKFxuICogICBzZWxlY3QgY29hbGVzY2UoanNvbl9ncm91cF9hcnJheShqc29uX29iamVjdChcbiAqICAgICAncGV0X2lkJywgXCJhZ2dcIi5cInBldF9pZFwiLFxuICogICAgICduYW1lJywgXCJhZ2dcIi5cIm5hbWVcIlxuICogICApKSwgJ1tdJykgZnJvbSAoXG4gKiAgICAgc2VsZWN0IFwicGV0XCIuXCJpZFwiIGFzIFwicGV0X2lkXCIsIFwicGV0XCIuXCJuYW1lXCJcbiAqICAgICBmcm9tIFwicGV0XCJcbiAqICAgICB3aGVyZSBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gKiAgICAgb3JkZXIgYnkgXCJwZXRcIi5cIm5hbWVcIlxuICogICApIGFzIFwiYWdnXCJcbiAqICkgYXMgXCJwZXRzXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQXJyYXlGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGNvYWxlc2NlKGpzb25fZ3JvdXBfYXJyYXkoanNvbl9vYmplY3QoJHtzcWwuam9pbihnZXRTcWxpdGVKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnYWdnJykpfSkpLCAnW10nKSBmcm9tICR7ZXhwcn0gYXMgYWdnKWA7XG59XG4vKipcbiAqIEEgU1FMaXRlIGhlbHBlciBmb3IgdHVybmluZyBhIHN1YnF1ZXJ5IGludG8gYSBKU09OIG9iamVjdC5cbiAqXG4gKiBUaGUgc3VicXVlcnkgbXVzdCBvbmx5IHJldHVybiBvbmUgcm93LlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIG9ubHkgd29ya3MgY29ycmVjdGx5IGlmIHlvdSd2ZSBpbnN0YWxsZWQgdGhlIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYC5cbiAqIE90aGVyd2lzZSB0aGUgbmVzdGVkIHNlbGVjdGlvbnMgd2lsbCBiZSByZXR1cm5lZCBhcyBKU09OIHN0cmluZ3MuXG4gKlxuICogVGhlIHBsdWdpbiBjYW4gYmUgaW5zdGFsbGVkIGxpa2UgdGhpczpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgU3FsaXRlIGZyb20gJ2JldHRlci1zcWxpdGUzJ1xuICogaW1wb3J0IHsgS3lzZWx5LCBQYXJzZUpTT05SZXN1bHRzUGx1Z2luLCBTcWxpdGVEaWFsZWN0IH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gKlxuICogY29uc3QgZGIgPSBuZXcgS3lzZWx5PERhdGFiYXNlPih7XG4gKiAgIGRpYWxlY3Q6IG5ldyBTcWxpdGVEaWFsZWN0KHtcbiAqICAgICBkYXRhYmFzZTogbmV3IFNxbGl0ZSgnOm1lbW9yeTonKVxuICogICB9KSxcbiAqICAgcGx1Z2luczogW25ldyBQYXJzZUpTT05SZXN1bHRzUGx1Z2luKCldXG4gKiB9KVxuICogYGBgXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25PYmplY3RGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvc3FsaXRlJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbk9iamVjdEZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC53aGVyZSgncGV0LmlzX2Zhdm9yaXRlJywgJz0nLCB0cnVlKVxuICogICAgICkuYXMoJ2Zhdm9yaXRlX3BldCcpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ucGV0X2lkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCBqc29uX29iamVjdChcbiAqICAgICAncGV0X2lkJywgXCJvYmpcIi5cInBldF9pZFwiLFxuICogICAgICduYW1lJywgXCJvYmpcIi5cIm5hbWVcIlxuICogICApIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIGFuZCBcInBldFwiLlwiaXNfZmF2b3JpdGVcIiA9ID9cbiAqICAgKSBhcyBvYmpcbiAqICkgYXMgXCJmYXZvcml0ZV9wZXRcIlxuICogZnJvbSBcInBlcnNvblwiO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uT2JqZWN0RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBqc29uX29iamVjdCgke3NxbC5qb2luKGdldFNxbGl0ZUpzb25PYmplY3RBcmdzKGV4cHIudG9PcGVyYXRpb25Ob2RlKCksICdvYmonKSl9KSBmcm9tICR7ZXhwcn0gYXMgb2JqKWA7XG59XG4vKipcbiAqIFRoZSBTUUxpdGUgYGpzb25fb2JqZWN0YCBmdW5jdGlvbi5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBvbmx5IHdvcmtzIGNvcnJlY3RseSBpZiB5b3UndmUgaW5zdGFsbGVkIHRoZSBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAuXG4gKiBPdGhlcndpc2UgdGhlIG5lc3RlZCBzZWxlY3Rpb25zIHdpbGwgYmUgcmV0dXJuZWQgYXMgSlNPTiBzdHJpbmdzLlxuICpcbiAqIFRoZSBwbHVnaW4gY2FuIGJlIGluc3RhbGxlZCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNxbGl0ZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbiAqIGltcG9ydCB7IEt5c2VseSwgUGFyc2VKU09OUmVzdWx0c1BsdWdpbiwgU3FsaXRlRGlhbGVjdCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICpcbiAqIGNvbnN0IGRiID0gbmV3IEt5c2VseTxEYXRhYmFzZT4oe1xuICogICBkaWFsZWN0OiBuZXcgU3FsaXRlRGlhbGVjdCh7XG4gKiAgICAgZGF0YWJhc2U6IG5ldyBTcWxpdGUoJzptZW1vcnk6JylcbiAqICAgfSksXG4gKiAgIHBsdWdpbnM6IFtuZXcgUGFyc2VKU09OUmVzdWx0c1BsdWdpbigpXVxuICogfSlcbiAqIGBgYFxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgeyBqc29uQnVpbGRPYmplY3QgfSBmcm9tICdreXNlbHkvaGVscGVycy9zcWxpdGUnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQnVpbGRPYmplY3Qoe1xuICogICAgICAgZmlyc3Q6IGViLnJlZignZmlyc3RfbmFtZScpLFxuICogICAgICAgbGFzdDogZWIucmVmKCdsYXN0X25hbWUnKSxcbiAqICAgICAgIGZ1bGw6IHNxbDxzdHJpbmc+YGZpcnN0X25hbWUgfHxcdTAwQTAnICcgfHwgbGFzdF9uYW1lYFxuICogICAgIH0pLmFzKCduYW1lJylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8ubmFtZS5maXJzdFxuICogcmVzdWx0WzBdPy5uYW1lLmxhc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5mdWxsXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoU1FMaXRlKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIGpzb25fb2JqZWN0KFxuICogICAnZmlyc3QnLCBmaXJzdF9uYW1lLFxuICogICAnbGFzdCcsIGxhc3RfbmFtZSxcbiAqICAgJ2Z1bGwnLCBcImZpcnN0X25hbWVcIiB8fCAnICcgfHwgXCJsYXN0X25hbWVcIlxuICogKSBhcyBcIm5hbWVcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25CdWlsZE9iamVjdChvYmopIHtcbiAgICByZXR1cm4gc3FsIGBqc29uX29iamVjdCgke3NxbC5qb2luKE9iamVjdC5rZXlzKG9iaikuZmxhdE1hcCgoaykgPT4gW3NxbC5saXQoayksIG9ialtrXV0pKX0pYDtcbn1cbmZ1bmN0aW9uIGdldFNxbGl0ZUpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NRTGl0ZSBqc29uQXJyYXlGcm9tIGFuZCBqc29uT2JqZWN0RnJvbSBmdW5jdGlvbnMgY2FuIG9ubHkgaGFuZGxlIGV4cGxpY2l0IHNlbGVjdGlvbnMgZHVlIHRvIGxpbWl0YXRpb25zIG9mIHRoZSBqc29uX29iamVjdCBmdW5jdGlvbi4gc2VsZWN0QWxsKCkgaXMgbm90IGFsbG93ZWQgaW4gdGhlIHN1YnF1ZXJ5LicpO1xuICAgIH1cbn1cbiIsICIvKipcbiAqIFNRTGl0ZSBpbnRyb3NwZWN0aW9uIHF1ZXJpZXMgdG8gYmUgdXNlZCBieSB0aGUgU1FMaXRlIGFkYXB0ZXIncyBpbnRyb3NwZWN0IG1ldGhvZC5cbiAqIEBtb2R1bGUgc3FsaXRlLWNvcmUvaW50cm9zcGVjdGlvblxuICpcbiAqIFJlZmVyZW5jZXM6XG4gKiBodHRwczovL3NxbGl0ZS5vcmcvcHJhZ21hLmh0bWxcbiAqIGh0dHBzOi8vc3FsaXRlLm9yZy9zY2hlbWF0YWIuaHRtbFxuICovXG5cbmltcG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyLCB0eXBlIE5vdE51bGwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSBcImt5c2VseS9oZWxwZXJzL3NxbGl0ZVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUsIHR5cGUgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB7IGdldFNRTGl0ZUJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5cbmludGVyZmFjZSBEYXRhYmFzZSB7XG4gIC8qKiB0aGUgbWFpbiBzeXN0ZW0gdGFibGUgKi9cbiAgc3FsaXRlX3NjaGVtYToge1xuICAgIC8qKiBvYmplY3QgbmFtZSAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogcGFnZSBudW1iZXIgaW4gcm9vdCBpbmRleCB3aGVuIG9iamVjdCBpcyBhIHRhYmxlLiAqL1xuICAgIHJvb3RwYWdlOiBudW1iZXI7XG4gICAgLyoqIHNxbCBzdGF0ZW1lbnQgdGhhdCBjYW4gcmVjcmVhdGUgdGhlIG9iamVjdC4gbnVsbCB3aGVuIGludGVybmFsIGluZGV4IG9iamVjdC4gKi9cbiAgICBzcWw6IHN0cmluZyB8IG51bGw7XG4gICAgLyoqIHJlbGF0ZWQgdGFibGUvdmlldyBuYW1lIHdoZW4gb2JqZWN0IGlzIGFuIGluZGV4L3RyaWdnZXIuICovXG4gICAgdGJsX25hbWU6IHN0cmluZztcbiAgICAvKiogb2JqZWN0IHR5cGUgKi9cbiAgICB0eXBlOiBcImluZGV4XCIgfCBcInRhYmxlXCIgfCBcInRyaWdnZXJcIiB8IFwidmlld1wiO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBzaGFwZSBvZiBlYWNoIHJvdyByZXR1cm5lZCBieSBgcHJhZ21hX3RhYmxlX2xpc3QodGFibGVOYW1lPylgLlxuICovXG5pbnRlcmZhY2UgUHJhZ21hVGFibGVMaXN0IHtcbiAgLyoqIG9iamVjdCBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIHNjaGVtYSBuYW1lICovXG4gIHNjaGVtYTogXCJtYWluXCIgfCBcInRlbXBcIjtcbiAgLyoqIG9iamVjdCB0eXBlICovXG4gIHR5cGU6IFwic2hhZG93XCIgfCBcInRhYmxlXCIgfCBcInZpZXdcIiB8IFwidmlydHVhbFwiO1xufVxuXG4vKipcbiAqIFRoZSBzaGFwZSBvZiBlYWNoIHJvdyByZXR1cm5lZCBieSBgcHJhZ21hX3RhYmxlX3hpbmZvKHRhYmxlTmFtZSlgLlxuICovXG5pbnRlcmZhY2UgUHJhZ21hVGFibGVYSW5mbyB7XG4gIC8qKiBcInJhbmsgd2l0aGluIGN1cnJlbnQgcmVzdWx0IHNldFwiICovXG4gIGNpZDogbnVtYmVyO1xuICAvKiogZGVmYXVsdCB2YWx1ZSAqL1xuICBkZmx0X3ZhbHVlOiBzdHJpbmcgfCBudWxsO1xuICAvKiogMCAtIG5vcm1hbCwgMSAtIGhpZGRlbiwgMi0zIC0gZHluYW1pYy9zdG9yZWQgZ2VuZXJhdGVkICovXG4gIGhpZGRlbjogMCB8IDEgfCAyIHwgMztcbiAgLyoqIGNvbHVtbiBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIHdoZXRoZXIgdGhlIGNvbHVtbiBjYW4gYmUgbnVsbCAqL1xuICBub3RudWxsOiAwIHwgMTtcbiAgLyoqIDAgaWYgbm90IHBhcnQgb2YgdGhlIHByaW1hcnkga2V5LCBvdGhlcndpc2UgdGhlIDEtYmFzZWQgb3JkaW5hbCBudW1iZXIgb2YgdGhlIGNvbHVtbiBpbiB0aGUgcHJpbWFyeSBrZXkgKi9cbiAgcGs6IG51bWJlcjtcbiAgLyoqIGRhdGEgdHlwZSAqL1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHNoYXBlIG9mIGVhY2ggcm93IHJldHVybmVkIGJ5IGBwcmFnbWFfZm9yZWlnbl9rZXlfbGlzdCh0YWJsZU5hbWUpYC5cbiAqL1xuaW50ZXJmYWNlIFByYWdtYUZvcmVpZ25LZXlMaXN0IHtcbiAgLyoqIGNvbHVtbiBuYW1lICovXG4gIGZyb206IHN0cmluZztcbiAgLyoqIG9yZGluYWwgbnVtYmVyIG9mIGNvbHVtbiB3aXRoaW4gdGhlIGZvcmVpZ24ga2V5ICovXG4gIHNlcTogbnVtYmVyO1xuICAvKiogZm9yZWlnbiB0YWJsZSBuYW1lICovXG4gIHRhYmxlOiBzdHJpbmc7XG4gIC8qKiBjb2x1bW4gbmFtZSBpbiB0aGUgZm9yZWlnbiB0YWJsZSAqL1xuICB0bzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVzUXVlcnkoXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgZ2V0U1FMaXRlQnVpbGRlcjxEYXRhYmFzZT4ocmVxdWlyZW1lbnRzKVxuICAgICAgLnNlbGVjdEZyb20oXG4gICAgICAgIGV4cHJlc3Npb25CdWlsZGVyKClcbiAgICAgICAgICAuZm48UHJhZ21hVGFibGVMaXN0PihcInByYWdtYV90YWJsZV9saXN0XCIsIFtdKVxuICAgICAgICAgIC5hcyhcInRsXCIpLFxuICAgICAgKVxuICAgICAgLmxlZnRKb2luKFwic3FsaXRlX3NjaGVtYSBhcyBzc1wiLCAoamIpID0+XG4gICAgICAgIGpiLm9uUmVmKFwic3MudHlwZVwiLCBcIj1cIiwgXCJ0bC50eXBlXCIpLm9uUmVmKFwic3MubmFtZVwiLCBcIj1cIiwgXCJ0bC5uYW1lXCIpLFxuICAgICAgKVxuICAgICAgLndoZXJlKFwidGwudHlwZVwiLCBcImluXCIsIFtcInRhYmxlXCIsIFwidmlld1wiXSlcbiAgICAgIC8vIGV4Y2x1ZGUgdGVtcG9yYXJ5IHRhYmxlcy92aWV3c1xuICAgICAgLndoZXJlKFwidGwuc2NoZW1hXCIsIFwiPVwiLCBcIm1haW5cIilcbiAgICAgIC8vIGV4Y2x1ZGUgc3lzdGVtIHRhYmxlcy92aWV3c1xuICAgICAgLndoZXJlKFwidGwubmFtZVwiLCBcIm5vdCBsaWtlXCIsIFwic3FsaXRlXyVcIilcbiAgICAgIC5zZWxlY3QoW1widGwubmFtZVwiLCBcInNzLnNxbFwiXSlcbiAgICAgIC8vIHNpbmNlIHdlJ3JlIGV4Y2x1ZGluZyBzeXN0ZW0gdGFibGVzLCBgc3Muc3FsYCBzaG91bGQgbmV2ZXIgYmUgbnVsbCBoZXJlLlxuICAgICAgLiRuYXJyb3dUeXBlPHsgc3FsOiBOb3ROdWxsIH0+KClcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgIGpzb25BcnJheUZyb20oXG4gICAgICAgICAgZWJcbiAgICAgICAgICAgIC5zZWxlY3RGcm9tKFxuICAgICAgICAgICAgICBlYlxuICAgICAgICAgICAgICAgIC5mbjxQcmFnbWFUYWJsZVhJbmZvPihcInByYWdtYV90YWJsZV94aW5mb1wiLCBbXCJ0bC5uYW1lXCJdKVxuICAgICAgICAgICAgICAgIC5hcyhcInR4aVwiKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcbiAgICAgICAgICAgICAgZWJcbiAgICAgICAgICAgICAgICAuZm48UHJhZ21hRm9yZWlnbktleUxpc3Q+KFwicHJhZ21hX2ZvcmVpZ25fa2V5X2xpc3RcIiwgW1xuICAgICAgICAgICAgICAgICAgXCJ0bC5uYW1lXCIsXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAuYXMoXCJma2xcIiksXG4gICAgICAgICAgICAgIFwiZmtsLmZyb21cIixcbiAgICAgICAgICAgICAgXCJ0eGkubmFtZVwiLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gZXhjbHVkZSBoaWRkZW4gY29sdW1uc1xuICAgICAgICAgICAgLndoZXJlKFwidHhpLmhpZGRlblwiLCBcIiE9XCIsIDEpXG4gICAgICAgICAgICAuc2VsZWN0KFtcbiAgICAgICAgICAgICAgXCJ0eGkuZGZsdF92YWx1ZSBhcyBkZWZhdWx0XCIsXG4gICAgICAgICAgICAgIFwidHhpLm5hbWVcIixcbiAgICAgICAgICAgICAgXCJ0eGkucGtcIixcbiAgICAgICAgICAgICAgXCJ0eGkudHlwZSBhcyBkYXRhdHlwZVwiLFxuICAgICAgICAgICAgICBcImZrbC50YWJsZSBhcyBma190YWJsZVwiLFxuICAgICAgICAgICAgICBcImZrbC50byBhcyBma19jb2x1bW5cIixcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgICAgICAgICBlYihcInR4aS5oaWRkZW5cIiwgXCJpblwiLCBbMiwgM10pLmFzKFwiY29tcHV0ZWRcIiksXG4gICAgICAgICAgICAgIGViKFwidHhpLm5vdG51bGxcIiwgXCI9XCIsIDApLmFzKFwibnVsbGFibGVcIiksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgKS5hcyhcImNvbHVtbnNcIiksXG4gICAgICBdKSxcbiAgICB7IHRyYW5zZm9ybWF0aW9uczogeyBjb2x1bW5zOiBcImpzb24tcGFyc2VcIiB9IH0sXG4gICk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVGFibGVzUXVlcnkoKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgbmFtZTogXCJhbmltYWxzXCIsXG4gICAgICBzcWw6IFwiQ1JFQVRFIFRBQkxFIGFuaW1hbHMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIG5hbWUgVEVYVCk7XCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiSU5URUdFUlwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVEVYVFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidXNlcnNcIixcbiAgICAgIHNxbDogXCJDUkVBVEUgVEFCTEUgdXNlcnMgKGlkIFVVSUQgUFJJTUFSWSBLRVksIGNyZWF0ZWRfYXQgVElNRVNUQU1QLCBkZWxldGVkX2F0IFRJTUVTVEFNUCwgcm9sZSB2YXJjaGFyLCBuYW1lIHZhcmNoYXIsIG5hbWVfcm9sZSB0ZXh0KTtcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJJTlRFR0VSXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNyZWF0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJUSU1FU1RBTVBcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIjE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwXCIsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJkZWxldGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiVElNRVNUQU1QXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInJvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVfcm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAxLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbXBvc2l0ZV9wa1wiLFxuICAgICAgc3FsOiBcIkNSRUFURSBUQUJMRSBjb21wb3NpdGVfcGsgKGlkIFVVSUQsIG5hbWUgVEVYVCwgY3JlYXRlZF9hdCB0aW1lc3RhbXAsIFBSSU1BUlkgS0VZIChpZCwgbmFtZSkpO1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcIlRFWFRcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIHBrOiAyLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiMTk3MC0wMS0wMSAwMDowMDowMC4wMDBcIixcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICBBZGFwdGVyLFxuICBBZGFwdGVyRXJyb3IsXG4gIEFkYXB0ZXJTcWxMaW50RGV0YWlscyxcbiAgQWRhcHRlclNxbExpbnREaWFnbm9zdGljLFxuICBBZGFwdGVyU3FsTGludFJlc3VsdCxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgRXhlY3V0b3IgfSBmcm9tIFwiLi4vZXhlY3V0b3JcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3FsRm9yTGludCB9IGZyb20gXCIuLi9wb3N0Z3Jlcy1jb3JlL3NxbC1saW50XCI7XG5pbXBvcnQgeyBhc1F1ZXJ5IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMaW50RGlhZ25vc3RpY3NGcm9tU1FMaXRlRXJyb3IoYXJnczoge1xuICBlcnJvcjogdW5rbm93bjtcbiAgcG9zaXRpb25PZmZzZXQ/OiBudW1iZXI7XG4gIHNxbDogc3RyaW5nO1xufSk6IEFkYXB0ZXJTcWxMaW50RGlhZ25vc3RpY1tdIHtcbiAgY29uc3QgeyBlcnJvciwgc3FsIH0gPSBhcmdzO1xuICBjb25zdCBwb3NpdGlvbk9mZnNldCA9IE1hdGgubWF4KDAsIGFyZ3MucG9zaXRpb25PZmZzZXQgPz8gMCk7XG4gIGNvbnN0IGZhbGxiYWNrUmFuZ2UgPSBnZXRGYWxsYmFja1JhbmdlKHNxbC5sZW5ndGgpO1xuXG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgZnJvbTogZmFsbGJhY2tSYW5nZS5mcm9tICsgcG9zaXRpb25PZmZzZXQsXG4gICAgICAgIG1lc3NhZ2U6IFwiU1FMIGxpbnQgZmFpbGVkLlwiLFxuICAgICAgICBzZXZlcml0eTogXCJlcnJvclwiLFxuICAgICAgICBzb3VyY2U6IFwic3FsaXRlXCIsXG4gICAgICAgIHRvOiBmYWxsYmFja1JhbmdlLnRvICsgcG9zaXRpb25PZmZzZXQsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBjb25zdCBjb2RlID0gZ2V0U1FMaXRlRXJyb3JDb2RlKGVycm9yKTtcbiAgY29uc3QgaW5mZXJyZWRSYW5nZSA9XG4gICAgaW5mZXJSYW5nZUZyb21NZXNzYWdlKHNxbCwgZXJyb3IubWVzc2FnZSkgPz8gZmFsbGJhY2tSYW5nZTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGNvZGUsXG4gICAgICBmcm9tOiBpbmZlcnJlZFJhbmdlLmZyb20gKyBwb3NpdGlvbk9mZnNldCxcbiAgICAgIG1lc3NhZ2U6IHRvU1FMaXRlTGludE1lc3NhZ2UoZXJyb3IubWVzc2FnZSksXG4gICAgICBzZXZlcml0eTogXCJlcnJvclwiLFxuICAgICAgc291cmNlOiBcInNxbGl0ZVwiLFxuICAgICAgdG86IGluZmVycmVkUmFuZ2UudG8gKyBwb3NpdGlvbk9mZnNldCxcbiAgICB9LFxuICBdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludFNRTGl0ZVdpdGhFeHBsYWluRmFsbGJhY2soXG4gIGV4ZWN1dG9yOiBFeGVjdXRvcixcbiAgZGV0YWlsczogQWRhcHRlclNxbExpbnREZXRhaWxzLFxuICBvcHRpb25zOiBQYXJhbWV0ZXJzPE5vbk51bGxhYmxlPEFkYXB0ZXJbXCJzcWxMaW50XCJdPj5bMV0sXG4pOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJTcWxMaW50UmVzdWx0Pj4ge1xuICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGVTcWxGb3JMaW50KGRldGFpbHMuc3FsKTtcblxuICBpZiAoIXZhbGlkYXRpb24ub2spIHtcbiAgICByZXR1cm4gW1xuICAgICAgbnVsbCxcbiAgICAgIHtcbiAgICAgICAgZGlhZ25vc3RpY3M6IFt2YWxpZGF0aW9uLmRpYWdub3N0aWNdLFxuICAgICAgICBzY2hlbWFWZXJzaW9uOiBkZXRhaWxzLnNjaGVtYVZlcnNpb24sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBjb25zdCBkaWFnbm9zdGljczogQWRhcHRlclNxbExpbnRSZXN1bHRbXCJkaWFnbm9zdGljc1wiXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHZhbGlkYXRpb24uc3RhdGVtZW50cykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBleHBsYWluUXVlcnkgPSBhc1F1ZXJ5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgICAgYEVYUExBSU4gJHtzdGF0ZW1lbnQuc3RhdGVtZW50fWAsXG4gICAgICApO1xuICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUoZXhwbGFpblF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZGlhZ25vc3RpY3MucHVzaChcbiAgICAgICAgLi4uY3JlYXRlTGludERpYWdub3N0aWNzRnJvbVNRTGl0ZUVycm9yKHtcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBwb3NpdGlvbk9mZnNldDogc3RhdGVtZW50LmZyb20sXG4gICAgICAgICAgc3FsOiBzdGF0ZW1lbnQuc3RhdGVtZW50LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGRpYWdub3N0aWNzLnB1c2goXG4gICAgICAgIC4uLmNyZWF0ZUxpbnREaWFnbm9zdGljc0Zyb21TUUxpdGVFcnJvcih7XG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgcG9zaXRpb25PZmZzZXQ6IHN0YXRlbWVudC5mcm9tLFxuICAgICAgICAgIHNxbDogc3RhdGVtZW50LnN0YXRlbWVudCxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbXG4gICAgbnVsbCxcbiAgICB7XG4gICAgICBkaWFnbm9zdGljcyxcbiAgICAgIHNjaGVtYVZlcnNpb246IGRldGFpbHMuc2NoZW1hVmVyc2lvbixcbiAgICB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiBnZXRTUUxpdGVFcnJvckNvZGUoZXJyb3I6IEVycm9yKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgd2l0aENvZGUgPSBlcnJvciBhcyBFcnJvciAmIHsgY29kZT86IHVua25vd24gfTtcbiAgcmV0dXJuIHR5cGVvZiB3aXRoQ29kZS5jb2RlID09PSBcInN0cmluZ1wiID8gd2l0aENvZGUuY29kZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdG9TUUxpdGVMaW50TWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAobWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiaW50ZXJydXB0ZWRcIikpIHtcbiAgICByZXR1cm4gXCJMaW50IHF1ZXJ5IHRpbWVkIG91dC4gU2ltcGxpZnkgdGhlIHN0YXRlbWVudCBhbmQgdHJ5IGFnYWluLlwiO1xuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIGdldEZhbGxiYWNrUmFuZ2Uoc3FsTGVuZ3RoOiBudW1iZXIpOiB7IGZyb206IG51bWJlcjsgdG86IG51bWJlciB9IHtcbiAgaWYgKHNxbExlbmd0aCA8PSAwKSB7XG4gICAgcmV0dXJuIHsgZnJvbTogMCwgdG86IDAgfTtcbiAgfVxuXG4gIHJldHVybiB7IGZyb206IDAsIHRvOiAxIH07XG59XG5cbmZ1bmN0aW9uIGluZmVyUmFuZ2VGcm9tTWVzc2FnZShcbiAgc3FsOiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbik6IHsgZnJvbTogbnVtYmVyOyB0bzogbnVtYmVyIH0gfCBudWxsIHtcbiAgY29uc3QgbmVhck1hdGNoID0gL25lYXJcXHMrW1wiJ2BdKFteXCInYF0rKVtcIidgXS9pLmV4ZWMobWVzc2FnZSk7XG4gIGlmIChuZWFyTWF0Y2g/LlsxXSkge1xuICAgIHJldHVybiBmaW5kVG9rZW5SYW5nZShzcWwsIG5lYXJNYXRjaFsxXSk7XG4gIH1cblxuICBjb25zdCBtaXNzaW5nVGFibGVNYXRjaCA9IC9ubyBzdWNoIHRhYmxlOlxccyooW15cXHNdKykvaS5leGVjKG1lc3NhZ2UpO1xuICBpZiAobWlzc2luZ1RhYmxlTWF0Y2g/LlsxXSkge1xuICAgIHJldHVybiBmaW5kVG9rZW5SYW5nZShzcWwsIG1pc3NpbmdUYWJsZU1hdGNoWzFdKTtcbiAgfVxuXG4gIGNvbnN0IG1pc3NpbmdDb2x1bW5NYXRjaCA9IC9ubyBzdWNoIGNvbHVtbjpcXHMqKFteXFxzXSspL2kuZXhlYyhtZXNzYWdlKTtcbiAgaWYgKG1pc3NpbmdDb2x1bW5NYXRjaD8uWzFdKSB7XG4gICAgcmV0dXJuIGZpbmRUb2tlblJhbmdlKHNxbCwgbWlzc2luZ0NvbHVtbk1hdGNoWzFdKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmaW5kVG9rZW5SYW5nZShcbiAgc3FsOiBzdHJpbmcsXG4gIHJhd1Rva2VuOiBzdHJpbmcsXG4pOiB7IGZyb206IG51bWJlcjsgdG86IG51bWJlciB9IHwgbnVsbCB7XG4gIGNvbnN0IHRva2VuID0gcmF3VG9rZW4udHJpbSgpLnJlcGxhY2UoL15bJ1wiYF18WydcImBdJC9nLCBcIlwiKTtcblxuICBpZiAodG9rZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsb3dlclNxbCA9IHNxbC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBsb3dlclRva2VuID0gdG9rZW4udG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgZGlyZWN0SW5kZXggPSBsb3dlclNxbC5pbmRleE9mKGxvd2VyVG9rZW4pO1xuXG4gIGlmIChkaXJlY3RJbmRleCA+PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IGRpcmVjdEluZGV4LFxuICAgICAgdG86IE1hdGgubWluKHNxbC5sZW5ndGgsIGRpcmVjdEluZGV4ICsgdG9rZW4ubGVuZ3RoKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgc3BsaXRUb2tlbiA9IGxvd2VyVG9rZW4uc3BsaXQoXCIuXCIpLmF0KC0xKTtcblxuICBpZiAoIXNwbGl0VG9rZW4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNwbGl0SW5kZXggPSBsb3dlclNxbC5pbmRleE9mKHNwbGl0VG9rZW4pO1xuXG4gIGlmIChzcGxpdEluZGV4IDwgMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmcm9tOiBzcGxpdEluZGV4LFxuICAgIHRvOiBNYXRoLm1pbihzcWwubGVuZ3RoLCBzcGxpdEluZGV4ICsgc3BsaXRUb2tlbi5sZW5ndGgpLFxuICB9O1xufVxuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyUmF3UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJSZXF1aXJlbWVudHMsXG4gIHR5cGUgQWRhcHRlclNxbExpbnRSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclNxbFNjaGVtYVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyVXBkYXRlUmVzdWx0LFxuICBjcmVhdGVBZGFwdGVyRXJyb3IsXG4gIHR5cGUgRmlsdGVyT3BlcmF0b3IsXG4gIHR5cGUgVGFibGUsXG59IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQge1xuICBjcmVhdGVGdWxsVGFibGVTZWFyY2hFeGVjdXRpb25TdGF0ZSxcbiAgZXhlY3V0ZVF1ZXJ5V2l0aEZ1bGxUYWJsZVNlYXJjaEd1YXJkcmFpbHMsXG59IGZyb20gXCIuLi9mdWxsLXRhYmxlLXNlYXJjaFwiO1xuaW1wb3J0IHsgYXNRdWVyeSwgdHlwZSBRdWVyeSwgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgY3JlYXRlU3FsRWRpdG9yU2NoZW1hRnJvbUludHJvc3BlY3Rpb24gfSBmcm9tIFwiLi4vc3FsLWVkaXRvci1zY2hlbWFcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7XG4gIGRldGVybWluZUNvbHVtbkFmZmluaXR5LFxuICBTUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEEsXG59IGZyb20gXCIuL2RhdGF0eXBlXCI7XG5pbXBvcnQge1xuICBnZXREZWxldGVRdWVyeSxcbiAgZ2V0SW5zZXJ0UXVlcnksXG4gIGdldFNlbGVjdFF1ZXJ5LFxuICBnZXRVcGRhdGVRdWVyeSxcbn0gZnJvbSBcIi4vZG1sXCI7XG5pbXBvcnQgeyBnZXRUYWJsZXNRdWVyeSwgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuaW1wb3J0IHsgbGludFNRTGl0ZVdpdGhFeHBsYWluRmFsbGJhY2sgfSBmcm9tIFwiLi9zcWwtbGludFwiO1xuXG5leHBvcnQgdHlwZSBTUUxJdGVBZGFwdGVyUmVxdWlyZW1lbnRzID0gQWRhcHRlclJlcXVpcmVtZW50cztcblxuY29uc3Qgc2NoZW1hID0gXCJtYWluXCI7XG5cbmNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IFtcbiAgXCI9XCIsXG4gIFwiIT1cIixcbiAgXCI+XCIsXG4gIFwiPj1cIixcbiAgXCI8XCIsXG4gIFwiPD1cIixcbiAgXCJpc1wiLFxuICBcImlzIG5vdFwiLFxuICBcImxpa2VcIixcbiAgXCJub3QgbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNRTGl0ZUFkYXB0ZXIoXG4gIHJlcXVpcmVtZW50czogU1FMSXRlQWRhcHRlclJlcXVpcmVtZW50cyxcbik6IEFkYXB0ZXIge1xuICBjb25zdCB7IGV4ZWN1dG9yLCAuLi5vdGhlclJlcXVpcmVtZW50cyB9ID0gcmVxdWlyZW1lbnRzO1xuICBjb25zdCBmdWxsVGFibGVTZWFyY2hTdGF0ZSA9IGNyZWF0ZUZ1bGxUYWJsZVNlYXJjaEV4ZWN1dGlvblN0YXRlKCk7XG4gIGxldCBjYW5Vc2VFeGVjdXRvckxpbnRUcmFuc3BvcnQgPSB0eXBlb2YgZXhlY3V0b3IubGludFNxbCA9PT0gXCJmdW5jdGlvblwiO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGludHJvc3BlY3REYXRhYmFzZShcbiAgICBvcHRpb25zOiBQYXJhbWV0ZXJzPEFkYXB0ZXJbXCJpbnRyb3NwZWN0XCJdPlswXSxcbiAgKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGFibGVzUXVlcnkgPSBnZXRUYWJsZXNRdWVyeShyZXF1aXJlbWVudHMpO1xuXG4gICAgICBjb25zdCBbdGFibGVzRXJyb3IsIHRhYmxlc10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKFxuICAgICAgICB0YWJsZXNRdWVyeSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICk7XG5cbiAgICAgIGlmICh0YWJsZXNFcnJvcikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbnVsbCwgY3JlYXRlSW50cm9zcGVjdGlvbih7IHF1ZXJ5OiB0YWJsZXNRdWVyeSwgdGFibGVzIH0pXTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRlZmF1bHRTY2hlbWE6IHNjaGVtYSxcbiAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgIGZ1bGxUYWJsZVNlYXJjaDogdHJ1ZSxcbiAgICAgIHNxbERpYWxlY3Q6IFwic3FsaXRlXCIsXG4gICAgICBzcWxFZGl0b3JBdXRvY29tcGxldGU6IHRydWUsXG4gICAgICBzcWxFZGl0b3JMaW50OiB0cnVlLFxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUoXG4gICAgICBkZXRhaWxzLFxuICAgICAgb3B0aW9ucyxcbiAgICApOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJEZWxldGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldERlbGV0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICAvLyBUT0RPOiB1c2UgcmVzdWx0cyB0b28uXG4gICAgICAgIGNvbnN0IFtlcnJvcl0gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IC4uLmRldGFpbHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW5zZXJ0KFxuICAgICAgZGV0YWlscyxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRJbnNlcnRRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByb3dzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgcm93cywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnRyb3NwZWN0KFxuICAgICAgb3B0aW9ucyxcbiAgICApOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0Pj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IGludHJvc3BlY3REYXRhYmFzZShvcHRpb25zKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc3FsU2NoZW1hKFxuICAgICAgX2RldGFpbHMsXG4gICAgICBvcHRpb25zLFxuICAgICk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclNxbFNjaGVtYVJlc3VsdD4+IHtcbiAgICAgIGNvbnN0IFtlcnJvciwgaW50cm9zcGVjdGlvbl0gPSBhd2FpdCBpbnRyb3NwZWN0RGF0YWJhc2Uob3B0aW9ucyk7XG5cbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZXR1cm4gW2Vycm9yXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3JlYXRlU3FsRWRpdG9yU2NoZW1hRnJvbUludHJvc3BlY3Rpb24oe1xuICAgICAgICAgIGRlZmF1bHRTY2hlbWE6IHNjaGVtYSxcbiAgICAgICAgICBkaWFsZWN0OiBcInNxbGl0ZVwiLFxuICAgICAgICAgIGludHJvc3BlY3Rpb24sXG4gICAgICAgIH0pLFxuICAgICAgXTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc3FsTGludChcbiAgICAgIGRldGFpbHMsXG4gICAgICBvcHRpb25zLFxuICAgICk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclNxbExpbnRSZXN1bHQ+PiB7XG4gICAgICBpZiAoY2FuVXNlRXhlY3V0b3JMaW50VHJhbnNwb3J0ICYmIHR5cGVvZiBleGVjdXRvci5saW50U3FsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdF0gPSBhd2FpdCBleGVjdXRvci5saW50U3FsKGRldGFpbHMsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIFtudWxsLCByZXN1bHRdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc2hvdWxkRmFsbGJhY2tUb0V4cGxhaW5MaW50KGVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhblVzZUV4ZWN1dG9yTGludFRyYW5zcG9ydCA9IGZhbHNlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgIGlmICghc2hvdWxkRmFsbGJhY2tUb0V4cGxhaW5MaW50KGVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYW5Vc2VFeGVjdXRvckxpbnRUcmFuc3BvcnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgbGludFNRTGl0ZVdpdGhFeHBsYWluRmFsbGJhY2soZXhlY3V0b3IsIGRldGFpbHMsIG9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBxdWVyeShcbiAgICAgIGRldGFpbHMsXG4gICAgICBvcHRpb25zLFxuICAgICk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRTZWxlY3RRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvciwgcmVzdWx0c10gPVxuICAgICAgICAgIGF3YWl0IGV4ZWN1dGVRdWVyeVdpdGhGdWxsVGFibGVTZWFyY2hHdWFyZHJhaWxzKHtcbiAgICAgICAgICAgIGV4ZWN1dG9yLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoVGVybTogZGV0YWlscy5mdWxsVGFibGVTZWFyY2hUZXJtLFxuICAgICAgICAgICAgc3RhdGU6IGZ1bGxUYWJsZVNlYXJjaFN0YXRlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIG51bGwsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsdGVyZWRSb3dDb3VudDogcmVzdWx0c1swXT8uX19wc19jb3VudF9fIHx8IFwiMFwiLFxuICAgICAgICAgICAgcm93czogcmVzdWx0cyxcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgcHJvcGVybHlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcmF3KFxuICAgICAgZGV0YWlscyxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyUmF3UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBhc1F1ZXJ5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PihkZXRhaWxzLnNxbCk7XG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgcm93Q291bnQ6IHJvd3MubGVuZ3RoLFxuICAgICAgICAgICAgcm93czogcm93cyxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlKFxuICAgICAgZGV0YWlscyxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRVcGRhdGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7XG4gICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiVXBkYXRlIGZhaWxlZFwiKSxcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvdywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNob3VsZEZhbGxiYWNrVG9FeHBsYWluTGludChlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlLnRvTG93ZXJDYXNlKCk7XG5cbiAgcmV0dXJuIChcbiAgICBtZXNzYWdlLmluY2x1ZGVzKFwiaW52YWxpZCBwcm9jZWR1cmVcIikgfHxcbiAgICBtZXNzYWdlLmluY2x1ZGVzKFwibm90IHN1cHBvcnRlZFwiKSB8fFxuICAgIG1lc3NhZ2UuaW5jbHVkZXMoXCJtZXRob2Qgbm90IGFsbG93ZWRcIilcbiAgKTtcbn1cblxuY29uc3QgV0lUSE9VVF9ST1dJRF9SRUdFWCA9IC9XSVRIT1VUXFxzK1JPV0lEL2k7XG5cbmZ1bmN0aW9uIGNyZWF0ZUludHJvc3BlY3Rpb24oYXJnczoge1xuICB0YWJsZXM6IFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG4gIHF1ZXJ5OiBRdWVyeTtcbn0pOiBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCB7XG4gIGNvbnN0IHsgdGFibGVzLCBxdWVyeTogdGFibGVzUXVlcnkgfSA9IGFyZ3M7XG5cbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXJPcGVyYXRvcnMsXG4gICAgcXVlcnk6IHRhYmxlc1F1ZXJ5LFxuICAgIHNjaGVtYXM6IHRhYmxlcy5yZWR1Y2UoXG4gICAgICAoc2NoZW1hcywgdGFibGUpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUsIHNxbCB9ID0gdGFibGU7XG5cbiAgICAgICAgbGV0IG1heFBLU2VlbiA9IDA7XG5cbiAgICAgICAgY29uc3QgY29sdW1uc1JlY29yZCA9IGNvbHVtbnMucmVkdWNlKFxuICAgICAgICAgIChjb2x1bW5zUmVjb3JkLCBjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGRhdGF0eXBlLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgIGZrX2NvbHVtbixcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgcGssXG4gICAgICAgICAgICB9ID0gY29sdW1uO1xuXG4gICAgICAgICAgICBtYXhQS1NlZW4gPSBNYXRoLm1heChtYXhQS1NlZW4sIHBrKTtcblxuICAgICAgICAgICAgY29uc3QgYWZmaW5pdHkgPSBkZXRlcm1pbmVDb2x1bW5BZmZpbml0eShkYXRhdHlwZSk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogYElOVEVHRVIgUFJJTUFSWSBLRVlgIGNvbHVtbnMgYWN0IGFzIGByb3dpZGAgYWxpYXMuIGByb3dpZGAgY29sdW1uc1xuICAgICAgICAgICAgICogYXJlIGF1dG8tZ2VuZXJhdGVkIHVuaXF1ZSBudW1iZXJzIHRoYXQgZXhpc3QgaW4gZXZlcnkgU1FMaXRlIHRhYmxlXG4gICAgICAgICAgICAgKiB1bmxlc3MgYSB0YWJsZSBpcyBjcmVhdGVkIHVzaW5nIGBXSVRIT1VUIFJPV0lEYCBvcHRpb24uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGlzUm93SWQgPVxuICAgICAgICAgICAgICBkYXRhdHlwZS50b1VwcGVyQ2FzZSgpID09PSBcIklOVEVHRVJcIiAmJlxuICAgICAgICAgICAgICBwayA9PT0gMSAmJlxuICAgICAgICAgICAgICAvLyBubyBvdGhlciBwcmltYXJ5IGtleSBjb2x1bW5zIGJlZm9yZSB0aGlzIGNvbHVtbi5cbiAgICAgICAgICAgICAgbWF4UEtTZWVuID09PSAxICYmXG4gICAgICAgICAgICAgICFjb2x1bW5zXG4gICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4ICsgMSlcbiAgICAgICAgICAgICAgICAuc29tZShmdW5jdGlvbiBpc0Fsc29JblByaW1hcnlLZXkoY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLnBrID4gMTtcbiAgICAgICAgICAgICAgICB9KSAmJlxuICAgICAgICAgICAgICAhV0lUSE9VVF9ST1dJRF9SRUdFWC50ZXN0KHNxbCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzQ29tcHV0ZWQgPSBCb29sZWFuKGNvbHVtbi5jb21wdXRlZCk7XG4gICAgICAgICAgICAvLyBgcm93aWRgIGNvbHVtbnMgYXJlIGltcGxpY2l0bHkgbm90IG51bGxhYmxlLlxuICAgICAgICAgICAgY29uc3QgbnVsbGFibGUgPSBCb29sZWFuKGNvbHVtbi5udWxsYWJsZSkgJiYgIWlzUm93SWQ7XG5cbiAgICAgICAgICAgIGNvbHVtbnNSZWNvcmRbY29sdW1uTmFtZV0gPSB7XG4gICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgLi4uU1FMSVRFX0FGRklOSVRZX1RPX01FVEFEQVRBW2FmZmluaXR5XSxcbiAgICAgICAgICAgICAgICBhZmZpbml0eSxcbiAgICAgICAgICAgICAgICBpc0FycmF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc05hdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBuYW1lOiBkYXRhdHlwZSxcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiB1c2UgYHRhYmxlLnNxbGAgdG8gZGV0ZXJtaW5lIGVudW0gb3B0aW9ucyBmcm9tIGBjaGVja2AgY29uc3RyYWludHMuXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgIGZrQ29sdW1uOiBma19jb2x1bW4sXG4gICAgICAgICAgICAgIGZrU2NoZW1hOiBma19jb2x1bW4gPyBzY2hlbWEgOiBudWxsLFxuICAgICAgICAgICAgICBma1RhYmxlOiBjb2x1bW4uZmtfdGFibGUsXG4gICAgICAgICAgICAgIC8vIHNpbmNlIGByb3dpZGAgaXMgYXV0byBnZW5lcmF0ZWQgdW5pcXVlIG51bWJlciwgYW5kIGBBVVRPIElOQ1JFTUVOVGBcbiAgICAgICAgICAgICAgLy8gY2FuIG9ubHkgYmUgYXBwbGllZCB0byBzdWNoIGNvbHVtbnMsIHdlIGNvbnNpZGVyIHRoZW0gYXV0b2luY3JlbWVudFxuICAgICAgICAgICAgICAvLyBhbmQgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgbW9kaWZpZXIgaW5cbiAgICAgICAgICAgICAgLy8gdGhlIGBDUkVBVEUgVEFCTEVgIHN0YXRlbWVudC5cbiAgICAgICAgICAgICAgaXNBdXRvaW5jcmVtZW50OiBpc1Jvd0lkLFxuICAgICAgICAgICAgICBpc0NvbXB1dGVkLFxuICAgICAgICAgICAgICBpc1JlcXVpcmVkOlxuICAgICAgICAgICAgICAgICFudWxsYWJsZSAmJiAhaXNSb3dJZCAmJiAhaXNDb21wdXRlZCAmJiBkZWZhdWx0VmFsdWUgPT0gbnVsbCxcbiAgICAgICAgICAgICAgbmFtZTogY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgbnVsbGFibGUsXG4gICAgICAgICAgICAgIHBrUG9zaXRpb246IHBrID4gMCA/IHBrIDogbnVsbCxcbiAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbnNSZWNvcmQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICAgICk7XG5cbiAgICAgICAgc2NoZW1hcy5tYWluIS50YWJsZXNbdGFibGVOYW1lXSA9IHtcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zUmVjb3JkLFxuICAgICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcbiAgICAgICAgICBzY2hlbWE6IFwibWFpblwiLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzY2hlbWFzO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWFpbjogeyB0YWJsZXM6IHt9LCBuYW1lOiBcIm1haW5cIiB9LFxuICAgICAgfSBzYXRpc2ZpZXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHRbXCJzY2hlbWFzXCJdIGFzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0W1wic2NoZW1hc1wiXSxcbiAgICApLFxuICAgIHRpbWV6b25lOiBcIlVUQ1wiLFxuICB9O1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja0ludHJvc3BlY3QoKSB7XG4gIGNvbnN0IHF1ZXJ5ID0geyBwYXJhbWV0ZXJzOiBbXSwgc3FsOiBcIjxtb2NrZWQ+XCIgfSBhcyBRdWVyeTtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG5cbiAgcmV0dXJuIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeSwgdGFibGVzIH0pIGFzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCwgbm8gbmVlZCBnbyBvdmVyYm9hcmQuXG4gICAgc2NoZW1hczoge1xuICAgICAgbWFpbjoge1xuICAgICAgICBuYW1lOiBcIm1haW5cIjtcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHN0cmluZztcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7OzRYQVVPLElBQU1BLEVBR1QsQ0FDRixLQUFNLENBQ0osTUFBTyxLQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLEtBQ1QsRUFDQSxRQUFTLENBQ1AsTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sU0FDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFFBQ1QsQ0FDRixFQU9PLFNBQVNDLEVBQ2RDLEVBQ2dCLENBQ2hCLEdBQUksQ0FBQ0EsRUFDSCxNQUFPLE9BR1Qs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UVYsRUFBTyxTQUU1QlcsRUFBVyxFQUFRWCxFQUFPLFVBQWEsQ0FBQ1MsRUFFOUMsT0FBQVYsRUFBY00sQ0FBVSxFQUFJLENBQzFCLFNBQVUsQ0FDUixHQUFHTyxFQUE0QkwsQ0FBUSxFQUN2QyxTQUFBQSxFQUNBLFFBQVMsR0FDVCxTQUFVLEdBQ1YsS0FBTUwsRUFFTixRQUFTLENBQUMsRUFDVixPQUFBL0MsQ0FDRixFQUNBLGFBQUFnRCxFQUNBLFNBQVVDLEVBQ1YsU0FBVUEsRUFBWWpELEVBQVMsS0FDL0IsUUFBUzZDLEVBQU8sU0FLaEIsZ0JBQWlCUyxFQUNqQixXQUFBQyxFQUNBLFdBQ0UsQ0FBQ0MsR0FBWSxDQUFDRixHQUFXLENBQUNDLEdBQWNQLEdBQWdCLEtBQzFELEtBQU1FLEVBQ04sU0FBQU0sRUFDQSxXQUFZTCxFQUFLLEVBQUlBLEVBQUssS0FDMUIsT0FBQW5ELEVBQ0EsTUFBT3lDLENBQ1QsRUFFT0csQ0FDVCxFQUNBLENBQUMsQ0FDSCxFQUVBLE9BQUFOLEVBQVEsS0FBTSxPQUFPRyxDQUFTLEVBQUksQ0FDaEMsUUFBU0csRUFDVCxLQUFNSCxFQUNOLE9BQVEsTUFDVixFQUVPSCxDQUNULEVBQ0EsQ0FDRSxLQUFNLENBQUUsT0FBUSxDQUFDLEVBQUcsS0FBTSxNQUFPLENBQ25DLENBQ0YsRUFDQSxTQUFVLEtBQ1osQ0FDRixDQUtPLFNBQVNvQixJQUFpQixDQUMvQixJQUFNdkMsRUFBUSxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUssVUFBVyxFQUMxQ0wsRUFBUzZDLEVBQWdCLEVBRS9CLE9BQU8zQyxHQUFvQixDQUFFLE1BQUFHLEVBQU8sT0FBQUwsQ0FBTyxDQUFDLENBYzlDIiwKICAibmFtZXMiOiBbIlNRTElURV9BRkZJTklUWV9UT19NRVRBREFUQSIsICJkZXRlcm1pbmVDb2x1bW5BZmZpbml0eSIsICJkZWNsYXJlZERhdGFUeXBlIiwgInVwcGVyVHlwZSIsICJnZXRTUUxpdGVCdWlsZGVyIiwgInJlcXVpcmVtZW50cyIsICJnZXRCdWlsZGVyIiwgIlNxbGl0ZUFkYXB0ZXIiLCAiU3FsaXRlUXVlcnlDb21waWxlciIsICJnZXRTZWxlY3RRdWVyeSIsICJkZXRhaWxzIiwgInJlcXVpcmVtZW50cyIsICJmaWx0ZXIiLCAiZnVsbFRhYmxlU2VhcmNoVGVybSIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydE9yZGVyIiwgImNvbHVtbnMiLCAidGFibGVOYW1lIiwgImJ1aWxkZXIiLCAiZ2V0U1FMaXRlQnVpbGRlciIsICJhcHBsaWVkRmlsdGVyRXhwcmVzc2lvbiIsICJnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uIiwgImZ1bGxUYWJsZVNlYXJjaFBsYW4iLCAiYnVpbGRGdWxsVGFibGVTZWFyY2hQbGFuIiwgImNvbWJpbmVkV2hlcmVFeHByZXNzaW9uIiwgImViIiwgImdldEZ1bGxUYWJsZVNlYXJjaEV4cHJlc3Npb24iLCAiQUdHX05BTUUiLCAiQ09VTlRfUkVGIiwgImNvdW50UXVlcnkiLCAic3FsIiwgImNvbXBpbGUiLCAiamIiLCAicWIiLCAiaXRlbSIsICJtb2NrU2VsZWN0UXVlcnkiLCAiZ2V0RGVsZXRlUXVlcnkiLCAicm93cyIsICJhcHBseUluZmVycmVkUm93RmlsdGVycyIsICJnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzIiwgImdldEluc2VydFF1ZXJ5IiwgImFwcGx5VHJhbnNmb3JtYXRpb25zIiwgImdldFVwZGF0ZVF1ZXJ5IiwgImNoYW5nZXMiLCAicm93IiwgImV4cHJlc3Npb25CdWlsZGVyIiwgImpzb25BcnJheUZyb20iLCAiZXhwciIsICJzcWwiLCAiZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MiLCAiZ2V0U3FsaXRlSnNvbk9iamVjdEFyZ3MiLCAibm9kZSIsICJ0YWJsZSIsICJnZXRKc29uT2JqZWN0QXJncyIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRTUUxpdGVCdWlsZGVyIiwgImV4cHJlc3Npb25CdWlsZGVyIiwgImpiIiwgImViIiwgImpzb25BcnJheUZyb20iLCAibW9ja1RhYmxlc1F1ZXJ5IiwgImNyZWF0ZUxpbnREaWFnbm9zdGljc0Zyb21TUUxpdGVFcnJvciIsICJhcmdzIiwgImVycm9yIiwgInNxbCIsICJwb3NpdGlvbk9mZnNldCIsICJmYWxsYmFja1JhbmdlIiwgImdldEZhbGxiYWNrUmFuZ2UiLCAiY29kZSIsICJnZXRTUUxpdGVFcnJvckNvZGUiLCAiaW5mZXJyZWRSYW5nZSIsICJpbmZlclJhbmdlRnJvbU1lc3NhZ2UiLCAidG9TUUxpdGVMaW50TWVzc2FnZSIsICJsaW50U1FMaXRlV2l0aEV4cGxhaW5GYWxsYmFjayIsICJleGVjdXRvciIsICJkZXRhaWxzIiwgIm9wdGlvbnMiLCAidmFsaWRhdGlvbiIsICJ2YWxpZGF0ZVNxbEZvckxpbnQiLCAiZGlhZ25vc3RpY3MiLCAic3RhdGVtZW50IiwgImV4cGxhaW5RdWVyeSIsICJhc1F1ZXJ5IiwgIndpdGhDb2RlIiwgIm1lc3NhZ2UiLCAic3FsTGVuZ3RoIiwgIm5lYXJNYXRjaCIsICJmaW5kVG9rZW5SYW5nZSIsICJtaXNzaW5nVGFibGVNYXRjaCIsICJtaXNzaW5nQ29sdW1uTWF0Y2giLCAicmF3VG9rZW4iLCAidG9rZW4iLCAibG93ZXJTcWwiLCAibG93ZXJUb2tlbiIsICJkaXJlY3RJbmRleCIsICJzcGxpdFRva2VuIiwgInNwbGl0SW5kZXgiLCAic2NoZW1hIiwgImZpbHRlck9wZXJhdG9ycyIsICJjcmVhdGVTUUxpdGVBZGFwdGVyIiwgInJlcXVpcmVtZW50cyIsICJleGVjdXRvciIsICJvdGhlclJlcXVpcmVtZW50cyIsICJmdWxsVGFibGVTZWFyY2hTdGF0ZSIsICJjcmVhdGVGdWxsVGFibGVTZWFyY2hFeGVjdXRpb25TdGF0ZSIsICJjYW5Vc2VFeGVjdXRvckxpbnRUcmFuc3BvcnQiLCAiaW50cm9zcGVjdERhdGFiYXNlIiwgIm9wdGlvbnMiLCAidGFibGVzUXVlcnkiLCAiZ2V0VGFibGVzUXVlcnkiLCAidGFibGVzRXJyb3IiLCAidGFibGVzIiwgImNyZWF0ZUFkYXB0ZXJFcnJvciIsICJjcmVhdGVJbnRyb3NwZWN0aW9uIiwgImVycm9yIiwgImRldGFpbHMiLCAicXVlcnkiLCAiZ2V0RGVsZXRlUXVlcnkiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAicm93cyIsICJfZGV0YWlscyIsICJpbnRyb3NwZWN0aW9uIiwgImNyZWF0ZVNxbEVkaXRvclNjaGVtYUZyb21JbnRyb3NwZWN0aW9uIiwgInJlc3VsdCIsICJzaG91bGRGYWxsYmFja1RvRXhwbGFpbkxpbnQiLCAibGludFNRTGl0ZVdpdGhFeHBsYWluRmFsbGJhY2siLCAiZ2V0U2VsZWN0UXVlcnkiLCAicmVzdWx0cyIsICJleGVjdXRlUXVlcnlXaXRoRnVsbFRhYmxlU2VhcmNoR3VhcmRyYWlscyIsICJhc1F1ZXJ5IiwgImdldFVwZGF0ZVF1ZXJ5IiwgInJvdyIsICJtZXNzYWdlIiwgIldJVEhPVVRfUk9XSURfUkVHRVgiLCAiYXJncyIsICJzY2hlbWFzIiwgInRhYmxlIiwgImNvbHVtbnMiLCAidGFibGVOYW1lIiwgInNxbCIsICJtYXhQS1NlZW4iLCAiY29sdW1uc1JlY29yZCIsICJjb2x1bW4iLCAiaW5kZXgiLCAiZGF0YXR5cGUiLCAiZGVmYXVsdFZhbHVlIiwgImZrX2NvbHVtbiIsICJjb2x1bW5OYW1lIiwgInBrIiwgImFmZmluaXR5IiwgImRldGVybWluZUNvbHVtbkFmZmluaXR5IiwgImlzUm93SWQiLCAiaXNDb21wdXRlZCIsICJudWxsYWJsZSIsICJTUUxJVEVfQUZGSU5JVFlfVE9fTUVUQURBVEEiLCAibW9ja0ludHJvc3BlY3QiLCAibW9ja1RhYmxlc1F1ZXJ5Il0KfQo=