@akasecurity/cli 0.9.11 → 0.9.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/dist/cli.js +4764 -3653
  2. package/extension/content.js +1 -1
  3. package/extension/manifest.json +1 -1
  4. package/native-host/host.js +1576 -870
  5. package/native-host/scan-worker.js +237 -18
  6. package/native-host/sync.js +333 -65
  7. package/package.json +5 -5
  8. package/web-ui/web-ui/.next/BUILD_ID +1 -1
  9. package/web-ui/web-ui/.next/app-build-manifest.json +87 -87
  10. package/web-ui/web-ui/.next/app-path-routes-manifest.json +5 -5
  11. package/web-ui/web-ui/.next/build-manifest.json +2 -2
  12. package/web-ui/web-ui/.next/prerender-manifest.json +3 -3
  13. package/web-ui/web-ui/.next/server/app/(app)/activity/page.js +2 -2
  14. package/web-ui/web-ui/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  15. package/web-ui/web-ui/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  16. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js +2 -2
  17. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js.nft.json +1 -1
  18. package/web-ui/web-ui/.next/server/app/(app)/data-shares/page_client-reference-manifest.js +1 -1
  19. package/web-ui/web-ui/.next/server/app/(app)/detections/page.js +2 -2
  20. package/web-ui/web-ui/.next/server/app/(app)/detections/page.js.nft.json +1 -1
  21. package/web-ui/web-ui/.next/server/app/(app)/detections/page_client-reference-manifest.js +1 -1
  22. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js +2 -2
  23. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js.nft.json +1 -1
  24. package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page_client-reference-manifest.js +1 -1
  25. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js +1 -1
  26. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js.nft.json +1 -1
  27. package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page_client-reference-manifest.js +1 -1
  28. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js +1 -1
  29. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js.nft.json +1 -1
  30. package/web-ui/web-ui/.next/server/app/(app)/exceptions/page_client-reference-manifest.js +1 -1
  31. package/web-ui/web-ui/.next/server/app/(app)/findings/page.js +2 -2
  32. package/web-ui/web-ui/.next/server/app/(app)/findings/page.js.nft.json +1 -1
  33. package/web-ui/web-ui/.next/server/app/(app)/findings/page_client-reference-manifest.js +1 -1
  34. package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js +2 -2
  35. package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js.nft.json +1 -1
  36. package/web-ui/web-ui/.next/server/app/(app)/inventory/page_client-reference-manifest.js +1 -1
  37. package/web-ui/web-ui/.next/server/app/(app)/policies/page.js +2 -2
  38. package/web-ui/web-ui/.next/server/app/(app)/policies/page.js.nft.json +1 -1
  39. package/web-ui/web-ui/.next/server/app/(app)/policies/page_client-reference-manifest.js +1 -1
  40. package/web-ui/web-ui/.next/server/app/(app)/scan/page.js +3 -3
  41. package/web-ui/web-ui/.next/server/app/(app)/scan/page.js.nft.json +1 -1
  42. package/web-ui/web-ui/.next/server/app/(app)/scan/page_client-reference-manifest.js +1 -1
  43. package/web-ui/web-ui/.next/server/app/(app)/security/page.js +2 -2
  44. package/web-ui/web-ui/.next/server/app/(app)/security/page.js.nft.json +1 -1
  45. package/web-ui/web-ui/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
  46. package/web-ui/web-ui/.next/server/app/(app)/settings/page.js +2 -2
  47. package/web-ui/web-ui/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  48. package/web-ui/web-ui/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  49. package/web-ui/web-ui/.next/server/app/(app)/updates/page.js +2 -2
  50. package/web-ui/web-ui/.next/server/app/(app)/updates/page.js.nft.json +1 -1
  51. package/web-ui/web-ui/.next/server/app/(app)/updates/page_client-reference-manifest.js +1 -1
  52. package/web-ui/web-ui/.next/server/app/(app)/vault/page.js +2 -2
  53. package/web-ui/web-ui/.next/server/app/(app)/vault/page.js.nft.json +1 -1
  54. package/web-ui/web-ui/.next/server/app/(app)/vault/page_client-reference-manifest.js +1 -1
  55. package/web-ui/web-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  56. package/web-ui/web-ui/.next/server/app/_not-found.html +1 -1
  57. package/web-ui/web-ui/.next/server/app/_not-found.rsc +2 -2
  58. package/web-ui/web-ui/.next/server/app/index.html +1 -1
  59. package/web-ui/web-ui/.next/server/app/index.rsc +2 -2
  60. package/web-ui/web-ui/.next/server/app/page_client-reference-manifest.js +1 -1
  61. package/web-ui/web-ui/.next/server/app-paths-manifest.json +5 -5
  62. package/web-ui/web-ui/.next/server/chunks/{739.js → 121.js} +1 -1
  63. package/web-ui/web-ui/.next/server/chunks/290.js +6 -0
  64. package/web-ui/web-ui/.next/server/chunks/475.js +1 -1
  65. package/web-ui/web-ui/.next/server/chunks/589.js +1 -1
  66. package/web-ui/web-ui/.next/server/chunks/611.js +1015 -0
  67. package/web-ui/web-ui/.next/server/chunks/7.js +1 -1
  68. package/web-ui/web-ui/.next/server/chunks/816.js +1 -0
  69. package/web-ui/web-ui/.next/server/chunks/935.js +1 -1
  70. package/web-ui/web-ui/.next/server/chunks/968.js +1006 -0
  71. package/web-ui/web-ui/.next/server/functions-config-manifest.json +6 -6
  72. package/web-ui/web-ui/.next/server/middleware-manifest.json +5 -5
  73. package/web-ui/web-ui/.next/server/pages/404.html +1 -1
  74. package/web-ui/web-ui/.next/server/pages/500.html +1 -1
  75. package/web-ui/web-ui/.next/server/server-reference-manifest.js +1 -1
  76. package/web-ui/web-ui/.next/server/server-reference-manifest.json +1 -1
  77. package/web-ui/web-ui/.next/static/chunks/{526-026c69b926a17dbb.js → 526-f0156de7831566b3.js} +1 -1
  78. package/web-ui/web-ui/.next/static/chunks/674-d8237c5d0faa4a53.js +1 -0
  79. package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-a27c8937989448e4.js +1 -0
  80. package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/page-2b805f9e1f995092.js +1 -0
  81. package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-a87cfee370c4e0f4.js +1 -0
  82. package/web-ui/web-ui/.next/static/chunks/app/(app)/{error-dead9507fc349f26.js → error-190085728a856072.js} +1 -1
  83. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-4e214491c7be8d43.js +1 -0
  84. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-c1bb992ee1f12566.js +1 -0
  85. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-f16ba40d88e414b1.js +1 -0
  86. package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-59c76da638f22b0e.js +1 -0
  87. package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-c37447caf89a86e1.js +1 -0
  88. package/web-ui/web-ui/.next/static/chunks/app/(app)/{layout-dc7ae7664dcdc3c5.js → layout-cb3c8c7b6b33414c.js} +1 -1
  89. package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/page-ab639e48f60ad7ee.js +1 -0
  90. package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-494614fccc8c62cc.js +1 -0
  91. package/web-ui/web-ui/.next/static/chunks/app/(app)/security/page-a3095119b3e87341.js +1 -0
  92. package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-469613d499e41093.js +1 -0
  93. package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/page-5b32bd569c9569d9.js +1 -0
  94. package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/page-3152ceb31f024b8d.js +1 -0
  95. package/web-ui/web-ui/.next/static/css/6e72259eccdf4435.css +2 -0
  96. package/web-ui/web-ui/dist/scan-worker.js +237 -18
  97. package/web-ui/web-ui/.next/server/chunks/471.js +0 -950
  98. package/web-ui/web-ui/.next/server/chunks/766.js +0 -6
  99. package/web-ui/web-ui/.next/server/chunks/851.js +0 -1
  100. package/web-ui/web-ui/.next/server/chunks/905.js +0 -959
  101. package/web-ui/web-ui/.next/static/chunks/907-2ba9428e7818b656.js +0 -1
  102. package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-c5a55618d187c906.js +0 -1
  103. package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/page-b1c76b8c00e1ae2a.js +0 -1
  104. package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-159167b47a005b33.js +0 -1
  105. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-5e872a82af85ef64.js +0 -1
  106. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-0695d0006518b2cb.js +0 -1
  107. package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-adec99f2f4bbc180.js +0 -1
  108. package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-d013384d2ddb3036.js +0 -1
  109. package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-42c1b48a01fdecb0.js +0 -1
  110. package/web-ui/web-ui/.next/static/chunks/app/(app)/policies/page-9b6d7cc4ce9fb33e.js +0 -1
  111. package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-f3ee9ecde06df153.js +0 -1
  112. package/web-ui/web-ui/.next/static/chunks/app/(app)/security/page-24a003c709776317.js +0 -1
  113. package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-4ea49ce2e765fffb.js +0 -1
  114. package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/page-6c7b94b070de8986.js +0 -1
  115. package/web-ui/web-ui/.next/static/chunks/app/(app)/vault/page-f37ab8e1edc67663.js +0 -1
  116. package/web-ui/web-ui/.next/static/css/c6954dd65f2115e6.css +0 -2
  117. /package/web-ui/web-ui/.next/static/{osEmGZG6yEV-XkQlklt-B → PMeePXfXsQ2xxrXppySG_}/_buildManifest.js +0 -0
  118. /package/web-ui/web-ui/.next/static/{osEmGZG6yEV-XkQlklt-B → PMeePXfXsQ2xxrXppySG_}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";(()=>{function T(t){let{adapter:e,sessionId:s,relay:r,showBanner:n}=t,d=!1,u=!1;function c(i){return d=!0,setTimeout(()=>{d=!1},0),e.submit(i)?!0:(d=!1,n("AKA could not send this message \u2014 the send button was not found, so the site may have changed. Your text is still in the composer and was NOT sent.","block"),!1)}async function m(i,l){let o=await r({type:"capture",sessionId:s,tool:e.id,kind:"prompt",text:l}).catch(()=>({type:"error",requestId:void 0,ok:!1,message:"relay failed"}));if(o.type!=="capture"){c(i);return}if(o.action==="block"){n(`AKA blocked this message \u2014 flagged ${o.ruleIds.join(", ")}. Remove it and resend.`,"block");return}if(o.action==="redact"){if(typeof o.text!="string"){n(`AKA could not redact this message (${o.ruleIds.join(", ")}) \u2014 remove the flagged content and resend.`,"block");return}if(e.setText(i,o.text),e.extractText(i).trim()!==o.text.trim()){n("AKA could not redact this message \u2014 remove the flagged content and resend.","block");return}if(!c(i))return;n(`AKA redacted sensitive content (${o.ruleIds.join(", ")}) before sending.`,"redact");return}if(o.action==="warn"){if(!c(i))return;n(`AKA flagged sensitive content (${o.ruleIds.join(", ")}) \u2014 sent unchanged.`,"warn");return}c(i)}return{handleSubmit(i,l){if(d){d=!1;return}let o=e.extractText(l);o.trim()!==""&&(i.preventDefault(),i.stopImmediatePropagation(),!u&&(u=!0,m(l,o).finally(()=>{u=!1})))}}}function p(t){for(let e of t){let s=document.querySelector(e);if(s)return s}return null}function f(t){return t.innerText}function h(t,e){t.focus(),t.textContent=e,t.dispatchEvent(new InputEvent("input",{bubbles:!0,cancelable:!0}))}function b(t,e){let s=r=>{r.key==="Enter"&&!r.shiftKey&&!r.isComposing&&e(r)};return t.addEventListener("keydown",s,!0),()=>{t.removeEventListener("keydown",s,!0)}}function x(t,e){return t.addEventListener("click",e,!0),()=>{t.removeEventListener("click",e,!0)}}var R=["#prompt-textarea",'form [contenteditable="true"][role="textbox"]','form [contenteditable="true"]'],L=['[data-testid="send-button"]','button[aria-label*="send" i]'];function g(){return p(L)}var v={id:"chatgpt",hostnames:["chatgpt.com","chat.openai.com"],findComposer(){return p(R)},findSendButton:g,extractText:f,setText:h,watchSubmit(t,e){let s=b(t,e),r=g(),n=r?x(r,e):void 0;return()=>{s(),n?.()}},submit(){let t=g();return t?(t.click(),!0):!1}};var M=['div[contenteditable="true"][aria-label*="claude" i]','fieldset [contenteditable="true"]','form [contenteditable="true"]'],P=['button[aria-label*="send" i]','fieldset button[type="submit"]'];function y(){return p(P)}var k={id:"claude-ai",hostnames:["claude.ai"],findComposer(){return p(M)},findSendButton:y,extractText:f,setText:h,watchSubmit(t,e){let s=b(t,e),r=y(),n=r?x(r,e):void 0;return()=>{s(),n?.()}},submit(){let t=y();return t?(t.click(),!0):!1}};var w=[v,k],$=w.flatMap(t=>t.hostnames);function S(t){return w.find(e=>e.hostnames.includes(t))??null}var A=S(location.hostname);A&&H(A);function H(t){let e=crypto.randomUUID(),s=T({adapter:t,sessionId:e,relay:B,showBanner:I}),r=null,n=null,d=null,u=!1;function c(){u=!1;let i=t.findComposer(),l=t.findSendButton();if(!(i===r&&l===n))if(d?.(),r=i,n=l,r&&n){let o=r;d=t.watchSubmit(o,C=>{s.handleSubmit(C,o)})}else d=null}function m(){u||(u=!0,requestAnimationFrame(c))}m(),new MutationObserver(m).observe(document.body,{childList:!0,subtree:!0}),B({type:"session_start",sessionId:e,tool:t.id,hostname:location.hostname}).catch(()=>{})}function B(t){return chrome.runtime.sendMessage(t)}var a=null,E=null;function I(t,e){a||(a=document.createElement("div"),a.style.all="initial",a.style.position="fixed",a.style.zIndex="2147483647",a.style.bottom="24px",a.style.left="50%",a.style.transform="translateX(-50%)",document.body.append(a));let s=a.shadowRoot??a.attachShadow({mode:"open"}),r=e==="block"?"#dc2626":e==="redact"?"#d97706":"#2563eb",n=document.createElement("div");n.style.font="13px/1.4 system-ui, sans-serif",n.style.background=r,n.style.color="white",n.style.padding="8px 14px",n.style.borderRadius="8px",n.style.boxShadow="0 4px 12px rgba(0,0,0,0.25)",n.style.maxWidth="480px",n.textContent=t,s.replaceChildren(n),E&&clearTimeout(E),E=setTimeout(()=>{a?.remove(),a=null},6e3)}})();
1
+ "use strict";(()=>{function v(e){let{adapter:t,sessionId:o,relay:r,showBanner:n}=e,u=!1,d=!1;function l(i){return u=!0,setTimeout(()=>{u=!1},0),t.submit(i)?!0:(u=!1,n("AKA could not send this message \u2014 the send button was not found, so the site may have changed. Your text is still in the composer and was NOT sent.","block"),!1)}async function m(i,c){let s=await r({type:"capture",sessionId:o,tool:t.id,kind:"prompt",text:c}).catch(()=>({type:"error",requestId:void 0,ok:!1,message:"relay failed"}));if(s.type!=="capture"){l(i);return}if(s.action==="block"){n(`AKA blocked this message \u2014 flagged ${s.ruleIds.join(", ")}. Remove it and resend.`,"block");return}if(s.action==="redact"){if(typeof s.text!="string"){n(`AKA could not redact this message (${s.ruleIds.join(", ")}) \u2014 remove the flagged content and resend.`,"block");return}if(t.setText(i,s.text),t.extractText(i).trim()!==s.text.trim()){n("AKA could not redact this message \u2014 remove the flagged content and resend.","block");return}if(!l(i))return;n(`AKA redacted sensitive content (${s.ruleIds.join(", ")}) before sending.`,"redact");return}if(s.action==="warn"){if(!l(i))return;n(`AKA flagged sensitive content (${s.ruleIds.join(", ")}) \u2014 sent unchanged.`,"warn");return}l(i)}return{handleSubmit(i,c){if(u){u=!1;return}let s=t.extractText(c);s.trim()!==""&&(i.preventDefault(),i.stopImmediatePropagation(),!d&&(d=!0,m(c,s).finally(()=>{d=!1})))}}}function p(e){for(let t of e){let o=document.querySelector(t);if(o)return o}return null}function y(e){return e.tagName==="TEXTAREA"||e.tagName==="INPUT"}function H(e){let t=e.tagName==="TEXTAREA"?HTMLTextAreaElement.prototype:HTMLInputElement.prototype;return Object.getOwnPropertyDescriptor(t,"value")?.set}function f(e){return y(e)?e.value:e.innerText}function h(e,t){if(e.focus(),y(e)){let o=H(e);o?o.call(e,t):e.value=t}else e.textContent=t;e.dispatchEvent(new InputEvent("input",{bubbles:!0,cancelable:!0}))}function R(e){if(e.getAttribute("aria-expanded")==="true")return!0;let t=e.getAttribute("aria-activedescendant");if(t!==null&&t!=="")return!0;let o=e.getAttribute("aria-controls");if(o===null)return!1;for(let r of o.split(/\s+/))if(r!==""&&document.getElementById(r)?.getAttribute("role")==="listbox")return!0;return!1}function T(e,t){let o=r=>{if(r.key!=="Enter"||r.shiftKey||r.isComposing)return;let n=r.target;!(n instanceof Node)||!e.contains(n)||R(e)||t(r)};return document.addEventListener("keydown",o,!0),()=>{document.removeEventListener("keydown",o,!0)}}function g(e,t){return e.addEventListener("click",t,!0),()=>{e.removeEventListener("click",t,!0)}}var C=["#prompt-textarea",'form [contenteditable="true"][role="textbox"]','form [contenteditable="true"]'],I=['[data-testid="send-button"]','button[aria-label*="send" i]'];function b(){return p(I)}var A={id:"chatgpt",hostnames:["chatgpt.com","chat.openai.com"],findComposer(){return p(C)},findSendButton:b,extractText:f,setText:h,watchSubmit(e,t){let o=T(e,t),r=b(),n=r?g(r,t):void 0;return()=>{o(),n?.()}},submit(){let e=b();return e?(e.click(),!0):!1}};var P=['div[contenteditable="true"][aria-label*="claude" i]','fieldset [contenteditable="true"]','form [contenteditable="true"]'],O=['button[aria-label*="send" i]','fieldset button[type="submit"]'];function E(){return p(O)}var k={id:"claude-ai",hostnames:["claude.ai"],findComposer(){return p(P)},findSendButton:E,extractText:f,setText:h,watchSubmit(e,t){let o=T(e,t),r=E(),n=r?g(r,t):void 0;return()=>{o(),n?.()}},submit(){let e=E();return e?(e.click(),!0):!1}};var w=[A,k],V=w.flatMap(e=>e.hostnames);function S(e){return w.find(t=>t.hostnames.includes(e))??null}var L=S(location.hostname);L&&N(L);function N(e){let t=crypto.randomUUID(),o=v({adapter:e,sessionId:t,relay:M,showBanner:q}),r=null,n=null,u=null,d=!1;function l(){d=!1;let i=e.findComposer(),c=e.findSendButton();if(!(i===r&&c===n))if(u?.(),r=i,n=c,r&&n){let s=r;u=e.watchSubmit(s,B=>{o.handleSubmit(B,s)})}else u=null}function m(){d||(d=!0,requestAnimationFrame(l))}m(),new MutationObserver(m).observe(document.body,{childList:!0,subtree:!0}),M({type:"session_start",sessionId:t,tool:e.id,hostname:location.hostname}).catch(()=>{})}function M(e){return chrome.runtime.sendMessage(e)}var a=null,x=null;function q(e,t){a||(a=document.createElement("div"),a.style.all="initial",a.style.position="fixed",a.style.zIndex="2147483647",a.style.bottom="24px",a.style.left="50%",a.style.transform="translateX(-50%)",document.body.append(a));let o=a.shadowRoot??a.attachShadow({mode:"open"}),r=t==="block"?"#dc2626":t==="redact"?"#d97706":"#2563eb",n=document.createElement("div");n.style.font="13px/1.4 system-ui, sans-serif",n.style.background=r,n.style.color="white",n.style.padding="8px 14px",n.style.borderRadius="8px",n.style.boxShadow="0 4px 12px rgba(0,0,0,0.25)",n.style.maxWidth="480px",n.textContent=e,o.replaceChildren(n),x&&clearTimeout(x),x=setTimeout(()=>{a?.remove(),a=null},6e3)}})();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "AI Traffic Control",
4
- "version": "0.9.11",
4
+ "version": "0.9.12",
5
5
  "description": "Local secret detection and redaction for ChatGPT and Claude.ai web chat.",
6
6
  "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqnwx5Snbi3oZ7mDBC78NaTHO6dTKYRtCqr29YnOImR47UM21tP1us3KF6FjQMtR6tAsffflRok1PThQpjBNwYdRM+stvPIUr5GqBRQL1Ge///kZaVz7eCptCjKg00ygk2HwelaCNt6nWy6czIcM3/HssrNflw42IKsBORW7qQ+KhhKqlABjkRUDvBcuhwOU34HHMJxeP2XdyI5T5msqVJN1nVA+X9T/18dP7cCSzkp9RwLN1hvQMS6n3A1R0HUCmfra1lb1KqQhy3EBdm2VwxTDGVPfGYbTdNSyRT70wzcZy1IdQkfT6YOy1M//+yT7Vu9p/aajs+dNNn/zUn0qJyQIDAQAB",
7
7
  "icons": {