cdk-insights 1.27.0 → 1.27.1

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.
package/dist/entry.js CHANGED
@@ -91,7 +91,7 @@ ${JSON.stringify(z)}`}).join(`
91
91
  \v\f\r\u1EF6\u1EF8\x1B\u1EF4 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\xD5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\xC0\xC1\xC2\xC3\u1EA2\u0102\u1EB3\u1EB5\xC8\xC9\xCA\u1EBA\xCC\xCD\u0128\u1EF3\u0110\u1EE9\xD2\xD3\xD4\u1EA1\u1EF7\u1EEB\u1EED\xD9\xDA\u1EF9\u1EF5\xDD\u1EE1\u01B0\xE0\xE1\xE2\xE3\u1EA3\u0103\u1EEF\u1EAB\xE8\xE9\xEA\u1EBB\xEC\xED\u0129\u1EC9\u0111\u1EF1\xF2\xF3\xF4\xF5\u1ECF\u1ECD\u1EE5\xF9\xFA\u0169\u1EE7\xFD\u1EE3\u1EEE`},iso646cn:{type:"_sbcs",chars:`\0\x07\b
92
92
  \v\f\r\x1B !"#\xA5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD`},iso646jp:{type:"_sbcs",chars:`\0\x07\b
93
93
  \v\f\r\x1B !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\xA5]^_\`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD`},hproman8:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xC0\xC2\xC8\xCA\xCB\xCE\xCF\xB4\u02CB\u02C6\xA8\u02DC\xD9\xDB\u20A4\xAF\xDD\xFD\xB0\xC7\xE7\xD1\xF1\xA1\xBF\xA4\xA3\xA5\xA7\u0192\xA2\xE2\xEA\xF4\xFB\xE1\xE9\xF3\xFA\xE0\xE8\xF2\xF9\xE4\xEB\xF6\xFC\xC5\xEE\xD8\xC6\xE5\xED\xF8\xE6\xC4\xEC\xD6\xDC\xC9\xEF\xDF\xD4\xC1\xC3\xE3\xD0\xF0\xCD\xCC\xD3\xD2\xD5\xF5\u0160\u0161\xDA\u0178\xFF\xDE\xFE\xB7\xB5\xB6\xBE\u2014\xBC\xBD\xAA\xBA\xAB\u25A0\xBB\xB1\uFFFD"},macintosh:{type:"_sbcs",chars:"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"},ascii:{type:"_sbcs",chars:"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"},tis620:{type:"_sbcs",chars:"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"}}});var iE=O(rE=>{"use strict";var S0=or().Buffer;rE._dbcs=cr;var es=-1,nE=-2,tn=-10,as=-1e3,Da=new Array(256),jc=-1;for(Md=0;Md<256;Md++)Da[Md]=es;var Md;function cr(t,e){if(this.encodingName=t.encodingName,!t)throw new Error("DBCS codec is called without the data.");if(!t.table)throw new Error("Encoding '"+this.encodingName+"' has no data.");var s=t.table();this.decodeTables=[],this.decodeTables[0]=Da.slice(0),this.decodeTableSeq=[];for(var n=0;n<s.length;n++)this._addDecodeChunk(s[n]);if(typeof t.gb18030=="function"){this.gb18030=t.gb18030();var r=this.decodeTables.length;this.decodeTables.push(Da.slice(0));var i=this.decodeTables.length;this.decodeTables.push(Da.slice(0));for(var o=this.decodeTables[0],n=129;n<=254;n++)for(var a=this.decodeTables[as-o[n]],c=48;c<=57;c++){if(a[c]===es)a[c]=as-r;else if(a[c]>as)throw new Error("gb18030 decode tables conflict at byte 2");for(var u=this.decodeTables[as-a[c]],l=129;l<=254;l++){if(u[l]===es)u[l]=as-i;else{if(u[l]===as-i)continue;if(u[l]>as)throw new Error("gb18030 decode tables conflict at byte 3")}for(var d=this.decodeTables[as-u[l]],p=48;p<=57;p++)d[p]===es&&(d[p]=nE)}}}this.defaultCharUnicode=e.defaultCharUnicode,this.encodeTable=[],this.encodeTableSeq=[];var f={};if(t.encodeSkipVals)for(var n=0;n<t.encodeSkipVals.length;n++){var m=t.encodeSkipVals[n];if(typeof m=="number")f[m]=!0;else for(var c=m.from;c<=m.to;c++)f[c]=!0}if(this._fillEncodeTable(0,0,f),t.encodeAdd)for(var g in t.encodeAdd)Object.prototype.hasOwnProperty.call(t.encodeAdd,g)&&this._setEncodeChar(g.charCodeAt(0),t.encodeAdd[g]);this.defCharSB=this.encodeTable[0][e.defaultCharSingleByte.charCodeAt(0)],this.defCharSB===es&&(this.defCharSB=this.encodeTable[0]["?"]),this.defCharSB===es&&(this.defCharSB=63)}cr.prototype.encoder=Bd;cr.prototype.decoder=v0;cr.prototype._getDecodeTrieNode=function(t){for(var e=[];t>0;t>>>=8)e.push(t&255);e.length==0&&e.push(0);for(var s=this.decodeTables[0],n=e.length-1;n>0;n--){var r=s[e[n]];if(r==es)s[e[n]]=as-this.decodeTables.length,this.decodeTables.push(s=Da.slice(0));else if(r<=as)s=this.decodeTables[as-r];else throw new Error("Overwrite byte in "+this.encodingName+", addr: "+t.toString(16))}return s};cr.prototype._addDecodeChunk=function(t){var e=parseInt(t[0],16),s=this._getDecodeTrieNode(e);e=e&255;for(var n=1;n<t.length;n++){var r=t[n];if(typeof r=="string")for(var i=0;i<r.length;){var o=r.charCodeAt(i++);if(o>=55296&&o<56320){var a=r.charCodeAt(i++);if(a>=56320&&a<57344)s[e++]=65536+(o-55296)*1024+(a-56320);else throw new Error("Incorrect surrogate pair in "+this.encodingName+" at chunk "+t[0])}else if(o>4080&&o<=4095){for(var c=4095-o+2,u=[],l=0;l<c;l++)u.push(r.charCodeAt(i++));s[e++]=tn-this.decodeTableSeq.length,this.decodeTableSeq.push(u)}else s[e++]=o}else if(typeof r=="number")for(var d=s[e-1]+1,i=0;i<r;i++)s[e++]=d++;else throw new Error("Incorrect type '"+typeof r+"' given in "+this.encodingName+" at chunk "+t[0])}if(e>255)throw new Error("Incorrect chunk in "+this.encodingName+" at addr "+t[0]+": too long"+e)};cr.prototype._getEncodeBucket=function(t){var e=t>>8;return this.encodeTable[e]===void 0&&(this.encodeTable[e]=Da.slice(0)),this.encodeTable[e]};cr.prototype._setEncodeChar=function(t,e){var s=this._getEncodeBucket(t),n=t&255;s[n]<=tn?this.encodeTableSeq[tn-s[n]][jc]=e:s[n]==es&&(s[n]=e)};cr.prototype._setEncodeSequence=function(t,e){var s=t[0],n=this._getEncodeBucket(s),r=s&255,i;n[r]<=tn?i=this.encodeTableSeq[tn-n[r]]:(i={},n[r]!==es&&(i[jc]=n[r]),n[r]=tn-this.encodeTableSeq.length,this.encodeTableSeq.push(i));for(var o=1;o<t.length-1;o++){var a=i[s];typeof a=="object"?i=a:(i=i[s]={},a!==void 0&&(i[jc]=a))}s=t[t.length-1],i[s]=e};cr.prototype._fillEncodeTable=function(t,e,s){for(var n=this.decodeTables[t],r=!1,i={},o=0;o<256;o++){var a=n[o],c=e+o;if(!s[c])if(a>=0)this._setEncodeChar(a,c),r=!0;else if(a<=as){var u=as-a;if(!i[u]){var l=c<<8>>>0;this._fillEncodeTable(u,l,s)?r=!0:i[u]=!0}}else a<=tn&&(this._setEncodeSequence(this.decodeTableSeq[tn-a],c),r=!0)}return r};function Bd(t,e){this.leadSurrogate=-1,this.seqObj=void 0,this.encodeTable=e.encodeTable,this.encodeTableSeq=e.encodeTableSeq,this.defaultCharSingleByte=e.defCharSB,this.gb18030=e.gb18030}Bd.prototype.write=function(t){for(var e=S0.alloc(t.length*(this.gb18030?4:3)),s=this.leadSurrogate,n=this.seqObj,r=-1,i=0,o=0;;){if(r===-1){if(i==t.length)break;var a=t.charCodeAt(i++)}else{var a=r;r=-1}if(a>=55296&&a<57344)if(a<56320)if(s===-1){s=a;continue}else s=a,a=es;else s!==-1?(a=65536+(s-55296)*1024+(a-56320),s=-1):a=es;else s!==-1&&(r=a,a=es,s=-1);var c=es;if(n!==void 0&&a!=es){var u=n[a];if(typeof u=="object"){n=u;continue}else typeof u=="number"?c=u:u==null&&(u=n[jc],u!==void 0&&(c=u,r=a));n=void 0}else if(a>=0){var l=this.encodeTable[a>>8];if(l!==void 0&&(c=l[a&255]),c<=tn){n=this.encodeTableSeq[tn-c];continue}if(c==es&&this.gb18030){var d=C0(this.gb18030.uChars,a);if(d!=-1){var c=this.gb18030.gbChars[d]+(a-this.gb18030.uChars[d]);e[o++]=129+Math.floor(c/12600),c=c%12600,e[o++]=48+Math.floor(c/1260),c=c%1260,e[o++]=129+Math.floor(c/10),c=c%10,e[o++]=48+c;continue}}}c===es&&(c=this.defaultCharSingleByte),c<256?e[o++]=c:c<65536?(e[o++]=c>>8,e[o++]=c&255):c<16777216?(e[o++]=c>>16,e[o++]=c>>8&255,e[o++]=c&255):(e[o++]=c>>>24,e[o++]=c>>>16&255,e[o++]=c>>>8&255,e[o++]=c&255)}return this.seqObj=n,this.leadSurrogate=s,e.slice(0,o)};Bd.prototype.end=function(){if(!(this.leadSurrogate===-1&&this.seqObj===void 0)){var t=S0.alloc(10),e=0;if(this.seqObj){var s=this.seqObj[jc];s!==void 0&&(s<256?t[e++]=s:(t[e++]=s>>8,t[e++]=s&255)),this.seqObj=void 0}return this.leadSurrogate!==-1&&(t[e++]=this.defaultCharSingleByte,this.leadSurrogate=-1),t.slice(0,e)}};Bd.prototype.findIdx=C0;function v0(t,e){this.nodeIdx=0,this.prevBytes=[],this.decodeTables=e.decodeTables,this.decodeTableSeq=e.decodeTableSeq,this.defaultCharUnicode=e.defaultCharUnicode,this.gb18030=e.gb18030}v0.prototype.write=function(t){for(var e=S0.alloc(t.length*2),s=this.nodeIdx,n=this.prevBytes,r=this.prevBytes.length,i=-this.prevBytes.length,o,a=0,c=0;a<t.length;a++){var u=a>=0?t[a]:n[a+r],o=this.decodeTables[s][u];if(!(o>=0))if(o===es)o=this.defaultCharUnicode.charCodeAt(0),a=i;else if(o===nE){if(a>=3)var l=(t[a-3]-129)*12600+(t[a-2]-48)*1260+(t[a-1]-129)*10+(u-48);else var l=(n[a-3+r]-129)*12600+((a-2>=0?t[a-2]:n[a-2+r])-48)*1260+((a-1>=0?t[a-1]:n[a-1+r])-129)*10+(u-48);var d=C0(this.gb18030.gbChars,l);o=this.gb18030.uChars[d]+l-this.gb18030.gbChars[d]}else if(o<=as){s=as-o;continue}else if(o<=tn){for(var p=this.decodeTableSeq[tn-o],f=0;f<p.length-1;f++)o=p[f],e[c++]=o&255,e[c++]=o>>8;o=p[p.length-1]}else throw new Error("iconv-lite internal error: invalid decoding table value "+o+" at "+s+"/"+u);if(o>=65536){o-=65536;var m=55296|o>>10;e[c++]=m&255,e[c++]=m>>8,o=56320|o&1023}e[c++]=o&255,e[c++]=o>>8,s=0,i=a+1}return this.nodeIdx=s,this.prevBytes=i>=0?Array.prototype.slice.call(t,i):n.slice(i+r).concat(Array.prototype.slice.call(t)),e.slice(0,c).toString("ucs2")};v0.prototype.end=function(){for(var t="";this.prevBytes.length>0;){t+=this.defaultCharUnicode;var e=this.prevBytes.slice(1);this.prevBytes=[],this.nodeIdx=0,e.length>0&&(t+=this.write(e))}return this.prevBytes=[],this.nodeIdx=0,t};function C0(t,e){if(t[0]>e)return-1;for(var s=0,n=t.length;s<n-1;){var r=s+(n-s+1>>1);t[r]<=e?s=r:n=r}return s}});var oE=O((IX,$N)=>{$N.exports=[["0","\0",128],["a1","\uFF61",62],["8140","\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008",9,"\uFF0B\uFF0D\xB1\xD7"],["8180","\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"],["81b8","\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"],["81c8","\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"],["81da","\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"],["81f0","\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"],["81fc","\u25EF"],["824f","\uFF10",9],["8260","\uFF21",25],["8281","\uFF41",25],["829f","\u3041",82],["8340","\u30A1",62],["8380","\u30E0",22],["839f","\u0391",16,"\u03A3",6],["83bf","\u03B1",16,"\u03C3",6],["8440","\u0410",5,"\u0401\u0416",25],["8470","\u0430",5,"\u0451\u0436",7],["8480","\u043E",17],["849f","\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"],["8740","\u2460",19,"\u2160",9],["875f","\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"],["877e","\u337B"],["8780","\u301D\u301F\u2116\u33CD\u2121\u32A4",4,"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"],["889f","\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"],["8940","\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186"],["8980","\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"],["8a40","\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B"],["8a80","\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"],["8b40","\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551"],["8b80","\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"],["8c40","\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8"],["8c80","\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"],["8d40","\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D"],["8d80","\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"],["8e40","\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62"],["8e80","\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"],["8f40","\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3"],["8f80","\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"],["9040","\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8"],["9080","\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"],["9140","\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB"],["9180","\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"],["9240","\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4"],["9280","\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"],["9340","\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC"],["9380","\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"],["9440","\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885"],["9480","\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"],["9540","\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577"],["9580","\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"],["9640","\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6"],["9680","\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"],["9740","\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32"],["9780","\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"],["9840","\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"],["989f","\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"],["9940","\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED"],["9980","\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"],["9a40","\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638"],["9a80","\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"],["9b40","\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80"],["9b80","\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"],["9c40","\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060"],["9c80","\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"],["9d40","\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B"],["9d80","\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"],["9e40","\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E"],["9e80","\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"],["9f40","\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF"],["9f80","\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"],["e040","\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD"],["e080","\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"],["e140","\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF"],["e180","\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"],["e240","\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0"],["e280","\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"],["e340","\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37"],["e380","\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"],["e440","\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264"],["e480","\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"],["e540","\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC"],["e580","\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"],["e640","\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7"],["e680","\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"],["e740","\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C"],["e780","\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"],["e840","\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599"],["e880","\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"],["e940","\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43"],["e980","\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"],["ea40","\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF"],["ea80","\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199"],["ed40","\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F"],["ed80","\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"],["ee40","\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559"],["ee80","\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"],["eeef","\u2170",9,"\uFFE2\uFFE4\uFF07\uFF02"],["f040","\uE000",62],["f080","\uE03F",124],["f140","\uE0BC",62],["f180","\uE0FB",124],["f240","\uE178",62],["f280","\uE1B7",124],["f340","\uE234",62],["f380","\uE273",124],["f440","\uE2F0",62],["f480","\uE32F",124],["f540","\uE3AC",62],["f580","\uE3EB",124],["f640","\uE468",62],["f680","\uE4A7",124],["f740","\uE524",62],["f780","\uE563",124],["f840","\uE5E0",62],["f880","\uE61F",124],["f940","\uE69C"],["fa40","\u2170",9,"\u2160",9,"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A"],["fa80","\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F"],["fb40","\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19"],["fb80","\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9"],["fc40","\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"]]});var aE=O((kX,jN)=>{jN.exports=[["0","\0",127],["8ea1","\uFF61",62],["a1a1","\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008",9,"\uFF0B\uFF0D\xB1\xD7\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7"],["a2a1","\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"],["a2ba","\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"],["a2ca","\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"],["a2dc","\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"],["a2f2","\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"],["a2fe","\u25EF"],["a3b0","\uFF10",9],["a3c1","\uFF21",25],["a3e1","\uFF41",25],["a4a1","\u3041",82],["a5a1","\u30A1",85],["a6a1","\u0391",16,"\u03A3",6],["a6c1","\u03B1",16,"\u03C3",6],["a7a1","\u0410",5,"\u0401\u0416",25],["a7d1","\u0430",5,"\u0451\u0436",25],["a8a1","\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"],["ada1","\u2460",19,"\u2160",9],["adc0","\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"],["addf","\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4",4,"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"],["b0a1","\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"],["b1a1","\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC"],["b2a1","\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"],["b3a1","\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431"],["b4a1","\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"],["b5a1","\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC"],["b6a1","\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"],["b7a1","\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372"],["b8a1","\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"],["b9a1","\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC"],["baa1","\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"],["bba1","\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642"],["bca1","\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"],["bda1","\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F"],["bea1","\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"],["bfa1","\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE"],["c0a1","\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"],["c1a1","\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E"],["c2a1","\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"],["c3a1","\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5"],["c4a1","\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"],["c5a1","\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230"],["c6a1","\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"],["c7a1","\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6"],["c8a1","\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"],["c9a1","\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D"],["caa1","\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"],["cba1","\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80"],["cca1","\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"],["cda1","\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483"],["cea1","\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"],["cfa1","\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"],["d0a1","\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"],["d1a1","\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8"],["d2a1","\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"],["d3a1","\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709"],["d4a1","\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"],["d5a1","\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53"],["d6a1","\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"],["d7a1","\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A"],["d8a1","\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"],["d9a1","\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC"],["daa1","\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"],["dba1","\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD"],["dca1","\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"],["dda1","\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE"],["dea1","\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"],["dfa1","\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC"],["e0a1","\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"],["e1a1","\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670"],["e2a1","\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"],["e3a1","\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50"],["e4a1","\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"],["e5a1","\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A"],["e6a1","\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"],["e7a1","\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9"],["e8a1","\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"],["e9a1","\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759"],["eaa1","\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"],["eba1","\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B"],["eca1","\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"],["eda1","\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8"],["eea1","\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"],["efa1","\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E"],["f0a1","\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"],["f1a1","\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7"],["f2a1","\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"],["f3a1","\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0"],["f4a1","\u582F\u69C7\u9059\u7464\u51DC\u7199"],["f9a1","\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7"],["faa1","\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"],["fba1","\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA"],["fca1","\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"],["fcf1","\u2170",9,"\uFFE2\uFFE4\uFF07\uFF02"],["8fa2af","\u02D8\u02C7\xB8\u02D9\u02DD\xAF\u02DB\u02DA\uFF5E\u0384\u0385"],["8fa2c2","\xA1\xA6\xBF"],["8fa2eb","\xBA\xAA\xA9\xAE\u2122\xA4\u2116"],["8fa6e1","\u0386\u0388\u0389\u038A\u03AA"],["8fa6e7","\u038C"],["8fa6e9","\u038E\u03AB"],["8fa6ec","\u038F"],["8fa6f1","\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE"],["8fa7c2","\u0402",10,"\u040E\u040F"],["8fa7f2","\u0452",10,"\u045E\u045F"],["8fa9a1","\xC6\u0110"],["8fa9a4","\u0126"],["8fa9a6","\u0132"],["8fa9a8","\u0141\u013F"],["8fa9ab","\u014A\xD8\u0152"],["8fa9af","\u0166\xDE"],["8fa9c1","\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\xF8\u0153\xDF\u0167\xFE"],["8faaa1","\xC1\xC0\xC4\xC2\u0102\u01CD\u0100\u0104\xC5\xC3\u0106\u0108\u010C\xC7\u010A\u010E\xC9\xC8\xCB\xCA\u011A\u0116\u0112\u0118"],["8faaba","\u011C\u011E\u0122\u0120\u0124\xCD\xCC\xCF\xCE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\xD1\xD3\xD2\xD6\xD4\u01D1\u0150\u014C\xD5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\xDA\xD9\xDC\xDB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\xDD\u0178\u0176\u0179\u017D\u017B"],["8faba1","\xE1\xE0\xE4\xE2\u0103\u01CE\u0101\u0105\xE5\xE3\u0107\u0109\u010D\xE7\u010B\u010F\xE9\xE8\xEB\xEA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F"],["8fabbd","\u0121\u0125\xED\xEC\xEF\xEE\u01D0"],["8fabc5","\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\xF1\xF3\xF2\xF6\xF4\u01D2\u0151\u014D\xF5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\xFA\xF9\xFC\xFB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\xFD\xFF\u0177\u017A\u017E\u017C"],["8fb0a1","\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84"],["8fb1a1","\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090"],["8fb2a1","\u5092\u5093\u5094\u5096\u509B\u509C\u509E",4,"\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2"],["8fb3a1","\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B"],["8fb4a1","\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F"],["8fb5a1","\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2"],["8fb6a1","\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D",5,"\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4",4,"\u56F1\u56EB\u56ED"],["8fb7a1","\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D",4,"\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1"],["8fb8a1","\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D"],["8fb9a1","\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF"],["8fbaa1","\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6",4,"\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69"],["8fbba1","\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4"],["8fbca1","\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A",4,"\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67"],["8fbda1","\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0",4,"\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7"],["8fbea1","\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110",4,"\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5"],["8fbfa1","\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375"],["8fc0a1","\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF"],["8fc1a1","\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D"],["8fc2a1","\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D"],["8fc3a1","\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E",4,"\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF"],["8fc4a1","\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32"],["8fc5a1","\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D"],["8fc6a1","\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6"],["8fc7a1","\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E"],["8fc8a1","\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA"],["8fc9a1","\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094",4,"\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103",4,"\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160"],["8fcaa1","\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB"],["8fcba1","\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD"],["8fcca1","\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428",9,"\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506"],["8fcda1","\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579",5,"\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639"],["8fcea1","\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2",6,"\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762"],["8fcfa1","\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3"],["8fd0a1","\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE"],["8fd1a1","\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30"],["8fd2a1","\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59",5],["8fd3a1","\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D"],["8fd4a1","\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2",4,"\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D"],["8fd5a1","\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE"],["8fd6a1","\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246"],["8fd7a1","\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378"],["8fd8a1","\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3"],["8fd9a1","\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F",4,"\u8556\u8559\u855C",6,"\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC"],["8fdaa1","\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660",4,"\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723"],["8fdba1","\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783",6,"\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835"],["8fdca1","\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA",4,"\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A"],["8fdda1","\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4",4,"\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3"],["8fdea1","\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42",4,"\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86"],["8fdfa1","\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22"],["8fe0a1","\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41"],["8fe1a1","\u8F43\u8F47\u8F4F\u8F51",4,"\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3"],["8fe2a1","\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF"],["8fe3a1","\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC",5,"\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275",4,"\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297"],["8fe4a1","\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF",4,"\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376"],["8fe5a1","\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9",4,"\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579"],["8fe6a1","\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702"],["8fe7a1","\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826"],["8fe8a1","\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931",4,"\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5"],["8fe9a1","\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF",4],["8feaa1","\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A",4,"\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8"],["8feba1","\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26",4,"\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B"],["8feca1","\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5"],["8feda1","\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43",4,"\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D",4,"\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5"]]});var Nd=O((RX,UN)=>{UN.exports=[["0","\0",127,"\u20AC"],["8140","\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A",5,"\u4E72\u4E74",9,"\u4E7F",6,"\u4E87\u4E8A"],["8180","\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02",6,"\u4F0B\u4F0C\u4F12",4,"\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E",4,"\u4F44\u4F45\u4F47",5,"\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2"],["8240","\u4FA4\u4FAB\u4FAD\u4FB0",4,"\u4FB6",8,"\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2",4,"\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF",11],["8280","\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F",10,"\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050",4,"\u5056\u5057\u5058\u5059\u505B\u505D",7,"\u5066",5,"\u506D",8,"\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E",20,"\u50A4\u50A6\u50AA\u50AB\u50AD",4,"\u50B3",6,"\u50BC"],["8340","\u50BD",17,"\u50D0",5,"\u50D7\u50D8\u50D9\u50DB",10,"\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6",4,"\u50FC",9,"\u5108"],["8380","\u5109\u510A\u510C",5,"\u5113",13,"\u5122",28,"\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D",4,"\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6",4,"\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2",5],["8440","\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5",5,"\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244",5,"\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258"],["8480","\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273",9,"\u527E\u5280\u5283",4,"\u5289",6,"\u5291\u5292\u5294",6,"\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4",9,"\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9",5,"\u52E0\u52E1\u52E2\u52E3\u52E5",10,"\u52F1",7,"\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E"],["8540","\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F",9,"\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F"],["8580","\u5390",4,"\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF",6,"\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3",4,"\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D",4,"\u5463\u5465\u5467\u5469",7,"\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1"],["8640","\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0",4,"\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4",5,"\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A",4,"\u5512\u5513\u5515",5,"\u551C\u551D\u551E\u551F\u5521\u5525\u5526"],["8680","\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B",4,"\u5551\u5552\u5553\u5554\u5557",4,"\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F",5,"\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0",6,"\u55A8",8,"\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF",4,"\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7",4,"\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8",4,"\u55FF\u5602\u5603\u5604\u5605"],["8740","\u5606\u5607\u560A\u560B\u560D\u5610",7,"\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640",11,"\u564F",4,"\u5655\u5656\u565A\u565B\u565D",4],["8780","\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D",7,"\u5687",6,"\u5690\u5691\u5692\u5694",14,"\u56A4",10,"\u56B0",6,"\u56B8\u56B9\u56BA\u56BB\u56BD",12,"\u56CB",8,"\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5",5,"\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B",6],["8840","\u5712",9,"\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734",4,"\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752",4,"\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780"],["8880","\u5781\u5787\u5788\u5789\u578A\u578D",4,"\u5794",6,"\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9",8,"\u57C4",6,"\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5",7,"\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825",4,"\u582B",4,"\u5831\u5832\u5833\u5834\u5836",7],["8940","\u583E",5,"\u5845",6,"\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859",4,"\u585F",5,"\u5866",4,"\u586D",16,"\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C"],["8980","\u588D",4,"\u5894",4,"\u589B\u589C\u589D\u58A0",7,"\u58AA",17,"\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6",10,"\u58D2\u58D3\u58D4\u58D6",13,"\u58E5",5,"\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA",7,"\u5903\u5905\u5906\u5908",4,"\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B"],["8a40","\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B",4,"\u5961\u5963\u5964\u5966",12,"\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6"],["8a80","\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3",5,"\u59BA\u59BC\u59BD\u59BF",6,"\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE",4,"\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED",11,"\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A",6,"\u5A33\u5A35\u5A37",4,"\u5A3D\u5A3E\u5A3F\u5A41",4,"\u5A47\u5A48\u5A4B",9,"\u5A56\u5A57\u5A58\u5A59\u5A5B",5],["8b40","\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B",8,"\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80",17,"\u5A93",6,"\u5A9C",13,"\u5AAB\u5AAC"],["8b80","\u5AAD",4,"\u5AB4\u5AB6\u5AB7\u5AB9",4,"\u5ABF\u5AC0\u5AC3",5,"\u5ACA\u5ACB\u5ACD",4,"\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC",4,"\u5AF2",22,"\u5B0A",11,"\u5B18",25,"\u5B33\u5B35\u5B36\u5B38",7,"\u5B41",6],["8c40","\u5B48",7,"\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF"],["8c80","\u5BD1\u5BD4",8,"\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9",4,"\u5BEF\u5BF1",6,"\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67",6,"\u5C70\u5C72",6,"\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83",4,"\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D",4,"\u5CA4",4],["8d40","\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5",5,"\u5CCC",5,"\u5CD3",5,"\u5CDA",6,"\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1",9,"\u5CFC",4],["8d80","\u5D01\u5D04\u5D05\u5D08",5,"\u5D0F",4,"\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F",4,"\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F",4,"\u5D35",7,"\u5D3F",7,"\u5D48\u5D49\u5D4D",10,"\u5D59\u5D5A\u5D5C\u5D5E",10,"\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75",12,"\u5D83",21,"\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0"],["8e40","\u5DA1",21,"\u5DB8",12,"\u5DC6",6,"\u5DCE",12,"\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED"],["8e80","\u5DF0\u5DF5\u5DF6\u5DF8",4,"\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E",7,"\u5E28",4,"\u5E2F\u5E30\u5E32",4,"\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46",5,"\u5E4D",6,"\u5E56",4,"\u5E5C\u5E5D\u5E5F\u5E60\u5E63",14,"\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8",4,"\u5EAE",4,"\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF",6],["8f40","\u5EC6\u5EC7\u5EC8\u5ECB",5,"\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC",11,"\u5EE9\u5EEB",8,"\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24"],["8f80","\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32",6,"\u5F3B\u5F3D\u5F3E\u5F3F\u5F41",14,"\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2",5,"\u5FA9\u5FAB\u5FAC\u5FAF",5,"\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE",4,"\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007"],["9040","\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030",4,"\u6036",4,"\u603D\u603E\u6040\u6044",6,"\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080"],["9080","\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD",7,"\u60C7\u60C8\u60C9\u60CC",4,"\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1",4,"\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB",4,"\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110",4,"\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C",18,"\u6140",6],["9140","\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156",6,"\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169",6,"\u6171\u6172\u6173\u6174\u6176\u6178",18,"\u618C\u618D\u618F",4,"\u6195"],["9180","\u6196",6,"\u619E",8,"\u61AA\u61AB\u61AD",9,"\u61B8",5,"\u61BF\u61C0\u61C1\u61C3",4,"\u61C9\u61CC",4,"\u61D3\u61D5",16,"\u61E7",13,"\u61F6",8,"\u6200",5,"\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238",4,"\u6242\u6244\u6245\u6246\u624A"],["9240","\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C",6,"\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B",5,"\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1"],["9280","\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333",5,"\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356",7,"\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399",6,"\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0"],["9340","\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7",6,"\u63DF\u63E2\u63E4",4,"\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406",4,"\u640D\u640E\u6411\u6412\u6415",5,"\u641D\u641F\u6422\u6423\u6424"],["9380","\u6425\u6427\u6428\u6429\u642B\u642E",5,"\u6435",4,"\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B",6,"\u6453\u6455\u6456\u6457\u6459",4,"\u645F",7,"\u6468\u646A\u646B\u646C\u646E",9,"\u647B",6,"\u6483\u6486\u6488",8,"\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F",4,"\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6",6,"\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA"],["9440","\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7",24,"\u6501",7,"\u650A",7,"\u6513",4,"\u6519",8],["9480","\u6522\u6523\u6524\u6526",4,"\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540",4,"\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578",14,"\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1",7,"\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8",7,"\u65E1\u65E3\u65E4\u65EA\u65EB"],["9540","\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB",4,"\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637",4,"\u663D\u663F\u6640\u6642\u6644",6,"\u664D\u664E\u6650\u6651\u6658"],["9580","\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669",4,"\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698",4,"\u669E",8,"\u66A9",4,"\u66AF",4,"\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF",25,"\u66DA\u66DE",7,"\u66E7\u66E8\u66EA",5,"\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703"],["9640","\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720",5,"\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757",4,"\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776"],["9680","\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9",7,"\u67C2\u67C5",9,"\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5",7,"\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818",4,"\u681E\u681F\u6820\u6822",6,"\u682B",6,"\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856",5],["9740","\u685C\u685D\u685E\u685F\u686A\u686C",7,"\u6875\u6878",8,"\u6882\u6884\u6887",7,"\u6890\u6891\u6892\u6894\u6895\u6896\u6898",9,"\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8"],["9780","\u68B9",6,"\u68C1\u68C3",5,"\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB",4,"\u68E1\u68E2\u68E4",9,"\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906",4,"\u690C\u690F\u6911\u6913",11,"\u6921\u6922\u6923\u6925",7,"\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943",16,"\u6955\u6956\u6958\u6959\u695B\u695C\u695F"],["9840","\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972",4,"\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E",5,"\u6996\u6997\u6999\u699A\u699D",9,"\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD"],["9880","\u69BE\u69BF\u69C0\u69C2",7,"\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5",5,"\u69DC\u69DD\u69DE\u69E1",11,"\u69EE\u69EF\u69F0\u69F1\u69F3",9,"\u69FE\u6A00",9,"\u6A0B",11,"\u6A19",5,"\u6A20\u6A22",5,"\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36",6,"\u6A3F",4,"\u6A45\u6A46\u6A48",7,"\u6A51",6,"\u6A5A"],["9940","\u6A5C",4,"\u6A62\u6A63\u6A64\u6A66",10,"\u6A72",6,"\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85",8,"\u6A8F\u6A92",4,"\u6A98",7,"\u6AA1",5],["9980","\u6AA7\u6AA8\u6AAA\u6AAD",114,"\u6B25\u6B26\u6B28",6],["9a40","\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D",11,"\u6B5A",7,"\u6B68\u6B69\u6B6B",13,"\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88"],["9a80","\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C",4,"\u6BA2",7,"\u6BAB",7,"\u6BB6\u6BB8",6,"\u6BC0\u6BC3\u6BC4\u6BC6",4,"\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC",4,"\u6BE2",7,"\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE",6,"\u6C08",4,"\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B",4,"\u6C51\u6C52\u6C53\u6C56\u6C58"],["9b40","\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B",4,"\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8"],["9b80","\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F",5,"\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D",4,"\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96",4,"\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9",5,"\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA"],["9c40","\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD",7,"\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35"],["9c80","\u6E36\u6E37\u6E39\u6E3B",7,"\u6E45",7,"\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60",10,"\u6E6C\u6E6D\u6E6F",14,"\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A",4,"\u6E91",6,"\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA",5],["9d40","\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA",7,"\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A",4,"\u6F10\u6F11\u6F12\u6F16",9,"\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37",6,"\u6F3F\u6F40\u6F41\u6F42"],["9d80","\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E",9,"\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67",5,"\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D",6,"\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F",12,"\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2",4,"\u6FA8",10,"\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA",5,"\u6FC1\u6FC3",5,"\u6FCA",6,"\u6FD3",10,"\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5"],["9e40","\u6FE6",7,"\u6FF0",32,"\u7012",7,"\u701C",6,"\u7024",6],["9e80","\u702B",9,"\u7036\u7037\u7038\u703A",17,"\u704D\u704E\u7050",13,"\u705F",11,"\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E",12,"\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB",12,"\u70DA"],["9f40","\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0",6,"\u70F8\u70FA\u70FB\u70FC\u70FE",10,"\u710B",4,"\u7111\u7112\u7114\u7117\u711B",10,"\u7127",7,"\u7132\u7133\u7134"],["9f80","\u7135\u7137",13,"\u7146\u7147\u7148\u7149\u714B\u714D\u714F",12,"\u715D\u715F",4,"\u7165\u7169",4,"\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E",5,"\u7185",4,"\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A",4,"\u71A1",6,"\u71A9\u71AA\u71AB\u71AD",5,"\u71B4\u71B6\u71B7\u71B8\u71BA",8,"\u71C4",9,"\u71CF",4],["a040","\u71D6",9,"\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8",5,"\u71EF",9,"\u71FA",11,"\u7207",19],["a080","\u721B\u721C\u721E",9,"\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240",6,"\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285",4,"\u728C\u728E\u7290\u7291\u7293",11,"\u72A0",11,"\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA",6,"\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB"],["a1a1","\u3000\u3001\u3002\xB7\u02C9\u02C7\xA8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008",7,"\u3016\u3017\u3010\u3011\xB1\xD7\xF7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFF04\xA4\uFFE0\uFFE1\u2030\xA7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013"],["a2a1","\u2170",9],["a2b1","\u2488",19,"\u2474",19,"\u2460",9],["a2e5","\u3220",9],["a2f1","\u2160",11],["a3a1","\uFF01\uFF02\uFF03\uFFE5\uFF05",88,"\uFFE3"],["a4a1","\u3041",82],["a5a1","\u30A1",85],["a6a1","\u0391",16,"\u03A3",6],["a6c1","\u03B1",16,"\u03C3",6],["a6e0","\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44"],["a6ee","\uFE3B\uFE3C\uFE37\uFE38\uFE31"],["a6f4","\uFE33\uFE34"],["a7a1","\u0410",5,"\u0401\u0416",25],["a7d1","\u0430",5,"\u0451\u0436",25],["a840","\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550",35,"\u2581",6],["a880","\u2588",7,"\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E"],["a8a1","\u0101\xE1\u01CE\xE0\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA\u01DC\xFC\xEA\u0251"],["a8bd","\u0144\u0148"],["a8c0","\u0261"],["a8c5","\u3105",36],["a940","\u3021",8,"\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4"],["a959","\u2121\u3231"],["a95c","\u2010"],["a960","\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49",9,"\uFE54\uFE55\uFE56\uFE57\uFE59",8],["a980","\uFE62",4,"\uFE68\uFE69\uFE6A\uFE6B"],["a996","\u3007"],["a9a4","\u2500",75],["aa40","\u72DC\u72DD\u72DF\u72E2",5,"\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304",5,"\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340",8],["aa80","\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358",7,"\u7361",10,"\u736E\u7370\u7371"],["ab40","\u7372",11,"\u737F",4,"\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3",5,"\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3",4],["ab80","\u73CB\u73CC\u73CE\u73D2",6,"\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3",4],["ac40","\u73F8",10,"\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411",8,"\u741C",5,"\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437",4,"\u743D\u743E\u743F\u7440\u7442",11],["ac80","\u744E",6,"\u7456\u7458\u745D\u7460",12,"\u746E\u746F\u7471",4,"\u7478\u7479\u747A"],["ad40","\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491",10,"\u749D\u749F",7,"\u74AA",15,"\u74BB",12],["ad80","\u74C8",9,"\u74D3",8,"\u74DD\u74DF\u74E1\u74E5\u74E7",6,"\u74F0\u74F1\u74F2"],["ae40","\u74F3\u74F5\u74F8",6,"\u7500\u7501\u7502\u7503\u7505",7,"\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520",4,"\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558"],["ae80","\u755D",7,"\u7567\u7568\u7569\u756B",6,"\u7573\u7575\u7576\u7577\u757A",4,"\u7580\u7581\u7582\u7584\u7585\u7587"],["af40","\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6",4,"\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607"],["af80","\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644"],["b040","\u7645",6,"\u764E",5,"\u7655\u7657",4,"\u765D\u765F\u7660\u7661\u7662\u7664",6,"\u766C\u766D\u766E\u7670",7,"\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B"],["b080","\u769C",7,"\u76A5",8,"\u76AF\u76B0\u76B3\u76B5",9,"\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265"],["b140","\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0",4,"\u76E6",7,"\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E",10,"\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B"],["b180","\u772C\u772E\u7730",4,"\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748",7,"\u7752",7,"\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3"],["b240","\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D",11,"\u777A\u777B\u777C\u7781\u7782\u7783\u7786",5,"\u778F\u7790\u7793",11,"\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6",4],["b280","\u77BC\u77BE\u77C0",12,"\u77CE",8,"\u77D8\u77D9\u77DA\u77DD",4,"\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316"],["b340","\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803",5,"\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A"],["b380","\u785B\u785C\u785E",11,"\u786F",7,"\u7878\u7879\u787A\u787B\u787D",6,"\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A"],["b440","\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8",7,"\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA",9],["b480","\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED",4,"\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB",5,"\u7902\u7903\u7904\u7906",6,"\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E"],["b540","\u790D",5,"\u7914",9,"\u791F",4,"\u7925",14,"\u7935",4,"\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A",8,"\u7954\u7955\u7958\u7959\u7961\u7963"],["b580","\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970",6,"\u7979\u797B",4,"\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0"],["b640","\u7993",6,"\u799B",11,"\u79A8",10,"\u79B4",4,"\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9",5,"\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA"],["b680","\u79EC\u79EE\u79F1",6,"\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F",4,"\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C"],["b740","\u7A1D\u7A1F\u7A21\u7A22\u7A24",14,"\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40",5,"\u7A47",9,"\u7A52",4,"\u7A58",16],["b780","\u7A69",6,"\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D"],["b840","\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE",4,"\u7AB4",10,"\u7AC0",10,"\u7ACC",9,"\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7",5,"\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3"],["b880","\u7AF4",4,"\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9"],["b940","\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F",5,"\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63",10,"\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86",6,"\u7B8E\u7B8F"],["b980","\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9",7,"\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8"],["ba40","\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4",4,"\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2",4,"\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF",7,"\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10",5,"\u7C17\u7C18\u7C19"],["ba80","\u7C1A",4,"\u7C20",5,"\u7C28\u7C29\u7C2B",12,"\u7C39",5,"\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56"],["bb40","\u7C43",9,"\u7C4E",36,"\u7C75",5,"\u7C7E",9],["bb80","\u7C88\u7C8A",6,"\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4",4,"\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95"],["bc40","\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE",6,"\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1",6,"\u7CE9",5,"\u7CF0",7,"\u7CF9\u7CFA\u7CFC",13,"\u7D0B",5],["bc80","\u7D11",14,"\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30",6,"\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6"],["bd40","\u7D37",54,"\u7D6F",7],["bd80","\u7D78",32,"\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78"],["be40","\u7D99",12,"\u7DA7",6,"\u7DAF",42],["be80","\u7DDA",32,"\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB"],["bf40","\u7DFB",62],["bf80","\u7E3A\u7E3C",4,"\u7E42",4,"\u7E48",21,"\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080"],["c040","\u7E5E",35,"\u7E83",23,"\u7E9C\u7E9D\u7E9E"],["c080","\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B",6,"\u7F43\u7F46",9,"\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0"],["c140","\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63",4,"\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82",7,"\u7F8B\u7F8D\u7F8F",4,"\u7F95",4,"\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8",6,"\u7FB1"],["c180","\u7FB3",4,"\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF",4,"\u7FD6\u7FD7\u7FD9",5,"\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF"],["c240","\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4",6,"\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B",5,"\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057"],["c280","\u8059\u805B",13,"\u806B",5,"\u8072",11,"\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B"],["c340","\u807E\u8081\u8082\u8085\u8088\u808A\u808D",5,"\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7",4,"\u80CF",6,"\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B"],["c380","\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F",12,"\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139",4,"\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478"],["c440","\u8140",5,"\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B",4,"\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183",4,"\u8189\u818B\u818C\u818D\u818E\u8190\u8192",5,"\u8199\u819A\u819E",4,"\u81A4\u81A5"],["c480","\u81A7\u81A9\u81AB",7,"\u81B4",5,"\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD",6,"\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81"],["c540","\u81D4",14,"\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE",4,"\u81F5",5,"\u81FD\u81FF\u8203\u8207",4,"\u820E\u820F\u8211\u8213\u8215",5,"\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F"],["c580","\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250",7,"\u8259\u825B\u825C\u825D\u825E\u8260",7,"\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7"],["c640","\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8"],["c680","\u82FA\u82FC",4,"\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D",9,"\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390"],["c740","\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A",4,"\u8353\u8355",4,"\u835D\u8362\u8370",6,"\u8379\u837A\u837E",6,"\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1",6,"\u83AC\u83AD\u83AE"],["c780","\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20"],["c840","\u83EE\u83EF\u83F3",4,"\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412",5,"\u8419\u841A\u841B\u841E",5,"\u8429",7,"\u8432",5,"\u8439\u843A\u843B\u843E",7,"\u8447\u8448\u8449"],["c880","\u844A",6,"\u8452",4,"\u8458\u845D\u845E\u845F\u8460\u8462\u8464",4,"\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1"],["c940","\u847D",4,"\u8483\u8484\u8485\u8486\u848A\u848D\u848F",7,"\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2",12,"\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7"],["c980","\u84D8",4,"\u84DE\u84E1\u84E2\u84E4\u84E7",4,"\u84ED\u84EE\u84EF\u84F1",10,"\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3"],["ca40","\u8503",8,"\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522",8,"\u852D",9,"\u853E",4,"\u8544\u8545\u8546\u8547\u854B",10],["ca80","\u8557\u8558\u855A\u855B\u855C\u855D\u855F",4,"\u8565\u8566\u8567\u8569",8,"\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31"],["cb40","\u8582\u8583\u8586\u8588",6,"\u8590",10,"\u859D",6,"\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1",5,"\u85B8\u85BA",6,"\u85C2",6,"\u85CA",4,"\u85D1\u85D2"],["cb80","\u85D4\u85D6",5,"\u85DD",6,"\u85E5\u85E6\u85E7\u85E8\u85EA",14,"\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854"],["cc40","\u85F9\u85FA\u85FC\u85FD\u85FE\u8600",4,"\u8606",10,"\u8612\u8613\u8614\u8615\u8617",15,"\u8628\u862A",13,"\u8639\u863A\u863B\u863D\u863E\u863F\u8640"],["cc80","\u8641",11,"\u8652\u8653\u8655",4,"\u865B\u865C\u865D\u865F\u8660\u8661\u8663",7,"\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3"],["cd40","\u866D\u866F\u8670\u8672",6,"\u8683",6,"\u868E",4,"\u8694\u8696",5,"\u869E",4,"\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB",4,"\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC"],["cd80","\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01"],["ce40","\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740",6,"\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A",5,"\u8761\u8762\u8766",7,"\u876F\u8771\u8772\u8773\u8775"],["ce80","\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E",4,"\u8794\u8795\u8796\u8798",6,"\u87A0",4,"\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A"],["cf40","\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1",4,"\u87C7\u87C8\u87C9\u87CC",4,"\u87D4",6,"\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF",9],["cf80","\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804",5,"\u880B",7,"\u8814\u8817\u8818\u8819\u881A\u881C",4,"\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653"],["d040","\u8824",13,"\u8833",5,"\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846",5,"\u884E",5,"\u8855\u8856\u8858\u885A",6,"\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A"],["d080","\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897",4,"\u889D",4,"\u88A3\u88A5",5,"\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384"],["d140","\u88AC\u88AE\u88AF\u88B0\u88B2",4,"\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA",4,"\u88E0\u88E1\u88E6\u88E7\u88E9",6,"\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903",5],["d180","\u8909\u890B",4,"\u8911\u8914",4,"\u891C",4,"\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476"],["d240","\u8938",8,"\u8942\u8943\u8945",24,"\u8960",5,"\u8967",19,"\u897C"],["d280","\u897D\u897E\u8980\u8982\u8984\u8985\u8987",26,"\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690"],["d340","\u89A2",30,"\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4",6],["d380","\u89FB",4,"\u8A01",5,"\u8A08",21,"\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89"],["d440","\u8A1E",31,"\u8A3F",8,"\u8A49",21],["d480","\u8A5F",25,"\u8A7A",6,"\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67"],["d540","\u8A81",7,"\u8A8B",7,"\u8A94",46],["d580","\u8AC3",32,"\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F"],["d640","\u8AE4",34,"\u8B08",27],["d680","\u8B24\u8B25\u8B27",30,"\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51"],["d740","\u8B46",31,"\u8B67",4,"\u8B6D",25],["d780","\u8B87",24,"\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7"],["d840","\u8C38",8,"\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D",7,"\u8C56\u8C57\u8C58\u8C59\u8C5B",5,"\u8C63",6,"\u8C6C",6,"\u8C74\u8C75\u8C76\u8C77\u8C7B",6,"\u8C83\u8C84\u8C86\u8C87"],["d880","\u8C88\u8C8B\u8C8D",6,"\u8C95\u8C96\u8C97\u8C99",20,"\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D"],["d940","\u8CAE",62],["d980","\u8CED",32,"\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC"],["da40","\u8D0E",14,"\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78",8,"\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C",4,"\u8D92\u8D93\u8D95",9,"\u8DA0\u8DA1"],["da80","\u8DA2\u8DA4",12,"\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA"],["db40","\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE",6,"\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15",7,"\u8E20\u8E21\u8E24",4,"\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E"],["db80","\u8E3F\u8E43\u8E45\u8E46\u8E4C",4,"\u8E53",5,"\u8E5A",11,"\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD"],["dc40","\u8E73\u8E75\u8E77",4,"\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88",6,"\u8E91\u8E92\u8E93\u8E95",6,"\u8E9D\u8E9F",11,"\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3",6,"\u8EBB",7],["dc80","\u8EC3",10,"\u8ECF",21,"\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365"],["dd40","\u8EE5",62],["dd80","\u8F24",32,"\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A"],["de40","\u8F45",32,"\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6"],["de80","\u8FC9",4,"\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496"],["df40","\u9019\u901C\u9023\u9024\u9025\u9027",5,"\u9030",4,"\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048",4,"\u904E\u9054\u9055\u9056\u9059\u905A\u905C",5,"\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F",4,"\u9076",6,"\u907E\u9081"],["df80","\u9084\u9085\u9086\u9087\u9089\u908A\u908C",4,"\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C"],["e040","\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105",19,"\u911A\u911B\u911C"],["e080","\u911D\u911F\u9120\u9121\u9124",10,"\u9130\u9132",6,"\u913A",8,"\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C"],["e140","\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180",4,"\u9186\u9188\u918A\u918E\u918F\u9193",6,"\u919C",5,"\u91A4",5,"\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB"],["e180","\u91BC",10,"\u91C8\u91CB\u91D0\u91D2",9,"\u91DD",8,"\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA"],["e240","\u91E6",62],["e280","\u9225",32,"\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967",5,"\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042"],["e340","\u9246",45,"\u9275",16],["e380","\u9286",7,"\u928F",24,"\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE"],["e440","\u92A8",5,"\u92AF",24,"\u92C9",31],["e480","\u92E9",32,"\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1"],["e540","\u930A",51,"\u933F",10],["e580","\u934A",31,"\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3"],["e640","\u936C",34,"\u9390",27],["e680","\u93AC",29,"\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9"],["e740","\u93CE",7,"\u93D7",54],["e780","\u940E",32,"\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21",6,"\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F",4,"\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C"],["e840","\u942F",14,"\u943F",43,"\u946C\u946D\u946E\u946F"],["e880","\u9470",20,"\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9"],["e940","\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577",7,"\u9580",42],["e980","\u95AB",32,"\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B"],["ea40","\u95CC",27,"\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623",6,"\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657"],["ea80","\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D",4,"\u9673\u9678",12,"\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0"],["eb40","\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D",9,"\u96A8",7,"\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6",9,"\u96E1",6,"\u96EB"],["eb80","\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717",4,"\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB"],["ec40","\u9721",8,"\u972B\u972C\u972E\u972F\u9731\u9733",4,"\u973A\u973B\u973C\u973D\u973F",18,"\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A",7],["ec80","\u9772\u9775\u9777",4,"\u977D",7,"\u9786",4,"\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799",4,"\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0"],["ed40","\u979E\u979F\u97A1\u97A2\u97A4",6,"\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5",46],["ed80","\u97E4\u97E5\u97E8\u97EE",4,"\u97F4\u97F7",23,"\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768"],["ee40","\u980F",62],["ee80","\u984E",32,"\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6",4,"\u94BC\u94BD\u94BF\u94C4\u94C8",6,"\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA"],["ef40","\u986F",5,"\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8",37,"\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0",4],["ef80","\u98E5\u98E6\u98E9",30,"\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512",4,"\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564",8,"\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14"],["f040","\u9908",4,"\u990E\u990F\u9911",28,"\u992F",26],["f080","\u994A",9,"\u9956",12,"\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28",4,"\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66",6,"\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619"],["f140","\u998C\u998E\u999A",10,"\u99A6\u99A7\u99A9",47],["f180","\u99D9",32,"\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883"],["f240","\u99FA",62],["f280","\u9A39",32,"\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2"],["f340","\u9A5A",17,"\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9",6,"\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6",4,"\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC"],["f380","\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0",8,"\u9AFA\u9AFC",6,"\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B"],["f440","\u9B07\u9B09",5,"\u9B10\u9B11\u9B12\u9B14",10,"\u9B20\u9B21\u9B22\u9B24",10,"\u9B30\u9B31\u9B33",7,"\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55",5],["f480","\u9B5B",32,"\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164"],["f540","\u9B7C",62],["f580","\u9BBB",32,"\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC"],["f640","\u9BDC",62],["f680","\u9C1B",32,"\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85",5,"\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E",5,"\u9CA5",4,"\u9CAB\u9CAD\u9CAE\u9CB0",7,"\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB"],["f740","\u9C3C",62],["f780","\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE",4,"\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC",4,"\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44"],["f840","\u9CE3",62],["f880","\u9D22",32],["f940","\u9D43",62],["f980","\u9D82",32],["fa40","\u9DA3",62],["fa80","\u9DE2",32],["fb40","\u9E03",27,"\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74",9,"\u9E80"],["fb80","\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C",5,"\u9E94",8,"\u9E9E\u9EA0",5,"\u9EA7\u9EA8\u9EA9\u9EAA"],["fc40","\u9EAB",8,"\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF",4,"\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0",8,"\u9EFA\u9EFD\u9EFF",6],["fc80","\u9F06",4,"\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A",5,"\u9F21\u9F23",8,"\u9F2D\u9F2E\u9F30\u9F31"],["fd40","\u9F32",4,"\u9F38\u9F3A\u9F3C\u9F3F",4,"\u9F45",10,"\u9F52",38],["fd80","\u9F79",5,"\u9F81\u9F82\u9F8D",11,"\u9F9C\u9F9D\u9F9E\u9FA1",4,"\uF92C\uF979\uF995\uF9E7\uF9F1"],["fe40","\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29"]]});var D0=O((FX,GN)=>{GN.exports=[["a140","\uE4C6",62],["a180","\uE505",32],["a240","\uE526",62],["a280","\uE565",32],["a2ab","\uE766",5],["a2e3","\u20AC\uE76D"],["a2ef","\uE76E\uE76F"],["a2fd","\uE770\uE771"],["a340","\uE586",62],["a380","\uE5C5",31,"\u3000"],["a440","\uE5E6",62],["a480","\uE625",32],["a4f4","\uE772",10],["a540","\uE646",62],["a580","\uE685",32],["a5f7","\uE77D",7],["a640","\uE6A6",62],["a680","\uE6E5",32],["a6b9","\uE785",7],["a6d9","\uE78D",6],["a6ec","\uE794\uE795"],["a6f3","\uE796"],["a6f6","\uE797",8],["a740","\uE706",62],["a780","\uE745",32],["a7c2","\uE7A0",14],["a7f2","\uE7AF",12],["a896","\uE7BC",10],["a8bc","\u1E3F"],["a8bf","\u01F9"],["a8c1","\uE7C9\uE7CA\uE7CB\uE7CC"],["a8ea","\uE7CD",20],["a958","\uE7E2"],["a95b","\uE7E3"],["a95d","\uE7E4\uE7E5\uE7E6"],["a989","\u303E\u2FF0",11],["a997","\uE7F4",12],["a9f0","\uE801",14],["aaa1","\uE000",93],["aba1","\uE05E",93],["aca1","\uE0BC",93],["ada1","\uE11A",93],["aea1","\uE178",93],["afa1","\uE1D6",93],["d7fa","\uE810",4],["f8a1","\uE234",93],["f9a1","\uE292",93],["faa1","\uE2F0",93],["fba1","\uE34E",93],["fca1","\uE3AC",93],["fda1","\uE40A",93],["fe50","\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843"],["fe80","\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13",6,"\u4DAE\uE864\uE468",93],["8135f437","\uE7C7"]]});var cE=O((_X,HN)=>{HN.exports={uChars:[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],gbChars:[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189e3]}});var uE=O((TX,zN)=>{zN.exports=[["0","\0",127],["8141","\uAC02\uAC03\uAC05\uAC06\uAC0B",4,"\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25",6,"\uAC2E\uAC32\uAC33\uAC34"],["8161","\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41",9,"\uAC4C\uAC4E",5,"\uAC55"],["8181","\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D",18,"\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B",4,"\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95",6,"\uAC9E\uACA2",5,"\uACAB\uACAD\uACAE\uACB1",6,"\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD",7,"\uACD6\uACD8",7,"\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7",4,"\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07",4,"\uAD0E\uAD10\uAD12\uAD13"],["8241","\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21",7,"\uAD2A\uAD2B\uAD2E",5],["8261","\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D",6,"\uAD46\uAD48\uAD4A",5,"\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57"],["8281","\uAD59",7,"\uAD62\uAD64",7,"\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83",4,"\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91",10,"\uAD9E",5,"\uADA5",17,"\uADB8",7,"\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9",6,"\uADD2\uADD4",7,"\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5",18],["8341","\uADFA\uADFB\uADFD\uADFE\uAE02",5,"\uAE0A\uAE0C\uAE0E",5,"\uAE15",7],["8361","\uAE1D",18,"\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C"],["8381","\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57",4,"\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71",6,"\uAE7A\uAE7E",5,"\uAE86",5,"\uAE8D",46,"\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5",6,"\uAECE\uAED2",5,"\uAEDA\uAEDB\uAEDD",8],["8441","\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE",5,"\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD",8],["8461","\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11",18],["8481","\uAF24",7,"\uAF2E\uAF2F\uAF31\uAF33\uAF35",6,"\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A",5,"\uAF51",10,"\uAF5E",5,"\uAF66",18,"\uAF7A",5,"\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89",6,"\uAF92\uAF93\uAF94\uAF96",5,"\uAF9D",26,"\uAFBA\uAFBB\uAFBD\uAFBE"],["8541","\uAFBF\uAFC1",5,"\uAFCA\uAFCC\uAFCF",4,"\uAFD5",6,"\uAFDD",4],["8561","\uAFE2",5,"\uAFEA",5,"\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9",6,"\uB002\uB003"],["8581","\uB005",6,"\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015",6,"\uB01E",9,"\uB029",26,"\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E",29,"\uB07E\uB07F\uB081\uB082\uB083\uB085",6,"\uB08E\uB090\uB092",5,"\uB09B\uB09D\uB09E\uB0A3\uB0A4"],["8641","\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD",6,"\uB0C6\uB0CA",5,"\uB0D2"],["8661","\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9",6,"\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6",10],["8681","\uB0F1",22,"\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E",4,"\uB126\uB127\uB129\uB12A\uB12B\uB12D",6,"\uB136\uB13A",5,"\uB142\uB143\uB145\uB146\uB147\uB149",6,"\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161",22,"\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183",4,"\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D"],["8741","\uB19E",9,"\uB1A9",15],["8761","\uB1B9",18,"\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5"],["8781","\uB1D6",5,"\uB1DE\uB1E0",7,"\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1",7,"\uB1FA\uB1FC\uB1FE",5,"\uB206\uB207\uB209\uB20A\uB20D",6,"\uB216\uB218\uB21A",5,"\uB221",18,"\uB235",6,"\uB23D",26,"\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261",6,"\uB26A",4],["8841","\uB26F",4,"\uB276",5,"\uB27D",6,"\uB286\uB287\uB288\uB28A",4],["8861","\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B",4,"\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7"],["8881","\uB2B8",15,"\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3",4,"\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309",6,"\uB312\uB316",5,"\uB31D",54,"\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363"],["8941","\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379",6,"\uB382\uB386",5,"\uB38D"],["8961","\uB38E\uB38F\uB391\uB392\uB393\uB395",10,"\uB3A2",5,"\uB3A9\uB3AA\uB3AB\uB3AD"],["8981","\uB3AE",21,"\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9",18,"\uB3FD",18,"\uB411",6,"\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421",6,"\uB42A\uB42C",7,"\uB435",15],["8a41","\uB445",10,"\uB452\uB453\uB455\uB456\uB457\uB459",6,"\uB462\uB464\uB466"],["8a61","\uB467",4,"\uB46D",18,"\uB481\uB482"],["8a81","\uB483",4,"\uB489",19,"\uB49E",5,"\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD",7,"\uB4B6\uB4B8\uB4BA",5,"\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9",6,"\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6",5,"\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7",4,"\uB4EE\uB4F0\uB4F2",5,"\uB4F9",26,"\uB516\uB517\uB519\uB51A\uB51D"],["8b41","\uB51E",5,"\uB526\uB52B",4,"\uB532\uB533\uB535\uB536\uB537\uB539",6,"\uB542\uB546"],["8b61","\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555",6,"\uB55E\uB562",8],["8b81","\uB56B",52,"\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6",4,"\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5",6,"\uB5CE\uB5D2",5,"\uB5D9",18,"\uB5ED",18],["8c41","\uB600",15,"\uB612\uB613\uB615\uB616\uB617\uB619",4],["8c61","\uB61E",6,"\uB626",5,"\uB62D",6,"\uB635",5],["8c81","\uB63B",12,"\uB649",26,"\uB665\uB666\uB667\uB669",50,"\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5",5,"\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2",16],["8d41","\uB6C3",16,"\uB6D5",8],["8d61","\uB6DE",17,"\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA"],["8d81","\uB6FB",4,"\uB702\uB703\uB704\uB706",33,"\uB72A\uB72B\uB72D\uB72E\uB731",6,"\uB73A\uB73C",7,"\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D",6,"\uB756",9,"\uB761\uB762\uB763\uB765\uB766\uB767\uB769",6,"\uB772\uB774\uB776",5,"\uB77E\uB77F\uB781\uB782\uB783\uB785",6,"\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E"],["8e41","\uB79F\uB7A1",6,"\uB7AA\uB7AE",5,"\uB7B6\uB7B7\uB7B9",8],["8e61","\uB7C2",4,"\uB7C8\uB7CA",19],["8e81","\uB7DE",13,"\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5",6,"\uB7FE\uB802",4,"\uB80A\uB80B\uB80D\uB80E\uB80F\uB811",6,"\uB81A\uB81C\uB81E",5,"\uB826\uB827\uB829\uB82A\uB82B\uB82D",6,"\uB836\uB83A",5,"\uB841\uB842\uB843\uB845",11,"\uB852\uB854",7,"\uB85E\uB85F\uB861\uB862\uB863\uB865",6,"\uB86E\uB870\uB872",5,"\uB879\uB87A\uB87B\uB87D",7],["8f41","\uB885",7,"\uB88E",17],["8f61","\uB8A0",7,"\uB8A9",6,"\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9",4],["8f81","\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6",5,"\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5",7,"\uB8DE\uB8E0\uB8E2",5,"\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1",6,"\uB8FA\uB8FC\uB8FE",5,"\uB905",18,"\uB919",6,"\uB921",26,"\uB93E\uB93F\uB941\uB942\uB943\uB945",6,"\uB94D\uB94E\uB950\uB952",5],["9041","\uB95A\uB95B\uB95D\uB95E\uB95F\uB961",6,"\uB96A\uB96C\uB96E",5,"\uB976\uB977\uB979\uB97A\uB97B\uB97D"],["9061","\uB97E",5,"\uB986\uB988\uB98B\uB98C\uB98F",15],["9081","\uB99F",12,"\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5",6,"\uB9BE\uB9C0\uB9C2",5,"\uB9CA\uB9CB\uB9CD\uB9D3",4,"\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED",6,"\uB9F6\uB9FB",4,"\uBA02",5,"\uBA09",11,"\uBA16",33,"\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46"],["9141","\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D",6,"\uBA66\uBA6A",5],["9161","\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79",9,"\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D",5],["9181","\uBA93",20,"\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3",4,"\uBABA\uBABC\uBABE",5,"\uBAC5\uBAC6\uBAC7\uBAC9",14,"\uBADA",33,"\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05",7,"\uBB0E\uBB10\uBB12",5,"\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21",6],["9241","\uBB28\uBB2A\uBB2C",7,"\uBB37\uBB39\uBB3A\uBB3F",4,"\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52"],["9261","\uBB53\uBB55\uBB56\uBB57\uBB59",7,"\uBB62\uBB64",7,"\uBB6D",4],["9281","\uBB72",21,"\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91",18,"\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD",6,"\uBBB5\uBBB6\uBBB8",7,"\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9",6,"\uBBD1\uBBD2\uBBD4",35,"\uBBFA\uBBFB\uBBFD\uBBFE\uBC01"],["9341","\uBC03",4,"\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35"],["9361","\uBC36\uBC37\uBC39",6,"\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51",8],["9381","\uBC5A\uBC5B\uBC5C\uBC5E",37,"\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F",4,"\uBC96\uBC98\uBC9B",4,"\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9",6,"\uBCB2\uBCB6",5,"\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5",7,"\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD",22,"\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD"],["9441","\uBCFE",5,"\uBD06\uBD08\uBD0A",5,"\uBD11\uBD12\uBD13\uBD15",8],["9461","\uBD1E",5,"\uBD25",6,"\uBD2D",12],["9481","\uBD3A",5,"\uBD41",6,"\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51",6,"\uBD5A",9,"\uBD65\uBD66\uBD67\uBD69",22,"\uBD82\uBD83\uBD85\uBD86\uBD8B",4,"\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D",6,"\uBDA5",10,"\uBDB1",6,"\uBDB9",24],["9541","\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD",11,"\uBDEA",5,"\uBDF1"],["9561","\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9",6,"\uBE01\uBE02\uBE04\uBE06",5,"\uBE0E\uBE0F\uBE11\uBE12\uBE13"],["9581","\uBE15",6,"\uBE1E\uBE20",35,"\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F",4,"\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B",4,"\uBE72\uBE76",4,"\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85",6,"\uBE8E\uBE92",5,"\uBE9A",13,"\uBEA9",14],["9641","\uBEB8",23,"\uBED2\uBED3"],["9661","\uBED5\uBED6\uBED9",6,"\uBEE1\uBEE2\uBEE6",5,"\uBEED",8],["9681","\uBEF6",10,"\uBF02",5,"\uBF0A",13,"\uBF1A\uBF1E",33,"\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49",6,"\uBF52\uBF53\uBF54\uBF56",44],["9741","\uBF83",16,"\uBF95",8],["9761","\uBF9E",17,"\uBFB1",7],["9781","\uBFB9",11,"\uBFC6",5,"\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5",6,"\uBFDD\uBFDE\uBFE0\uBFE2",89,"\uC03D\uC03E\uC03F"],["9841","\uC040",16,"\uC052",5,"\uC059\uC05A\uC05B"],["9861","\uC05D\uC05E\uC05F\uC061",6,"\uC06A",15],["9881","\uC07A",21,"\uC092\uC093\uC095\uC096\uC097\uC099",6,"\uC0A2\uC0A4\uC0A6",5,"\uC0AE\uC0B1\uC0B2\uC0B7",4,"\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1",6,"\uC0DA\uC0DE",5,"\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED",6,"\uC0F6\uC0F8\uC0FA",5,"\uC101\uC102\uC103\uC105\uC106\uC107\uC109",6,"\uC111\uC112\uC113\uC114\uC116",5,"\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E"],["9941","\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141",6,"\uC14A\uC14E",5,"\uC156\uC157"],["9961","\uC159\uC15A\uC15B\uC15D",6,"\uC166\uC16A",5,"\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B"],["9981","\uC17C",8,"\uC186",5,"\uC18F\uC191\uC192\uC193\uC195\uC197",4,"\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1",11,"\uC1BE",5,"\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD",6,"\uC1D5\uC1D6\uC1D9",6,"\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9",6,"\uC1F2\uC1F4",7,"\uC1FE\uC1FF\uC201\uC202\uC203\uC205",6,"\uC20E\uC210\uC212",5,"\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223"],["9a41","\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235",16],["9a61","\uC246\uC247\uC249",6,"\uC252\uC253\uC255\uC256\uC257\uC259",6,"\uC261\uC262\uC263\uC264\uC266"],["9a81","\uC267",4,"\uC26E\uC26F\uC271\uC272\uC273\uC275",6,"\uC27E\uC280\uC282",5,"\uC28A",5,"\uC291",6,"\uC299\uC29A\uC29C\uC29E",5,"\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE",5,"\uC2B6\uC2B8\uC2BA",33,"\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5",5,"\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301",6,"\uC30A\uC30B\uC30E\uC30F"],["9b41","\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D",6,"\uC326\uC327\uC32A",8],["9b61","\uC333",17,"\uC346",7],["9b81","\uC34E",25,"\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373",4,"\uC37A\uC37B\uC37E",5,"\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D",50,"\uC3C1",22,"\uC3DA"],["9c41","\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3",4,"\uC3EA\uC3EB\uC3EC\uC3EE",5,"\uC3F6\uC3F7\uC3F9",5],["9c61","\uC3FF",8,"\uC409",6,"\uC411",9],["9c81","\uC41B",8,"\uC425",6,"\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435",6,"\uC43E",9,"\uC449",26,"\uC466\uC467\uC469\uC46A\uC46B\uC46D",6,"\uC476\uC477\uC478\uC47A",5,"\uC481",18,"\uC495",6,"\uC49D",12],["9d41","\uC4AA",13,"\uC4B9\uC4BA\uC4BB\uC4BD",8],["9d61","\uC4C6",25],["9d81","\uC4E0",8,"\uC4EA",5,"\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502",9,"\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515",6,"\uC51D",10,"\uC52A\uC52B\uC52D\uC52E\uC52F\uC531",6,"\uC53A\uC53C\uC53E",5,"\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569",6,"\uC572\uC576",5,"\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594"],["9e41","\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1",7,"\uC5AA",9,"\uC5B6"],["9e61","\uC5B7\uC5BA\uC5BF",4,"\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9",6,"\uC5E2\uC5E4\uC5E6\uC5E7"],["9e81","\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611",6,"\uC61A\uC61D",6,"\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649",6,"\uC652\uC656",5,"\uC65E\uC65F\uC661",10,"\uC66D\uC66E\uC670\uC672",5,"\uC67A\uC67B\uC67D\uC67E\uC67F\uC681",6,"\uC68A\uC68C\uC68E",5,"\uC696\uC697\uC699\uC69A\uC69B\uC69D",6,"\uC6A6"],["9f41","\uC6A8\uC6AA",5,"\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB",4,"\uC6C2\uC6C4\uC6C6",5,"\uC6CE"],["9f61","\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5",6,"\uC6DE\uC6DF\uC6E2",5,"\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2"],["9f81","\uC6F3",4,"\uC6FA\uC6FB\uC6FC\uC6FE",5,"\uC706\uC707\uC709\uC70A\uC70B\uC70D",6,"\uC716\uC718\uC71A",5,"\uC722\uC723\uC725\uC726\uC727\uC729",6,"\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745",4,"\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761",6,"\uC769\uC76A\uC76C",7,"\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B",4,"\uC7A2\uC7A7",4,"\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7"],["a041","\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2",5,"\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1",6,"\uC7D9\uC7DA\uC7DB\uC7DC"],["a061","\uC7DE",5,"\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED",13],["a081","\uC7FB",4,"\uC802\uC803\uC805\uC806\uC807\uC809\uC80B",4,"\uC812\uC814\uC817",4,"\uC81E\uC81F\uC821\uC822\uC823\uC825",6,"\uC82E\uC830\uC832",5,"\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841",6,"\uC84A\uC84B\uC84E",5,"\uC855",26,"\uC872\uC873\uC875\uC876\uC877\uC879\uC87B",4,"\uC882\uC884\uC888\uC889\uC88A\uC88E",5,"\uC895",7,"\uC89E\uC8A0\uC8A2\uC8A3\uC8A4"],["a141","\uC8A5\uC8A6\uC8A7\uC8A9",18,"\uC8BE\uC8BF\uC8C0\uC8C1"],["a161","\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD",6,"\uC8D6\uC8D8\uC8DA",5,"\uC8E2\uC8E3\uC8E5"],["a181","\uC8E6",14,"\uC8F6",5,"\uC8FE\uC8FF\uC901\uC902\uC903\uC907",4,"\uC90E\u3000\u3001\u3002\xB7\u2025\u2026\xA8\u3003\xAD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008",9,"\xB1\xD7\xF7\u2260\u2264\u2265\u221E\u2234\xB0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\xA7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2"],["a241","\uC910\uC912",5,"\uC919",18],["a261","\uC92D",6,"\uC935",18],["a281","\uC948",7,"\uC952\uC953\uC955\uC956\uC957\uC959",6,"\uC962\uC964",7,"\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\xB4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\xB8\u02DB\xA1\xBF\u02D0\u222E\u2211\u220F\xA4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\xB6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\xAE"],["a341","\uC971\uC972\uC973\uC975",6,"\uC97D",10,"\uC98A\uC98B\uC98D\uC98E\uC98F"],["a361","\uC991",6,"\uC99A\uC99C\uC99E",16],["a381","\uC9AF",16,"\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB",4,"\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01",58,"\uFFE6\uFF3D",32,"\uFFE3"],["a441","\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2",5,"\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04"],["a461","\uCA05\uCA06\uCA07\uCA0A\uCA0E",5,"\uCA15\uCA16\uCA17\uCA19",12],["a481","\uCA26\uCA27\uCA28\uCA2A",28,"\u3131",93],["a541","\uCA47",4,"\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55",6,"\uCA5E\uCA62",5,"\uCA69\uCA6A"],["a561","\uCA6B",17,"\uCA7E",5,"\uCA85\uCA86"],["a581","\uCA87",16,"\uCA99",14,"\u2170",9],["a5b0","\u2160",9],["a5c1","\u0391",16,"\u03A3",6],["a5e1","\u03B1",16,"\u03C3",6],["a641","\uCAA8",19,"\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5"],["a661","\uCAC6",5,"\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA",5,"\uCAE1",6],["a681","\uCAE8\uCAE9\uCAEA\uCAEB\uCAED",6,"\uCAF5",18,"\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543",7],["a741","\uCB0B",4,"\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19",6,"\uCB22",7],["a761","\uCB2A",22,"\uCB42\uCB43\uCB44"],["a781","\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51",6,"\uCB5A\uCB5B\uCB5C\uCB5E",5,"\uCB65",7,"\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399",9,"\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0",9,"\u3380",4,"\u33BA",5,"\u3390",4,"\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6"],["a841","\uCB6D",10,"\uCB7A",14],["a861","\uCB89",18,"\uCB9D",6],["a881","\uCBA4",19,"\uCBB9",11,"\xC6\xD0\xAA\u0126"],["a8a6","\u0132"],["a8a8","\u013F\u0141\xD8\u0152\xBA\xDE\u0166\u014A"],["a8b1","\u3260",27,"\u24D0",25,"\u2460",14,"\xBD\u2153\u2154\xBC\xBE\u215B\u215C\u215D\u215E"],["a941","\uCBC5",14,"\uCBD5",10],["a961","\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA",18],["a981","\uCBFD",14,"\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15",6,"\uCC1E\uCC1F\uCC20\uCC23\uCC24\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0140\u0142\xF8\u0153\xDF\xFE\u0167\u014B\u0149\u3200",27,"\u249C",25,"\u2474",14,"\xB9\xB2\xB3\u2074\u207F\u2081\u2082\u2083\u2084"],["aa41","\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31",6,"\uCC3A\uCC3F",4,"\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E"],["aa61","\uCC4F",4,"\uCC56\uCC5A",5,"\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69",6,"\uCC71\uCC72"],["aa81","\uCC73\uCC74\uCC76",29,"\u3041",82],["ab41","\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1",6,"\uCCAA\uCCAE",5,"\uCCB6\uCCB7\uCCB9"],["ab61","\uCCBA\uCCBB\uCCBD",6,"\uCCC6\uCCC8\uCCCA",5,"\uCCD1\uCCD2\uCCD3\uCCD5",5],["ab81","\uCCDB",8,"\uCCE5",6,"\uCCED\uCCEE\uCCEF\uCCF1",12,"\u30A1",85],["ac41","\uCCFE\uCCFF\uCD00\uCD02",5,"\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11",6,"\uCD1A\uCD1C\uCD1E\uCD1F\uCD20"],["ac61","\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D",11,"\uCD3A",4],["ac81","\uCD3F",28,"\uCD5D\uCD5E\uCD5F\u0410",5,"\u0401\u0416",25],["acd1","\u0430",5,"\u0451\u0436",25],["ad41","\uCD61\uCD62\uCD63\uCD65",6,"\uCD6E\uCD70\uCD72",5,"\uCD79",7],["ad61","\uCD81",6,"\uCD89",10,"\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F"],["ad81","\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA",5,"\uCDB1",18,"\uCDC5"],["ae41","\uCDC6",5,"\uCDCD\uCDCE\uCDCF\uCDD1",16],["ae61","\uCDE2",5,"\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1",6,"\uCDFA\uCDFC\uCDFE",4],["ae81","\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D",6,"\uCE15\uCE16\uCE17\uCE18\uCE1A",5,"\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B"],["af41","\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36",19],["af61","\uCE4A",13,"\uCE5A\uCE5B\uCE5D\uCE5E\uCE62",5,"\uCE6A\uCE6C"],["af81","\uCE6E",5,"\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D",6,"\uCE86\uCE88\uCE8A",5,"\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99"],["b041","\uCE9A",5,"\uCEA2\uCEA6",5,"\uCEAE",12],["b061","\uCEBB",5,"\uCEC2",19],["b081","\uCED6",13,"\uCEE6\uCEE7\uCEE9\uCEEA\uCEED",6,"\uCEF6\uCEFA",5,"\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10",7,"\uAC19",4,"\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06"],["b141","\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09",6,"\uCF12\uCF14\uCF16",5,"\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23"],["b161","\uCF25",6,"\uCF2E\uCF32",5,"\uCF39",11],["b181","\uCF45",14,"\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D",6,"\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78"],["b241","\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79",6,"\uCF81\uCF82\uCF83\uCF84\uCF86",5,"\uCF8D"],["b261","\uCF8E",18,"\uCFA2",5,"\uCFA9"],["b281","\uCFAA",5,"\uCFB1",18,"\uCFC5",6,"\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059"],["b341","\uCFCC",19,"\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9"],["b361","\uCFEA",5,"\uCFF2\uCFF4\uCFF6",5,"\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005",5],["b381","\uD00B",5,"\uD012",5,"\uD019",19,"\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB",4,"\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD"],["b441","\uD02E",5,"\uD036\uD037\uD039\uD03A\uD03B\uD03D",6,"\uD046\uD048\uD04A",5],["b461","\uD051\uD052\uD053\uD055\uD056\uD057\uD059",6,"\uD061",10,"\uD06E\uD06F"],["b481","\uD071\uD072\uD073\uD075",6,"\uD07E\uD07F\uD080\uD082",18,"\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB",4,"\uB2F3\uB2F4\uB2F5\uB2F7",4,"\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365"],["b541","\uD095",14,"\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD",5],["b561","\uD0B3\uD0B6\uD0B8\uD0BA",5,"\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA",5,"\uD0D2\uD0D6",4],["b581","\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5",6,"\uD0EE\uD0F2",5,"\uD0F9",11,"\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538"],["b641","\uD105",7,"\uD10E",17],["b661","\uD120",15,"\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E"],["b681","\uD13F\uD142\uD146",5,"\uD14E\uD14F\uD151\uD152\uD153\uD155",6,"\uD15E\uD160\uD162",5,"\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797"],["b741","\uD16E",13,"\uD17D",6,"\uD185\uD186\uD187\uD189\uD18A"],["b761","\uD18B",20,"\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7"],["b781","\uD1A9",6,"\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1",14,"\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969"],["b841","\uD1D0",7,"\uD1D9",17],["b861","\uD1EB",8,"\uD1F5\uD1F6\uD1F7\uD1F9",13],["b881","\uD208\uD20A",5,"\uD211",24,"\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE",4,"\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC"],["b941","\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235",6,"\uD23E\uD240\uD242",5,"\uD249\uD24A\uD24B\uD24C"],["b961","\uD24D",14,"\uD25D",6,"\uD265\uD266\uD267\uD268"],["b981","\uD269",22,"\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14",4,"\uBC1B",4,"\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97"],["ba41","\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296",5,"\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5",6,"\uD2AD"],["ba61","\uD2AE\uD2AF\uD2B0\uD2B2",5,"\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3",4,"\uD2CA\uD2CC",5],["ba81","\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD",6,"\uD2E6",9,"\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64"],["bb41","\uD2FB",4,"\uD302\uD304\uD306",5,"\uD30F\uD311\uD312\uD313\uD315\uD317",4,"\uD31E\uD322\uD323"],["bb61","\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331",6,"\uD33A\uD33E",5,"\uD346\uD347\uD348\uD349"],["bb81","\uD34A",31,"\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4"],["bc41","\uD36A",17,"\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387"],["bc61","\uD388\uD389\uD38A\uD38B\uD38E\uD392",5,"\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1",6,"\uD3AA\uD3AC\uD3AE"],["bc81","\uD3AF",4,"\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD",6,"\uD3C6\uD3C7\uD3CA",5,"\uD3D1",5,"\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C",4,"\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D"],["bd41","\uD3D7\uD3D9",7,"\uD3E2\uD3E4",7,"\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7"],["bd61","\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402",5,"\uD409",13],["bd81","\uD417",5,"\uD41E",25,"\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430"],["be41","\uD438",7,"\uD441\uD442\uD443\uD445",14],["be61","\uD454",7,"\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465",7,"\uD46E\uD470\uD471\uD472"],["be81","\uD473",4,"\uD47A\uD47B\uD47D\uD47E\uD481\uD483",4,"\uD48A\uD48C\uD48E",5,"\uD495",8,"\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4",6,"\uC5CC\uC5CE"],["bf41","\uD49E",10,"\uD4AA",14],["bf61","\uD4B9",18,"\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5"],["bf81","\uD4D6",5,"\uD4DD\uD4DE\uD4E0",7,"\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1",6,"\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC",5,"\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8"],["c041","\uD4FE",5,"\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D",6,"\uD516\uD518",5],["c061","\uD51E",25],["c081","\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545",6,"\uD54E\uD550\uD552",5,"\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751",7,"\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A"],["c141","\uD564\uD566\uD567\uD56A\uD56C\uD56E",5,"\uD576\uD577\uD579\uD57A\uD57B\uD57D",6,"\uD586\uD58A\uD58B"],["c161","\uD58C\uD58D\uD58E\uD58F\uD591",19,"\uD5A6\uD5A7"],["c181","\uD5A8",31,"\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3"],["c241","\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3",4,"\uD5DA\uD5DC\uD5DE",5,"\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE"],["c261","\uD5EF",4,"\uD5F6\uD5F8\uD5FA",5,"\uD602\uD603\uD605\uD606\uD607\uD609",6,"\uD612"],["c281","\uD616",5,"\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625",7,"\uD62E",9,"\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B"],["c341","\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D",4],["c361","\uD662",4,"\uD668\uD66A",5,"\uD672\uD673\uD675",11],["c381","\uD681\uD682\uD684\uD686",5,"\uD68E\uD68F\uD691\uD692\uD693\uD695",7,"\uD69E\uD6A0\uD6A2",5,"\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35"],["c441","\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1",7,"\uD6BA\uD6BC",7,"\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB"],["c461","\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA",5,"\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9",4],["c481","\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6",5,"\uD6FE\uD6FF\uD701\uD702\uD703\uD705",11,"\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C"],["c541","\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721",6,"\uD72A\uD72C\uD72E",5,"\uD736\uD737\uD739"],["c561","\uD73A\uD73B\uD73D",6,"\uD745\uD746\uD748\uD74A",5,"\uD752\uD753\uD755\uD75A",4],["c581","\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775",6,"\uD77E\uD77F\uD780\uD782",5,"\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C"],["c641","\uD78D\uD78E\uD78F\uD791",6,"\uD79A\uD79C\uD79E",5],["c6a1","\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401"],["c7a1","\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620"],["c8a1","\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D"],["caa1","\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95"],["cba1","\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2"],["cca1","\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0"],["cda1","\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC"],["cea1","\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE"],["cfa1","\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4"],["d0a1","\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3"],["d1a1","\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E",5,"\u90A3\uF914",4,"\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925"],["d2a1","\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928",4,"\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933",5,"\u99D1\uF939",10,"\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A",7,"\u5AE9\u8A25\u677B\u7D10\uF952",5,"\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336"],["d3a1","\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843"],["d4a1","\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85"],["d5a1","\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23"],["d6a1","\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC"],["d7a1","\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C"],["d8a1","\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5"],["d9a1","\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587"],["daa1","\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51"],["dba1","\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656"],["dca1","\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66"],["dda1","\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5"],["dea1","\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A"],["dfa1","\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72"],["e0a1","\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C"],["e1a1","\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101"],["e2a1","\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27"],["e3a1","\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81"],["e4a1","\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D"],["e5a1","\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982"],["e6a1","\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2"],["e7a1","\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3"],["e8a1","\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1"],["e9a1","\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553"],["eaa1","\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB"],["eba1","\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC"],["eca1","\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344"],["eda1","\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577"],["eea1","\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1"],["efa1","\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756"],["f0a1","\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B"],["f1a1","\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA"],["f2a1","\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F"],["f3a1","\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56"],["f4a1","\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2"],["f5a1","\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403"],["f6a1","\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17"],["f7a1","\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211"],["f8a1","\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43"],["f9a1","\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A"],["faa1","\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B"],["fba1","\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575"],["fca1","\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6"],["fda1","\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70"]]});var w0=O((PX,VN)=>{VN.exports=[["0","\0",127],["a140","\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\xB7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A"],["a1a1","\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\xA7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\xAF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\xD7\xF7\xB1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62",4,"\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F"],["a240","\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\xB0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581",7,"\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D"],["a2a1","\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10",9,"\u2160",9,"\u3021",8,"\u5341\u5344\u5345\uFF21",25,"\uFF41",21],["a340","\uFF57\uFF58\uFF59\uFF5A\u0391",16,"\u03A3",6,"\u03B1",16,"\u03C3",6,"\u3105",10],["a3a1","\u3110",25,"\u02D9\u02C9\u02CA\u02C7\u02CB"],["a3e1","\u20AC"],["a440","\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D"],["a4a1","\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19"],["a540","\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916"],["a5a1","\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168"],["a640","\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74"],["a6a1","\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63"],["a740","\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D"],["a7a1","\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760"],["a840","\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292"],["a8a1","\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475"],["a940","\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45"],["a9a1","\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A"],["aa40","\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0"],["aaa1","\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644"],["ab40","\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1"],["aba1","\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7"],["ac40","\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17"],["aca1","\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004"],["ad40","\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5"],["ada1","\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA"],["ae40","\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059"],["aea1","\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93"],["af40","\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837"],["afa1","\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343"],["b040","\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661"],["b0a1","\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40"],["b140","\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD"],["b1a1","\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA"],["b240","\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6"],["b2a1","\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C"],["b340","\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014"],["b3a1","\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960"],["b440","\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD"],["b4a1","\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB"],["b540","\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98"],["b5a1","\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41"],["b640","\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591"],["b6a1","\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC"],["b740","\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D"],["b7a1","\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763"],["b840","\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B"],["b8a1","\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A"],["b940","\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4"],["b9a1","\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147"],["ba40","\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22"],["baa1","\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC"],["bb40","\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4"],["bba1","\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC"],["bc40","\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182"],["bca1","\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483"],["bd40","\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF"],["bda1","\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E"],["be40","\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09"],["bea1","\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1"],["bf40","\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A"],["bfa1","\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A"],["c040","\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687"],["c0a1","\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC"],["c140","\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA"],["c1a1","\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01"],["c240","\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658"],["c2a1","\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6"],["c340","\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378"],["c3a1","\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E"],["c440","\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C"],["c4a1","\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74"],["c540","\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C"],["c5a1","\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92"],["c640","\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72"],["c940","\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15"],["c9a1","\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B"],["ca40","\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418"],["caa1","\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747"],["cb40","\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293"],["cba1","\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762"],["cc40","\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B"],["cca1","\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2"],["cd40","\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA"],["cda1","\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF"],["ce40","\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB"],["cea1","\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA"],["cf40","\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42"],["cfa1","\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80"],["d040","\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA"],["d0a1","\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1"],["d140","\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067"],["d1a1","\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4"],["d240","\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278"],["d2a1","\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10"],["d340","\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322"],["d3a1","\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150"],["d440","\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545"],["d4a1","\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F"],["d540","\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F"],["d5a1","\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9"],["d640","\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF"],["d6a1","\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F"],["d740","\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7"],["d7a1","\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA"],["d840","\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837"],["d8a1","\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114"],["d940","\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2"],["d9a1","\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E"],["da40","\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416"],["daa1","\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65"],["db40","\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3"],["dba1","\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA"],["dc40","\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688"],["dca1","\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6"],["dd40","\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424"],["dda1","\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC"],["de40","\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153"],["dea1","\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13"],["df40","\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F"],["dfa1","\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4"],["e040","\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F"],["e0a1","\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0"],["e140","\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0"],["e1a1","\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9"],["e240","\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A"],["e2a1","\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993"],["e340","\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE"],["e3a1","\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB"],["e440","\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D"],["e4a1","\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658"],["e540","\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189"],["e5a1","\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92"],["e640","\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359"],["e6a1","\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F"],["e740","\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662"],["e7a1","\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27"],["e840","\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3"],["e8a1","\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E"],["e940","\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA"],["e9a1","\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8"],["ea40","\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799"],["eaa1","\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558"],["eb40","\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0"],["eba1","\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C"],["ec40","\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95"],["eca1","\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E"],["ed40","\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6"],["eda1","\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E"],["ee40","\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E"],["eea1","\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C"],["ef40","\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30"],["efa1","\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376"],["f040","\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2"],["f0a1","\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67"],["f140","\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA"],["f1a1","\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70"],["f240","\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B"],["f2a1","\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55"],["f340","\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726"],["f3a1","\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2"],["f440","\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929"],["f4a1","\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF"],["f540","\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B"],["f5a1","\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625"],["f640","\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A"],["f6a1","\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A"],["f740","\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A"],["f7a1","\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE"],["f840","\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F"],["f8a1","\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A"],["f940","\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A"],["f9a1","\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593"]]});var lE=O((LX,qN)=>{qN.exports=[["8740","\u43F0\u4C32\u4603\u45A6\u4578\u{27267}\u4D77\u45B3\u{27CB1}\u4CE2\u{27CC5}\u3B95\u4736\u4744\u4C47\u4C40\u{242BF}\u{23617}\u{27352}\u{26E8B}\u{270D2}\u4C57\u{2A351}\u474F\u45DA\u4C85\u{27C6C}\u4D07\u4AA4\u46A1\u{26B23}\u7225\u{25A54}\u{21A63}\u{23E06}\u{23F61}\u664D\u56FB"],["8767","\u7D95\u591D\u{28BB9}\u3DF4\u9734\u{27BEF}\u5BDB\u{21D5E}\u5AA4\u3625\u{29EB0}\u5AD1\u5BB7\u5CFC\u676E\u8593\u{29945}\u7461\u749D\u3875\u{21D53}\u{2369E}\u{26021}\u3EEC"],["87a1","\u{258DE}\u3AF5\u7AFC\u9F97\u{24161}\u{2890D}\u{231EA}\u{20A8A}\u{2325E}\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\u{25DB9}\u74C6\u9FC7\u57B3\u492F\u544C\u4131\u{2368E}\u5818\u7A72\u{27B65}\u8B8F\u46AE\u{26E88}\u4181\u{25D99}\u7BAE\u{224BC}\u9FC8\u{224C1}\u{224C9}\u{224CC}\u9FC9\u8504\u{235BB}\u40B4\u9FCA\u44E1\u{2ADFF}\u62C1\u706E\u9FCB"],["8840","\u31C0",4,"\u{2010C}\u31C5\u{200D1}\u{200CD}\u31C6\u31C7\u{200CB}\u{21FE8}\u31C8\u{200CA}\u31C9\u31CA\u31CB\u31CC\u{2010E}\u31CD\u31CE\u0100\xC1\u01CD\xC0\u0112\xC9\u011A\xC8\u014C\xD3\u01D1\xD2\u0FFF\xCA\u0304\u1EBE\u0FFF\xCA\u030C\u1EC0\xCA\u0101\xE1\u01CE\xE0\u0251\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA"],["88a1","\u01DC\xFC\u0FFF\xEA\u0304\u1EBF\u0FFF\xEA\u030C\u1EC1\xEA\u0261\u23DA\u23DB"],["8940","\u{2A3A9}\u{21145}"],["8943","\u650A"],["8946","\u4E3D\u6EDD\u9D4E\u91DF"],["894c","\u{27735}\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E"],["89a1","\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227"],["89ab","\u918C\u78B8\u915E\u80BC"],["89b0","\u8D0B\u80F6\u{209E7}"],["89b5","\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\u{29DF6}\u{2700E}\u9E0A\u{2A133}\u35C1"],["89c1","\u6E9A\u823E\u7519"],["89c5","\u4911\u9A6C\u9A8F\u9F99\u7987\u{2846C}\u{21DCA}\u{205D0}\u{22AE6}\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5"],["8a40","\u{27D84}\u5525"],["8a43","\u{20C42}\u{20D15}\u{2512B}\u5590\u{22CC6}\u39EC\u{20341}\u8E46\u{24DB8}\u{294E5}\u4053\u{280BE}\u777A\u{22C38}\u3A34\u47D5\u{2815D}\u{269F2}\u{24DEA}\u64DD\u{20D7C}\u{20FB4}\u{20CD5}\u{210F4}\u648D\u8E7E\u{20E96}\u{20C0B}\u{20F64}\u{22CA9}\u{28256}\u{244D3}"],["8a64","\u{20D46}\u{29A4D}\u{280E9}\u47F4\u{24EA7}\u{22CC2}\u9AB2\u3A67\u{295F4}\u3FED\u3506\u{252C7}\u{297D4}\u{278C8}\u{22D44}\u9D6E\u9815"],["8a76","\u43D9\u{260A5}\u64B4\u54E3\u{22D4C}\u{22BCA}\u{21077}\u39FB\u{2106F}"],["8aa1","\u{266DA}\u{26716}\u{279A0}\u64EA\u{25052}\u{20C43}\u8E68\u{221A1}\u{28B4C}\u{20731}"],["8aac","\u480B\u{201A9}\u3FFA\u5873\u{22D8D}"],["8ab2","\u{245C8}\u{204FC}\u{26097}\u{20F4C}\u{20D96}\u5579\u40BB\u43BA"],["8abb","\u4AB4\u{22A66}\u{2109D}\u81AA\u98F5\u{20D9C}\u6379\u39FE\u{22775}\u8DC0\u56A1\u647C\u3E43"],["8ac9","\u{2A601}\u{20E09}\u{22ACF}\u{22CC9}"],["8ace","\u{210C8}\u{239C2}\u3992\u3A06\u{2829B}\u3578\u{25E49}\u{220C7}\u5652\u{20F31}\u{22CB2}\u{29720}\u34BC\u6C3D\u{24E3B}"],["8adf","\u{27574}\u{22E8B}\u{22208}\u{2A65B}\u{28CCD}\u{20E7A}\u{20C34}\u{2681C}\u7F93\u{210CF}\u{22803}\u{22939}\u35FB\u{251E3}\u{20E8C}\u{20F8D}\u{20EAA}\u3F93\u{20F30}\u{20D47}\u{2114F}\u{20E4C}"],["8af6","\u{20EAB}\u{20BA9}\u{20D48}\u{210C0}\u{2113D}\u3FF9\u{22696}\u6432\u{20FAD}"],["8b40","\u{233F4}\u{27639}\u{22BCE}\u{20D7E}\u{20D7F}\u{22C51}\u{22C55}\u3A18\u{20E98}\u{210C7}\u{20F2E}\u{2A632}\u{26B50}\u{28CD2}\u{28D99}\u{28CCA}\u95AA\u54CC\u82C4\u55B9"],["8b55","\u{29EC3}\u9C26\u9AB6\u{2775E}\u{22DEE}\u7140\u816D\u80EC\u5C1C\u{26572}\u8134\u3797\u535F\u{280BD}\u91B6\u{20EFA}\u{20E0F}\u{20E77}\u{20EFB}\u35DD\u{24DEB}\u3609\u{20CD6}\u56AF\u{227B5}\u{210C9}\u{20E10}\u{20E78}\u{21078}\u{21148}\u{28207}\u{21455}\u{20E79}\u{24E50}\u{22DA4}\u5A54\u{2101D}\u{2101E}\u{210F5}\u{210F6}\u579C\u{20E11}"],["8ba1","\u{27694}\u{282CD}\u{20FB5}\u{20E7B}\u{2517E}\u3703\u{20FB6}\u{21180}\u{252D8}\u{2A2BD}\u{249DA}\u{2183A}\u{24177}\u{2827C}\u5899\u5268\u361A\u{2573D}\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\u{25B74}\u{2313D}\u55FB\u35F2\u5689\u4E28\u5902\u{21BC1}\u{2F878}\u9751\u{20086}\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\u{248E9}\u7F52\u793B\u7CF9\u7F53\u{2626A}\u34C1"],["8bde","\u{2634B}\u8002\u8080\u{26612}\u{26951}\u535D\u8864\u89C1\u{278B2}\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\u{28E0F}\u97E6\u9875\u98CE\u98DE\u9963\u{29810}\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\u{20087}\u961D\u6237\u94A2"],["8c40","\u503B\u6DFE\u{29C73}\u9FA6\u3DC9\u888F\u{2414E}\u7077\u5CF5\u4B20\u{251CD}\u3559\u{25D30}\u6122\u{28A32}\u8FA7\u91F6\u7191\u6719\u73BA\u{23281}\u{2A107}\u3C8B\u{21980}\u4B10\u78E4\u7402\u51AE\u{2870F}\u4009\u6A63\u{2A2BA}\u4223\u860F\u{20A6F}\u7A2A\u{29947}\u{28AEA}\u9755\u704D\u5324\u{2207E}\u93F4\u76D9\u{289E3}\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\u{21DB6}\u5E92\u5E99\u5FC2\u{22712}\u658B"],["8ca1","\u{233F9}\u6919\u6A43\u{23C63}\u6CFF"],["8ca7","\u7200\u{24505}\u738C\u3EDB\u{24A13}\u5B15\u74B9\u8B83\u{25CA4}\u{25695}\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\u{28DB9}\u{2143F}\u4071\u42A2\u5A1A"],["8cc9","\u9868\u676B\u4276\u573D"],["8cce","\u85D6\u{2497B}\u82BF\u{2710D}\u4C81\u{26D74}\u5D7B\u{26B15}\u{26FBE}\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\u{23256}\u{22796}\u439A\u4536"],["8ce6","\u5CD5\u{23B1A}\u8AF9\u5C78\u3D12\u{23551}\u5D78\u9FB2\u7157\u4558\u{240EC}\u{21E23}\u4C77\u3978\u344A\u{201A4}\u{26C41}\u8ACC\u4FB4\u{20239}\u59BF\u816C\u9856\u{298FA}\u5F3B"],["8d40","\u{20B9F}"],["8d42","\u{221C1}\u{2896D}\u4102\u46BB\u{29079}\u3F07\u9FB3\u{2A1B5}\u40F8\u37D6\u46F7\u{26C46}\u417C\u{286B2}\u{273FF}\u456D\u38D4\u{2549A}\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\u{24B0F}\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1"],["8da1","\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\u{289C0}\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\u{23F41}\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\u{20325}\u43C1\u35F1\u{20ED8}"],["8e40","\u{23ED7}\u57BE\u{26ED3}\u713E\u{257E0}\u364E\u69A2\u{28BE9}\u5B74\u7A49\u{258E1}\u{294D9}\u7A65\u7A7D\u{259AC}\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\u{2648D}\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\u{25C01}\u7B0B\u7B55\u7B29\u{2530E}\u{25CFE}\u7BA2\u7B6F\u839C\u{25BB4}\u{26C7F}\u7BD0\u8421\u7B92\u7BB8\u{25D20}\u3DAD\u{25C65}\u8492\u7BFA\u7C06\u7C35\u{25CC1}\u7C44\u7C83\u{24882}\u7CA6\u667D\u{24578}\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE"],["8ea1","\u7E67\u451D\u{26E44}\u7D5D\u{26ED6}\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\u{24057}\u{26029}\u7DE4\u3D13\u7DF5\u{217F9}\u7DE5\u{2836D}\u7E1D\u{26121}\u{2615A}\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\u{262D0}\u99E1\u7F97\u{26351}\u7FA3\u{21661}\u{20068}\u455C\u{23766}\u4503\u{2833A}\u7FFA\u{26489}\u8005\u8008\u801D\u8028\u802F\u{2A087}\u{26CC3}\u803B\u803C\u8061\u{22714}\u4989\u{26626}\u{23DE3}\u{266E8}\u6725\u80A7\u{28A48}\u8107\u811A\u58B0\u{226F6}\u6C7F\u{26498}\u{24FB8}\u64E7\u{2148A}\u8218\u{2185E}\u6A53\u{24A65}\u{24A95}\u447A\u8229\u{20B0D}\u{26A52}\u{23D7E}\u4FF9\u{214FD}\u84E2\u8362\u{26B0A}\u{249A7}\u{23530}\u{21773}\u{23DF8}\u82AA\u691B\u{2F994}\u41DB"],["8f40","\u854B\u82D0\u831A\u{20E16}\u{217B4}\u36C1\u{2317D}\u{2355A}\u827B\u82E2\u8318\u{23E8B}\u{26DA3}\u{26B05}\u{26B97}\u{235CE}\u3DBF\u831D\u55EC\u8385\u450B\u{26DA5}\u83AC\u83C1\u83D3\u347E\u{26ED4}\u6A57\u855A\u3496\u{26E42}\u{22EEF}\u8458\u{25BE4}\u8471\u3DD3\u44E4\u6AA7\u844A\u{23CB5}\u7958\u84A8\u{26B96}\u{26E77}\u{26E43}\u84DE\u840F\u8391\u44A0\u8493\u84E4\u{25C91}\u4240\u{25CC0}\u4543\u8534\u5AF2\u{26E99}\u4527\u8573\u4516\u67BF\u8616"],["8fa1","\u{28625}\u{2863B}\u85C1\u{27088}\u8602\u{21582}\u{270CD}\u{2F9B2}\u456A\u8628\u3648\u{218A2}\u53F7\u{2739A}\u867E\u8771\u{2A0F8}\u87EE\u{22C27}\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\u{275E0}\u{23DB9}\u{275E4}\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\u{2770F}\u8987\u898A\u89A6\u89A9\u89A7\u89BC\u{28A25}\u89E7\u{27924}\u{27ABD}\u8A9C\u7793\u91FE\u8A90\u{27A59}\u7AE9\u{27B3A}\u{23F8F}\u4713\u{27B38}\u717C\u8B0C\u8B1F\u{25430}\u{25565}\u8B3F\u8B4C\u8B4D\u8AA9\u{24A7A}\u8B90\u8B9B\u8AAF\u{216DF}\u4615\u884F\u8C9B\u{27D54}\u{27D8F}\u{2F9D4}\u3725\u{27D53}\u8CD6\u{27D98}\u{27DBD}\u8D12\u8D03\u{21910}\u8CDB\u705C\u8D11\u{24CC9}\u3ED0\u8D77"],["9040","\u8DA9\u{28002}\u{21014}\u{2498A}\u3B7C\u{281BC}\u{2710C}\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\u{28365}\u{28412}\u8FA5\u9303\u{2A29F}\u{20A50}\u8FB3\u492A\u{289DE}\u{2853D}\u{23DBB}\u5EF8\u{23262}\u8FF9\u{2A014}\u{286BC}\u{28501}\u{22325}\u3980\u{26ED7}\u9037\u{2853C}\u{27ABE}\u9061\u{2856C}\u{2860B}\u90A8\u{28713}\u90C4\u{286E6}\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\u{28933}\u{21E89}\u920E\u6C9F\u9241\u9262\u{255B9}\u92B9\u{28AC6}\u{23C9B}\u{28B0C}\u{255DB}"],["90a1","\u{20D31}\u932C\u936B\u{28AE1}\u{28BEB}\u708F\u5AC3\u{28AE2}\u{28AE5}\u4965\u9244\u{28BEC}\u{28C39}\u{28BFF}\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\u{2267A}\u{286D8}\u{2127C}\u{23E2E}\u49DF\u6C1C\u967B\u9696\u416C\u96A3\u{26ED5}\u61DA\u96B6\u78F5\u{28AE0}\u96BD\u53CC\u49A1\u{26CB8}\u{20274}\u{26410}\u{290AF}\u{290E5}\u{24AD1}\u{21915}\u{2330A}\u9731\u8642\u9736\u4A0F\u453D\u4585\u{24AE9}\u7075\u5B41\u971B\u975C\u{291D5}\u9757\u5B4A\u{291EB}\u975F\u9425\u50D0\u{230B7}\u{230BC}\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\u{2546C}\u97EE\u741C\u{29433}\u97FF\u97F5\u{2941D}\u{2797A}\u4AD1\u9834\u9833\u984B\u9866\u3B0E\u{27175}\u3D51\u{20630}\u{2415C}"],["9140","\u{25706}\u98CA\u98B7\u98C8\u98C7\u4AFF\u{26D27}\u{216D3}\u55B0\u98E1\u98E6\u98EC\u9378\u9939\u{24A29}\u4B72\u{29857}\u{29905}\u99F5\u9A0C\u9A3B\u9A10\u9A58\u{25725}\u36C4\u{290B1}\u{29BD5}\u9AE0\u9AE2\u{29B05}\u9AF4\u4C0E\u9B14\u9B2D\u{28600}\u5034\u9B34\u{269A8}\u38C3\u{2307D}\u9B50\u9B40\u{29D3E}\u5A45\u{21863}\u9B8E\u{2424B}\u9C02\u9BFF\u9C0C\u{29E68}\u9DD4\u{29FB7}\u{2A192}\u{2A1AB}\u{2A0E1}\u{2A123}\u{2A1DF}\u9D7E\u9D83\u{2A134}\u9E0E\u6888"],["91a1","\u9DC4\u{2215B}\u{2A193}\u{2A220}\u{2193B}\u{2A233}\u9D39\u{2A0B9}\u{2A2B4}\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\u{24364}\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\u{28C2B}\u9F02\u9F08\u4B96\u9424\u{26DA2}\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\u{2908B}\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\u{24975}\u{249BB}\u7177\u{249F8}\u{24348}\u{24A51}\u739E\u{28BDA}\u{218FA}\u799F\u{2897E}\u{28E36}\u9369\u93F3\u{28A44}\u92EC\u9381\u93CB\u{2896C}\u{244B9}\u7217\u3EEB\u7772\u7A43\u70D0\u{24473}\u{243F8}\u717E\u{217EF}\u70A3\u{218BE}\u{23599}\u3EC7\u{21885}\u{2542F}\u{217F8}\u3722\u{216FB}\u{21839}\u36E1\u{21774}\u{218D1}\u{25F4B}\u3723\u{216C0}\u575B\u{24A25}\u{213FE}\u{212A8}"],["9240","\u{213C6}\u{214B6}\u8503\u{236A6}\u8503\u8455\u{24994}\u{27165}\u{23E31}\u{2555C}\u{23EFB}\u{27052}\u44F4\u{236EE}\u{2999D}\u{26F26}\u67F9\u3733\u3C15\u3DE7\u586C\u{21922}\u6810\u4057\u{2373F}\u{240E1}\u{2408B}\u{2410F}\u{26C21}\u54CB\u569E\u{266B1}\u5692\u{20FDF}\u{20BA8}\u{20E0D}\u93C6\u{28B13}\u939C\u4EF8\u512B\u3819\u{24436}\u4EBC\u{20465}\u{2037F}\u4F4B\u4F8A\u{25651}\u5A68\u{201AB}\u{203CB}\u3999\u{2030A}\u{20414}\u3435\u4F29\u{202C0}\u{28EB3}\u{20275}\u8ADA\u{2020C}\u4E98"],["92a1","\u50CD\u510D\u4FA2\u4F03\u{24A0E}\u{23E8A}\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\u{23595}\u{23E39}\u{23EBF}\u6D72\u{21884}\u{23E89}\u51A8\u51C3\u{205E0}\u44DD\u{204A3}\u{20492}\u{20491}\u8D7A\u{28A9C}\u{2070E}\u5259\u52A4\u{20873}\u52E1\u936E\u467A\u718C\u{2438C}\u{20C20}\u{249AC}\u{210E4}\u69D1\u{20E1D}\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\u{24ABC}\u{2408D}\u53D0\u3584\u720F\u{240C9}\u55B4\u{20345}\u54CD\u{20BC6}\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\u{28A46}\u{216FA}\u{2176F}\u{21710}\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\u{25946}\u{219F3}\u{21861}\u{24295}\u36F5\u6D05\u7443\u5A21\u{25E83}"],["9340","\u5A81\u{28BD7}\u{20413}\u93E0\u748C\u{21303}\u7105\u4972\u9408\u{289FB}\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\u{21996}\u{2197C}\u{23AEE}\u5ECD\u5B4F\u{21903}\u{21904}\u3701\u{218A0}\u36DD\u{216FE}\u36D3\u812A\u{28A47}\u{21DBA}\u{23472}\u{289A8}\u5F0C\u5F0E\u{21927}\u{217AB}\u5A6B\u{2173B}\u5B44\u8614\u{275FD}\u8860\u607E\u{22860}\u{2262B}\u5FDB\u3EB8\u{225AF}\u{225BE}\u{29088}\u{26F73}\u61C0\u{2003E}\u{20046}\u{2261B}\u6199\u6198\u6075\u{22C9B}\u{22D07}\u{246D4}\u{2914D}"],["93a1","\u6471\u{24665}\u{22B6A}\u3A29\u{22B22}\u{23450}\u{298EA}\u{22E78}\u6337\u{2A45B}\u64B6\u6331\u63D1\u{249E3}\u{22D67}\u62A4\u{22CA1}\u643B\u656B\u6972\u3BF4\u{2308E}\u{232AD}\u{24989}\u{232AB}\u550D\u{232E0}\u{218D9}\u{2943F}\u66CE\u{23289}\u{231B3}\u3AE0\u4190\u{25584}\u{28B22}\u{2558F}\u{216FC}\u{2555B}\u{25425}\u78EE\u{23103}\u{2182A}\u{23234}\u3464\u{2320F}\u{23182}\u{242C9}\u668E\u{26D24}\u666B\u4B93\u6630\u{27870}\u{21DEB}\u6663\u{232D2}\u{232E1}\u661E\u{25872}\u38D1\u{2383A}\u{237BC}\u3B99\u{237A2}\u{233FE}\u74D0\u3B96\u678F\u{2462A}\u68B6\u681E\u3BC4\u6ABE\u3863\u{237D5}\u{24487}\u6A33\u6A52\u6AC9\u6B05\u{21912}\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\u{23FC0}\u{23C9A}\u93A0\u92F2\u{28BEA}\u{28ACB}"],["9440","\u9289\u{2801E}\u{289DC}\u9467\u6DA5\u6F0B\u{249EC}\u6D67\u{23F7F}\u3D8F\u6E04\u{2403C}\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\u{2431A}\u{24276}\u70F1\u7250\u7287\u7294\u{2478F}\u{24725}\u5179\u{24AA4}\u{205EB}\u747A\u{23EF8}\u{2365F}\u{24A4A}\u{24917}\u{25FE1}\u3F06\u3EB1\u{24ADF}\u{28C23}\u{23F35}\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\u{26DEA}\u4551\u7583\u3F63\u{24CD9}\u{24D06}\u3F58\u7555\u7673\u{2A5C6}\u3B19\u7468\u{28ACC}\u{249AB}\u{2498E}\u3AFB"],["94a1","\u3DCD\u{24A4E}\u3EFF\u{249C5}\u{248F3}\u91FA\u5732\u9342\u{28AE3}\u{21864}\u50DF\u{25221}\u{251E7}\u7778\u{23232}\u770E\u770F\u777B\u{24697}\u{23781}\u3A5E\u{248F0}\u7438\u749B\u3EBF\u{24ABA}\u{24AC7}\u40C8\u{24A96}\u{261AE}\u9307\u{25581}\u781E\u788D\u7888\u78D2\u73D0\u7959\u{27741}\u{256E3}\u410E\u799B\u8496\u79A5\u6A2D\u{23EFA}\u7A3A\u79F4\u416E\u{216E6}\u4132\u9235\u79F1\u{20D4C}\u{2498C}\u{20299}\u{23DBA}\u{2176E}\u3597\u556B\u3570\u36AA\u{201D4}\u{20C0D}\u7AE2\u5A59\u{226F5}\u{25AAF}\u{25A9C}\u5A0D\u{2025B}\u78F0\u5A2A\u{25BC6}\u7AFE\u41F9\u7C5D\u7C6D\u4211\u{25BB3}\u{25EBC}\u{25EA6}\u7CCD\u{249F9}\u{217B0}\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\u{26261}"],["9540","\u{2615C}\u{27B48}\u7D97\u{25E82}\u426A\u{26B75}\u{20916}\u67D6\u{2004E}\u{235CF}\u57C4\u{26412}\u{263F8}\u{24962}\u7FDD\u7B27\u{2082C}\u{25AE9}\u{25D43}\u7B0C\u{25E0E}\u99E6\u8645\u9A63\u6A1C\u{2343F}\u39E2\u{249F7}\u{265AD}\u9A1F\u{265A0}\u8480\u{27127}\u{26CD1}\u44EA\u8137\u4402\u80C6\u8109\u8142\u{267B4}\u98C3\u{26A42}\u8262\u8265\u{26A51}\u8453\u{26DA7}\u8610\u{2721B}\u5A86\u417F\u{21840}\u5B2B\u{218A1}\u5AE4\u{218D8}\u86A0\u{2F9BC}\u{23D8F}\u882D\u{27422}\u5A02"],["95a1","\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\u{25683}\u8954\u{27785}\u{27784}\u{28BF5}\u{28BD9}\u{28B9C}\u{289F9}\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\u{29448}\u5F4D\u922B\u{24284}\u65D4\u7129\u70C4\u{21845}\u9D6D\u8C9F\u8CE9\u{27DDC}\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\u{24C09}\u8F30\u8F4A\u42F4\u6C58\u6FBB\u{22321}\u489B\u6F79\u6E8B\u{217DA}\u9BE9\u36B5\u{2492F}\u90BB\u9097\u5571\u4906\u91BB\u9404\u{28A4B}\u4062\u{28AFC}\u9427\u{28C1D}\u{28C3B}\u84E5\u8A2B\u9599\u95A7\u9597\u9596\u{28D34}\u7445\u3EC2\u{248FF}\u{24A42}\u{243EA}\u3EE7\u{23225}\u968F\u{28EE7}\u{28E66}\u{28E65}\u3ECC\u{249ED}\u{24A78}\u{23FEE}\u7412\u746B\u3EFC\u9741\u{290B0}"],["9640","\u6847\u4A1D\u{29093}\u{257DF}\u975D\u9368\u{28989}\u{28C26}\u{28B2F}\u{263BE}\u92BA\u5B11\u8B69\u493C\u73F9\u{2421B}\u979B\u9771\u9938\u{20F26}\u5DC1\u{28BC5}\u{24AB2}\u981F\u{294DA}\u92F6\u{295D7}\u91E5\u44C0\u{28B50}\u{24A67}\u{28B64}\u98DC\u{28A45}\u3F00\u922A\u4925\u8414\u993B\u994D\u{27B06}\u3DFD\u999B\u4B6F\u99AA\u9A5C\u{28B65}\u{258C8}\u6A8F\u9A21\u5AFE\u9A2F\u{298F1}\u4B90\u{29948}\u99BC\u4BBD\u4B97\u937D\u5872\u{21302}\u5822\u{249B8}"],["96a1","\u{214E8}\u7844\u{2271F}\u{23DB8}\u68C5\u3D7D\u9458\u3927\u6150\u{22781}\u{2296B}\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\u{29E2D}\u9B9F\u{2A1F5}\u{2A0FE}\u9D21\u4CAE\u{24104}\u9E18\u4CB0\u9D0C\u{2A1B4}\u{2A0ED}\u{2A0F3}\u{2992F}\u9DA5\u84BD\u{26E12}\u{26FDF}\u{26B82}\u85FC\u4533\u{26DA4}\u{26E84}\u{26DF0}\u8420\u85EE\u{26E00}\u{237D7}\u{26064}\u79E2\u{2359C}\u{23640}\u492D\u{249DE}\u3D62\u93DB\u92BE\u9348\u{202BF}\u78B9\u9277\u944D\u4FE4\u3440\u9064\u{2555D}\u783D\u7854\u78B6\u784B\u{21757}\u{231C9}\u{24941}\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\u{241B5}\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\u{241AC}\u71EB\u{26C40}\u{24F97}\u5B28\u{217B5}\u{28A49}"],["9740","\u610C\u5ACE\u5A0B\u42BC\u{24488}\u372C\u4B7B\u{289FC}\u93BB\u93B8\u{218D6}\u{20F1D}\u8472\u{26CC0}\u{21413}\u{242FA}\u{22C26}\u{243C1}\u5994\u{23DB7}\u{26741}\u7DA8\u{2615B}\u{260A4}\u{249B9}\u{2498B}\u{289FA}\u92E5\u73E2\u3EE9\u74B4\u{28B63}\u{2189F}\u3EE1\u{24AB3}\u6AD8\u73F3\u73FB\u3ED6\u{24A3E}\u{24A94}\u{217D9}\u{24A66}\u{203A7}\u{21424}\u{249E5}\u7448\u{24916}\u70A5\u{24976}\u9284\u73E6\u935F\u{204FE}\u9331\u{28ACE}\u{28A16}\u9386\u{28BE7}\u{255D5}\u4935\u{28A82}\u716B"],["97a1","\u{24943}\u{20CFF}\u56A4\u{2061A}\u{20BEB}\u{20CB8}\u5502\u79C4\u{217FA}\u7DFE\u{216C2}\u{24A50}\u{21852}\u452E\u9401\u370A\u{28AC0}\u{249AD}\u59B0\u{218BF}\u{21883}\u{27484}\u5AA1\u36E2\u{23D5B}\u36B0\u925F\u5A79\u{28A81}\u{21862}\u9374\u3CCD\u{20AB4}\u4A96\u398A\u50F4\u3D69\u3D4C\u{2139C}\u7175\u42FB\u{28218}\u6E0F\u{290E4}\u44EB\u6D57\u{27E4F}\u7067\u6CAF\u3CD6\u{23FED}\u{23E2D}\u6E02\u6F0C\u3D6F\u{203F5}\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\u{28C1C}\u{26BC0}\u5812\u57C8\u36D6\u{21452}\u70FE\u{24362}\u{24A71}\u{22FE3}\u{212B0}\u{223BD}\u68B9\u6967\u{21398}\u{234E5}\u{27BF4}\u{236DF}\u{28A83}\u{237D6}\u{233FA}\u{24C9F}\u6A1A\u{236AD}\u{26CB7}\u843E\u44DF\u44CE"],["9840","\u{26D26}\u{26D51}\u{26C82}\u{26FDE}\u6F17\u{27109}\u833D\u{2173A}\u83ED\u{26C80}\u{27053}\u{217DB}\u5989\u5A82\u{217B3}\u5A61\u5A71\u{21905}\u{241FC}\u372D\u59EF\u{2173C}\u36C7\u718E\u9390\u669A\u{242A5}\u5A6E\u5A2B\u{24293}\u6A2B\u{23EF9}\u{27736}\u{2445B}\u{242CA}\u711D\u{24259}\u{289E1}\u4FB0\u{26D28}\u5CC2\u{244CE}\u{27E4D}\u{243BD}\u6A0C\u{24256}\u{21304}\u70A6\u7133\u{243E9}\u3DA5\u6CDF\u{2F825}\u{24A4F}\u7E65\u59EB\u5D2F\u3DF3\u5F5C\u{24A5D}\u{217DF}\u7DA4\u8426"],["98a1","\u5485\u{23AFA}\u{23300}\u{20214}\u577E\u{208D5}\u{20619}\u3FE5\u{21F9E}\u{2A2B6}\u7003\u{2915B}\u5D70\u738F\u7CD3\u{28A59}\u{29420}\u4FC8\u7FE7\u72CD\u7310\u{27AF4}\u7338\u7339\u{256F6}\u7341\u7348\u3EA9\u{27B18}\u906C\u71F5\u{248F2}\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\u{24F5C}\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\u{25535}\u7933\u6803\u7932\u4103"],["9940","\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\u{20CCF}\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A"],["99a1","\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\u{27967}\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF"],["9a40","\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\u{21BC2}\u9D49\u9C3A"],["9aa1","\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\u{20094}\u{202B7}\u{203A0}\u691A\u94C3\u59AC\u{204D7}\u5840\u94C1\u37B9\u{205D5}\u{20615}\u{20676}\u{216BA}\u5757\u7173\u{20AC2}\u{20ACD}\u{20BBF}\u546A\u{2F83B}\u{20BCB}\u549E\u{20BFB}\u{20C3B}\u{20C53}\u{20C65}\u{20C7C}\u60E7\u{20C8D}\u567A\u{20CB5}\u{20CDD}\u{20CED}\u{20D6F}\u{20DB2}\u{20DC8}\u6955\u9C2F\u87A5\u{20E04}\u{20E0E}\u{20ED7}\u{20F90}\u{20F2D}\u{20E73}\u5C20\u{20FBC}\u5E0B\u{2105C}\u{2104F}\u{21076}\u671E\u{2107B}\u{21088}\u{21096}\u3647\u{210BF}\u{210D3}\u{2112F}\u{2113B}\u5364\u84AD\u{212E3}\u{21375}\u{21336}\u8B81\u{21577}\u{21619}\u{217C3}\u{217C7}\u4E78\u70BB\u{2182D}\u{2196A}"],["9b40","\u{21A2D}\u{21A45}\u{21C2A}\u{21C70}\u{21CAC}\u{21EC8}\u62C3\u{21ED5}\u{21F15}\u7198\u6855\u{22045}\u69E9\u36C8\u{2227C}\u{223D7}\u{223FA}\u{2272A}\u{22871}\u{2294F}\u82FD\u{22967}\u{22993}\u{22AD5}\u89A5\u{22AE8}\u8FA0\u{22B0E}\u97B8\u{22B3F}\u9847\u9ABD\u{22C4C}"],["9b62","\u{22C88}\u{22CB7}\u{25BE8}\u{22D08}\u{22D12}\u{22DB7}\u{22D95}\u{22E42}\u{22F74}\u{22FCC}\u{23033}\u{23066}\u{2331F}\u{233DE}\u5FB1\u6648\u66BF\u{27A79}\u{23567}\u{235F3}\u7201\u{249BA}\u77D7\u{2361A}\u{23716}\u7E87\u{20346}\u58B5\u670E"],["9ba1","\u6918\u{23AA7}\u{27657}\u{25FE2}\u{23E11}\u{23EB9}\u{275FE}\u{2209A}\u48D0\u4AB8\u{24119}\u{28A9A}\u{242EE}\u{2430D}\u{2403B}\u{24334}\u{24396}\u{24A45}\u{205CA}\u51D2\u{20611}\u599F\u{21EA8}\u3BBE\u{23CFF}\u{24404}\u{244D6}\u5788\u{24674}\u399B\u{2472F}\u{285E8}\u{299C9}\u3762\u{221C3}\u8B5E\u{28B4E}\u99D6\u{24812}\u{248FB}\u{24A15}\u7209\u{24AC0}\u{20C78}\u5965\u{24EA5}\u{24F86}\u{20779}\u8EDA\u{2502C}\u528F\u573F\u7171\u{25299}\u{25419}\u{23F4A}\u{24AA7}\u55BC\u{25446}\u{2546E}\u{26B52}\u91D4\u3473\u{2553F}\u{27632}\u{2555E}\u4718\u{25562}\u{25566}\u{257C7}\u{2493F}\u{2585D}\u5066\u34FB\u{233CC}\u60DE\u{25903}\u477C\u{28948}\u{25AAE}\u{25B89}\u{25C06}\u{21D90}\u57A1\u7151\u6FB6\u{26102}\u{27C12}\u9056\u{261B2}\u{24F9A}\u8B62\u{26402}\u{2644A}"],["9c40","\u5D5B\u{26BF7}\u8F36\u{26484}\u{2191C}\u8AEA\u{249F6}\u{26488}\u{23FEF}\u{26512}\u4BC0\u{265BF}\u{266B5}\u{2271B}\u9465\u{257E1}\u6195\u5A27\u{2F8CD}\u4FBB\u56B9\u{24521}\u{266FC}\u4E6A\u{24934}\u9656\u6D8F\u{26CBD}\u3618\u8977\u{26799}\u{2686E}\u{26411}\u{2685E}\u71DF\u{268C7}\u7B42\u{290C0}\u{20A11}\u{26926}\u9104\u{26939}\u7A45\u9DF0\u{269FA}\u9A26\u{26A2D}\u365F\u{26469}\u{20021}\u7983\u{26A34}\u{26B5B}\u5D2C\u{23519}\u83CF\u{26B9D}\u46D0\u{26CA4}\u753B\u8865\u{26DAE}\u58B6"],["9ca1","\u371C\u{2258D}\u{2704B}\u{271CD}\u3C54\u{27280}\u{27285}\u9281\u{2217A}\u{2728B}\u9330\u{272E6}\u{249D0}\u6C39\u949F\u{27450}\u{20EF8}\u8827\u88F5\u{22926}\u{28473}\u{217B1}\u6EB8\u{24A2A}\u{21820}\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\u{29CAD}\u{298A4}\u8943\u{277CC}\u{27858}\u56D6\u40DF\u{2160A}\u39A1\u{2372F}\u{280E8}\u{213C5}\u71AD\u8366\u{279DD}\u{291A8}\u5A67\u4CB7\u{270AF}\u{289AB}\u{279FD}\u{27A0A}\u{27B0B}\u{27D66}\u{2417A}\u7B43\u797E\u{28009}\u6FB5\u{2A2DF}\u6A03\u{28318}\u53A2\u{26E07}\u93BF\u6836\u975D\u{2816F}\u{28023}\u{269B5}\u{213ED}\u{2322F}\u{28048}\u5D85\u{28C30}\u{28083}\u5715\u9823\u{28949}\u5DAB\u{24988}\u65BE\u69D5\u53D2\u{24AA5}\u{23F81}\u3C11\u6736\u{28090}\u{280F4}\u{2812E}\u{21FA1}\u{2814F}"],["9d40","\u{28189}\u{281AF}\u{2821A}\u{28306}\u{2832F}\u{2838A}\u35CA\u{28468}\u{286AA}\u48FA\u63E6\u{28956}\u7808\u9255\u{289B8}\u43F2\u{289E7}\u43DF\u{289E8}\u{28B46}\u{28BD4}\u59F8\u{28C09}\u8F0B\u{28FC5}\u{290EC}\u7B51\u{29110}\u{2913C}\u3DF7\u{2915E}\u{24ACA}\u8FD0\u728F\u568B\u{294E7}\u{295E9}\u{295B0}\u{295B8}\u{29732}\u{298D1}\u{29949}\u{2996A}\u{299C3}\u{29A28}\u{29B0E}\u{29D5A}\u{29D9B}\u7E9F\u{29EF8}\u{29F23}\u4CA4\u9547\u{2A293}\u71A2\u{2A2FF}\u4D91\u9012\u{2A5CB}\u4D9C\u{20C9C}\u8FBE\u55C1"],["9da1","\u8FBA\u{224B0}\u8FB9\u{24A93}\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\u{28B2C}\u{2789D}\u373A\u8E80\u{217F5}\u{28024}\u{28B6C}\u{28B99}\u{27A3E}\u{266AF}\u3DEB\u{27655}\u{23CB7}\u{25635}\u{25956}\u4E9A\u{25E81}\u{26258}\u56BF\u{20E6D}\u8E0E\u5B6D\u{23E88}\u{24C9E}\u63DE\u62D0\u{217F6}\u{2187B}\u6530\u562D\u{25C4A}\u541A\u{25311}\u3DC6\u{29D98}\u4C7D\u5622\u561E\u7F49\u{25ED8}\u5975\u{23D40}\u8770\u4E1C\u{20FEA}\u{20D49}\u{236BA}\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\u{20E9D}\u35CE\u5605\u55F1\u66F1\u{282E2}\u362D\u7534\u55F0\u55BA\u5497\u5572\u{20C41}\u{20C96}\u5ED0\u{25148}\u{20E76}\u{22C62}"],["9e40","\u{20EA2}\u9EAB\u7D5A\u55DE\u{21075}\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\u{22B43}\u9C72\u{22EB3}\u519A\u34DF\u{20DA7}\u51A7\u544D\u551E\u5513\u7666\u8E2D\u{2688A}\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\u{210C1}\u44EC\u7304\u{24706}\u5B90\u830B\u{26893}\u567B\u{226F4}\u{27D2F}\u{241A3}\u{27D73}\u{26ED0}\u{272B6}\u9170\u{211D9}\u9208\u{23CFC}\u{2A6A9}\u{20EAC}\u{20EF9}\u7266\u{21CA2}\u474E\u{24FC2}\u{27FF9}\u{20FEB}\u40FA"],["9ea1","\u9C5D\u651F\u{22DA0}\u48F3\u{247E0}\u{29D7C}\u{20FEC}\u{20E0A}\u6062\u{275A3}\u{20FED}"],["9ead","\u{26048}\u{21187}\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\u{24618}\u589A\u{24B6E}\u822D\u544B\u57AA\u{25A95}\u{20979}"],["9ec5","\u3A52\u{22465}\u7374\u{29EAC}\u4D09\u9BED\u{23CFE}\u{29F30}\u4C5B\u{24FA9}\u{2959E}\u{29FDE}\u845C\u{23DB6}\u{272B2}\u{267B3}\u{23720}\u632E\u7D25\u{23EF7}\u{23E2C}\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\u{2048E}\u7640\u5AF0\u{20EB6}\u787A\u{27F2E}\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\u{2A434}\u9E85\u4CE1\u75F9\u37FB\u6119\u{230DA}\u{243F2}"],["9ef5","\u565D\u{212A9}\u57A7\u{24963}\u{29E06}\u5234\u{270AE}\u35AD\u6C4A\u9D7C"],["9f40","\u7C56\u9B39\u57DE\u{2176C}\u5C53\u64D3\u{294D0}\u{26335}\u{27164}\u86AD\u{20D28}\u{26D22}\u{24AE2}\u{20D71}"],["9f4f","\u51FE\u{21F0F}\u5D8E\u9703\u{21DD1}\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\u{2493E}\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130"],["9fa1","\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\u{2176D}\u99DA\u5273"],["9fae","\u9159\u9681\u915C"],["9fb2","\u9151\u{28E97}\u637F\u{26D23}\u6ACA\u5611\u918E\u757A\u6285\u{203FC}\u734F\u7C70\u{25C21}\u{23CFD}"],["9fc1","\u{24919}\u76D6\u9B9D\u4E2A\u{20CD4}\u83BE\u8842"],["9fc9","\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\u{201F2}\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3"],["9fdb","\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14"],["9fe7","\u6BFA\u8818\u7F78"],["9feb","\u5620\u{2A64A}\u8E77\u9F53"],["9ff0","\u8DD4\u8E4F\u9E1C\u8E01\u6282\u{2837D}\u8E28\u8E75\u7AD3\u{24A77}\u7A3E\u78D8\u6CEA\u8A67\u7607"],["a040","\u{28A5A}\u9F26\u6CCE\u87D6\u75C3\u{2A2B2}\u7853\u{2F840}\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\u{24ABB}\u862F\u5FBA\u88A0\u44B7"],["a055","\u{2183B}\u{26E05}"],["a058","\u8A7E\u{2251B}"],["a05b","\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5"],["a063","\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\u{26159}\u6159\u4C04\u9E96\u617D"],["a073","\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\u{233F5}\u6364\u6802\u35D2"],["a0a1","\u5D57\u{28BC2}\u8FDA\u{28E39}"],["a0a6","\u50D9\u{21D46}\u7906\u5332\u9638\u{20F3B}\u4065"],["a0ae","\u77FE"],["a0b0","\u7CC2\u{25F1A}\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\u{27486}\u805B\u74F0\u8103\u7724\u8989\u{267CC}\u7553\u{26ED1}\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6"],["a0d4","\u89A9\u7468\u6DB9\u87C1\u{24011}\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077"],["a0e2","\u7F71\u{28B2D}\u7250\u60E9\u4B7E\u5220\u3C18\u{23CC7}\u{25ED7}\u{27656}\u{25531}\u{21944}\u{212FE}\u{29903}\u{26DDC}\u{270AD}\u5CC1\u{261AD}\u{28A0F}\u{23677}\u{200EE}\u{26846}\u{24F0E}\u4562\u5B1F\u{2634C}\u9F50\u9EA6\u{2626B}"],["a3c0","\u2400",31,"\u2421"],["c6a1","\u2460",9,"\u2474",9,"\u2170",9,"\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\xA8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041",23],["c740","\u3059",58,"\u30A1\u30A2\u30A3\u30A4"],["c7a1","\u30A5",81,"\u0410",5,"\u0401\u0416",4],["c840","\u041B",26,"\u0451\u0436",25,"\u21E7\u21B8\u21B9\u31CF\u{200CC}\u4E5A\u{2008A}\u5202\u4491"],["c8a1","\u9FB0\u5188\u9FB1\u{27607}"],["c8cd","\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3"],["c8f5","\u0283\u0250\u025B\u0254\u0275\u0153\xF8\u014B\u028A\u026A"],["f9fe","\uFFED"],["fa40","\u{20547}\u92DB\u{205DF}\u{23FC5}\u854C\u42B5\u73EF\u51B5\u3649\u{24942}\u{289E4}\u9344\u{219DB}\u82EE\u{23CC8}\u783C\u6744\u62DF\u{24933}\u{289AA}\u{202A0}\u{26BB3}\u{21305}\u4FAB\u{224ED}\u5008\u{26D29}\u{27A84}\u{23600}\u{24AB1}\u{22513}\u5029\u{2037E}\u5FA4\u{20380}\u{20347}\u6EDB\u{2041F}\u507D\u5101\u347A\u510E\u986C\u3743\u8416\u{249A4}\u{20487}\u5160\u{233B4}\u516A\u{20BFF}\u{220FC}\u{202E5}\u{22530}\u{2058E}\u{23233}\u{21983}\u5B82\u877D\u{205B3}\u{23C99}\u51B2\u51B8"],["faa1","\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\u{24AA6}\u51B3\u51E2\u5342\u51ED\u83CD\u693E\u{2372D}\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\u{26B13}\u5305\u{28ADE}\u5549\u6ED9\u{23F80}\u{20954}\u{23FEC}\u5333\u5344\u{20BE2}\u6CCB\u{21726}\u681B\u73D5\u604A\u3EAA\u38CC\u{216E8}\u71DD\u44A2\u536D\u5374\u{286AB}\u537E\u537F\u{21596}\u{21613}\u77E6\u5393\u{28A9B}\u53A0\u53AB\u53AE\u73A7\u{25772}\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\u{20B8F}\u53E0\u{23FEB}\u{22DA3}\u53F6\u{20C77}\u5413\u7079\u552B\u6657\u6D5B\u546D\u{26B53}\u{20D74}\u555D\u548F\u54A4\u47A6\u{2170D}\u{20EDD}\u3DB4\u{20D4D}"],["fb40","\u{289BC}\u{22698}\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\u{218D7}\u{2403A}\u4552\u{24435}\u66B3\u{210B4}\u5637\u66CD\u{2328A}\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\u{28B66}\u3623\u{2124F}\u5746\u{241A5}\u6C6E\u708B\u5742\u36B1\u{26C7E}\u57E6\u{21416}\u5803\u{21454}\u{24363}\u5826\u{24BF5}\u585C\u58AA\u3561\u58E0\u58DC\u{2123C}\u58FB\u5BFF\u5743\u{2A150}\u{24278}\u93D3\u35A1\u591F\u68A6\u36C3\u6E59"],["fba1","\u{2163E}\u5A24\u5553\u{21692}\u8505\u59C9\u{20D4E}\u{26C81}\u{26D2A}\u{217DC}\u59D9\u{217FB}\u{217B2}\u{26DA6}\u6D71\u{21828}\u{216D5}\u59F9\u{26E45}\u5AAB\u5A63\u36E6\u{249A9}\u5A77\u3708\u5A96\u7465\u5AD3\u{26FA1}\u{22554}\u3D85\u{21911}\u3732\u{216B8}\u5E83\u52D0\u5B76\u6588\u5B7C\u{27A0E}\u4004\u485D\u{20204}\u5BD5\u6160\u{21A34}\u{259CC}\u{205A5}\u5BF3\u5B9D\u4D10\u5C05\u{21B44}\u5C13\u73CE\u5C14\u{21CA5}\u{26B28}\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\u{21DF9}\u{21E37}\u5D10\u5D18\u5D46\u{21EA4}\u5CBA\u5DD7\u82FC\u382D\u{24901}\u{22049}\u{22173}\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\u{244BC}\u{20CD3}\u53A6\u4EB7\u5ED0\u53A8\u{21771}\u5E09\u5EF4\u{28482}"],["fc40","\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\u{201C1}\u{2F894}\u3ADE\u48AE\u{2133A}\u5F3A\u{26888}\u{223D0}\u5F58\u{22471}\u5F63\u97BD\u{26E6E}\u5F72\u9340\u{28A36}\u5FA7\u5DB6\u3D5F\u{25250}\u{21F6A}\u{270F8}\u{22668}\u91D6\u{2029E}\u{28A29}\u6031\u6685\u{21877}\u3963\u3DC7\u3639\u5790\u{227B4}\u7971\u3E40\u609E\u60A4\u60B3\u{24982}\u{2498F}\u{27A53}\u74A4\u50E1\u5AA0\u6164\u8424\u6142\u{2F8A6}\u{26ED2}\u6181\u51F4\u{20656}\u6187\u5BAA\u{23FB7}"],["fca1","\u{2285F}\u61D3\u{28B9D}\u{2995D}\u61D0\u3932\u{22980}\u{228C1}\u6023\u615C\u651E\u638B\u{20118}\u62C5\u{21770}\u62D5\u{22E0D}\u636C\u{249DF}\u3A17\u6438\u63F8\u{2138E}\u{217FC}\u6490\u6F8A\u{22E36}\u9814\u{2408C}\u{2571D}\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\u{24A28}\u{24A23}\u6585\u656D\u655F\u{2307E}\u65B5\u{24940}\u4B37\u65D1\u40D8\u{21829}\u65E0\u65E3\u5FDF\u{23400}\u6618\u{231F7}\u{231F8}\u6644\u{231A4}\u{231A5}\u664B\u{20E75}\u6667\u{251E6}\u6673\u6674\u{21E3D}\u{23231}\u{285F4}\u{231C8}\u{25313}\u77C5\u{228F7}\u99A4\u6702\u{2439C}\u{24A21}\u3B2B\u69FA\u{237C2}\u675E\u6767\u6762\u{241CD}\u{290ED}\u67D7\u44E9\u6822\u6E50\u923C\u6801\u{233E6}\u{26DA0}\u685D"],["fd40","\u{2346F}\u69E1\u6A0B\u{28ADF}\u6973\u68C3\u{235CD}\u6901\u6900\u3D32\u3A01\u{2363C}\u3B80\u67AC\u6961\u{28A4A}\u42FC\u6936\u6998\u3BA1\u{203C9}\u8363\u5090\u69F9\u{23659}\u{2212A}\u6A45\u{23703}\u6A9D\u3BF3\u67B1\u6AC8\u{2919C}\u3C0D\u6B1D\u{20923}\u60DE\u6B35\u6B74\u{227CD}\u6EB5\u{23ADB}\u{203B5}\u{21958}\u3740\u5421\u{23B5A}\u6BE1\u{23EFC}\u6BDC\u6C37\u{2248B}\u{248F1}\u{26B51}\u6C5A\u8226\u6C79\u{23DBC}\u44C5\u{23DBD}\u{241A4}\u{2490C}\u{24900}"],["fda1","\u{23CC9}\u36E5\u3CEB\u{20D32}\u9B83\u{231F9}\u{22491}\u7F8F\u6837\u{26D25}\u{26DA1}\u{26DEB}\u6D96\u6D5C\u6E7C\u6F04\u{2497F}\u{24085}\u{26E72}\u8533\u{26F74}\u51C7\u6C9C\u6E1D\u842E\u{28B21}\u6E2F\u{23E2F}\u7453\u{23F82}\u79CC\u6E4F\u5A91\u{2304B}\u6FF8\u370D\u6F9D\u{23E30}\u6EFA\u{21497}\u{2403D}\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\u{29170}\u3D3B\u6F9F\u{24144}\u6FD3\u{24091}\u{24155}\u{24039}\u{23FF0}\u{23FB4}\u{2413F}\u51DF\u{24156}\u{24157}\u{24140}\u{261DD}\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\u{24277}\u712B\u7145\u5A88\u714A\u716E\u5C9C\u{24365}\u714F\u9362\u{242C1}\u712C\u{2445A}\u{24A27}\u{24A22}\u71BA\u{28BE8}\u70BD\u720E"],["fe40","\u9442\u7215\u5911\u9443\u7224\u9341\u{25605}\u722E\u7240\u{24974}\u68BD\u7255\u7257\u3E55\u{23044}\u680D\u6F3D\u7282\u732A\u732B\u{24823}\u{2882B}\u48ED\u{28804}\u7328\u732E\u73CF\u73AA\u{20C3A}\u{26A2E}\u73C9\u7449\u{241E2}\u{216E7}\u{24A24}\u6623\u36C5\u{249B7}\u{2498D}\u{249FB}\u73F7\u7415\u6903\u{24A26}\u7439\u{205C3}\u3ED7\u745C\u{228AD}\u7460\u{28EB2}\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\u{24A8C}"],["fea1","\u{2415F}\u{24A79}\u{28B8F}\u5B46\u{28C03}\u{2189E}\u74C8\u{21988}\u750E\u74E9\u751E\u{28ED9}\u{21A4B}\u5BD7\u{28EAC}\u9385\u754D\u754A\u7567\u756E\u{24F82}\u3F04\u{24D13}\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\u{263F5}\u7690\u81EF\u37F8\u{26911}\u{2690E}\u76A1\u76A5\u76B7\u76CC\u{26F9F}\u8462\u{2509D}\u{2517D}\u{21E1C}\u771E\u7726\u7740\u64AF\u{25220}\u7758\u{232AC}\u77AF\u{28964}\u{28968}\u{216C1}\u77F4\u7809\u{21376}\u{24A12}\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\u{255E0}\u78D7\u7934\u78B1\u{2760C}\u8FB8\u8884\u{28B2B}\u{26083}\u{2261C}\u7986\u8900\u6902\u7980\u{25857}\u799D\u{27B39}\u793C\u79A9\u6E2A\u{27126}\u3EA8\u79C6\u{2910D}\u79D4"]]});var pE=O((OX,dE)=>{"use strict";dE.exports={shiftjis:{type:"_dbcs",table:function(){return oE()},encodeAdd:{"\xA5":92,"\u203E":126},encodeSkipVals:[{from:60736,to:63808}]},csshiftjis:"shiftjis",mskanji:"shiftjis",sjis:"shiftjis",windows31j:"shiftjis",ms31j:"shiftjis",xsjis:"shiftjis",windows932:"shiftjis",ms932:"shiftjis",932:"shiftjis",cp932:"shiftjis",eucjp:{type:"_dbcs",table:function(){return aE()},encodeAdd:{"\xA5":92,"\u203E":126}},gb2312:"cp936",gb231280:"cp936",gb23121980:"cp936",csgb2312:"cp936",csiso58gb231280:"cp936",euccn:"cp936",windows936:"cp936",ms936:"cp936",936:"cp936",cp936:{type:"_dbcs",table:function(){return Nd()}},gbk:{type:"_dbcs",table:function(){return Nd().concat(D0())}},xgbk:"gbk",isoir58:"gbk",gb18030:{type:"_dbcs",table:function(){return Nd().concat(D0())},gb18030:function(){return cE()},encodeSkipVals:[128],encodeAdd:{"\u20AC":41699}},chinese:"gb18030",windows949:"cp949",ms949:"cp949",949:"cp949",cp949:{type:"_dbcs",table:function(){return uE()}},cseuckr:"cp949",csksc56011987:"cp949",euckr:"cp949",isoir149:"cp949",korean:"cp949",ksc56011987:"cp949",ksc56011989:"cp949",ksc5601:"cp949",windows950:"cp950",ms950:"cp950",950:"cp950",cp950:{type:"_dbcs",table:function(){return w0()}},big5:"big5hkscs",big5hkscs:{type:"_dbcs",table:function(){return w0().concat(lE())},encodeSkipVals:[36457,36463,36478,36523,36532,36557,36560,36695,36713,36718,36811,36862,36973,36986,37060,37084,37105,37311,37551,37552,37553,37554,37585,37959,38090,38361,38652,39285,39798,39800,39803,39878,39902,39916,39926,40002,40019,40034,40040,40043,40055,40124,40125,40144,40279,40282,40388,40431,40443,40617,40687,40701,40800,40907,41079,41180,41183,36812,37576,38468,38637,41636,41637,41639,41638,41676,41678]},cnbig5:"big5hkscs",csbig5:"big5hkscs",xxbig5:"big5hkscs"}});var hE=O((mE,$d)=>{"use strict";var KN=zg(),fE=[UA(),zA(),KA(),YA(),QA(),eE(),sE(),iE(),pE()];for(Wd=0;Wd<fE.length;Wd++)$d=fE[Wd],KN(mE,$d);var $d,Wd});var xE=O((MX,yE)=>{"use strict";var gE=or().Buffer;yE.exports=function(t){var e=t.Transform;function s(r,i){this.conv=r,i=i||{},i.decodeStrings=!1,e.call(this,i)}s.prototype=Object.create(e.prototype,{constructor:{value:s}}),s.prototype._transform=function(r,i,o){if(typeof r!="string")return o(new Error("Iconv encoding stream needs strings as its input."));try{var a=this.conv.write(r);a&&a.length&&this.push(a),o()}catch(c){o(c)}},s.prototype._flush=function(r){try{var i=this.conv.end();i&&i.length&&this.push(i),r()}catch(o){r(o)}},s.prototype.collect=function(r){var i=[];return this.on("error",r),this.on("data",function(o){i.push(o)}),this.on("end",function(){r(null,gE.concat(i))}),this};function n(r,i){this.conv=r,i=i||{},i.encoding=this.encoding="utf8",e.call(this,i)}return n.prototype=Object.create(e.prototype,{constructor:{value:n}}),n.prototype._transform=function(r,i,o){if(!gE.isBuffer(r)&&!(r instanceof Uint8Array))return o(new Error("Iconv decoding stream needs buffers as its input."));try{var a=this.conv.write(r);a&&a.length&&this.push(a,this.encoding),o()}catch(c){o(c)}},n.prototype._flush=function(r){try{var i=this.conv.end();i&&i.length&&this.push(i,this.encoding),r()}catch(o){r(o)}},n.prototype.collect=function(r){var i="";return this.on("error",r),this.on("data",function(o){i+=o}),this.on("end",function(){r(null,i)}),this},{IconvLiteEncoderStream:s,IconvLiteDecoderStream:n}}});var vE=O((BX,Me)=>{"use strict";var bE=or().Buffer,SE=WA(),ZN=zg();Me.exports.encodings=null;Me.exports.defaultCharUnicode="\uFFFD";Me.exports.defaultCharSingleByte="?";Me.exports.encode=function(e,s,n){e=""+(e||"");var r=Me.exports.getEncoder(s,n),i=r.write(e),o=r.end();return o&&o.length>0?bE.concat([i,o]):i};Me.exports.decode=function(e,s,n){typeof e=="string"&&(Me.exports.skipDecodeWarning||(console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding"),Me.exports.skipDecodeWarning=!0),e=bE.from(""+(e||""),"binary"));var r=Me.exports.getDecoder(s,n),i=r.write(e),o=r.end();return o?i+o:i};Me.exports.encodingExists=function(e){try{return Me.exports.getCodec(e),!0}catch{return!1}};Me.exports.toEncoding=Me.exports.encode;Me.exports.fromEncoding=Me.exports.decode;Me.exports._codecDataCache={__proto__:null};Me.exports.getCodec=function(e){if(!Me.exports.encodings){var s=hE();Me.exports.encodings={__proto__:null},ZN(Me.exports.encodings,s)}for(var n=Me.exports._canonicalizeEncoding(e),r={};;){var i=Me.exports._codecDataCache[n];if(i)return i;var o=Me.exports.encodings[n];switch(typeof o){case"string":n=o;break;case"object":for(var a in o)r[a]=o[a];r.encodingName||(r.encodingName=n),n=o.type;break;case"function":return r.encodingName||(r.encodingName=n),i=new o(r,Me.exports),Me.exports._codecDataCache[r.encodingName]=i,i;default:throw new Error("Encoding not recognized: '"+e+"' (searched as: '"+n+"')")}}};Me.exports._canonicalizeEncoding=function(t){return(""+t).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g,"")};Me.exports.getEncoder=function(e,s){var n=Me.exports.getCodec(e),r=new n.encoder(s,n);return n.bomAware&&s&&s.addBOM&&(r=new SE.PrependBOM(r,s)),r};Me.exports.getDecoder=function(e,s){var n=Me.exports.getCodec(e),r=new n.decoder(s,n);return n.bomAware&&!(s&&s.stripBOM===!1)&&(r=new SE.StripBOM(r,s)),r};Me.exports.enableStreamingAPI=function(e){if(!Me.exports.supportsStreams){var s=xE()(e);Me.exports.IconvLiteEncoderStream=s.IconvLiteEncoderStream,Me.exports.IconvLiteDecoderStream=s.IconvLiteDecoderStream,Me.exports.encodeStream=function(r,i){return new Me.exports.IconvLiteEncoderStream(Me.exports.getEncoder(r,i),i)},Me.exports.decodeStream=function(r,i){return new Me.exports.IconvLiteDecoderStream(Me.exports.getDecoder(r,i),i)},Me.exports.supportsStreams=!0}};var jd;try{jd=require("stream")}catch{}jd&&jd.Transform?Me.exports.enableStreamingAPI(jd):Me.exports.encodeStream=Me.exports.decodeStream=function(){throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.")}});var sI=O((Qee,tI)=>{var j0=class{constructor(e,s,n){this.etaBufferLength=e||100,this.valueBuffer=[n],this.timeBuffer=[s],this.eta="0"}update(e,s,n){this.valueBuffer.push(s),this.timeBuffer.push(e),this.calculate(n-s)}getTime(){return this.eta}calculate(e){let s=this.valueBuffer.length,n=Math.min(this.etaBufferLength,s),r=this.valueBuffer[s-1]-this.valueBuffer[s-n],i=this.timeBuffer[s-1]-this.timeBuffer[s-n],o=r/i;this.valueBuffer=this.valueBuffer.slice(-this.etaBufferLength),this.timeBuffer=this.timeBuffer.slice(-this.etaBufferLength);let a=Math.ceil(e/o/1e3);isNaN(a)?this.eta="NULL":isFinite(a)?a>1e7?this.eta="INF":a<0?this.eta=0:this.eta=a:this.eta="INF"}};tI.exports=j0});var G0=O((Xee,nI)=>{var uo=require("readline"),U0=class{constructor(e){this.stream=e,this.linewrap=!0,this.dy=0}cursorSave(){this.stream.isTTY&&this.stream.write("\x1B7")}cursorRestore(){this.stream.isTTY&&this.stream.write("\x1B8")}cursor(e){this.stream.isTTY&&(e?this.stream.write("\x1B[?25h"):this.stream.write("\x1B[?25l"))}cursorTo(e=null,s=null){this.stream.isTTY&&uo.cursorTo(this.stream,e,s)}cursorRelative(e=null,s=null){this.stream.isTTY&&(this.dy=this.dy+s,uo.moveCursor(this.stream,e,s))}cursorRelativeReset(){this.stream.isTTY&&(uo.moveCursor(this.stream,0,-this.dy),uo.cursorTo(this.stream,0,null),this.dy=0)}clearRight(){this.stream.isTTY&&uo.clearLine(this.stream,1)}clearLine(){this.stream.isTTY&&uo.clearLine(this.stream,0)}clearBottom(){this.stream.isTTY&&uo.clearScreenDown(this.stream)}newline(){this.stream.write(`
94
- `),this.dy++}write(e,s=!1){this.linewrap===!0&&s===!1?this.stream.write(e.substr(0,this.getWidth())):this.stream.write(e)}lineWrapping(e){this.stream.isTTY&&(this.linewrap=e,e?this.stream.write("\x1B[?7h"):this.stream.write("\x1B[?7l"))}isTTY(){return this.stream.isTTY===!0}getWidth(){return this.stream.columns||(this.stream.isTTY?80:200)}};nI.exports=U0});var H0=O((ete,rI)=>{rI.exports=function(e,s,n){if(s.autopadding!==!0)return e;function r(i,o){return(s.autopaddingChar+i).slice(-o)}switch(n){case"percentage":return r(e,3);default:return e}}});var z0=O((tte,iI)=>{iI.exports=function(e,s){let n=Math.round(e*s.barsize),r=s.barsize-n;return s.barCompleteString.substr(0,n)+s.barGlue+s.barIncompleteString.substr(0,r)}});var V0=O((ste,oI)=>{oI.exports=function(e,s,n){function r(o){return n?n*Math.round(o/n):o}function i(o){return(s.autopaddingChar+o).slice(-2)}return e>3600?i(Math.floor(e/3600))+"h"+i(r(e%3600/60))+"m":e>60?i(Math.floor(e/60))+"m"+i(r(e%60))+"s":e>10?i(r(e))+"s":i(e)+"s"}});var q0=O((nte,aI)=>{var G7=nl(),H7=H0(),z7=z0(),V7=V0();aI.exports=function(e,s,n){let r=e.format,i=e.formatTime||V7,o=e.formatValue||H7,a=e.formatBar||z7,c=Math.floor(s.progress*100)+"",u=s.stopTime||Date.now(),l=Math.round((u-s.startTime)/1e3),d=Object.assign({},n,{bar:a(s.progress,e),percentage:o(c,e,"percentage"),total:o(s.total,e,"total"),value:o(s.value,e,"value"),eta:o(s.eta,e,"eta"),eta_formatted:i(s.eta,e,5),duration:o(l,e,"duration"),duration_formatted:i(l,e,1)});r=r.replace(/\{(\w+)\}/g,function(m,g){return typeof d[g]<"u"?d[g]:m});let p=Math.max(0,s.maxWidth-G7(r)-2),f=Math.floor(p/2);switch(e.align){case"right":r=p>0?" ".repeat(p)+r:r;break;case"center":r=f>0?" ".repeat(f)+r:r;break;case"left":default:break}return r}});var rp=O((rte,cI)=>{function mt(t,e){return typeof t>"u"||t===null?e:t}cI.exports={parse:function(e,s){let n={},r=Object.assign({},s,e);return n.throttleTime=1e3/mt(r.fps,10),n.stream=mt(r.stream,process.stderr),n.terminal=mt(r.terminal,null),n.clearOnComplete=mt(r.clearOnComplete,!1),n.stopOnComplete=mt(r.stopOnComplete,!1),n.barsize=mt(r.barsize,40),n.align=mt(r.align,"left"),n.hideCursor=mt(r.hideCursor,!1),n.linewrap=mt(r.linewrap,!1),n.barGlue=mt(r.barGlue,""),n.barCompleteChar=mt(r.barCompleteChar,"="),n.barIncompleteChar=mt(r.barIncompleteChar,"-"),n.format=mt(r.format,"progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}"),n.formatTime=mt(r.formatTime,null),n.formatValue=mt(r.formatValue,null),n.formatBar=mt(r.formatBar,null),n.etaBufferLength=mt(r.etaBuffer,10),n.etaAsynchronousUpdate=mt(r.etaAsynchronousUpdate,!1),n.progressCalculationRelative=mt(r.progressCalculationRelative,!1),n.synchronousUpdate=mt(r.synchronousUpdate,!0),n.noTTYOutput=mt(r.noTTYOutput,!1),n.notTTYSchedule=mt(r.notTTYSchedule,2e3),n.emptyOnZero=mt(r.emptyOnZero,!1),n.forceRedraw=mt(r.forceRedraw,!1),n.autopadding=mt(r.autopadding,!1),n.gracefulExit=mt(r.gracefulExit,!1),n},assignDerivedOptions:function(e){return e.barCompleteString=e.barCompleteChar.repeat(e.barsize+1),e.barIncompleteString=e.barIncompleteChar.repeat(e.barsize+1),e.autopaddingChar=e.autopadding?mt(e.autopaddingChar," "):"",e}}});var K0=O((ote,lI)=>{var uI=sI(),q7=G0(),K7=q0(),Z7=rp(),Y7=require("events");lI.exports=class extends Y7{constructor(e){super(),this.options=Z7.assignDerivedOptions(e),this.terminal=this.options.terminal?this.options.terminal:new q7(this.options.stream),this.value=0,this.startValue=0,this.total=100,this.lastDrawnString=null,this.startTime=null,this.stopTime=null,this.lastRedraw=Date.now(),this.eta=new uI(this.options.etaBufferLength,0,0),this.payload={},this.isActive=!1,this.formatter=typeof this.options.format=="function"?this.options.format:K7}render(e=!1){let s={progress:this.getProgress(),eta:this.eta.getTime(),startTime:this.startTime,stopTime:this.stopTime,total:this.total,value:this.value,maxWidth:this.terminal.getWidth()};this.options.etaAsynchronousUpdate&&this.updateETA();let n=this.formatter(this.options,s,this.payload);(e||this.options.forceRedraw||this.options.noTTYOutput&&!this.terminal.isTTY()||this.lastDrawnString!=n)&&(this.emit("redraw-pre"),this.terminal.cursorTo(0,null),this.terminal.write(n),this.terminal.clearRight(),this.lastDrawnString=n,this.lastRedraw=Date.now(),this.emit("redraw-post"))}start(e,s,n){this.value=s||0,this.total=typeof e<"u"&&e>=0?e:100,this.startValue=s||0,this.payload=n||{},this.startTime=Date.now(),this.stopTime=null,this.lastDrawnString="",this.eta=new uI(this.options.etaBufferLength,this.startTime,this.value),this.isActive=!0,this.emit("start",e,s)}stop(){this.isActive=!1,this.stopTime=Date.now(),this.emit("stop",this.total,this.value)}update(e,s={}){typeof e=="number"&&(this.value=e,this.eta.update(Date.now(),e,this.total));let n=(typeof e=="object"?e:s)||{};this.emit("update",this.total,this.value);for(let r in n)this.payload[r]=n[r];this.value>=this.getTotal()&&this.options.stopOnComplete&&this.stop()}getProgress(){let e=this.value/this.total;return this.options.progressCalculationRelative&&(e=(this.value-this.startValue)/(this.total-this.startValue)),isNaN(e)&&(e=this.options&&this.options.emptyOnZero?0:1),e=Math.min(Math.max(e,0),1),e}increment(e=1,s={}){typeof e=="object"?this.update(this.value+1,e):this.update(this.value+e,s)}getTotal(){return this.total}setTotal(e){typeof e<"u"&&e>=0&&(this.total=e)}updateETA(){this.eta.update(Date.now(),this.value,this.total)}}});var pI=O((cte,dI)=>{var J7=K0(),Q7=rp();dI.exports=class extends J7{constructor(e,s){super(Q7.parse(e,s)),this.timer=null,this.options.noTTYOutput&&this.terminal.isTTY()===!1&&(this.options.synchronousUpdate=!1),this.schedulingRate=this.terminal.isTTY()?this.options.throttleTime:this.options.notTTYSchedule,this.sigintCallback=null}render(){this.timer&&(clearTimeout(this.timer),this.timer=null),super.render(),this.options.noTTYOutput&&this.terminal.isTTY()===!1&&this.terminal.newline(),this.timer=setTimeout(this.render.bind(this),this.schedulingRate)}update(e,s){this.timer&&(super.update(e,s),this.options.synchronousUpdate&&this.lastRedraw+this.options.throttleTime*2<Date.now()&&this.render())}start(e,s,n){this.options.noTTYOutput===!1&&this.terminal.isTTY()===!1||(this.sigintCallback===null&&this.options.gracefulExit&&(this.sigintCallback=this.stop.bind(this),process.once("SIGINT",this.sigintCallback),process.once("SIGTERM",this.sigintCallback)),this.terminal.cursorSave(),this.options.hideCursor===!0&&this.terminal.cursor(!1),this.options.linewrap===!1&&this.terminal.lineWrapping(!1),super.start(e,s,n),this.render())}stop(){this.timer&&(this.sigintCallback&&(process.removeListener("SIGINT",this.sigintCallback),process.removeListener("SIGTERM",this.sigintCallback),this.sigintCallback=null),this.render(),super.stop(),clearTimeout(this.timer),this.timer=null,this.options.hideCursor===!0&&this.terminal.cursor(!0),this.options.linewrap===!1&&this.terminal.lineWrapping(!0),this.terminal.cursorRestore(),this.options.clearOnComplete?(this.terminal.cursorTo(0,null),this.terminal.clearLine()):this.terminal.newline())}}});var mI=O((lte,fI)=>{var X7=G0(),e9=K0(),t9=rp(),s9=require("events");fI.exports=class extends s9{constructor(e,s){super(),this.bars=[],this.options=t9.parse(e,s),this.options.synchronousUpdate=!1,this.terminal=this.options.terminal?this.options.terminal:new X7(this.options.stream),this.timer=null,this.isActive=!1,this.schedulingRate=this.terminal.isTTY()?this.options.throttleTime:this.options.notTTYSchedule,this.loggingBuffer=[],this.sigintCallback=null}create(e,s,n,r={}){let i=new e9(Object.assign({},this.options,{terminal:this.terminal},r));return this.bars.push(i),this.options.noTTYOutput===!1&&this.terminal.isTTY()===!1||(this.sigintCallback===null&&this.options.gracefulExit&&(this.sigintCallback=this.stop.bind(this),process.once("SIGINT",this.sigintCallback),process.once("SIGTERM",this.sigintCallback)),this.isActive||(this.options.hideCursor===!0&&this.terminal.cursor(!1),this.options.linewrap===!1&&this.terminal.lineWrapping(!1),this.timer=setTimeout(this.update.bind(this),this.schedulingRate)),this.isActive=!0,i.start(e,s,n),this.emit("start")),i}remove(e){let s=this.bars.indexOf(e);return s<0?!1:(this.bars.splice(s,1),this.update(),this.terminal.newline(),this.terminal.clearBottom(),!0)}update(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.emit("update-pre"),this.terminal.cursorRelativeReset(),this.emit("redraw-pre"),this.loggingBuffer.length>0)for(this.terminal.clearLine();this.loggingBuffer.length>0;)this.terminal.write(this.loggingBuffer.shift(),!0);for(let e=0;e<this.bars.length;e++)e>0&&this.terminal.newline(),this.bars[e].render();this.emit("redraw-post"),this.options.noTTYOutput&&this.terminal.isTTY()===!1&&(this.terminal.newline(),this.terminal.newline()),this.timer=setTimeout(this.update.bind(this),this.schedulingRate),this.emit("update-post"),this.options.stopOnComplete&&!this.bars.find(e=>e.isActive)&&this.stop()}stop(){if(clearTimeout(this.timer),this.timer=null,this.sigintCallback&&(process.removeListener("SIGINT",this.sigintCallback),process.removeListener("SIGTERM",this.sigintCallback),this.sigintCallback=null),this.isActive=!1,this.options.hideCursor===!0&&this.terminal.cursor(!0),this.options.linewrap===!1&&this.terminal.lineWrapping(!0),this.terminal.cursorRelativeReset(),this.emit("stop-pre-clear"),this.options.clearOnComplete)this.terminal.clearBottom();else{for(let e=0;e<this.bars.length;e++)e>0&&this.terminal.newline(),this.bars[e].render(),this.bars[e].stop();this.terminal.newline()}this.emit("stop")}log(e){this.loggingBuffer.push(e)}}});var gI=O((dte,hI)=>{hI.exports={format:"progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"=",barIncompleteChar:"-"}});var xI=O((pte,yI)=>{yI.exports={format:" {bar} {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"\u2588",barIncompleteChar:"\u2591"}});var SI=O((fte,bI)=>{bI.exports={format:" \x1B[90m{bar}\x1B[0m {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"\u2588",barIncompleteChar:"\u2591"}});var CI=O((mte,vI)=>{vI.exports={format:" {bar}\u25A0 {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"\u25A0",barIncompleteChar:" "}});var wI=O((hte,DI)=>{var n9=gI(),r9=xI(),i9=SI(),o9=CI();DI.exports={legacy:n9,shades_classic:r9,shades_grey:i9,rect:o9}});var II=O((gte,EI)=>{var AI=pI(),a9=mI(),c9=wI(),u9=q0(),l9=H0(),d9=z0(),p9=V0();EI.exports={Bar:AI,SingleBar:AI,MultiBar:a9,Presets:c9,Format:{Formatter:u9,BarFormat:d9,ValueFormat:l9,TimeFormat:p9}}});var $I,jI,y9,Kc,ip,lo,op=ax(()=>{"use strict";$I=te(require("node:fs")),jI=require("node:module"),y9="2.252.0",Kc=(t,e)=>{let s=i=>i.replace(/[-+].*$/,"").split(".").map(o=>Number.parseInt(o,10)||0),n=s(t),r=s(e);for(let i=0;i<Math.max(n.length,r.length);i++){let o=(n[i]??0)-(r[i]??0);if(o!==0)return o}return 0},ip=null,lo=t=>{let e=t??process.cwd();if(ip&&ip.cwd===e)return ip.info;let s=null;try{let i=(0,jI.createRequire)(`${e}/__cdk-insights-anchor__.js`).resolve("aws-cdk-lib/package.json"),o=JSON.parse($I.readFileSync(i,"utf-8"));typeof o.version=="string"&&(s=o.version)}catch{}let n={version:s,supportsBoxTraces:s!==null&&Kc(s,y9)>=0};return ip={cwd:e,info:n},n}});var fF=O((Cpe,D$)=>{D$.exports={dots:{interval:80,frames:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]},dots2:{interval:80,frames:["\u28FE","\u28FD","\u28FB","\u28BF","\u287F","\u28DF","\u28EF","\u28F7"]},dots3:{interval:80,frames:["\u280B","\u2819","\u281A","\u281E","\u2816","\u2826","\u2834","\u2832","\u2833","\u2813"]},dots4:{interval:80,frames:["\u2804","\u2806","\u2807","\u280B","\u2819","\u2838","\u2830","\u2820","\u2830","\u2838","\u2819","\u280B","\u2807","\u2806"]},dots5:{interval:80,frames:["\u280B","\u2819","\u281A","\u2812","\u2802","\u2802","\u2812","\u2832","\u2834","\u2826","\u2816","\u2812","\u2810","\u2810","\u2812","\u2813","\u280B"]},dots6:{interval:80,frames:["\u2801","\u2809","\u2819","\u281A","\u2812","\u2802","\u2802","\u2812","\u2832","\u2834","\u2824","\u2804","\u2804","\u2824","\u2834","\u2832","\u2812","\u2802","\u2802","\u2812","\u281A","\u2819","\u2809","\u2801"]},dots7:{interval:80,frames:["\u2808","\u2809","\u280B","\u2813","\u2812","\u2810","\u2810","\u2812","\u2816","\u2826","\u2824","\u2820","\u2820","\u2824","\u2826","\u2816","\u2812","\u2810","\u2810","\u2812","\u2813","\u280B","\u2809","\u2808"]},dots8:{interval:80,frames:["\u2801","\u2801","\u2809","\u2819","\u281A","\u2812","\u2802","\u2802","\u2812","\u2832","\u2834","\u2824","\u2804","\u2804","\u2824","\u2820","\u2820","\u2824","\u2826","\u2816","\u2812","\u2810","\u2810","\u2812","\u2813","\u280B","\u2809","\u2808","\u2808"]},dots9:{interval:80,frames:["\u28B9","\u28BA","\u28BC","\u28F8","\u28C7","\u2867","\u2857","\u284F"]},dots10:{interval:80,frames:["\u2884","\u2882","\u2881","\u2841","\u2848","\u2850","\u2860"]},dots11:{interval:100,frames:["\u2801","\u2802","\u2804","\u2840","\u2880","\u2820","\u2810","\u2808"]},dots12:{interval:80,frames:["\u2880\u2800","\u2840\u2800","\u2804\u2800","\u2882\u2800","\u2842\u2800","\u2805\u2800","\u2883\u2800","\u2843\u2800","\u280D\u2800","\u288B\u2800","\u284B\u2800","\u280D\u2801","\u288B\u2801","\u284B\u2801","\u280D\u2809","\u280B\u2809","\u280B\u2809","\u2809\u2819","\u2809\u2819","\u2809\u2829","\u2808\u2899","\u2808\u2859","\u2888\u2829","\u2840\u2899","\u2804\u2859","\u2882\u2829","\u2842\u2898","\u2805\u2858","\u2883\u2828","\u2843\u2890","\u280D\u2850","\u288B\u2820","\u284B\u2880","\u280D\u2841","\u288B\u2801","\u284B\u2801","\u280D\u2809","\u280B\u2809","\u280B\u2809","\u2809\u2819","\u2809\u2819","\u2809\u2829","\u2808\u2899","\u2808\u2859","\u2808\u2829","\u2800\u2899","\u2800\u2859","\u2800\u2829","\u2800\u2898","\u2800\u2858","\u2800\u2828","\u2800\u2890","\u2800\u2850","\u2800\u2820","\u2800\u2880","\u2800\u2840"]},dots13:{interval:80,frames:["\u28FC","\u28F9","\u28BB","\u283F","\u285F","\u28CF","\u28E7","\u28F6"]},dots8Bit:{interval:80,frames:["\u2800","\u2801","\u2802","\u2803","\u2804","\u2805","\u2806","\u2807","\u2840","\u2841","\u2842","\u2843","\u2844","\u2845","\u2846","\u2847","\u2808","\u2809","\u280A","\u280B","\u280C","\u280D","\u280E","\u280F","\u2848","\u2849","\u284A","\u284B","\u284C","\u284D","\u284E","\u284F","\u2810","\u2811","\u2812","\u2813","\u2814","\u2815","\u2816","\u2817","\u2850","\u2851","\u2852","\u2853","\u2854","\u2855","\u2856","\u2857","\u2818","\u2819","\u281A","\u281B","\u281C","\u281D","\u281E","\u281F","\u2858","\u2859","\u285A","\u285B","\u285C","\u285D","\u285E","\u285F","\u2820","\u2821","\u2822","\u2823","\u2824","\u2825","\u2826","\u2827","\u2860","\u2861","\u2862","\u2863","\u2864","\u2865","\u2866","\u2867","\u2828","\u2829","\u282A","\u282B","\u282C","\u282D","\u282E","\u282F","\u2868","\u2869","\u286A","\u286B","\u286C","\u286D","\u286E","\u286F","\u2830","\u2831","\u2832","\u2833","\u2834","\u2835","\u2836","\u2837","\u2870","\u2871","\u2872","\u2873","\u2874","\u2875","\u2876","\u2877","\u2838","\u2839","\u283A","\u283B","\u283C","\u283D","\u283E","\u283F","\u2878","\u2879","\u287A","\u287B","\u287C","\u287D","\u287E","\u287F","\u2880","\u2881","\u2882","\u2883","\u2884","\u2885","\u2886","\u2887","\u28C0","\u28C1","\u28C2","\u28C3","\u28C4","\u28C5","\u28C6","\u28C7","\u2888","\u2889","\u288A","\u288B","\u288C","\u288D","\u288E","\u288F","\u28C8","\u28C9","\u28CA","\u28CB","\u28CC","\u28CD","\u28CE","\u28CF","\u2890","\u2891","\u2892","\u2893","\u2894","\u2895","\u2896","\u2897","\u28D0","\u28D1","\u28D2","\u28D3","\u28D4","\u28D5","\u28D6","\u28D7","\u2898","\u2899","\u289A","\u289B","\u289C","\u289D","\u289E","\u289F","\u28D8","\u28D9","\u28DA","\u28DB","\u28DC","\u28DD","\u28DE","\u28DF","\u28A0","\u28A1","\u28A2","\u28A3","\u28A4","\u28A5","\u28A6","\u28A7","\u28E0","\u28E1","\u28E2","\u28E3","\u28E4","\u28E5","\u28E6","\u28E7","\u28A8","\u28A9","\u28AA","\u28AB","\u28AC","\u28AD","\u28AE","\u28AF","\u28E8","\u28E9","\u28EA","\u28EB","\u28EC","\u28ED","\u28EE","\u28EF","\u28B0","\u28B1","\u28B2","\u28B3","\u28B4","\u28B5","\u28B6","\u28B7","\u28F0","\u28F1","\u28F2","\u28F3","\u28F4","\u28F5","\u28F6","\u28F7","\u28B8","\u28B9","\u28BA","\u28BB","\u28BC","\u28BD","\u28BE","\u28BF","\u28F8","\u28F9","\u28FA","\u28FB","\u28FC","\u28FD","\u28FE","\u28FF"]},sand:{interval:80,frames:["\u2801","\u2802","\u2804","\u2840","\u2848","\u2850","\u2860","\u28C0","\u28C1","\u28C2","\u28C4","\u28CC","\u28D4","\u28E4","\u28E5","\u28E6","\u28EE","\u28F6","\u28F7","\u28FF","\u287F","\u283F","\u289F","\u281F","\u285B","\u281B","\u282B","\u288B","\u280B","\u280D","\u2849","\u2809","\u2811","\u2821","\u2881"]},line:{interval:130,frames:["-","\\","|","/"]},line2:{interval:100,frames:["\u2802","-","\u2013","\u2014","\u2013","-"]},pipe:{interval:100,frames:["\u2524","\u2518","\u2534","\u2514","\u251C","\u250C","\u252C","\u2510"]},simpleDots:{interval:400,frames:[". ",".. ","..."," "]},simpleDotsScrolling:{interval:200,frames:[". ",".. ","..."," .."," ."," "]},star:{interval:70,frames:["\u2736","\u2738","\u2739","\u273A","\u2739","\u2737"]},star2:{interval:80,frames:["+","x","*"]},flip:{interval:70,frames:["_","_","_","-","`","`","'","\xB4","-","_","_","_"]},hamburger:{interval:100,frames:["\u2631","\u2632","\u2634"]},growVertical:{interval:120,frames:["\u2581","\u2583","\u2584","\u2585","\u2586","\u2587","\u2586","\u2585","\u2584","\u2583"]},growHorizontal:{interval:120,frames:["\u258F","\u258E","\u258D","\u258C","\u258B","\u258A","\u2589","\u258A","\u258B","\u258C","\u258D","\u258E"]},balloon:{interval:140,frames:[" ",".","o","O","@","*"," "]},balloon2:{interval:120,frames:[".","o","O","\xB0","O","o","."]},noise:{interval:100,frames:["\u2593","\u2592","\u2591"]},bounce:{interval:120,frames:["\u2801","\u2802","\u2804","\u2802"]},boxBounce:{interval:120,frames:["\u2596","\u2598","\u259D","\u2597"]},boxBounce2:{interval:100,frames:["\u258C","\u2580","\u2590","\u2584"]},triangle:{interval:50,frames:["\u25E2","\u25E3","\u25E4","\u25E5"]},binary:{interval:80,frames:["010010","001100","100101","111010","111101","010111","101011","111000","110011","110101"]},arc:{interval:100,frames:["\u25DC","\u25E0","\u25DD","\u25DE","\u25E1","\u25DF"]},circle:{interval:120,frames:["\u25E1","\u2299","\u25E0"]},squareCorners:{interval:180,frames:["\u25F0","\u25F3","\u25F2","\u25F1"]},circleQuarters:{interval:120,frames:["\u25F4","\u25F7","\u25F6","\u25F5"]},circleHalves:{interval:50,frames:["\u25D0","\u25D3","\u25D1","\u25D2"]},squish:{interval:100,frames:["\u256B","\u256A"]},toggle:{interval:250,frames:["\u22B6","\u22B7"]},toggle2:{interval:80,frames:["\u25AB","\u25AA"]},toggle3:{interval:120,frames:["\u25A1","\u25A0"]},toggle4:{interval:100,frames:["\u25A0","\u25A1","\u25AA","\u25AB"]},toggle5:{interval:100,frames:["\u25AE","\u25AF"]},toggle6:{interval:300,frames:["\u101D","\u1040"]},toggle7:{interval:80,frames:["\u29BE","\u29BF"]},toggle8:{interval:100,frames:["\u25CD","\u25CC"]},toggle9:{interval:100,frames:["\u25C9","\u25CE"]},toggle10:{interval:100,frames:["\u3282","\u3280","\u3281"]},toggle11:{interval:50,frames:["\u29C7","\u29C6"]},toggle12:{interval:120,frames:["\u2617","\u2616"]},toggle13:{interval:80,frames:["=","*","-"]},arrow:{interval:100,frames:["\u2190","\u2196","\u2191","\u2197","\u2192","\u2198","\u2193","\u2199"]},arrow2:{interval:80,frames:["\u2B06\uFE0F ","\u2197\uFE0F ","\u27A1\uFE0F ","\u2198\uFE0F ","\u2B07\uFE0F ","\u2199\uFE0F ","\u2B05\uFE0F ","\u2196\uFE0F "]},arrow3:{interval:120,frames:["\u25B9\u25B9\u25B9\u25B9\u25B9","\u25B8\u25B9\u25B9\u25B9\u25B9","\u25B9\u25B8\u25B9\u25B9\u25B9","\u25B9\u25B9\u25B8\u25B9\u25B9","\u25B9\u25B9\u25B9\u25B8\u25B9","\u25B9\u25B9\u25B9\u25B9\u25B8"]},bouncingBar:{interval:80,frames:["[ ]","[= ]","[== ]","[=== ]","[====]","[ ===]","[ ==]","[ =]","[ ]","[ =]","[ ==]","[ ===]","[====]","[=== ]","[== ]","[= ]"]},bouncingBall:{interval:80,frames:["( \u25CF )","( \u25CF )","( \u25CF )","( \u25CF )","( \u25CF)","( \u25CF )","( \u25CF )","( \u25CF )","( \u25CF )","(\u25CF )"]},smiley:{interval:200,frames:["\u{1F604} ","\u{1F61D} "]},monkey:{interval:300,frames:["\u{1F648} ","\u{1F648} ","\u{1F649} ","\u{1F64A} "]},hearts:{interval:100,frames:["\u{1F49B} ","\u{1F499} ","\u{1F49C} ","\u{1F49A} ","\u2764\uFE0F "]},clock:{interval:100,frames:["\u{1F55B} ","\u{1F550} ","\u{1F551} ","\u{1F552} ","\u{1F553} ","\u{1F554} ","\u{1F555} ","\u{1F556} ","\u{1F557} ","\u{1F558} ","\u{1F559} ","\u{1F55A} "]},earth:{interval:180,frames:["\u{1F30D} ","\u{1F30E} ","\u{1F30F} "]},material:{interval:17,frames:["\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581","\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581","\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581","\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581","\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581","\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588","\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588","\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588","\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588","\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588","\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588","\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581","\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581","\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581"]},moon:{interval:80,frames:["\u{1F311} ","\u{1F312} ","\u{1F313} ","\u{1F314} ","\u{1F315} ","\u{1F316} ","\u{1F317} ","\u{1F318} "]},runner:{interval:140,frames:["\u{1F6B6} ","\u{1F3C3} "]},pong:{interval:80,frames:["\u2590\u2802 \u258C","\u2590\u2808 \u258C","\u2590 \u2802 \u258C","\u2590 \u2820 \u258C","\u2590 \u2840 \u258C","\u2590 \u2820 \u258C","\u2590 \u2802 \u258C","\u2590 \u2808 \u258C","\u2590 \u2802 \u258C","\u2590 \u2820 \u258C","\u2590 \u2840 \u258C","\u2590 \u2820 \u258C","\u2590 \u2802 \u258C","\u2590 \u2808 \u258C","\u2590 \u2802\u258C","\u2590 \u2820\u258C","\u2590 \u2840\u258C","\u2590 \u2820 \u258C","\u2590 \u2802 \u258C","\u2590 \u2808 \u258C","\u2590 \u2802 \u258C","\u2590 \u2820 \u258C","\u2590 \u2840 \u258C","\u2590 \u2820 \u258C","\u2590 \u2802 \u258C","\u2590 \u2808 \u258C","\u2590 \u2802 \u258C","\u2590 \u2820 \u258C","\u2590 \u2840 \u258C","\u2590\u2820 \u258C"]},shark:{interval:120,frames:["\u2590|\\____________\u258C","\u2590_|\\___________\u258C","\u2590__|\\__________\u258C","\u2590___|\\_________\u258C","\u2590____|\\________\u258C","\u2590_____|\\_______\u258C","\u2590______|\\______\u258C","\u2590_______|\\_____\u258C","\u2590________|\\____\u258C","\u2590_________|\\___\u258C","\u2590__________|\\__\u258C","\u2590___________|\\_\u258C","\u2590____________|\\\u258C","\u2590____________/|\u258C","\u2590___________/|_\u258C","\u2590__________/|__\u258C","\u2590_________/|___\u258C","\u2590________/|____\u258C","\u2590_______/|_____\u258C","\u2590______/|______\u258C","\u2590_____/|_______\u258C","\u2590____/|________\u258C","\u2590___/|_________\u258C","\u2590__/|__________\u258C","\u2590_/|___________\u258C","\u2590/|____________\u258C"]},dqpb:{interval:100,frames:["d","q","p","b"]},weather:{interval:100,frames:["\u2600\uFE0F ","\u2600\uFE0F ","\u2600\uFE0F ","\u{1F324} ","\u26C5\uFE0F ","\u{1F325} ","\u2601\uFE0F ","\u{1F327} ","\u{1F328} ","\u{1F327} ","\u{1F328} ","\u{1F327} ","\u{1F328} ","\u26C8 ","\u{1F328} ","\u{1F327} ","\u{1F328} ","\u2601\uFE0F ","\u{1F325} ","\u26C5\uFE0F ","\u{1F324} ","\u2600\uFE0F ","\u2600\uFE0F "]},christmas:{interval:400,frames:["\u{1F332}","\u{1F384}"]},grenade:{interval:80,frames:["\u060C ","\u2032 "," \xB4 "," \u203E "," \u2E0C"," \u2E0A"," |"," \u204E"," \u2055"," \u0DF4 "," \u2053"," "," "," "]},point:{interval:125,frames:["\u2219\u2219\u2219","\u25CF\u2219\u2219","\u2219\u25CF\u2219","\u2219\u2219\u25CF","\u2219\u2219\u2219"]},layer:{interval:150,frames:["-","=","\u2261"]},betaWave:{interval:80,frames:["\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2","\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2","\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2","\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2","\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2","\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2","\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1"]},fingerDance:{interval:160,frames:["\u{1F918} ","\u{1F91F} ","\u{1F596} ","\u270B ","\u{1F91A} ","\u{1F446} "]},fistBump:{interval:80,frames:["\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ","\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ","\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ","\u3000\u{1F91C}\u3000\u3000\u{1F91B}\u3000 ","\u3000\u3000\u{1F91C}\u{1F91B}\u3000\u3000 ","\u3000\u{1F91C}\u2728\u{1F91B}\u3000\u3000 ","\u{1F91C}\u3000\u2728\u3000\u{1F91B}\u3000 "]},soccerHeader:{interval:80,frames:[" \u{1F9D1}\u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F\u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} "]},mindblown:{interval:160,frames:["\u{1F610} ","\u{1F610} ","\u{1F62E} ","\u{1F62E} ","\u{1F626} ","\u{1F626} ","\u{1F627} ","\u{1F627} ","\u{1F92F} ","\u{1F4A5} ","\u2728 ","\u3000 ","\u3000 ","\u3000 "]},speaker:{interval:160,frames:["\u{1F508} ","\u{1F509} ","\u{1F50A} ","\u{1F509} "]},orangePulse:{interval:100,frames:["\u{1F538} ","\u{1F536} ","\u{1F7E0} ","\u{1F7E0} ","\u{1F536} "]},bluePulse:{interval:100,frames:["\u{1F539} ","\u{1F537} ","\u{1F535} ","\u{1F535} ","\u{1F537} "]},orangeBluePulse:{interval:100,frames:["\u{1F538} ","\u{1F536} ","\u{1F7E0} ","\u{1F7E0} ","\u{1F536} ","\u{1F539} ","\u{1F537} ","\u{1F535} ","\u{1F535} ","\u{1F537} "]},timeTravel:{interval:100,frames:["\u{1F55B} ","\u{1F55A} ","\u{1F559} ","\u{1F558} ","\u{1F557} ","\u{1F556} ","\u{1F555} ","\u{1F554} ","\u{1F553} ","\u{1F552} ","\u{1F551} ","\u{1F550} "]},aesthetic:{interval:80,frames:["\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1","\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1","\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0","\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1"]},dwarfFortress:{interval:80,frames:[" \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A \u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A \u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\xA3\xA3\xA3 "," \u263A \u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\xA3\xA3\xA3 "," \u263A \u2588\xA3\xA3\xA3 "," \u263A\u2588\xA3\xA3\xA3 "," \u263A\u2588\xA3\xA3\xA3 "," \u263A\u2593\xA3\xA3\xA3 "," \u263A\u2593\xA3\xA3\xA3 "," \u263A\u2592\xA3\xA3\xA3 "," \u263A\u2592\xA3\xA3\xA3 "," \u263A\u2591\xA3\xA3\xA3 "," \u263A\u2591\xA3\xA3\xA3 "," \u263A \xA3\xA3\xA3 "," \u263A\xA3\xA3\xA3 "," \u263A\xA3\xA3\xA3 "," \u263A\u2593\xA3\xA3 "," \u263A\u2593\xA3\xA3 "," \u263A\u2592\xA3\xA3 "," \u263A\u2592\xA3\xA3 "," \u263A\u2591\xA3\xA3 "," \u263A\u2591\xA3\xA3 "," \u263A \xA3\xA3 "," \u263A\xA3\xA3 "," \u263A\xA3\xA3 "," \u263A\u2593\xA3 "," \u263A\u2593\xA3 "," \u263A\u2592\xA3 "," \u263A\u2592\xA3 "," \u263A\u2591\xA3 "," \u263A\u2591\xA3 "," \u263A \xA3 "," \u263A\xA3 "," \u263A\xA3 "," \u263A\u2593 "," \u263A\u2593 "," \u263A\u2592 "," \u263A\u2592 "," \u263A\u2591 "," \u263A\u2591 "," \u263A "," \u263A &"," \u263A \u263C&"," \u263A \u263C &"," \u263A\u263C &"," \u263A\u263C & "," \u203C & "," \u263A & "," \u203C & "," \u263A & "," \u203C & "," \u263A & ","\u203C & "," & "," & "," & \u2591 "," & \u2592 "," & \u2593 "," & \xA3 "," & \u2591\xA3 "," & \u2592\xA3 "," & \u2593\xA3 "," & \xA3\xA3 "," & \u2591\xA3\xA3 "," & \u2592\xA3\xA3 ","& \u2593\xA3\xA3 ","& \xA3\xA3\xA3 "," \u2591\xA3\xA3\xA3 "," \u2592\xA3\xA3\xA3 "," \u2593\xA3\xA3\xA3 "," \u2588\xA3\xA3\xA3 "," \u2591\u2588\xA3\xA3\xA3 "," \u2592\u2588\xA3\xA3\xA3 "," \u2593\u2588\xA3\xA3\xA3 "," \u2588\u2588\xA3\xA3\xA3 "," \u2591\u2588\u2588\xA3\xA3\xA3 "," \u2592\u2588\u2588\xA3\xA3\xA3 "," \u2593\u2588\u2588\xA3\xA3\xA3 "," \u2588\u2588\u2588\xA3\xA3\xA3 "," \u2591\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2592\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2593\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "]}}});var by=O((Dpe,hF)=>{"use strict";var wp=Object.assign({},fF()),mF=Object.keys(wp);Object.defineProperty(wp,"random",{get(){let t=Math.floor(Math.random()*mF.length),e=mF[t];return wp[e]}});hF.exports=wp});var vF=O((Ope,SF)=>{SF.exports=()=>/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g});var mu=O((zfe,uj)=>{uj.exports={name:"cdk-insights",version:"1.27.0",description:"AWS CDK security and cost analysis CLI. Free static scans via npm \u2014 no account needed. Sign up free to add AI-powered insights.",main:"dist/index.js",types:"dist/index.d.ts",bin:{"cdk-insights":"dist/entry.js"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",require:"./dist/index.js"}},files:["dist/**/*","README.md","LICENSE"],scripts:{test:"vitest --run",lint:"biome lint src/",typecheck:"tsc --noEmit",format:"biome format --write src/",check:"biome check src/","check:schema-sync":"ts-node scripts/check-schema-sync.ts",build:"ts-node scripts/build.ts","build:dev":"CDK_INSIGHTS_ENVIRONMENT=dev CDK_INSIGHTS_API_URL=https://s2zhmjbwlj.execute-api.eu-west-2.amazonaws.com/v1 ts-node scripts/build.ts",start:"node dist/index.js",dev:"ts-node src/index.ts",prepare:"husky install && npm run build","start:dev":"CDK_ENV=local ts-node src/index.ts","ai-run":"ts-node src/index.ts",unlink:"npm unlink -g cdk-insights",link:"npm link","prepare:test":"npm run unlink && npm run build && npm run link","prepare:dev":"npm run unlink && npm run build:dev && npm run link","deploy:dev":"STAGE=dev cdk deploy","destroy:dev":"STAGE=dev cdk destroy","release:patch":"bumper release patch","release:minor":"bumper release minor","release:major":"bumper release major","release:dry-run":"bumper release patch --dry-run","changelog:preview":"bumper preview","changelog:generate":"bumper generate","validate:commits":"bumper validate","release:check":"npm run validate:commits && npm run test && npm run build","release:full":"npm run release:check && npm run changelog:generate","setup:bumper":"bumper setup","publish:beta":"npm run build && npm publish --tag beta && npm dist-tag add cdk-insights@$npm_package_version latest","publish:alpha":"npm run build && npm publish --tag alpha","publish:canary":"npm run build && npm publish --tag canary","publish:latest":"npm run build && npm publish --tag latest","version:beta":"npm version prerelease --preid=beta","version:alpha":"npm version prerelease --preid=alpha","version:rc":"npm version prerelease --preid=rc","cdk-insights":"node scripts/cdk-insights-wrapper.js",scan:"node scripts/cdk-insights-wrapper.js scan","scan:all":"node scripts/cdk-insights-wrapper.js scan --all","scan:json":"node scripts/cdk-insights-wrapper.js scan --format json","scan:markdown":"node scripts/cdk-insights-wrapper.js scan --format markdown","scan:summary":"node scripts/cdk-insights-wrapper.js scan --format summary","scan:with-issues":"node scripts/cdk-insights-wrapper.js scan --withIssue","cache:clear":"node scripts/cdk-insights-wrapper.js cache clear","cache:status":"node scripts/cdk-insights-wrapper.js cache status","demo:progress":"ts-node src/examples/progress-demo.ts","demo:single-line":"ts-node src/examples/single-line-progress-demo.ts","test:line-clearing":"ts-node src/examples/line-clearing-test.ts"},publishConfig:{access:"public"},keywords:["aws","cdk","cloudformation","analysis","security","cost-optimization","static-analysis","devops","infrastructure","aws-cdk","cloud-security","compliance"],author:"Lee Priest <lee@cdkinsights.dev>",license:"BUSL-1.1",homepage:"https://github.com/instancelabs/cdk-insights",bugs:"https://github.com/instancelabs/cdk-insights/issues",repository:{type:"git",url:"git+https://github.com/instancelabs/cdk-insights.git"},dependencies:{"@inquirer/prompts":"^7.4.1","@middy/core":"^6.1.6","@types/glob":"^8.1.0",axios:"^1.8.4",chalk:"^5.4.1","cli-progress":"^3.12.0","cli-table3":"^0.6.5",dotenv:"^16.5.0",envolution:"^1.4.1",glob:"^11.0.3",ora:"^8.2.0",strogger:"^2.0.3",yargs:"^17.7.2",zod:"^3.23.8"},devDependencies:{"@aws-sdk/client-dynamodb":"^3.788.0","@biomejs/biome":"^2.0.6","@commitlint/cli":"^19.8.1","@commitlint/config-conventional":"^19.8.1","@types/cli-progress":"^3.11.6","@types/jsonwebtoken":"^9.0.9","@types/node":"^22.14.1","@types/yargs":"^17.0.33","aws-cdk":"^2.1010.0","bumper-cli":"^1.6.0",esbuild:"^0.25.2",husky:"^8.0.3","ts-node":"^10.9.2",typescript:"^5.8.3",vitest:"^3.1.1"},peerDependencies:{"aws-cdk-lib":"^2.190.0","cdk-nag":"^2.35.73",constructs:"^10.4.2"},optionalDependencies:{"@aws-solutions-constructs/aws-apigateway-lambda":"^2.0.0","@aws-solutions-constructs/aws-lambda-stepfunctions":"^2.0.0","@aws-solutions-constructs/aws-s3-lambda":"^2.0.0"}}});var Wa,V_,z_,NU,q_,K_=ax(()=>{"use strict";Wa=te(require("node:fs")),V_=te(require("node:path")),z_="@aws-cdk/core:stackTrace",NU=t=>{let e;try{e=JSON.parse(t)}catch{return{status:"invalid-json"}}if(e===null||typeof e!="object"||Array.isArray(e))return{status:"invalid-json"};let s=e,n=s.context,r=n&&typeof n=="object"&&!Array.isArray(n)?{...n}:{};if(r[z_]===!0)return{status:"already-set",updated:t};r[z_]=!0;let i={...s,context:r},o=t.endsWith(`
94
+ `),this.dy++}write(e,s=!1){this.linewrap===!0&&s===!1?this.stream.write(e.substr(0,this.getWidth())):this.stream.write(e)}lineWrapping(e){this.stream.isTTY&&(this.linewrap=e,e?this.stream.write("\x1B[?7h"):this.stream.write("\x1B[?7l"))}isTTY(){return this.stream.isTTY===!0}getWidth(){return this.stream.columns||(this.stream.isTTY?80:200)}};nI.exports=U0});var H0=O((ete,rI)=>{rI.exports=function(e,s,n){if(s.autopadding!==!0)return e;function r(i,o){return(s.autopaddingChar+i).slice(-o)}switch(n){case"percentage":return r(e,3);default:return e}}});var z0=O((tte,iI)=>{iI.exports=function(e,s){let n=Math.round(e*s.barsize),r=s.barsize-n;return s.barCompleteString.substr(0,n)+s.barGlue+s.barIncompleteString.substr(0,r)}});var V0=O((ste,oI)=>{oI.exports=function(e,s,n){function r(o){return n?n*Math.round(o/n):o}function i(o){return(s.autopaddingChar+o).slice(-2)}return e>3600?i(Math.floor(e/3600))+"h"+i(r(e%3600/60))+"m":e>60?i(Math.floor(e/60))+"m"+i(r(e%60))+"s":e>10?i(r(e))+"s":i(e)+"s"}});var q0=O((nte,aI)=>{var G7=nl(),H7=H0(),z7=z0(),V7=V0();aI.exports=function(e,s,n){let r=e.format,i=e.formatTime||V7,o=e.formatValue||H7,a=e.formatBar||z7,c=Math.floor(s.progress*100)+"",u=s.stopTime||Date.now(),l=Math.round((u-s.startTime)/1e3),d=Object.assign({},n,{bar:a(s.progress,e),percentage:o(c,e,"percentage"),total:o(s.total,e,"total"),value:o(s.value,e,"value"),eta:o(s.eta,e,"eta"),eta_formatted:i(s.eta,e,5),duration:o(l,e,"duration"),duration_formatted:i(l,e,1)});r=r.replace(/\{(\w+)\}/g,function(m,g){return typeof d[g]<"u"?d[g]:m});let p=Math.max(0,s.maxWidth-G7(r)-2),f=Math.floor(p/2);switch(e.align){case"right":r=p>0?" ".repeat(p)+r:r;break;case"center":r=f>0?" ".repeat(f)+r:r;break;case"left":default:break}return r}});var rp=O((rte,cI)=>{function mt(t,e){return typeof t>"u"||t===null?e:t}cI.exports={parse:function(e,s){let n={},r=Object.assign({},s,e);return n.throttleTime=1e3/mt(r.fps,10),n.stream=mt(r.stream,process.stderr),n.terminal=mt(r.terminal,null),n.clearOnComplete=mt(r.clearOnComplete,!1),n.stopOnComplete=mt(r.stopOnComplete,!1),n.barsize=mt(r.barsize,40),n.align=mt(r.align,"left"),n.hideCursor=mt(r.hideCursor,!1),n.linewrap=mt(r.linewrap,!1),n.barGlue=mt(r.barGlue,""),n.barCompleteChar=mt(r.barCompleteChar,"="),n.barIncompleteChar=mt(r.barIncompleteChar,"-"),n.format=mt(r.format,"progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}"),n.formatTime=mt(r.formatTime,null),n.formatValue=mt(r.formatValue,null),n.formatBar=mt(r.formatBar,null),n.etaBufferLength=mt(r.etaBuffer,10),n.etaAsynchronousUpdate=mt(r.etaAsynchronousUpdate,!1),n.progressCalculationRelative=mt(r.progressCalculationRelative,!1),n.synchronousUpdate=mt(r.synchronousUpdate,!0),n.noTTYOutput=mt(r.noTTYOutput,!1),n.notTTYSchedule=mt(r.notTTYSchedule,2e3),n.emptyOnZero=mt(r.emptyOnZero,!1),n.forceRedraw=mt(r.forceRedraw,!1),n.autopadding=mt(r.autopadding,!1),n.gracefulExit=mt(r.gracefulExit,!1),n},assignDerivedOptions:function(e){return e.barCompleteString=e.barCompleteChar.repeat(e.barsize+1),e.barIncompleteString=e.barIncompleteChar.repeat(e.barsize+1),e.autopaddingChar=e.autopadding?mt(e.autopaddingChar," "):"",e}}});var K0=O((ote,lI)=>{var uI=sI(),q7=G0(),K7=q0(),Z7=rp(),Y7=require("events");lI.exports=class extends Y7{constructor(e){super(),this.options=Z7.assignDerivedOptions(e),this.terminal=this.options.terminal?this.options.terminal:new q7(this.options.stream),this.value=0,this.startValue=0,this.total=100,this.lastDrawnString=null,this.startTime=null,this.stopTime=null,this.lastRedraw=Date.now(),this.eta=new uI(this.options.etaBufferLength,0,0),this.payload={},this.isActive=!1,this.formatter=typeof this.options.format=="function"?this.options.format:K7}render(e=!1){let s={progress:this.getProgress(),eta:this.eta.getTime(),startTime:this.startTime,stopTime:this.stopTime,total:this.total,value:this.value,maxWidth:this.terminal.getWidth()};this.options.etaAsynchronousUpdate&&this.updateETA();let n=this.formatter(this.options,s,this.payload);(e||this.options.forceRedraw||this.options.noTTYOutput&&!this.terminal.isTTY()||this.lastDrawnString!=n)&&(this.emit("redraw-pre"),this.terminal.cursorTo(0,null),this.terminal.write(n),this.terminal.clearRight(),this.lastDrawnString=n,this.lastRedraw=Date.now(),this.emit("redraw-post"))}start(e,s,n){this.value=s||0,this.total=typeof e<"u"&&e>=0?e:100,this.startValue=s||0,this.payload=n||{},this.startTime=Date.now(),this.stopTime=null,this.lastDrawnString="",this.eta=new uI(this.options.etaBufferLength,this.startTime,this.value),this.isActive=!0,this.emit("start",e,s)}stop(){this.isActive=!1,this.stopTime=Date.now(),this.emit("stop",this.total,this.value)}update(e,s={}){typeof e=="number"&&(this.value=e,this.eta.update(Date.now(),e,this.total));let n=(typeof e=="object"?e:s)||{};this.emit("update",this.total,this.value);for(let r in n)this.payload[r]=n[r];this.value>=this.getTotal()&&this.options.stopOnComplete&&this.stop()}getProgress(){let e=this.value/this.total;return this.options.progressCalculationRelative&&(e=(this.value-this.startValue)/(this.total-this.startValue)),isNaN(e)&&(e=this.options&&this.options.emptyOnZero?0:1),e=Math.min(Math.max(e,0),1),e}increment(e=1,s={}){typeof e=="object"?this.update(this.value+1,e):this.update(this.value+e,s)}getTotal(){return this.total}setTotal(e){typeof e<"u"&&e>=0&&(this.total=e)}updateETA(){this.eta.update(Date.now(),this.value,this.total)}}});var pI=O((cte,dI)=>{var J7=K0(),Q7=rp();dI.exports=class extends J7{constructor(e,s){super(Q7.parse(e,s)),this.timer=null,this.options.noTTYOutput&&this.terminal.isTTY()===!1&&(this.options.synchronousUpdate=!1),this.schedulingRate=this.terminal.isTTY()?this.options.throttleTime:this.options.notTTYSchedule,this.sigintCallback=null}render(){this.timer&&(clearTimeout(this.timer),this.timer=null),super.render(),this.options.noTTYOutput&&this.terminal.isTTY()===!1&&this.terminal.newline(),this.timer=setTimeout(this.render.bind(this),this.schedulingRate)}update(e,s){this.timer&&(super.update(e,s),this.options.synchronousUpdate&&this.lastRedraw+this.options.throttleTime*2<Date.now()&&this.render())}start(e,s,n){this.options.noTTYOutput===!1&&this.terminal.isTTY()===!1||(this.sigintCallback===null&&this.options.gracefulExit&&(this.sigintCallback=this.stop.bind(this),process.once("SIGINT",this.sigintCallback),process.once("SIGTERM",this.sigintCallback)),this.terminal.cursorSave(),this.options.hideCursor===!0&&this.terminal.cursor(!1),this.options.linewrap===!1&&this.terminal.lineWrapping(!1),super.start(e,s,n),this.render())}stop(){this.timer&&(this.sigintCallback&&(process.removeListener("SIGINT",this.sigintCallback),process.removeListener("SIGTERM",this.sigintCallback),this.sigintCallback=null),this.render(),super.stop(),clearTimeout(this.timer),this.timer=null,this.options.hideCursor===!0&&this.terminal.cursor(!0),this.options.linewrap===!1&&this.terminal.lineWrapping(!0),this.terminal.cursorRestore(),this.options.clearOnComplete?(this.terminal.cursorTo(0,null),this.terminal.clearLine()):this.terminal.newline())}}});var mI=O((lte,fI)=>{var X7=G0(),e9=K0(),t9=rp(),s9=require("events");fI.exports=class extends s9{constructor(e,s){super(),this.bars=[],this.options=t9.parse(e,s),this.options.synchronousUpdate=!1,this.terminal=this.options.terminal?this.options.terminal:new X7(this.options.stream),this.timer=null,this.isActive=!1,this.schedulingRate=this.terminal.isTTY()?this.options.throttleTime:this.options.notTTYSchedule,this.loggingBuffer=[],this.sigintCallback=null}create(e,s,n,r={}){let i=new e9(Object.assign({},this.options,{terminal:this.terminal},r));return this.bars.push(i),this.options.noTTYOutput===!1&&this.terminal.isTTY()===!1||(this.sigintCallback===null&&this.options.gracefulExit&&(this.sigintCallback=this.stop.bind(this),process.once("SIGINT",this.sigintCallback),process.once("SIGTERM",this.sigintCallback)),this.isActive||(this.options.hideCursor===!0&&this.terminal.cursor(!1),this.options.linewrap===!1&&this.terminal.lineWrapping(!1),this.timer=setTimeout(this.update.bind(this),this.schedulingRate)),this.isActive=!0,i.start(e,s,n),this.emit("start")),i}remove(e){let s=this.bars.indexOf(e);return s<0?!1:(this.bars.splice(s,1),this.update(),this.terminal.newline(),this.terminal.clearBottom(),!0)}update(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.emit("update-pre"),this.terminal.cursorRelativeReset(),this.emit("redraw-pre"),this.loggingBuffer.length>0)for(this.terminal.clearLine();this.loggingBuffer.length>0;)this.terminal.write(this.loggingBuffer.shift(),!0);for(let e=0;e<this.bars.length;e++)e>0&&this.terminal.newline(),this.bars[e].render();this.emit("redraw-post"),this.options.noTTYOutput&&this.terminal.isTTY()===!1&&(this.terminal.newline(),this.terminal.newline()),this.timer=setTimeout(this.update.bind(this),this.schedulingRate),this.emit("update-post"),this.options.stopOnComplete&&!this.bars.find(e=>e.isActive)&&this.stop()}stop(){if(clearTimeout(this.timer),this.timer=null,this.sigintCallback&&(process.removeListener("SIGINT",this.sigintCallback),process.removeListener("SIGTERM",this.sigintCallback),this.sigintCallback=null),this.isActive=!1,this.options.hideCursor===!0&&this.terminal.cursor(!0),this.options.linewrap===!1&&this.terminal.lineWrapping(!0),this.terminal.cursorRelativeReset(),this.emit("stop-pre-clear"),this.options.clearOnComplete)this.terminal.clearBottom();else{for(let e=0;e<this.bars.length;e++)e>0&&this.terminal.newline(),this.bars[e].render(),this.bars[e].stop();this.terminal.newline()}this.emit("stop")}log(e){this.loggingBuffer.push(e)}}});var gI=O((dte,hI)=>{hI.exports={format:"progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"=",barIncompleteChar:"-"}});var xI=O((pte,yI)=>{yI.exports={format:" {bar} {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"\u2588",barIncompleteChar:"\u2591"}});var SI=O((fte,bI)=>{bI.exports={format:" \x1B[90m{bar}\x1B[0m {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"\u2588",barIncompleteChar:"\u2591"}});var CI=O((mte,vI)=>{vI.exports={format:" {bar}\u25A0 {percentage}% | ETA: {eta}s | {value}/{total}",barCompleteChar:"\u25A0",barIncompleteChar:" "}});var wI=O((hte,DI)=>{var n9=gI(),r9=xI(),i9=SI(),o9=CI();DI.exports={legacy:n9,shades_classic:r9,shades_grey:i9,rect:o9}});var II=O((gte,EI)=>{var AI=pI(),a9=mI(),c9=wI(),u9=q0(),l9=H0(),d9=z0(),p9=V0();EI.exports={Bar:AI,SingleBar:AI,MultiBar:a9,Presets:c9,Format:{Formatter:u9,BarFormat:d9,ValueFormat:l9,TimeFormat:p9}}});var $I,jI,y9,Kc,ip,lo,op=ax(()=>{"use strict";$I=te(require("node:fs")),jI=require("node:module"),y9="2.252.0",Kc=(t,e)=>{let s=i=>i.replace(/[-+].*$/,"").split(".").map(o=>Number.parseInt(o,10)||0),n=s(t),r=s(e);for(let i=0;i<Math.max(n.length,r.length);i++){let o=(n[i]??0)-(r[i]??0);if(o!==0)return o}return 0},ip=null,lo=t=>{let e=t??process.cwd();if(ip&&ip.cwd===e)return ip.info;let s=null;try{let i=(0,jI.createRequire)(`${e}/__cdk-insights-anchor__.js`).resolve("aws-cdk-lib/package.json"),o=JSON.parse($I.readFileSync(i,"utf-8"));typeof o.version=="string"&&(s=o.version)}catch{}let n={version:s,supportsBoxTraces:s!==null&&Kc(s,y9)>=0};return ip={cwd:e,info:n},n}});var fF=O((Cpe,D$)=>{D$.exports={dots:{interval:80,frames:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]},dots2:{interval:80,frames:["\u28FE","\u28FD","\u28FB","\u28BF","\u287F","\u28DF","\u28EF","\u28F7"]},dots3:{interval:80,frames:["\u280B","\u2819","\u281A","\u281E","\u2816","\u2826","\u2834","\u2832","\u2833","\u2813"]},dots4:{interval:80,frames:["\u2804","\u2806","\u2807","\u280B","\u2819","\u2838","\u2830","\u2820","\u2830","\u2838","\u2819","\u280B","\u2807","\u2806"]},dots5:{interval:80,frames:["\u280B","\u2819","\u281A","\u2812","\u2802","\u2802","\u2812","\u2832","\u2834","\u2826","\u2816","\u2812","\u2810","\u2810","\u2812","\u2813","\u280B"]},dots6:{interval:80,frames:["\u2801","\u2809","\u2819","\u281A","\u2812","\u2802","\u2802","\u2812","\u2832","\u2834","\u2824","\u2804","\u2804","\u2824","\u2834","\u2832","\u2812","\u2802","\u2802","\u2812","\u281A","\u2819","\u2809","\u2801"]},dots7:{interval:80,frames:["\u2808","\u2809","\u280B","\u2813","\u2812","\u2810","\u2810","\u2812","\u2816","\u2826","\u2824","\u2820","\u2820","\u2824","\u2826","\u2816","\u2812","\u2810","\u2810","\u2812","\u2813","\u280B","\u2809","\u2808"]},dots8:{interval:80,frames:["\u2801","\u2801","\u2809","\u2819","\u281A","\u2812","\u2802","\u2802","\u2812","\u2832","\u2834","\u2824","\u2804","\u2804","\u2824","\u2820","\u2820","\u2824","\u2826","\u2816","\u2812","\u2810","\u2810","\u2812","\u2813","\u280B","\u2809","\u2808","\u2808"]},dots9:{interval:80,frames:["\u28B9","\u28BA","\u28BC","\u28F8","\u28C7","\u2867","\u2857","\u284F"]},dots10:{interval:80,frames:["\u2884","\u2882","\u2881","\u2841","\u2848","\u2850","\u2860"]},dots11:{interval:100,frames:["\u2801","\u2802","\u2804","\u2840","\u2880","\u2820","\u2810","\u2808"]},dots12:{interval:80,frames:["\u2880\u2800","\u2840\u2800","\u2804\u2800","\u2882\u2800","\u2842\u2800","\u2805\u2800","\u2883\u2800","\u2843\u2800","\u280D\u2800","\u288B\u2800","\u284B\u2800","\u280D\u2801","\u288B\u2801","\u284B\u2801","\u280D\u2809","\u280B\u2809","\u280B\u2809","\u2809\u2819","\u2809\u2819","\u2809\u2829","\u2808\u2899","\u2808\u2859","\u2888\u2829","\u2840\u2899","\u2804\u2859","\u2882\u2829","\u2842\u2898","\u2805\u2858","\u2883\u2828","\u2843\u2890","\u280D\u2850","\u288B\u2820","\u284B\u2880","\u280D\u2841","\u288B\u2801","\u284B\u2801","\u280D\u2809","\u280B\u2809","\u280B\u2809","\u2809\u2819","\u2809\u2819","\u2809\u2829","\u2808\u2899","\u2808\u2859","\u2808\u2829","\u2800\u2899","\u2800\u2859","\u2800\u2829","\u2800\u2898","\u2800\u2858","\u2800\u2828","\u2800\u2890","\u2800\u2850","\u2800\u2820","\u2800\u2880","\u2800\u2840"]},dots13:{interval:80,frames:["\u28FC","\u28F9","\u28BB","\u283F","\u285F","\u28CF","\u28E7","\u28F6"]},dots8Bit:{interval:80,frames:["\u2800","\u2801","\u2802","\u2803","\u2804","\u2805","\u2806","\u2807","\u2840","\u2841","\u2842","\u2843","\u2844","\u2845","\u2846","\u2847","\u2808","\u2809","\u280A","\u280B","\u280C","\u280D","\u280E","\u280F","\u2848","\u2849","\u284A","\u284B","\u284C","\u284D","\u284E","\u284F","\u2810","\u2811","\u2812","\u2813","\u2814","\u2815","\u2816","\u2817","\u2850","\u2851","\u2852","\u2853","\u2854","\u2855","\u2856","\u2857","\u2818","\u2819","\u281A","\u281B","\u281C","\u281D","\u281E","\u281F","\u2858","\u2859","\u285A","\u285B","\u285C","\u285D","\u285E","\u285F","\u2820","\u2821","\u2822","\u2823","\u2824","\u2825","\u2826","\u2827","\u2860","\u2861","\u2862","\u2863","\u2864","\u2865","\u2866","\u2867","\u2828","\u2829","\u282A","\u282B","\u282C","\u282D","\u282E","\u282F","\u2868","\u2869","\u286A","\u286B","\u286C","\u286D","\u286E","\u286F","\u2830","\u2831","\u2832","\u2833","\u2834","\u2835","\u2836","\u2837","\u2870","\u2871","\u2872","\u2873","\u2874","\u2875","\u2876","\u2877","\u2838","\u2839","\u283A","\u283B","\u283C","\u283D","\u283E","\u283F","\u2878","\u2879","\u287A","\u287B","\u287C","\u287D","\u287E","\u287F","\u2880","\u2881","\u2882","\u2883","\u2884","\u2885","\u2886","\u2887","\u28C0","\u28C1","\u28C2","\u28C3","\u28C4","\u28C5","\u28C6","\u28C7","\u2888","\u2889","\u288A","\u288B","\u288C","\u288D","\u288E","\u288F","\u28C8","\u28C9","\u28CA","\u28CB","\u28CC","\u28CD","\u28CE","\u28CF","\u2890","\u2891","\u2892","\u2893","\u2894","\u2895","\u2896","\u2897","\u28D0","\u28D1","\u28D2","\u28D3","\u28D4","\u28D5","\u28D6","\u28D7","\u2898","\u2899","\u289A","\u289B","\u289C","\u289D","\u289E","\u289F","\u28D8","\u28D9","\u28DA","\u28DB","\u28DC","\u28DD","\u28DE","\u28DF","\u28A0","\u28A1","\u28A2","\u28A3","\u28A4","\u28A5","\u28A6","\u28A7","\u28E0","\u28E1","\u28E2","\u28E3","\u28E4","\u28E5","\u28E6","\u28E7","\u28A8","\u28A9","\u28AA","\u28AB","\u28AC","\u28AD","\u28AE","\u28AF","\u28E8","\u28E9","\u28EA","\u28EB","\u28EC","\u28ED","\u28EE","\u28EF","\u28B0","\u28B1","\u28B2","\u28B3","\u28B4","\u28B5","\u28B6","\u28B7","\u28F0","\u28F1","\u28F2","\u28F3","\u28F4","\u28F5","\u28F6","\u28F7","\u28B8","\u28B9","\u28BA","\u28BB","\u28BC","\u28BD","\u28BE","\u28BF","\u28F8","\u28F9","\u28FA","\u28FB","\u28FC","\u28FD","\u28FE","\u28FF"]},sand:{interval:80,frames:["\u2801","\u2802","\u2804","\u2840","\u2848","\u2850","\u2860","\u28C0","\u28C1","\u28C2","\u28C4","\u28CC","\u28D4","\u28E4","\u28E5","\u28E6","\u28EE","\u28F6","\u28F7","\u28FF","\u287F","\u283F","\u289F","\u281F","\u285B","\u281B","\u282B","\u288B","\u280B","\u280D","\u2849","\u2809","\u2811","\u2821","\u2881"]},line:{interval:130,frames:["-","\\","|","/"]},line2:{interval:100,frames:["\u2802","-","\u2013","\u2014","\u2013","-"]},pipe:{interval:100,frames:["\u2524","\u2518","\u2534","\u2514","\u251C","\u250C","\u252C","\u2510"]},simpleDots:{interval:400,frames:[". ",".. ","..."," "]},simpleDotsScrolling:{interval:200,frames:[". ",".. ","..."," .."," ."," "]},star:{interval:70,frames:["\u2736","\u2738","\u2739","\u273A","\u2739","\u2737"]},star2:{interval:80,frames:["+","x","*"]},flip:{interval:70,frames:["_","_","_","-","`","`","'","\xB4","-","_","_","_"]},hamburger:{interval:100,frames:["\u2631","\u2632","\u2634"]},growVertical:{interval:120,frames:["\u2581","\u2583","\u2584","\u2585","\u2586","\u2587","\u2586","\u2585","\u2584","\u2583"]},growHorizontal:{interval:120,frames:["\u258F","\u258E","\u258D","\u258C","\u258B","\u258A","\u2589","\u258A","\u258B","\u258C","\u258D","\u258E"]},balloon:{interval:140,frames:[" ",".","o","O","@","*"," "]},balloon2:{interval:120,frames:[".","o","O","\xB0","O","o","."]},noise:{interval:100,frames:["\u2593","\u2592","\u2591"]},bounce:{interval:120,frames:["\u2801","\u2802","\u2804","\u2802"]},boxBounce:{interval:120,frames:["\u2596","\u2598","\u259D","\u2597"]},boxBounce2:{interval:100,frames:["\u258C","\u2580","\u2590","\u2584"]},triangle:{interval:50,frames:["\u25E2","\u25E3","\u25E4","\u25E5"]},binary:{interval:80,frames:["010010","001100","100101","111010","111101","010111","101011","111000","110011","110101"]},arc:{interval:100,frames:["\u25DC","\u25E0","\u25DD","\u25DE","\u25E1","\u25DF"]},circle:{interval:120,frames:["\u25E1","\u2299","\u25E0"]},squareCorners:{interval:180,frames:["\u25F0","\u25F3","\u25F2","\u25F1"]},circleQuarters:{interval:120,frames:["\u25F4","\u25F7","\u25F6","\u25F5"]},circleHalves:{interval:50,frames:["\u25D0","\u25D3","\u25D1","\u25D2"]},squish:{interval:100,frames:["\u256B","\u256A"]},toggle:{interval:250,frames:["\u22B6","\u22B7"]},toggle2:{interval:80,frames:["\u25AB","\u25AA"]},toggle3:{interval:120,frames:["\u25A1","\u25A0"]},toggle4:{interval:100,frames:["\u25A0","\u25A1","\u25AA","\u25AB"]},toggle5:{interval:100,frames:["\u25AE","\u25AF"]},toggle6:{interval:300,frames:["\u101D","\u1040"]},toggle7:{interval:80,frames:["\u29BE","\u29BF"]},toggle8:{interval:100,frames:["\u25CD","\u25CC"]},toggle9:{interval:100,frames:["\u25C9","\u25CE"]},toggle10:{interval:100,frames:["\u3282","\u3280","\u3281"]},toggle11:{interval:50,frames:["\u29C7","\u29C6"]},toggle12:{interval:120,frames:["\u2617","\u2616"]},toggle13:{interval:80,frames:["=","*","-"]},arrow:{interval:100,frames:["\u2190","\u2196","\u2191","\u2197","\u2192","\u2198","\u2193","\u2199"]},arrow2:{interval:80,frames:["\u2B06\uFE0F ","\u2197\uFE0F ","\u27A1\uFE0F ","\u2198\uFE0F ","\u2B07\uFE0F ","\u2199\uFE0F ","\u2B05\uFE0F ","\u2196\uFE0F "]},arrow3:{interval:120,frames:["\u25B9\u25B9\u25B9\u25B9\u25B9","\u25B8\u25B9\u25B9\u25B9\u25B9","\u25B9\u25B8\u25B9\u25B9\u25B9","\u25B9\u25B9\u25B8\u25B9\u25B9","\u25B9\u25B9\u25B9\u25B8\u25B9","\u25B9\u25B9\u25B9\u25B9\u25B8"]},bouncingBar:{interval:80,frames:["[ ]","[= ]","[== ]","[=== ]","[====]","[ ===]","[ ==]","[ =]","[ ]","[ =]","[ ==]","[ ===]","[====]","[=== ]","[== ]","[= ]"]},bouncingBall:{interval:80,frames:["( \u25CF )","( \u25CF )","( \u25CF )","( \u25CF )","( \u25CF)","( \u25CF )","( \u25CF )","( \u25CF )","( \u25CF )","(\u25CF )"]},smiley:{interval:200,frames:["\u{1F604} ","\u{1F61D} "]},monkey:{interval:300,frames:["\u{1F648} ","\u{1F648} ","\u{1F649} ","\u{1F64A} "]},hearts:{interval:100,frames:["\u{1F49B} ","\u{1F499} ","\u{1F49C} ","\u{1F49A} ","\u2764\uFE0F "]},clock:{interval:100,frames:["\u{1F55B} ","\u{1F550} ","\u{1F551} ","\u{1F552} ","\u{1F553} ","\u{1F554} ","\u{1F555} ","\u{1F556} ","\u{1F557} ","\u{1F558} ","\u{1F559} ","\u{1F55A} "]},earth:{interval:180,frames:["\u{1F30D} ","\u{1F30E} ","\u{1F30F} "]},material:{interval:17,frames:["\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581","\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581","\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581","\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581","\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581","\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588","\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588","\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588","\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588","\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588","\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588","\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581","\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581","\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581","\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581"]},moon:{interval:80,frames:["\u{1F311} ","\u{1F312} ","\u{1F313} ","\u{1F314} ","\u{1F315} ","\u{1F316} ","\u{1F317} ","\u{1F318} "]},runner:{interval:140,frames:["\u{1F6B6} ","\u{1F3C3} "]},pong:{interval:80,frames:["\u2590\u2802 \u258C","\u2590\u2808 \u258C","\u2590 \u2802 \u258C","\u2590 \u2820 \u258C","\u2590 \u2840 \u258C","\u2590 \u2820 \u258C","\u2590 \u2802 \u258C","\u2590 \u2808 \u258C","\u2590 \u2802 \u258C","\u2590 \u2820 \u258C","\u2590 \u2840 \u258C","\u2590 \u2820 \u258C","\u2590 \u2802 \u258C","\u2590 \u2808 \u258C","\u2590 \u2802\u258C","\u2590 \u2820\u258C","\u2590 \u2840\u258C","\u2590 \u2820 \u258C","\u2590 \u2802 \u258C","\u2590 \u2808 \u258C","\u2590 \u2802 \u258C","\u2590 \u2820 \u258C","\u2590 \u2840 \u258C","\u2590 \u2820 \u258C","\u2590 \u2802 \u258C","\u2590 \u2808 \u258C","\u2590 \u2802 \u258C","\u2590 \u2820 \u258C","\u2590 \u2840 \u258C","\u2590\u2820 \u258C"]},shark:{interval:120,frames:["\u2590|\\____________\u258C","\u2590_|\\___________\u258C","\u2590__|\\__________\u258C","\u2590___|\\_________\u258C","\u2590____|\\________\u258C","\u2590_____|\\_______\u258C","\u2590______|\\______\u258C","\u2590_______|\\_____\u258C","\u2590________|\\____\u258C","\u2590_________|\\___\u258C","\u2590__________|\\__\u258C","\u2590___________|\\_\u258C","\u2590____________|\\\u258C","\u2590____________/|\u258C","\u2590___________/|_\u258C","\u2590__________/|__\u258C","\u2590_________/|___\u258C","\u2590________/|____\u258C","\u2590_______/|_____\u258C","\u2590______/|______\u258C","\u2590_____/|_______\u258C","\u2590____/|________\u258C","\u2590___/|_________\u258C","\u2590__/|__________\u258C","\u2590_/|___________\u258C","\u2590/|____________\u258C"]},dqpb:{interval:100,frames:["d","q","p","b"]},weather:{interval:100,frames:["\u2600\uFE0F ","\u2600\uFE0F ","\u2600\uFE0F ","\u{1F324} ","\u26C5\uFE0F ","\u{1F325} ","\u2601\uFE0F ","\u{1F327} ","\u{1F328} ","\u{1F327} ","\u{1F328} ","\u{1F327} ","\u{1F328} ","\u26C8 ","\u{1F328} ","\u{1F327} ","\u{1F328} ","\u2601\uFE0F ","\u{1F325} ","\u26C5\uFE0F ","\u{1F324} ","\u2600\uFE0F ","\u2600\uFE0F "]},christmas:{interval:400,frames:["\u{1F332}","\u{1F384}"]},grenade:{interval:80,frames:["\u060C ","\u2032 "," \xB4 "," \u203E "," \u2E0C"," \u2E0A"," |"," \u204E"," \u2055"," \u0DF4 "," \u2053"," "," "," "]},point:{interval:125,frames:["\u2219\u2219\u2219","\u25CF\u2219\u2219","\u2219\u25CF\u2219","\u2219\u2219\u25CF","\u2219\u2219\u2219"]},layer:{interval:150,frames:["-","=","\u2261"]},betaWave:{interval:80,frames:["\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2","\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2","\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2","\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2","\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2","\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2","\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1"]},fingerDance:{interval:160,frames:["\u{1F918} ","\u{1F91F} ","\u{1F596} ","\u270B ","\u{1F91A} ","\u{1F446} "]},fistBump:{interval:80,frames:["\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ","\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ","\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ","\u3000\u{1F91C}\u3000\u3000\u{1F91B}\u3000 ","\u3000\u3000\u{1F91C}\u{1F91B}\u3000\u3000 ","\u3000\u{1F91C}\u2728\u{1F91B}\u3000\u3000 ","\u{1F91C}\u3000\u2728\u3000\u{1F91B}\u3000 "]},soccerHeader:{interval:80,frames:[" \u{1F9D1}\u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F\u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ","\u{1F9D1} \u26BD\uFE0F \u{1F9D1} "]},mindblown:{interval:160,frames:["\u{1F610} ","\u{1F610} ","\u{1F62E} ","\u{1F62E} ","\u{1F626} ","\u{1F626} ","\u{1F627} ","\u{1F627} ","\u{1F92F} ","\u{1F4A5} ","\u2728 ","\u3000 ","\u3000 ","\u3000 "]},speaker:{interval:160,frames:["\u{1F508} ","\u{1F509} ","\u{1F50A} ","\u{1F509} "]},orangePulse:{interval:100,frames:["\u{1F538} ","\u{1F536} ","\u{1F7E0} ","\u{1F7E0} ","\u{1F536} "]},bluePulse:{interval:100,frames:["\u{1F539} ","\u{1F537} ","\u{1F535} ","\u{1F535} ","\u{1F537} "]},orangeBluePulse:{interval:100,frames:["\u{1F538} ","\u{1F536} ","\u{1F7E0} ","\u{1F7E0} ","\u{1F536} ","\u{1F539} ","\u{1F537} ","\u{1F535} ","\u{1F535} ","\u{1F537} "]},timeTravel:{interval:100,frames:["\u{1F55B} ","\u{1F55A} ","\u{1F559} ","\u{1F558} ","\u{1F557} ","\u{1F556} ","\u{1F555} ","\u{1F554} ","\u{1F553} ","\u{1F552} ","\u{1F551} ","\u{1F550} "]},aesthetic:{interval:80,frames:["\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1","\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1","\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0","\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1"]},dwarfFortress:{interval:80,frames:[" \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ","\u263A \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A \u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A \u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\u2588\xA3\xA3\xA3 "," \u263A \u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2588\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\xA3\xA3\xA3 "," \u263A\u2593\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\xA3\xA3\xA3 "," \u263A\u2592\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\xA3\xA3\xA3 "," \u263A\u2591\u2588\xA3\xA3\xA3 "," \u263A \u2588\xA3\xA3\xA3 "," \u263A\u2588\xA3\xA3\xA3 "," \u263A\u2588\xA3\xA3\xA3 "," \u263A\u2593\xA3\xA3\xA3 "," \u263A\u2593\xA3\xA3\xA3 "," \u263A\u2592\xA3\xA3\xA3 "," \u263A\u2592\xA3\xA3\xA3 "," \u263A\u2591\xA3\xA3\xA3 "," \u263A\u2591\xA3\xA3\xA3 "," \u263A \xA3\xA3\xA3 "," \u263A\xA3\xA3\xA3 "," \u263A\xA3\xA3\xA3 "," \u263A\u2593\xA3\xA3 "," \u263A\u2593\xA3\xA3 "," \u263A\u2592\xA3\xA3 "," \u263A\u2592\xA3\xA3 "," \u263A\u2591\xA3\xA3 "," \u263A\u2591\xA3\xA3 "," \u263A \xA3\xA3 "," \u263A\xA3\xA3 "," \u263A\xA3\xA3 "," \u263A\u2593\xA3 "," \u263A\u2593\xA3 "," \u263A\u2592\xA3 "," \u263A\u2592\xA3 "," \u263A\u2591\xA3 "," \u263A\u2591\xA3 "," \u263A \xA3 "," \u263A\xA3 "," \u263A\xA3 "," \u263A\u2593 "," \u263A\u2593 "," \u263A\u2592 "," \u263A\u2592 "," \u263A\u2591 "," \u263A\u2591 "," \u263A "," \u263A &"," \u263A \u263C&"," \u263A \u263C &"," \u263A\u263C &"," \u263A\u263C & "," \u203C & "," \u263A & "," \u203C & "," \u263A & "," \u203C & "," \u263A & ","\u203C & "," & "," & "," & \u2591 "," & \u2592 "," & \u2593 "," & \xA3 "," & \u2591\xA3 "," & \u2592\xA3 "," & \u2593\xA3 "," & \xA3\xA3 "," & \u2591\xA3\xA3 "," & \u2592\xA3\xA3 ","& \u2593\xA3\xA3 ","& \xA3\xA3\xA3 "," \u2591\xA3\xA3\xA3 "," \u2592\xA3\xA3\xA3 "," \u2593\xA3\xA3\xA3 "," \u2588\xA3\xA3\xA3 "," \u2591\u2588\xA3\xA3\xA3 "," \u2592\u2588\xA3\xA3\xA3 "," \u2593\u2588\xA3\xA3\xA3 "," \u2588\u2588\xA3\xA3\xA3 "," \u2591\u2588\u2588\xA3\xA3\xA3 "," \u2592\u2588\u2588\xA3\xA3\xA3 "," \u2593\u2588\u2588\xA3\xA3\xA3 "," \u2588\u2588\u2588\xA3\xA3\xA3 "," \u2591\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2592\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2593\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "," \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "]}}});var by=O((Dpe,hF)=>{"use strict";var wp=Object.assign({},fF()),mF=Object.keys(wp);Object.defineProperty(wp,"random",{get(){let t=Math.floor(Math.random()*mF.length),e=mF[t];return wp[e]}});hF.exports=wp});var vF=O((Ope,SF)=>{SF.exports=()=>/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g});var mu=O((zfe,uj)=>{uj.exports={name:"cdk-insights",version:"1.27.1",description:"AWS CDK security and cost analysis CLI. Free static scans via npm \u2014 no account needed. Sign up free to add AI-powered insights.",main:"dist/index.js",types:"dist/index.d.ts",bin:{"cdk-insights":"dist/entry.js"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",require:"./dist/index.js"}},files:["dist/**/*","README.md","LICENSE"],scripts:{test:"vitest --run",lint:"biome lint src/",typecheck:"tsc --noEmit",format:"biome format --write src/",check:"biome check src/","check:schema-sync":"ts-node scripts/check-schema-sync.ts",build:"ts-node scripts/build.ts","build:dev":"CDK_INSIGHTS_ENVIRONMENT=dev CDK_INSIGHTS_API_URL=https://s2zhmjbwlj.execute-api.eu-west-2.amazonaws.com/v1 ts-node scripts/build.ts",start:"node dist/index.js",dev:"ts-node src/index.ts",prepare:"husky install && npm run build","start:dev":"CDK_ENV=local ts-node src/index.ts","ai-run":"ts-node src/index.ts",unlink:"npm unlink -g cdk-insights",link:"npm link","prepare:test":"npm run unlink && npm run build && npm run link","prepare:dev":"npm run unlink && npm run build:dev && npm run link","deploy:dev":"STAGE=dev cdk deploy","destroy:dev":"STAGE=dev cdk destroy","release:patch":"bumper release patch","release:minor":"bumper release minor","release:major":"bumper release major","release:dry-run":"bumper release patch --dry-run","changelog:preview":"bumper preview","changelog:generate":"bumper generate","validate:commits":"bumper validate","release:check":"npm run validate:commits && npm run test && npm run build","release:full":"npm run release:check && npm run changelog:generate","setup:bumper":"bumper setup","publish:beta":"npm run build && npm publish --tag beta && npm dist-tag add cdk-insights@$npm_package_version latest","publish:alpha":"npm run build && npm publish --tag alpha","publish:canary":"npm run build && npm publish --tag canary","publish:latest":"npm run build && npm publish --tag latest","version:beta":"npm version prerelease --preid=beta","version:alpha":"npm version prerelease --preid=alpha","version:rc":"npm version prerelease --preid=rc","cdk-insights":"node scripts/cdk-insights-wrapper.js",scan:"node scripts/cdk-insights-wrapper.js scan","scan:all":"node scripts/cdk-insights-wrapper.js scan --all","scan:json":"node scripts/cdk-insights-wrapper.js scan --format json","scan:markdown":"node scripts/cdk-insights-wrapper.js scan --format markdown","scan:summary":"node scripts/cdk-insights-wrapper.js scan --format summary","scan:with-issues":"node scripts/cdk-insights-wrapper.js scan --withIssue","cache:clear":"node scripts/cdk-insights-wrapper.js cache clear","cache:status":"node scripts/cdk-insights-wrapper.js cache status","demo:progress":"ts-node src/examples/progress-demo.ts","demo:single-line":"ts-node src/examples/single-line-progress-demo.ts","test:line-clearing":"ts-node src/examples/line-clearing-test.ts"},publishConfig:{access:"public"},keywords:["aws","cdk","cloudformation","analysis","security","cost-optimization","static-analysis","devops","infrastructure","aws-cdk","cloud-security","compliance"],author:"Lee Priest <lee@cdkinsights.dev>",license:"BUSL-1.1",homepage:"https://github.com/instancelabs/cdk-insights",bugs:"https://github.com/instancelabs/cdk-insights/issues",repository:{type:"git",url:"git+https://github.com/instancelabs/cdk-insights.git"},dependencies:{"@inquirer/prompts":"^7.4.1","@middy/core":"^6.1.6","@types/glob":"^8.1.0",axios:"^1.8.4",chalk:"^5.4.1","cli-progress":"^3.12.0","cli-table3":"^0.6.5",dotenv:"^16.5.0",envolution:"^1.4.1",glob:"^11.0.3",ora:"^8.2.0",strogger:"^2.0.3",yargs:"^17.7.2",zod:"^3.23.8"},devDependencies:{"@aws-sdk/client-dynamodb":"^3.788.0","@biomejs/biome":"^2.0.6","@commitlint/cli":"^19.8.1","@commitlint/config-conventional":"^19.8.1","@types/cli-progress":"^3.11.6","@types/jsonwebtoken":"^9.0.9","@types/node":"^22.14.1","@types/yargs":"^17.0.33","aws-cdk":"^2.1010.0","bumper-cli":"^1.6.0",esbuild:"^0.25.2",husky:"^8.0.3","ts-node":"^10.9.2",typescript:"^5.8.3",vitest:"^3.1.1"},peerDependencies:{"aws-cdk-lib":"^2.190.0","cdk-nag":"^2.35.73",constructs:"^10.4.2"},optionalDependencies:{"@aws-solutions-constructs/aws-apigateway-lambda":"^2.0.0","@aws-solutions-constructs/aws-lambda-stepfunctions":"^2.0.0","@aws-solutions-constructs/aws-s3-lambda":"^2.0.0"}}});var Wa,V_,z_,NU,q_,K_=ax(()=>{"use strict";Wa=te(require("node:fs")),V_=te(require("node:path")),z_="@aws-cdk/core:stackTrace",NU=t=>{let e;try{e=JSON.parse(t)}catch{return{status:"invalid-json"}}if(e===null||typeof e!="object"||Array.isArray(e))return{status:"invalid-json"};let s=e,n=s.context,r=n&&typeof n=="object"&&!Array.isArray(n)?{...n}:{};if(r[z_]===!0)return{status:"already-set",updated:t};r[z_]=!0;let i={...s,context:r},o=t.endsWith(`
95
95
  `)?`
96
96
  `:"";return{status:"added",updated:`${JSON.stringify(i,null,2)}${o}`}},q_=t=>{let e=V_.join(t,"cdk.json");if(!Wa.existsSync(e))return{status:"missing",cdkJsonPath:e};let s=Wa.readFileSync(e,"utf-8"),n=NU(s);return n.status==="invalid-json"?{status:"invalid-json",cdkJsonPath:e}:n.status==="already-set"?{status:"already-set",cdkJsonPath:e}:(Wa.writeFileSync(e,n.updated,"utf-8"),{status:"added",cdkJsonPath:e})}});var sT=te(af()),sf=require("node:child_process"),nT=te(require("node:path")),rT=require("node:util");function ja(t,e){return function(){return t.apply(e,arguments)}}var{toString:IT}=Object.prototype,{getPrototypeOf:uf}=Object,{iterator:Fu,toStringTag:hx}=Symbol,_u=(t=>e=>{let s=IT.call(e);return t[s]||(t[s]=s.slice(8,-1).toLowerCase())})(Object.create(null)),on=t=>(t=t.toLowerCase(),e=>_u(e)===t),Tu=t=>e=>typeof e===t,{isArray:xo}=Array,yo=Tu("undefined");function Ua(t){return t!==null&&!yo(t)&&t.constructor!==null&&!yo(t.constructor)&&us(t.constructor.isBuffer)&&t.constructor.isBuffer(t)}var gx=on("ArrayBuffer");function kT(t){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(t):e=t&&t.buffer&&gx(t.buffer),e}var RT=Tu("string"),us=Tu("function"),yx=Tu("number"),Ga=t=>t!==null&&typeof t=="object",FT=t=>t===!0||t===!1,Ru=t=>{if(_u(t)!=="object")return!1;let e=uf(t);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(hx in t)&&!(Fu in t)},_T=t=>{if(!Ga(t)||Ua(t))return!1;try{return Object.keys(t).length===0&&Object.getPrototypeOf(t)===Object.prototype}catch{return!1}},TT=on("Date"),PT=on("File"),LT=on("Blob"),OT=on("FileList"),MT=t=>Ga(t)&&us(t.pipe),BT=t=>{let e;return t&&(typeof FormData=="function"&&t instanceof FormData||us(t.append)&&((e=_u(t))==="formdata"||e==="object"&&us(t.toString)&&t.toString()==="[object FormData]"))},NT=on("URLSearchParams"),[WT,$T,jT,UT]=["ReadableStream","Request","Response","Headers"].map(on),GT=t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Ha(t,e,{allOwnKeys:s=!1}={}){if(t===null||typeof t>"u")return;let n,r;if(typeof t!="object"&&(t=[t]),xo(t))for(n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else{if(Ua(t))return;let i=s?Object.getOwnPropertyNames(t):Object.keys(t),o=i.length,a;for(n=0;n<o;n++)a=i[n],e.call(null,t[a],a,t)}}function xx(t,e){if(Ua(t))return null;e=e.toLowerCase();let s=Object.keys(t),n=s.length,r;for(;n-- >0;)if(r=s[n],e===r.toLowerCase())return r;return null}var Vr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,bx=t=>!yo(t)&&t!==Vr;function cf(){let{caseless:t,skipUndefined:e}=bx(this)&&this||{},s={},n=(r,i)=>{let o=t&&xx(s,i)||i;Ru(s[o])&&Ru(r)?s[o]=cf(s[o],r):Ru(r)?s[o]=cf({},r):xo(r)?s[o]=r.slice():(!e||!yo(r))&&(s[o]=r)};for(let r=0,i=arguments.length;r<i;r++)arguments[r]&&Ha(arguments[r],n);return s}var HT=(t,e,s,{allOwnKeys:n}={})=>(Ha(e,(r,i)=>{s&&us(r)?t[i]=ja(r,s):t[i]=r},{allOwnKeys:n}),t),zT=t=>(t.charCodeAt(0)===65279&&(t=t.slice(1)),t),VT=(t,e,s,n)=>{t.prototype=Object.create(e.prototype,n),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),s&&Object.assign(t.prototype,s)},qT=(t,e,s,n)=>{let r,i,o,a={};if(e=e||{},t==null)return e;do{for(r=Object.getOwnPropertyNames(t),i=r.length;i-- >0;)o=r[i],(!n||n(o,t,e))&&!a[o]&&(e[o]=t[o],a[o]=!0);t=s!==!1&&uf(t)}while(t&&(!s||s(t,e))&&t!==Object.prototype);return e},KT=(t,e,s)=>{t=String(t),(s===void 0||s>t.length)&&(s=t.length),s-=e.length;let n=t.indexOf(e,s);return n!==-1&&n===s},ZT=t=>{if(!t)return null;if(xo(t))return t;let e=t.length;if(!yx(e))return null;let s=new Array(e);for(;e-- >0;)s[e]=t[e];return s},YT=(t=>e=>t&&e instanceof t)(typeof Uint8Array<"u"&&uf(Uint8Array)),JT=(t,e)=>{let n=(t&&t[Fu]).call(t),r;for(;(r=n.next())&&!r.done;){let i=r.value;e.call(t,i[0],i[1])}},QT=(t,e)=>{let s,n=[];for(;(s=t.exec(e))!==null;)n.push(s);return n},XT=on("HTMLFormElement"),e6=t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(s,n,r){return n.toUpperCase()+r}),mx=(({hasOwnProperty:t})=>(e,s)=>t.call(e,s))(Object.prototype),t6=on("RegExp"),Sx=(t,e)=>{let s=Object.getOwnPropertyDescriptors(t),n={};Ha(s,(r,i)=>{let o;(o=e(r,i,t))!==!1&&(n[i]=o||r)}),Object.defineProperties(t,n)},s6=t=>{Sx(t,(e,s)=>{if(us(t)&&["arguments","caller","callee"].indexOf(s)!==-1)return!1;let n=t[s];if(us(n)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+s+"'")})}})},n6=(t,e)=>{let s={},n=r=>{r.forEach(i=>{s[i]=!0})};return xo(t)?n(t):n(String(t).split(e)),s},r6=()=>{},i6=(t,e)=>t!=null&&Number.isFinite(t=+t)?t:e;function o6(t){return!!(t&&us(t.append)&&t[hx]==="FormData"&&t[Fu])}var a6=t=>{let e=new Array(10),s=(n,r)=>{if(Ga(n)){if(e.indexOf(n)>=0)return;if(Ua(n))return n;if(!("toJSON"in n)){e[r]=n;let i=xo(n)?[]:{};return Ha(n,(o,a)=>{let c=s(o,r+1);!yo(c)&&(i[a]=c)}),e[r]=void 0,i}}return n};return s(t,0)},c6=on("AsyncFunction"),u6=t=>t&&(Ga(t)||us(t))&&us(t.then)&&us(t.catch),vx=((t,e)=>t?setImmediate:e?((s,n)=>(Vr.addEventListener("message",({source:r,data:i})=>{r===Vr&&i===s&&n.length&&n.shift()()},!1),r=>{n.push(r),Vr.postMessage(s,"*")}))(`axios@${Math.random()}`,[]):s=>setTimeout(s))(typeof setImmediate=="function",us(Vr.postMessage)),l6=typeof queueMicrotask<"u"?queueMicrotask.bind(Vr):typeof process<"u"&&process.nextTick||vx,d6=t=>t!=null&&us(t[Fu]),F={isArray:xo,isArrayBuffer:gx,isBuffer:Ua,isFormData:BT,isArrayBufferView:kT,isString:RT,isNumber:yx,isBoolean:FT,isObject:Ga,isPlainObject:Ru,isEmptyObject:_T,isReadableStream:WT,isRequest:$T,isResponse:jT,isHeaders:UT,isUndefined:yo,isDate:TT,isFile:PT,isBlob:LT,isRegExp:t6,isFunction:us,isStream:MT,isURLSearchParams:NT,isTypedArray:YT,isFileList:OT,forEach:Ha,merge:cf,extend:HT,trim:GT,stripBOM:zT,inherits:VT,toFlatObject:qT,kindOf:_u,kindOfTest:on,endsWith:KT,toArray:ZT,forEachEntry:JT,matchAll:QT,isHTMLForm:XT,hasOwnProperty:mx,hasOwnProp:mx,reduceDescriptors:Sx,freezeMethods:s6,toObjectSet:n6,toCamelCase:e6,noop:r6,toFiniteNumber:i6,findKey:xx,global:Vr,isContextDefined:bx,isSpecCompliantForm:o6,toJSONObject:a6,isAsyncFn:c6,isThenable:u6,setImmediate:vx,asap:l6,isIterable:d6};function bo(t,e,s,n,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=t,this.name="AxiosError",e&&(this.code=e),s&&(this.config=s),n&&(this.request=n),r&&(this.response=r,this.status=r.status?r.status:null)}F.inherits(bo,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:F.toJSONObject(this.config),code:this.code,status:this.status}}});var Cx=bo.prototype,Dx={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(t=>{Dx[t]={value:t}});Object.defineProperties(bo,Dx);Object.defineProperty(Cx,"isAxiosError",{value:!0});bo.from=(t,e,s,n,r,i)=>{let o=Object.create(Cx);F.toFlatObject(t,o,function(l){return l!==Error.prototype},u=>u!=="isAxiosError");let a=t&&t.message?t.message:"Error",c=e==null&&t?t.code:e;return bo.call(o,a,c,s,n,r),t&&o.cause==null&&Object.defineProperty(o,"cause",{value:t,configurable:!0}),o.name=t&&t.name||"Error",i&&Object.assign(o,i),o};var pe=bo;var IS=te(ES(),1),Gu=IS.default;function Rf(t){return F.isPlainObject(t)||F.isArray(t)}function RS(t){return F.endsWith(t,"[]")?t.slice(0,-2):t}function kS(t,e,s){return t?t.concat(e).map(function(r,i){return r=RS(r),!s&&i?"["+r+"]":r}).join(s?".":""):e}function YP(t){return F.isArray(t)&&!t.some(Rf)}var JP=F.toFlatObject(F,{},null,function(e){return/^is[A-Z]/.test(e)});function QP(t,e,s){if(!F.isObject(t))throw new TypeError("target must be an object");e=e||new(Gu||FormData),s=F.toFlatObject(s,{metaTokens:!0,dots:!1,indexes:!1},!1,function(g,h){return!F.isUndefined(h[g])});let n=s.metaTokens,r=s.visitor||l,i=s.dots,o=s.indexes,c=(s.Blob||typeof Blob<"u"&&Blob)&&F.isSpecCompliantForm(e);if(!F.isFunction(r))throw new TypeError("visitor must be a function");function u(m){if(m===null)return"";if(F.isDate(m))return m.toISOString();if(F.isBoolean(m))return m.toString();if(!c&&F.isBlob(m))throw new pe("Blob is not supported. Use a Buffer instead.");return F.isArrayBuffer(m)||F.isTypedArray(m)?c&&typeof Blob=="function"?new Blob([m]):Buffer.from(m):m}function l(m,g,h){let x=m;if(m&&!h&&typeof m=="object"){if(F.endsWith(g,"{}"))g=n?g:g.slice(0,-2),m=JSON.stringify(m);else if(F.isArray(m)&&YP(m)||(F.isFileList(m)||F.endsWith(g,"[]"))&&(x=F.toArray(m)))return g=RS(g),x.forEach(function(b,S){!(F.isUndefined(b)||b===null)&&e.append(o===!0?kS([g],S,i):o===null?g:g+"[]",u(b))}),!1}return Rf(m)?!0:(e.append(kS(h,g,i),u(m)),!1)}let d=[],p=Object.assign(JP,{defaultVisitor:l,convertValue:u,isVisitable:Rf});function f(m,g){if(!F.isUndefined(m)){if(d.indexOf(m)!==-1)throw Error("Circular reference detected in "+g.join("."));d.push(m),F.forEach(m,function(x,y){(!(F.isUndefined(x)||x===null)&&r.call(e,x,F.isString(y)?y.trim():y,g,p))===!0&&f(x,g?g.concat(y):[y])}),d.pop()}}if(!F.isObject(t))throw new TypeError("data must be an object");return f(t),e}var mr=QP;function FS(t){let e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,function(n){return e[n]})}function _S(t,e){this._pairs=[],t&&mr(t,this,e)}var TS=_S.prototype;TS.append=function(e,s){this._pairs.push([e,s])};TS.toString=function(e){let s=e?function(n){return e.call(this,n,FS)}:FS;return this._pairs.map(function(r){return s(r[0])+"="+s(r[1])},"").join("&")};var PS=_S;function XP(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Kr(t,e,s){if(!e)return t;let n=s&&s.encode||XP;F.isFunction(s)&&(s={serialize:s});let r=s&&s.serialize,i;if(r?i=r(e,s):i=F.isURLSearchParams(e)?e.toString():new PS(e,s).toString(n),i){let o=t.indexOf("#");o!==-1&&(t=t.slice(0,o)),t+=(t.indexOf("?")===-1?"?":"&")+i}return t}var Ff=class{constructor(){this.handlers=[]}use(e,s,n){return this.handlers.push({fulfilled:e,rejected:s,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){F.forEach(this.handlers,function(n){n!==null&&e(n)})}},_f=Ff;var wo={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var BS=te(require("crypto"),1);var LS=te(require("url"),1),OS=LS.default.URLSearchParams;var Tf="abcdefghijklmnopqrstuvwxyz",MS="0123456789",NS={DIGIT:MS,ALPHA:Tf,ALPHA_DIGIT:Tf+Tf.toUpperCase()+MS},eL=(t=16,e=NS.ALPHA_DIGIT)=>{let s="",{length:n}=e,r=new Uint32Array(t);BS.default.randomFillSync(r);for(let i=0;i<t;i++)s+=e[r[i]%n];return s},WS={isNode:!0,classes:{URLSearchParams:OS,FormData:Gu,Blob:typeof Blob<"u"&&Blob||null},ALPHABET:NS,generateString:eL,protocols:["http","https","file","data"]};var Of={};cx(Of,{hasBrowserEnv:()=>Lf,hasStandardBrowserEnv:()=>tL,hasStandardBrowserWebWorkerEnv:()=>sL,navigator:()=>Pf,origin:()=>nL});var Lf=typeof window<"u"&&typeof document<"u",Pf=typeof navigator=="object"&&navigator||void 0,tL=Lf&&(!Pf||["ReactNative","NativeScript","NS"].indexOf(Pf.product)<0),sL=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",nL=Lf&&window.location.href||"http://localhost";var rt={...Of,...WS};function Mf(t,e){return mr(t,new rt.classes.URLSearchParams,{visitor:function(s,n,r,i){return rt.isNode&&F.isBuffer(s)?(this.append(n,s.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)},...e})}function rL(t){return F.matchAll(/\w+|\[(\w*)]/g,t).map(e=>e[0]==="[]"?"":e[1]||e[0])}function iL(t){let e={},s=Object.keys(t),n,r=s.length,i;for(n=0;n<r;n++)i=s[n],e[i]=t[i];return e}function oL(t){function e(s,n,r,i){let o=s[i++];if(o==="__proto__")return!0;let a=Number.isFinite(+o),c=i>=s.length;return o=!o&&F.isArray(r)?r.length:o,c?(F.hasOwnProp(r,o)?r[o]=[r[o],n]:r[o]=n,!a):((!r[o]||!F.isObject(r[o]))&&(r[o]=[]),e(s,n,r[o],i)&&F.isArray(r[o])&&(r[o]=iL(r[o])),!a)}if(F.isFormData(t)&&F.isFunction(t.entries)){let s={};return F.forEachEntry(t,(n,r)=>{e(rL(n),r,s,0)}),s}return null}var Hu=oL;function aL(t,e,s){if(F.isString(t))try{return(e||JSON.parse)(t),F.trim(t)}catch(n){if(n.name!=="SyntaxError")throw n}return(s||JSON.stringify)(t)}var Bf={transitional:wo,adapter:["xhr","http","fetch"],transformRequest:[function(e,s){let n=s.getContentType()||"",r=n.indexOf("application/json")>-1,i=F.isObject(e);if(i&&F.isHTMLForm(e)&&(e=new FormData(e)),F.isFormData(e))return r?JSON.stringify(Hu(e)):e;if(F.isArrayBuffer(e)||F.isBuffer(e)||F.isStream(e)||F.isFile(e)||F.isBlob(e)||F.isReadableStream(e))return e;if(F.isArrayBufferView(e))return e.buffer;if(F.isURLSearchParams(e))return s.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let a;if(i){if(n.indexOf("application/x-www-form-urlencoded")>-1)return Mf(e,this.formSerializer).toString();if((a=F.isFileList(e))||n.indexOf("multipart/form-data")>-1){let c=this.env&&this.env.FormData;return mr(a?{"files[]":e}:e,c&&new c,this.formSerializer)}}return i||r?(s.setContentType("application/json",!1),aL(e)):e}],transformResponse:[function(e){let s=this.transitional||Bf.transitional,n=s&&s.forcedJSONParsing,r=this.responseType==="json";if(F.isResponse(e)||F.isReadableStream(e))return e;if(e&&F.isString(e)&&(n&&!this.responseType||r)){let o=!(s&&s.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(a){if(o)throw a.name==="SyntaxError"?pe.from(a,pe.ERR_BAD_RESPONSE,this,null,this.response):a}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:rt.classes.FormData,Blob:rt.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};F.forEach(["delete","get","head","post","put","patch"],t=>{Bf.headers[t]={}});var Ao=Bf;var cL=F.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),$S=t=>{let e={},s,n,r;return t&&t.split(`
97
97
  `).forEach(function(o){r=o.indexOf(":"),s=o.substring(0,r).trim().toLowerCase(),n=o.substring(r+1).trim(),!(!s||e[s]&&cL[s])&&(s==="set-cookie"?e[s]?e[s].push(n):e[s]=[n]:e[s]=e[s]?e[s]+", "+n:n)}),e};var jS=Symbol("internals");function Za(t){return t&&String(t).trim().toLowerCase()}function zu(t){return t===!1||t==null?t:F.isArray(t)?t.map(zu):String(t)}function uL(t){let e=Object.create(null),s=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,n;for(;n=s.exec(t);)e[n[1]]=n[2];return e}var lL=t=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim());function Nf(t,e,s,n,r){if(F.isFunction(n))return n.call(this,e,s);if(r&&(e=s),!!F.isString(e)){if(F.isString(n))return e.indexOf(n)!==-1;if(F.isRegExp(n))return n.test(e)}}function dL(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,s,n)=>s.toUpperCase()+n)}function pL(t,e){let s=F.toCamelCase(" "+e);["get","set","has"].forEach(n=>{Object.defineProperty(t,n+s,{value:function(r,i,o){return this[n].call(this,e,r,i,o)},configurable:!0})})}var Eo=class{constructor(e){e&&this.set(e)}set(e,s,n){let r=this;function i(a,c,u){let l=Za(c);if(!l)throw new Error("header name must be a non-empty string");let d=F.findKey(r,l);(!d||r[d]===void 0||u===!0||u===void 0&&r[d]!==!1)&&(r[d||c]=zu(a))}let o=(a,c)=>F.forEach(a,(u,l)=>i(u,l,c));if(F.isPlainObject(e)||e instanceof this.constructor)o(e,s);else if(F.isString(e)&&(e=e.trim())&&!lL(e))o($S(e),s);else if(F.isObject(e)&&F.isIterable(e)){let a={},c,u;for(let l of e){if(!F.isArray(l))throw TypeError("Object iterator must return a key-value pair");a[u=l[0]]=(c=a[u])?F.isArray(c)?[...c,l[1]]:[c,l[1]]:l[1]}o(a,s)}else e!=null&&i(s,e,n);return this}get(e,s){if(e=Za(e),e){let n=F.findKey(this,e);if(n){let r=this[n];if(!s)return r;if(s===!0)return uL(r);if(F.isFunction(s))return s.call(this,r,n);if(F.isRegExp(s))return s.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,s){if(e=Za(e),e){let n=F.findKey(this,e);return!!(n&&this[n]!==void 0&&(!s||Nf(this,this[n],n,s)))}return!1}delete(e,s){let n=this,r=!1;function i(o){if(o=Za(o),o){let a=F.findKey(n,o);a&&(!s||Nf(n,n[a],a,s))&&(delete n[a],r=!0)}}return F.isArray(e)?e.forEach(i):i(e),r}clear(e){let s=Object.keys(this),n=s.length,r=!1;for(;n--;){let i=s[n];(!e||Nf(this,this[i],i,e,!0))&&(delete this[i],r=!0)}return r}normalize(e){let s=this,n={};return F.forEach(this,(r,i)=>{let o=F.findKey(n,i);if(o){s[o]=zu(r),delete s[i];return}let a=e?dL(i):String(i).trim();a!==i&&delete s[i],s[a]=zu(r),n[a]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){let s=Object.create(null);return F.forEach(this,(n,r)=>{n!=null&&n!==!1&&(s[r]=e&&F.isArray(n)?n.join(", "):n)}),s}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,s])=>e+": "+s).join(`
@@ -224,7 +224,7 @@ ${e}`;return s(n,{})},h9=t=>e=>{if(TI(e)){let n=e.stdout?.toString()||"",r=e.std
224
224
  `):[],s=[];for(let n of e){let r=n.trim();if(!r||C9(r))continue;let o=r.replace(/^at\s+(?:.*?\s+)?/,"").match(v9);if(!o)continue;let[,a,,c,u]=o;s.push({filePath:a.startsWith("/")?a:`./${a}`,line:Number(c),column:Number(u),kind:"unknown"})}return s},ey=t=>{if(t.length===0)return t;let e=t.findIndex(n=>/\.tsx?$/.test(n.filePath));if(e<=0)return t;let[s]=t.splice(e,1);return[s,...t]},D9=t=>{if(t.type===qI){let e=t.data,s=ey(X0(e?.stackTrace));return s.length===0?null:s.map((n,r)=>({...n,kind:r===0?"property":n.kind,...r===0&&e.propertyName?{propertyName:e.propertyName}:{}}))}if(KI.includes(t.type)){let e=ey(X0(t.data));return e.length===0?null:e.map((s,n)=>({...s,kind:n===0?"creation":s.kind}))}return null},ZI=t=>{if(t.length===0)return null;let[e]=t;return{filePath:e.filePath,line:e.line,column:e.column,frames:t}},zI=(t,e)=>ZI(ey(X0(t))),ap=(t,e,s=process.cwd())=>{try{if(t&&typeof t=="object"&&"artifacts"in t){let c=t,u=e,l={};for(let f of Object.values(c.artifacts??{}))if(f.metadata)for(let[m,g]of Object.entries(f.metadata))l[m]=g;let d=Object.entries(l).filter(([,f])=>f.some(m=>m.type==="aws:cdk:logicalId"&&m.data===u));for(let[f,m]of d){let g=m.find(b=>b.type==="aws:cdk:info"&&typeof b.data=="string"&&b.data.startsWith("cdk-insights::")&&!b.data.startsWith("cdk-insights::nagFinding::"));if(g)try{let b=JSON.parse(g.data.replace("cdk-insights::",""));if(b.sourceLocation)return{filePath:b.sourceLocation.filePath,line:b.sourceLocation.line||1,column:b.sourceLocation.column||1,constructPath:f,stackName:f.split("/")[0]||"",logicalId:u,confidence:"high"}}catch{}let h=[...m.filter(b=>b.type===qI),...m.filter(b=>KI.includes(b.type))];for(let b of h){let S=D9(b),C=S?ZI(S):null;if(!C?.filePath)continue;let I=_s.resolve(s,C.filePath);if(Fs.existsSync(I))return{...C,line:C.line??1,column:C.column??1,constructPath:f,stackName:f.split("/")[0]||"",logicalId:u,confidence:"high"}}let y=m.find(b=>b.type==="aws:cdk:logicalId"&&b.data===u)?.trace;if(y){let b=zI(y,f);if(b?.filePath){let S=_s.resolve(s,b.filePath);if(Fs.existsSync(S))return{...b,line:b.line??1,column:b.column??1,constructPath:f,stackName:f.split("/")[0]||"",logicalId:u,confidence:"high"}}}}for(let[f]of d){let m=HI(f,s);if(m)return{...m,line:m.line??1,column:m.column??1,constructPath:f,stackName:f.split("/")[0]||"",logicalId:u,confidence:"medium"}}let p=d[0]?.[0]||u;return VI(p,u,s)}let r=t,i=e,o=zI(r,i);if(o?.filePath){let c=_s.resolve(s,o.filePath);if(Fs.existsSync(c))return{...o,line:o.line??1,column:o.column??1,constructPath:i,confidence:"high"}}let a=HI(i,s);return a?{...a,line:a.line??1,column:a.column??1,constructPath:i,confidence:"medium"}:VI(i,i,s)}catch{return{filePath:e,line:1,column:1,constructPath:e,confidence:"low"}}},VI=(t,e,s)=>{let n=t.split("/").pop()||"",r=t.split("/")[0]||"",i=S9(s);for(let o of i)try{let a=sy(o);if(!a)continue;let c=a.split(`
225
225
  `);for(let u=0;u<c.length;u++){let l=c[u];if(l.includes("new")&&l.includes("this")&&(l.includes(n)||l.includes(r)))return{filePath:_s.relative(s,o),line:u+1,column:l.indexOf("new")+1,constructPath:t,stackName:r,logicalId:e,confidence:"low"}}}catch{}return null};var Ta=te(require("node:fs")),ry=te(require("node:path")),Pa=t=>{let e=ry.join(t,"manifest.json");if(!Ta.existsSync(e))return{};let s;try{s=JSON.parse(Ta.readFileSync(e,"utf-8"))}catch{return{}}if(!s.artifacts)return s;for(let n of Object.values(s.artifacts)){let r=n?.additionalMetadataFile;if(!r||n.metadata)continue;let i=ry.join(t,r);if(Ta.existsSync(i))try{let o=JSON.parse(Ta.readFileSync(i,"utf-8"));o&&typeof o=="object"&&(n.metadata=o)}catch{}}return s};var w9=t=>{let e=t.split(".");return e[e.length-1]||t},A9=t=>{if(!t||t.length===0)return;let e=t.filter(r=>!r.isCustom).map(r=>w9(r.fqn)),s=t.filter(r=>r.isCustom).length,n=[];return e.length>0&&n.push(`\`${e.join("`, `")}\``),s>0&&n.push(s===1?"a user-defined mixin (opaque to cdk-insights)":`${s} user-defined mixins (opaque to cdk-insights)`),`Note: CDK Mixin(s) applied to this resource \u2014 ${n.join(" and ")}. If your remediation conflicts with a mixin, the mixin will re-apply at synth; update the mixin definition or its \`Mixins.of(scope)\` selector instead of (or in addition to) the resource props.`},E9=(t,e)=>e?t?`${t}
226
226
 
227
- ${e}`:e:t,I9=(t,e)=>t?!!(e?.startsWith("AWS::CDK::")||e?.startsWith("Cfn")||t.endsWith("/Resource")||t==="Resource"||t.includes("Asset")||t.includes("CustomResource")):!1,YI=(t,e,s,n,r)=>{let i=Pa("cdk.out");return Object.entries(t).reduce((o,[a,c])=>{let u=Object.keys(e).find(ne=>e[ne]===a)??c.cdkPath,l=s[a]?.__constructType??n.Resources?.[a]?.Type??"",d=r[a]?.githubUrl,p=r[a]?.docUrl,f=r[a]?.constructName,m=r[a]?.constructLevel,g=r[a]?.fqn,h=I9(u,l),x=s[a]?.displayName,y=x??s[a]?.__friendlyName??u.split("/").pop()??a,b=x??u??c.locationHint,S=ap(i,a),C=c.appliedMixins??s[a]?.__appliedMixins,I=A9(C),E=[...c.sources?.cdkInsights?.issues??[],...c.sources?.cdkNag?.issues??[]].map(ne=>({...ne,recommendation:UI(E9(ne.recommendation,I),m),locationHint:b,githubUrl:d,docUrl:p,constructName:f,...m?{constructLevel:m}:{},...g?{fqn:g}:{},...S?.filePath&&{sourceLocation:{filePath:S.filePath,line:S.line||1,column:S.column||1,confidence:S.confidence||"low",...S.frames&&S.frames.length>0?{frames:S.frames}:{}}},stackName:S?.stackName,stackId:S?.stackName,timestamp:new Date().toISOString()})),w=E.filter(ne=>ne.foundBy!=="cdkNag"),j=E.filter(ne=>ne.foundBy==="cdkNag"),H=s[a],z=c.parentPath||H?.__parentPath,q=c.childCount??H?.__childCount,L=c.tags||H?.__tags,G=c.sourceLocation||H?.__sourceLocation,k=c.constructHierarchy||H?.__constructHierarchy,U=c.serviceCategory||H?.__serviceCategory,V=c.dependencies||H?.__dependencies,se=c.sensitiveProperties||H?.__sensitiveProperties,Y=c.usesDefaults??H?.__usesDefaults,Z=c.l2ConstructType||H?.__l2ConstructType,ee=c.l2ConstructId||H?.__l2ConstructId,le=c.createdBy||H?.__createdBy,Ce=c.rootSourceLocation||H?.__rootSourceLocation,K=c.searchHint||H?.__searchHint,Re=G?{filePath:G.filePath,line:G.line,column:G.column,endLine:G.endLine,endColumn:G.endColumn,confidence:G.confidence||"high",method:G.method,enclosingScope:G.enclosingScope,codeSnippet:G.codeSnippet}:S?.filePath?{filePath:S.filePath,line:S.line||1,column:S.column||1,confidence:S.confidence||"low"}:void 0;return o[a]={...c,resourceId:a,displayName:x,cdkPath:u,friendlyName:y,locationHint:b,constructName:f,githubUrl:d,docUrl:p,isGenerated:h,type:l,constructType:l,parentPath:z,childCount:q,tags:L,sourceLocation:Re,constructHierarchy:k,logicalId:a,serviceCategory:U,dependencies:V,sensitiveProperties:se,usesDefaults:Y,l2ConstructType:Z,l2ConstructId:ee,createdBy:le,rootSourceLocation:Ce,searchHint:K,appliedMixins:C,sources:{cdkInsights:{issues:w},cdkNag:{issues:j}}},o},{})};var k9=new Set(["AwsSolutions-IAM4","AwsSolutions-IAM5","AwsSolutions-S1","AwsSolutions-S2","AwsSolutions-S3","AwsSolutions-S10","AwsSolutions-RDS2","AwsSolutions-RDS6","AwsSolutions-RDS10","AwsSolutions-EC23","AwsSolutions-EC26","AwsSolutions-ECS4","AwsSolutions-COG2","AwsSolutions-COG3","AwsSolutions-ELB2","AwsSolutions-KMS5","AwsSolutions-L1","AwsSolutions-SMG4","AwsSolutions-DDB3","AwsSolutions-CB4"]),Zc={AwsSolutions:"https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions-rules","HIPAA.Security":"https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaasecurity-rules","NIST.800.53.R4":"https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-80053-rules","NIST.800.53.R5":"https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-80053-rules","PCI.DSS.321":"https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pcidss-rules"},JI={IAM:"Security",S:"Security",EC:"Security",VPC:"Security",KMS:"Security",SMG:"Security",COG:"Security",CFR:"Security",ELB:"Security",RDS:"Security",DDB:"Security",SQS:"Security",SNS:"Security",L:"Security",ECS:"Security",EKS:"Security",CB:"Security",ATH:"Security",OS:"Security",RS:"Security",TS:"Security",QL:"Security",APS:"Security",DOC:"Security",EFS:"Security",GL:"Security",KDF:"Security",KDS:"Security",LEX:"Security",MSK:"Security",N:"Security",QS:"Security",EMR:"Security",AS:"Reliability",AEC:"Reliability",KDA:"Reliability",CW:"Operational Excellence",CT:"Operational Excellence",SF:"Operational Excellence",EB:"Operational Excellence",ASC:"Operational Excellence",MS:"Operational Excellence",EVB:"Operational Excellence",C91:"Security"},QI=t=>t.match(/^((?:AwsSolutions|HIPAA\.Security|NIST\.800\.53\.R[45]|PCI\.DSS\.321)-[A-Z0-9]+)/i)?.[1],R9=t=>t.match(/-([A-Z]+)\d*$/i)?.[1]?.toUpperCase(),Yc=(t,e)=>{if(e&&k9.has(e))return"CRITICAL";switch(t){case"aws:cdk:error":return"HIGH";case"aws:cdk:warning":return"MEDIUM";case"aws:cdk:info":return"LOW";default:return"HIGH"}},Jc=t=>{if(!t)return"Security";let e=R9(t);return e&&JI[e]?JI[e]:"Security"},iy=t=>{if(t){if(t.startsWith("AwsSolutions-"))return Zc.AwsSolutions;if(t.startsWith("HIPAA.Security-"))return Zc["HIPAA.Security"];if(t.startsWith("NIST.800.53.R4-"))return Zc["NIST.800.53.R4"];if(t.startsWith("NIST.800.53.R5-"))return Zc["NIST.800.53.R5"];if(t.startsWith("PCI.DSS.321-"))return Zc["PCI.DSS.321"]}},XI=t=>t.startsWith("AwsSolutions-")||t.startsWith("HIPAA.Security-")||t.startsWith("NIST.800.53.R")||t.startsWith("PCI.DSS.321-");var e1=(t,e)=>{let s=/\[([^\]]*)\]\s*\[([^\]]*)\]\s*\[([^\]]*)\]/g,n=[],r=s.exec(t);for(;r!==null;){let i=r[1]??"",o=r[2],a=r[3];if(o&&a){let c=e[i]??i;n.push({resourceId:c,issue:a,severity:Yc("inline",o),wafPillar:Jc(o),foundBy:"cdkNag",constructPath:i,ruleId:o})}r=s.exec(t)}return n};var cp=te(require("node:fs")),t1=te(require("node:path"));var s1=(t=process.cwd())=>{let e=t1.join(t,"cdk.json");if(!cp.existsSync(e))return{context:{},found:!1};let s;try{s=cp.readFileSync(e,"utf-8")}catch{return{context:{},found:!1}}let n;try{n=JSON.parse(s)}catch{return{context:{},found:!1,source:e}}return n&&typeof n=="object"&&!Array.isArray(n)&&"context"in n&&typeof n.context=="object"&&n.context!==null&&!Array.isArray(n.context)?{context:n.context,found:!0,source:e}:{context:{},found:!0,source:e}};var n1=(t,e)=>e?Object.entries(t).reduce((s,[n,r])=>(s[n]={...r,__description:r.__description||e[n]},s),{}):{...t};var F9="aws:cdk:analytics:mixin",_9="*",r1=t=>{let e=new Set,s=[];for(let n of t){if(n.type!==F9||!n.data||typeof n.data!="object"||Array.isArray(n.data))continue;let r=n.data.mixin;typeof r!="string"||r.length===0||e.has(r)||(e.add(r),s.push({fqn:r,isCustom:r===_9}))}return s};var Qc="cdk-insights::",T9="aws:cdk:acknowledged-rules",oy="cdk-insights::nagFinding::",i1=t=>t.startsWith(Qc)&&!t.startsWith(oy),P9=t=>t.startsWith(oy),o1="2.2.0",L9=(t,e)=>{let s=t.split(".").map(Number),n=e.split(".").map(Number);for(let r=0;r<Math.max(s.length,n.length);r++){let i=s[r]||0,o=n[r]||0;if(i!==o)return i-o}return 0},O9=(t,e)=>{if(!t){ke.debug("Legacy cdk-insights metadata found (no version field)",{constructPath:e});return}L9(t,o1)<0&&ke.debug(`Metadata version ${t} is older than expected ${o1}`,{constructPath:e,hint:"Consider re-running cdk synth with the latest cdk-insights aspect"})},a1=(t,e,s,n,r)=>{try{let i=t.artifacts??{},a=(i[n]||i[`${n}.template.json`])?.metadata??{},c={...e},u={...s},l=[];for(let[p,{githubUrl:f,docUrl:m}]of Object.entries(r))if(f||m){let g=u[p]||{};u[p]={...g,...f&&{__github:f},...m&&{__docs:m}}}for(let[p,f]of Object.entries(a)){for(let b of f)if(b.type===T9&&!(!b.data||typeof b.data!="object"))for(let[S,C]of Object.entries(b.data)){if(!S.startsWith(Qc))continue;let I=S.slice(Qc.length);if(!I)continue;let E=typeof C=="string"?C:"";l.push({constructPath:p,ruleId:I,reason:E})}let m=f.find(b=>b.type==="aws:cdk:logicalId"&&typeof b.data=="string");if(!m)continue;let g=m.data,h=p.startsWith("/")?p.slice(1):p;c[h]=g;let x=r1(f);x.length>0&&(u[g]={...u[g],__appliedMixins:x});let y=f.find(b=>b.type==="aws:cdk:info"&&typeof b.data=="string"&&i1(b.data));if(y)try{let b=JSON.parse(y.data.slice(Qc.length)),{friendlyName:S,constructType:C,description:I,stackId:E,sourceLocation:w,parentPath:j,childCount:H,tags:z,version:q,logicalId:L,constructHierarchy:G,serviceCategory:k,dependencies:U,sensitiveProperties:V,usesDefaults:se,l2ConstructType:Y,l2ConstructId:Z,createdBy:ee,rootSourceLocation:le,searchHint:Ce}=b;O9(q,p);let K={...u[g]};S&&(K.__friendlyName=S),C&&(K.__constructType=C),I&&(K.__description=I),E&&(K.__stackId=n),w&&(K.__sourceLocation=w),j&&(K.__parentPath=j),H!==void 0&&(K.__childCount=H),z&&Object.keys(z).length>0&&(K.__tags=z),q&&(K.__metadataVersion=q),L&&(K.__logicalId=L),G?.length>0&&(K.__constructHierarchy=G),k&&(K.__serviceCategory=k),U?.length>0&&(K.__dependencies=U),V?.length>0&&(K.__sensitiveProperties=V),se!==void 0&&(K.__usesDefaults=se),Y&&(K.__l2ConstructType=Y),Z&&(K.__l2ConstructId=Z),ee&&(K.__createdBy=ee),le&&(K.__rootSourceLocation=le),Ce&&(K.__searchHint=Ce),u[g]=K}catch(b){ke.warn(`Failed to parse cdk-insights metadata for ${p}:`,{error:b})}}let d={};for(let[p,f]of Object.entries(a)){let m=f.find(I=>I.type==="aws:cdk:logicalId"&&typeof I.data=="string");if(!m)continue;let g=m.data,h=[],x=f.find(I=>I.type==="aws:cdk:info"&&typeof I.data=="string"&&i1(I.data));if(x)try{let I=JSON.parse(x.data.slice(Qc.length));Array.isArray(I.issues)&&(h=I.issues.map(E=>({resourceId:E.resourceId,issue:E.issue,recommendation:E.recommendation,severity:E.severity,wafPillar:E.wafPillar,foundBy:"cdkInsights",constructPath:p,stackId:u[g]?.__stackId,constructType:u[g]?.__constructType,githubUrl:s[g]?.__github,docUrl:s[g]?.__docs})))}catch(I){ke.warn(`Failed to parse cdk-insights metadata for ${p}:`,{error:I})}let y=f.filter(I=>(I.type==="aws:cdk:error"||I.type==="aws:cdk:warning")&&typeof I.data=="string"&&XI(I.data)).map(I=>{let E=I.data,w=QI(E),j=Yc(I.type,w);return{resourceId:g,issue:E,recommendation:void 0,severity:j,wafPillar:Jc(w),foundBy:"cdkNag",constructPath:p,ruleId:w,stackId:u[g]?.__stackId,constructType:u[g]?.__constructType,githubUrl:s[g]?.__github,docUrl:iy(w)||s[g]?.__docs}}),b=[];for(let I of f)if(I.type==="aws:cdk:info"&&typeof I.data=="string"&&P9(I.data))try{let E=JSON.parse(I.data.slice(oy.length)),w=E.level==="Error"?"aws:cdk:error":"aws:cdk:warning",j=Yc(w,E.ruleId);b.push({resourceId:g,issue:`${E.ruleId}${E.findingId?`[${E.findingId}]`:""}: ${E.ruleInfo}`,recommendation:E.ruleExplanation,severity:j,wafPillar:Jc(E.ruleId),foundBy:"cdkNag",constructPath:p,ruleId:E.ruleId,stackId:u[g]?.__stackId,constructType:u[g]?.__constructType,githubUrl:s[g]?.__github,docUrl:iy(E.ruleId)||s[g]?.__docs})}catch(E){ke.warn(`Failed to parse cdk-insights nag finding for ${p}:`,{error:E})}let S=[...y,...b],C=u[g];d[g]={resourceId:g,friendlyName:C?.__friendlyName||g,cdkPath:p,locationHint:p,type:s[g]?.Type,isGenerated:!1,constructType:C?.__constructType,parentPath:C?.__parentPath,childCount:C?.__childCount,tags:C?.__tags,sourceLocation:C?.__sourceLocation,logicalId:g,constructHierarchy:C?.__constructHierarchy,serviceCategory:C?.__serviceCategory,dependencies:C?.__dependencies,sensitiveProperties:C?.__sensitiveProperties,usesDefaults:C?.__usesDefaults,l2ConstructType:C?.__l2ConstructType,l2ConstructId:C?.__l2ConstructId,createdBy:C?.__createdBy,rootSourceLocation:C?.__rootSourceLocation,searchHint:C?.__searchHint,appliedMixins:C?.__appliedMixins,sources:{cdkInsights:{issues:h},cdkNag:{issues:S}}}}if(Object.keys(d).length===0)for(let p of Object.keys(u))d[p]={resourceId:p,friendlyName:p,cdkPath:p,isGenerated:!1,sources:{cdkInsights:{issues:[]},cdkNag:{issues:[]}}};return{pathToLogicalId:c,unifiedResourceMap:u,resourceIdMetadata:r,recommendationMap:d,acknowledgements:l}}catch(i){return ke.error("\u26A0\uFE0F Failed to parse manifest.json for logical ID mappings:",{error:i}),ke.warn("Unknown error in parseManifestMetadata",{error:i}),{pathToLogicalId:e,unifiedResourceMap:s,resourceIdMetadata:r,recommendationMap:{},acknowledgements:[]}}};var lr=te(require("node:fs")),up=te(require("node:path"));function M9(t){let e=up.join(t,"manifest.json");if(!lr.existsSync(e))return{};let s=JSON.parse(lr.readFileSync(e,"utf8")),n={};for(let r of Object.values(s.artifacts)){if(r.type!=="cdk:asset-manifest")continue;let i=r.properties.file,o=up.join(t,i);if(!lr.existsSync(o))continue;let a=JSON.parse(lr.readFileSync(o,"utf8"));for(let[c,u]of Object.entries(a.files||{}))n[c]=u.displayName}return n}function c1(t){let e={},s={},n={},r={},i=M9(t),o=lr.readdirSync(t).filter(a=>a.endsWith(".template.json"));for(let a of o){let c=a.replace(/\.template\.json$/,""),u=JSON.parse(lr.readFileSync(up.join(t,a),"utf8"));e[c]=u;for(let[l,d]of Object.entries(u.Resources||{})){if(new Set(["CDKMetadata","BootstrapVersion","CheckBootstrapVersion"]).has(l)||d.Type?.startsWith("AWS::CDK::")||d.Type==="AWS::SSM::Parameter")continue;let f={...d,displayName:l},m=f.Metadata??{};typeof m["aws:cdk:path"]=="string"&&(s[m["aws:cdk:path"]]=l);let g=m["aws:asset:path"],h=typeof g=="string"?g.replace(/^asset\./,""):void 0;if(h&&i[h])f.displayName=i[h];else if(typeof m["aws:cdk:path"]=="string"){let x=m["aws:cdk:path"].split("/"),y=x[x.length-1],b=y==="Resource"&&x.length>1?x[x.length-2]:y;f.displayName=b}n[l]=f,r[l]=f.displayName??l}}return{stacks:e,pathToLogicalId:s,unifiedResourceMap:n,displayNameMap:r,assetSourcePaths:Object.fromEntries(Object.entries(n).filter(([,a])=>a.Metadata?.["aws:asset:path"]).map(([a,c])=>[a,c.Metadata["aws:asset:path"]]))}}var lp=te(require("node:fs"));var B9=["cdk-nag","cdk-monitoring-constructs","cdk-watchful","@cdk-cosmos/","@aws-cdk-containers/","@aws-prototyping-sdk/"],N9=t=>t.startsWith("aws-cdk-lib.aws_")||t.startsWith("aws-cdk-lib.core.")||t.startsWith("aws-cdk-lib/aws-")||/^@aws-cdk\/aws[-_]/.test(t)||/^@aws-cdk\/core/.test(t),W9=t=>t.startsWith("@aws-solutions-constructs/"),$9=t=>B9.some(e=>t.startsWith(e)||t.startsWith(`${e}.`)),j9=t=>{let e=t.split(".");return e[e.length-1]??""},u1=t=>!t||typeof t!="string"?"unknown":j9(t).startsWith("Cfn")?"L1":W9(t)?"L3-aws-solutions":$9(t)?"L3-third-party":N9(t)?"L2":"L3-custom";var l1=t=>{let e="https://github.com/aws/aws-cdk/blob/main/packages",s="https://docs.aws.amazon.com/cdk/api/v2/docs",n=t.split(".");if(n.length<3)return{githubUrl:null,docUrl:null,constructName:null};let[,r,...i]=n,o=`${e}/aws-cdk-lib/${r}/lib/${i.join("/")}.ts`,a=`${s}/${t}.html`;return{githubUrl:o,docUrl:a,constructName:i[0]}};var d1=(t,e)=>{let s=`${t}/tree.json`;if(!lp.existsSync(s))return{pathToLogicalId:e,resourceIdMetadata:{}};let n=JSON.parse(lp.readFileSync(s,"utf-8")),i=(n.tree?.children?Object.values(n.tree.children):[n]).map(d=>({node:d,parentPath:""})),o=[];for(;i.length;){let d=i.pop();if(!d)continue;let{node:p,parentPath:f}=d,m=f?`${f}/${p.id}`:p.id,g=m.replace(/^\/+/,""),h=e[g],x=p.constructInfo?.fqn,y=p.attributes?.["aws:cdk:cloudformation:props"],b=y&&typeof y.description=="string"?y.description:void 0;if(o.push({logicalId:h,path:m,fqn:x,description:b}),p.children)for(let S of Object.values(p.children))i.push({node:S,parentPath:m})}let a={},c={},u={},l=d=>(c[d]||(c[d]={githubUrl:"",docUrl:"",constructName:"",constructLevel:"unknown"}),c[d]);for(let{logicalId:d,path:p,fqn:f,description:m}of o)if(d){if(a[p]=d,f){let g=l(d);g.fqn=f,g.constructLevel=u1(f);let{githubUrl:h,docUrl:x,constructName:y}=l1(f);h&&(g.githubUrl=h),x&&(g.docUrl=x,y&&(g.constructName=y))}m&&(u[d]=m)}return{pathToLogicalId:{...e,...a},resourceIdMetadata:c,autoGeneratedDescriptions:u}};var ay="cdk.out",dp=t=>{let e=MI({stackName:t,extractInlineNagFindings:e1}),s=Pa(ay),{context:n}=s1(),{stacks:r,pathToLogicalId:i,unifiedResourceMap:o,assetSourcePaths:a}=c1(ay),{pathToLogicalId:c,resourceIdMetadata:u,autoGeneratedDescriptions:l}=d1(ay,i),d={...i,...c},p=n1(o,l),f=t?r[t]?{[t]:r[t]}:{}:r,m={},g=Object.fromEntries(Object.entries(f).map(([y,b])=>{let{recommendationMap:S,unifiedResourceMap:C,acknowledgements:I}=a1(s,d,p,y,u);m[y]=I;let E={...p,...C};for(let[H,z]of Object.entries(b.Resources??{})){let q=E[H]?.__appliedMixins;q&&q.length>0&&(z.__appliedMixins=q)}let w=Object.fromEntries(Object.keys(b.Resources??{}).map(H=>[H,S[H]??{resourceId:H,friendlyName:d[H]??H,cdkPath:H,isGenerated:!1,sources:{cdkInsights:{issues:[]},cdkNag:{issues:[]}}}])),j=YI(w,d,E,b,u);return[y,j]})),{version:h,supportsBoxTraces:x}=lo();return{stacks:f,inlineFindings:e,pathToLogicalId:d,recommendationMapPerStack:g,assetSourcePaths:a,acknowledgementsPerStack:m,cdkVersion:h,supportsBoxTraces:x,cdkContext:n,resourceIdMetadata:u}};var g_=te(require("node:fs"));var La=(t,e)=>{let s=[];if(t==null)return s;if(typeof t=="string"){let n=t.matchAll(/\$\{([^.}]+)(?:\.[^}]+)?\}/g);for(let r of n){let i=r[1];e.has(i)&&s.push(i)}return s}if(Array.isArray(t)){for(let n of t)s.push(...La(n,e));return s}if(typeof t=="object"){let n=t;if("Ref"in n&&typeof n.Ref=="string"&&e.has(n.Ref)&&s.push(n.Ref),"Fn::GetAtt"in n){let r=n["Fn::GetAtt"];if(Array.isArray(r)&&typeof r[0]=="string")e.has(r[0])&&s.push(r[0]);else if(typeof r=="string"){let i=r.split(".")[0];e.has(i)&&s.push(i)}}if("Fn::Sub"in n){let r=n["Fn::Sub"];Array.isArray(r)?(s.push(...La(r[0],e)),r[1]&&typeof r[1]=="object"&&s.push(...La(r[1],e))):s.push(...La(r,e))}for(let[r,i]of Object.entries(n))["Ref","Fn::GetAtt","Fn::Sub"].includes(r)||s.push(...La(i,e))}return s},U9=t=>t.DependsOn?Array.isArray(t.DependsOn)?t.DependsOn:[t.DependsOn]:[],G9=(t,e)=>{if(e.length===0)return;let s=new Set(e.map(i=>i.type.split("::")[2]||i.type)),n=Array.from(s).slice(0,3),r=t.split("::")[2]||t;if(t.includes("SecurityGroup"))return`Security group attached to: ${n.join(", ")}`;if(t.includes("IAM::Role"))return`IAM role assumed by: ${n.join(", ")}`;if(t.includes("VPC")||t.includes("Subnet"))return`Network hosting: ${n.join(", ")}`;if(t.includes("KMS::Key"))return`Encryption key used by: ${n.join(", ")}`;if(t.includes("S3::Bucket")){if(n.some(i=>i.includes("Lambda")))return"S3 bucket accessed by Lambda functions";if(n.some(i=>i.includes("CloudFront")))return"S3 bucket serving as CloudFront origin"}if(t.includes("DynamoDB::Table")&&n.some(i=>i.includes("Lambda")))return"DynamoDB table accessed by Lambda functions";if(e.length>0)return`Referenced by ${e.length} resource${e.length>1?"s":""}: ${n.join(", ")}`},po=t=>{let e=new Set(Object.keys(t)),s={};for(let n of e)s[n]={dependencies:[],dependents:[]};for(let[n,r]of Object.entries(t)){let i=U9(r),o=La(r.Properties,e),a=[...new Set([...i,...o])];s[n].dependencies=a;for(let c of a)s[c]&&s[c].dependents.push(n)}for(let[n,r]of Object.entries(t)){let i=s[n],o=i.dependents.map(a=>({id:a,type:t[a]?.Type||"Unknown"}));i.usageDescription=G9(r.Type,o)}return s},pp=(t,e,s)=>{let n=e[t];if(!n)return{dependencies:[],dependents:[]};let r=n.dependencies.map(o=>{let a=s[o]?.Type?.split("::")[2]||o;return`${o} (${a})`}),i=n.dependents.map(o=>{let a=s[o]?.Type?.split("::")[2]||o;return`${o} (${a})`});return{dependencies:r,dependents:i,usageDescription:n.usageDescription}};var H9=(t,e,s)=>{let n={},r=new Set(["AWS::RDS::DBInstance","AWS::RDS::DBCluster","AWS::ElastiCache::CacheCluster","AWS::ElastiCache::ReplicationGroup","AWS::Redshift::Cluster","AWS::OpenSearchService::Domain","AWS::Elasticsearch::Domain","AWS::ECS::Service"]),i=new Set(Object.entries(t).filter(([,o])=>r.has(o.Type)).map(([o])=>o));for(let[o,a]of Object.entries(t)){if(a.Type!=="AWS::Lambda::Function")continue;let c=a.Properties||{},u=!!(c.VpcConfig&&(c.VpcConfig.SubnetIds||c.VpcConfig.SecurityGroupIds)),l=e[o];if(!l)continue;if(l.dependencies.some(p=>i.has(p))&&!u){n[o]||(n[o]={issues:[]});let p=l.dependencies.filter(f=>i.has(f));n[o].issues.push(s(o,`Lambda function references VPC resources (${p.join(", ")}) but is not VPC-enabled`,"Configure VpcConfig with appropriate SubnetIds and SecurityGroupIds to allow the Lambda function to connect to VPC resources. Without VPC configuration, the function cannot reach private resources like RDS databases.","HIGH","Reliability",a.Metadata?.["aws:cdk:path"]||o,"cdkInsights"))}}return n},z9=(t,e)=>{let s={},n=new Map;for(let[r,i]of Object.entries(t)){if(i.Type!=="AWS::S3::Bucket")continue;let o=i.Properties||{},a=!!(o.BucketEncryption||o.ServerSideEncryptionConfiguration);n.set(r,a)}for(let[r,i]of Object.entries(t)){if(i.Type!=="AWS::S3::Bucket")continue;let a=(i.Properties||{}).ReplicationConfiguration;if(!a)continue;let c=n.get(r),u=a.Rules;if(!(!u||!Array.isArray(u)))for(let l of u){if(l.Status!=="Enabled")continue;let d=l.Destination;if(!d||!d.Bucket)continue;let f=d.EncryptionConfiguration;c&&!f&&(s[r]||(s[r]={issues:[]}),s[r].issues.push(e(r,"S3 replication configured without encryption configuration for replicated objects","Specify EncryptionConfiguration in the replication rule to ensure replicated objects maintain encryption. Use ReplicaKmsKeyID to specify the KMS key for encrypting replicated objects in the destination bucket.","MEDIUM","Security",i.Metadata?.["aws:cdk:path"]||r,"cdkInsights")))}}return s},V9=(t,e,s)=>{let n={},r=new Set([80,443,8080,8443]);for(let[i,o]of Object.entries(t)){if(o.Type!=="AWS::EC2::SecurityGroup")continue;let c=(o.Properties||{}).SecurityGroupIngress||[],u=e[i];if(!(u&&u.dependents.length>0))continue;let d=[];for(let p of c){let f=p.CidrIp,m=p.CidrIpv6,g=p.FromPort,h=p.ToPort;if(!(f==="0.0.0.0/0"||m==="::/0")||g===void 0)continue;let y=h!==void 0&&h!==g,b=!r.has(g);(y||b)&&d.push(g)}if(d.length>0){n[i]||(n[i]={issues:[]});let p=u.dependents.map(f=>t[f]?.Type?.split("::")[2]||"Unknown").join(", ");n[i].issues.push(s(i,`Security group used by ${p} has public access on non-standard ports: ${d.join(", ")}`,"Restrict ingress rules to specific CIDR blocks or reference other security groups instead of allowing 0.0.0.0/0 on non-standard ports. Consider using a bastion host or VPN for administrative access.","HIGH","Security",o.Metadata?.["aws:cdk:path"]||i,"cdkInsights"))}}return n},fp=(t,e)=>{let s=t.Resources||{},n=po(s),r={},i=[H9(s,n,e),z9(s,e),V9(s,n,e)];for(let o of i)for(let[a,c]of Object.entries(o))r[a]||(r[a]={issues:[]}),r[a].issues.push(...c.issues);return r};var q9=t=>{let e=[],s=Object.values(t).map(w=>w.Type),n={};for(let w of s)n[w]=(n[w]||0)+1;let r=s.some(w=>w==="AWS::Lambda::Function"),i=s.some(w=>w==="AWS::ApiGateway::RestApi"||w==="AWS::ApiGatewayV2::Api"),o=s.some(w=>w==="AWS::DynamoDB::Table"),a=s.some(w=>w==="AWS::S3::Bucket");r&&(o||a)&&!s.some(w=>w.includes("ECS")||w.includes("EC2::Instance"))&&e.push("serverless");let c=s.some(w=>w==="AWS::ECS::Service"||w==="AWS::ECS::TaskDefinition"||w==="AWS::ECS::Cluster"),u=s.some(w=>w.startsWith("AWS::EKS::"));(c||u)&&e.push("container-based");let l=s.some(w=>w.startsWith("AWS::Events::")),d=s.some(w=>w==="AWS::SNS::Topic"),p=s.some(w=>w==="AWS::SQS::Queue"),f=s.some(w=>w.startsWith("AWS::Kinesis::")),m=s.some(w=>w.startsWith("AWS::StepFunctions::"));(l||d||p||f||m)&&r&&e.push("event-driven"),i&&e.push("api-gateway");let g=s.some(w=>w.startsWith("AWS::Glue::")),h=s.some(w=>w.startsWith("AWS::Athena::")),x=s.some(w=>w.startsWith("AWS::EMR::"));(f||g||h||x)&&e.push("data-processing");let y=s.some(w=>w==="AWS::CloudFront::Distribution");a&&y&&!r&&!c&&e.push("static-website");let b=n["AWS::Lambda::Function"]||0,S=n["AWS::ECS::Service"]||0;(b>=3||S>=2)&&e.push("microservices");let C=s.some(w=>w==="AWS::EC2::Instance"),I=s.some(w=>w==="AWS::RDS::DBInstance"||w==="AWS::RDS::DBCluster"),E=s.some(w=>w==="AWS::ElasticLoadBalancingV2::LoadBalancer");return C&&(I||E)&&e.push("traditional"),e},K9=(t,e)=>{let s={},n=Object.values(t).map(l=>l.Type),r=n.some(l=>l==="AWS::CloudWatch::Alarm"),i=n.some(l=>l==="AWS::Lambda::Function"),o=n.some(l=>l==="AWS::ECS::Service"),a=n.some(l=>l==="AWS::RDS::DBInstance"||l==="AWS::RDS::DBCluster");(i||o||a)&&!r&&(s["Stack Architecture"]={issues:[e("Stack Architecture","No CloudWatch Alarms defined for critical resources","Add CloudWatch Alarms to monitor key metrics like Lambda errors, ECS task failures, or RDS connections. Consider using CDK's built-in alarm methods or aws-cdk-lib/aws-cloudwatch.","MEDIUM","Operational Excellence","Stack Architecture","cdkInsights")]});let c=n.some(l=>l==="AWS::XRay::Group"||l==="AWS::XRay::SamplingRule");return n.filter(l=>l==="AWS::Lambda::Function").length>=3&&!c&&(s["Stack Architecture"]||(s["Stack Architecture"]={issues:[]}),s["Stack Architecture"].issues.push(e("Stack Architecture","Multiple Lambda functions without X-Ray tracing configuration","Enable X-Ray tracing for your Lambda functions to gain visibility into distributed request flows and identify performance bottlenecks. Set tracing: lambda.Tracing.ACTIVE on your functions.","LOW","Operational Excellence","Stack Architecture","cdkInsights"))),s},Z9=(t,e)=>{let s={},n=Object.values(t).map(p=>p.Type),r=n.some(p=>p==="AWS::ApiGateway::RestApi"||p==="AWS::ApiGatewayV2::Api"),i=n.some(p=>p==="AWS::ElasticLoadBalancingV2::LoadBalancer"),o=n.some(p=>p==="AWS::CloudFront::Distribution"),a=n.some(p=>p==="AWS::WAFv2::WebACL"||p==="AWS::WAF::WebACL");(r||i||o)&&!a&&(s["Stack Architecture"]||(s["Stack Architecture"]={issues:[]}),s["Stack Architecture"].issues.push(e("Stack Architecture","Public-facing resources without WAF protection","Consider adding AWS WAF to protect your API Gateway, ALB, or CloudFront distribution from common web exploits. WAF can help prevent SQL injection, XSS, and rate-limit malicious traffic.","MEDIUM","Security","Stack Architecture","cdkInsights")));let c=n.some(p=>p==="AWS::SecretsManager::Secret"),u=n.some(p=>p==="AWS::SSM::Parameter"),l=n.some(p=>p==="AWS::RDS::DBInstance"||p==="AWS::RDS::DBCluster"),d=!1;for(let[p,f]of Object.entries(t))if(f.Type==="AWS::Lambda::Function"){let m=f.Properties?.Environment?.Variables;if(m){let g=["PASSWORD","SECRET","API_KEY","TOKEN","CREDENTIAL"];for(let h of Object.keys(m))if(g.some(x=>h.toUpperCase().includes(x))){let x=m[h];if(typeof x=="string"&&!x.startsWith("{{")){d=!0;break}}}}return l&&!c&&!u&&(s["Stack Architecture"]||(s["Stack Architecture"]={issues:[]}),s["Stack Architecture"].issues.push(e("Stack Architecture","RDS database without Secrets Manager for credential rotation","Use AWS Secrets Manager to store and automatically rotate database credentials. This improves security by eliminating hardcoded passwords and enabling automatic credential rotation.","HIGH","Security","Stack Architecture","cdkInsights"))),s},Y9=(t,e)=>{let s={},n=Object.values(t).filter(u=>u.Type==="AWS::EC2::NatGateway").length;n>=3&&(s["Stack Architecture"]||(s["Stack Architecture"]={issues:[]}),s["Stack Architecture"].issues.push(e("Stack Architecture",`${n} NAT Gateways detected - potential cost optimization`,"Multiple NAT Gateways can be expensive ($32/month each + data processing). Consider if all are necessary, or explore alternatives like NAT instances for dev environments, or VPC endpoints for AWS services.","MEDIUM","Cost Optimization","Stack Architecture","cdkInsights")));let r=n>0,i=Object.values(t).some(u=>u.Type==="AWS::EC2::VPCEndpoint"),o=Object.values(t).some(u=>{if(u.Type!=="AWS::Lambda::Function")return!1;let l=u.Properties?.VpcConfig;return l?.SubnetIds||l?.SecurityGroupIds}),a=Object.values(t).some(u=>u.Type==="AWS::S3::Bucket"),c=Object.values(t).some(u=>u.Type==="AWS::DynamoDB::Table");return o&&r&&!i&&(a||c)&&(s["Stack Architecture"]||(s["Stack Architecture"]={issues:[]}),s["Stack Architecture"].issues.push(e("Stack Architecture","VPC Lambda functions accessing AWS services through NAT Gateway","Consider using VPC Endpoints (Gateway endpoints for S3/DynamoDB are free) instead of routing AWS service traffic through NAT Gateway. This reduces costs and improves latency.","LOW","Cost Optimization","Stack Architecture","cdkInsights"))),s},J9=(t,e,s)=>{let n={};for(let[r,i]of Object.entries(e)){let o=t[r];if(!o)continue;let a=i.dependents.length;if(a>=5){let c=o.Type.split("::")[2]||o.Type;n["Stack Architecture"]||(n["Stack Architecture"]={issues:[]}),n["Stack Architecture"].issues.push(s("Stack Architecture",`${c} (${r}) is a potential single point of failure with ${a} dependent resources`,"Consider adding redundancy or failover mechanisms for this critical resource. For databases, consider Multi-AZ. For queues, consider dead-letter queues. For Lambda, ensure proper error handling.","MEDIUM","Reliability","Stack Architecture","cdkInsights"))}}for(let[r,i]of Object.entries(t)){if(i.Type!=="AWS::DynamoDB::Table")continue;if(i.Properties?.PointInTimeRecoverySpecification?.PointInTimeRecoveryEnabled!==!0){let a=e[r];a&&a.dependents.length>=3&&(n["Stack Architecture"]||(n["Stack Architecture"]={issues:[]}),n["Stack Architecture"].issues.push(s("Stack Architecture",`Critical DynamoDB table ${r} has ${a.dependents.length} dependents but no point-in-time recovery`,"Enable Point-in-Time Recovery (PITR) for critical DynamoDB tables used by multiple resources. This provides continuous backups with 35-day retention.","HIGH","Reliability","Stack Architecture","cdkInsights")))}}return n},mp=(t,e)=>{let s=t.Resources||{};if(Object.keys(s).length<3)return{};let r=po(s),i=q9(s),o={},a=[K9(s,e),Z9(s,e),Y9(s,e),J9(s,r,e)];for(let c of a)for(let[u,l]of Object.entries(c))o[u]||(o[u]={issues:[]}),o[u].issues.push(...l.issues);return o};var hp=require("node:fs"),Xc=require("node:path");function p1(){let t=require.resolve("@aws-solutions-constructs/core/package.json"),e=(0,Xc.dirname)((0,Xc.dirname)(t));return(0,hp.readdirSync)(e).filter(s=>s!=="core"&&s.startsWith("aws-")&&(0,hp.statSync)((0,Xc.join)(e,s)).isDirectory())}var f1={"aws-apigateway-dynamodb":{className:"ApiGatewayToDynamoDB",packageName:"aws-apigateway-dynamodb",friendlyName:"Api Gateway To Dynamo DB",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-dynamodb/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-dynamodb",requiredResourceTypes:["AWS::DynamoDB::Table","AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Resource","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::IAM::Role","AWS::ApiGateway::Account","AWS::IAM::Policy"]},"aws-apigateway-kinesisstreams":{className:"ApiGatewayToKinesisStreams",packageName:"aws-apigateway-kinesisstreams",friendlyName:"Api Gateway To Kinesis Streams",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-kinesisstreams/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-kinesisstreams",requiredResourceTypes:["AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Resource","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::ApiGateway::RequestValidator","AWS::ApiGateway::Model","AWS::IAM::Role","AWS::ApiGateway::Account","AWS::IAM::Policy","AWS::CloudWatch::Alarm","AWS::Kinesis::Stream"]},"aws-apigateway-lambda":{className:"ApiGatewayToLambda",packageName:"aws-apigateway-lambda",friendlyName:"Api Gateway To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Resource","AWS::Lambda::Permission","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::ApiGateway::Account"]},"aws-apigateway-sqs":{className:"ApiGatewayToSqs",packageName:"aws-apigateway-sqs",friendlyName:"Api Gateway To Sqs",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-sqs",requiredResourceTypes:["AWS::SQS::Queue","AWS::SQS::QueuePolicy","AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::IAM::Role","AWS::ApiGateway::Account","AWS::IAM::Policy"]},"aws-apigatewayv2websocket-sqs":{className:"ApiGatewayV2WebSocketToSqs",packageName:"aws-apigatewayv2websocket-sqs",friendlyName:"Api Gateway V2 Web Socket To Sqs",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigatewayv2websocket-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigatewayv2websocket-sqs",requiredResourceTypes:["AWS::SQS::Queue","AWS::SQS::QueuePolicy","AWS::IAM::Role","AWS::IAM::Policy","AWS::ApiGatewayV2::Api","AWS::ApiGatewayV2::Integration","AWS::ApiGatewayV2::Route","AWS::ApiGatewayV2::Stage","AWS::Logs::LogGroup"]},"aws-cloudfront-apigateway-lambda":{className:"CloudFrontToApiGatewayToLambda",packageName:"aws-cloudfront-apigateway-lambda",friendlyName:"Cloud Front To Api Gateway To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cloudfront-apigateway-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cloudfront-apigateway-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Resource","AWS::Lambda::Permission","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::ApiGateway::Account","AWS::CloudFront::Function","AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::CloudFront::Distribution"]},"aws-cloudfront-mediastore":{className:"CloudFrontToMediaStore",packageName:"aws-cloudfront-mediastore",friendlyName:"Cloud Front To Media Store",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cloudfront-mediastore/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cloudfront-mediastore",requiredResourceTypes:["AWS::CloudFront::CloudFrontOriginAccessIdentity","AWS::MediaStore::Container","AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::CloudFront::OriginRequestPolicy","AWS::CloudFront::Function","AWS::CloudFront::Distribution"]},"aws-cloudfront-oai-s3":{className:"CloudFrontToOaiToS3",packageName:"aws-cloudfront-oai-s3",friendlyName:"Cloud Front To Oai To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cloudfront-oai-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cloudfront-oai-s3",requiredResourceTypes:["AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::CloudFront::Function","AWS::CloudFront::CloudFrontOriginAccessIdentity","AWS::CloudFront::Distribution"]},"aws-cloudfront-s3":{className:"CloudFrontToS3",packageName:"aws-cloudfront-s3",friendlyName:"Cloud Front To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cloudfront-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cloudfront-s3",requiredResourceTypes:["AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::CloudFront::Function","AWS::CloudFront::OriginAccessControl","AWS::CloudFront::Distribution"]},"aws-cognito-apigateway-lambda":{className:"CognitoToApiGatewayToLambda",packageName:"aws-cognito-apigateway-lambda",friendlyName:"Cognito To Api Gateway To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cognito-apigateway-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cognito-apigateway-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Resource","AWS::Lambda::Permission","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::ApiGateway::Account","AWS::Cognito::UserPool","AWS::Cognito::UserPoolClient","AWS::ApiGateway::Authorizer"]},"aws-dynamodbstreams-lambda":{className:"DynamoDBStreamsToLambda",packageName:"aws-dynamodbstreams-lambda",friendlyName:"Dynamo DBStreams To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-dynamodbstreams-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-dynamodbstreams-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::Lambda::EventSourceMapping","AWS::DynamoDB::Table","AWS::SQS::Queue","AWS::SQS::QueuePolicy"]},"aws-kinesisfirehose-s3":{className:"KinesisFirehoseToS3",packageName:"aws-kinesisfirehose-s3",friendlyName:"Kinesis Firehose To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-kinesisfirehose-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-kinesisfirehose-s3",requiredResourceTypes:["AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::Logs::LogGroup","AWS::Logs::LogStream","AWS::IAM::Role","AWS::IAM::Policy","AWS::KinesisFirehose::DeliveryStream"]},"aws-kinesisstreams-kinesisfirehose-s3":{className:"KinesisStreamsToKinesisFirehoseToS3",packageName:"aws-kinesisstreams-kinesisfirehose-s3",friendlyName:"Kinesis Streams To Kinesis Firehose To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-kinesisstreams-kinesisfirehose-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-kinesisstreams-kinesisfirehose-s3",requiredResourceTypes:["AWS::Kinesis::Stream","AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::Logs::LogGroup","AWS::Logs::LogStream","AWS::IAM::Role","AWS::IAM::Policy","AWS::KinesisFirehose::DeliveryStream","AWS::CloudWatch::Alarm"]},"aws-s3-lambda":{className:"S3ToLambda",packageName:"aws-s3-lambda",friendlyName:"S3 To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-s3-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-s3-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::S3::Bucket","AWS::S3::BucketPolicy","Custom::S3BucketNotifications","AWS::Lambda::Permission"]},"aws-s3-sns":{className:"S3ToSns",packageName:"aws-s3-sns",friendlyName:"S3 To Sns",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-s3-sns/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-s3-sns",requiredResourceTypes:["AWS::S3::Bucket","AWS::S3::BucketPolicy","Custom::S3BucketNotifications","AWS::KMS::Key","AWS::SNS::Topic","AWS::SNS::TopicPolicy","AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function"]},"aws-s3-sqs":{className:"S3ToSqs",packageName:"aws-s3-sqs",friendlyName:"S3 To Sqs",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-s3-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-s3-sqs",requiredResourceTypes:["AWS::S3::Bucket","AWS::S3::BucketPolicy","Custom::S3BucketNotifications","AWS::SQS::Queue","AWS::SQS::QueuePolicy","AWS::KMS::Key","AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function"]},"aws-sns-lambda":{className:"SnsToLambda",packageName:"aws-sns-lambda",friendlyName:"Sns To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-sns-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-sns-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::Lambda::Permission","AWS::SNS::Subscription","AWS::SNS::Topic","AWS::SNS::TopicPolicy"]},"aws-sns-sqs":{className:"SnsToSqs",packageName:"aws-sns-sqs",friendlyName:"Sns To Sqs",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-sns-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-sns-sqs",requiredResourceTypes:["AWS::SNS::Topic","AWS::SNS::TopicPolicy","AWS::SQS::Queue","AWS::SQS::QueuePolicy","AWS::SNS::Subscription","AWS::KMS::Key"]},"aws-eventbridge-kinesisstreams":{className:"EventbridgeToKinesisStreams",packageName:"aws-eventbridge-kinesisstreams",friendlyName:"EventBridge To Kinesis Streams",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-kinesisstreams/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-kinesisstreams",requiredResourceTypes:["AWS::Events::Rule","AWS::Kinesis::Stream"]},"aws-eventbridge-sns":{className:"EventbridgeToSns",packageName:"aws-eventbridge-sns",friendlyName:"EventBridge To SNS",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-sns/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-sns",requiredResourceTypes:["AWS::Events::Rule","AWS::SNS::Topic"]},"aws-eventbridge-sqs":{className:"EventbridgeToSqs",packageName:"aws-eventbridge-sqs",friendlyName:"EventBridge To SQS",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-sqs",requiredResourceTypes:["AWS::Events::Rule","AWS::SQS::Queue"]},"aws-eventbridge-stepfunctions":{className:"EventbridgeToStepfunctions",packageName:"aws-eventbridge-stepfunctions",friendlyName:"EventBridge To StepFunctions",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-stepfunctions/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-stepfunctions",requiredResourceTypes:["AWS::Events::Rule","AWS::StepFunctions::StateMachine"]},"aws-alb-fargate":{className:"AlbToFargate",packageName:"aws-alb-fargate",friendlyName:"ALB To Fargate",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-alb-fargate/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-alb-fargate",requiredResourceTypes:["AWS::ElasticLoadBalancingV2::LoadBalancer","AWS::ElasticLoadBalancingV2::Listener","AWS::ECS::Cluster","AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::IAM::Role","AWS::Logs::LogGroup"]},"aws-alb-lambda":{className:"AlbToLambda",packageName:"aws-alb-lambda",friendlyName:"ALB To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-alb-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-alb-lambda",requiredResourceTypes:["AWS::ElasticLoadBalancingV2::LoadBalancer","AWS::ElasticLoadBalancingV2::Listener","AWS::Lambda::Function","AWS::IAM::Role","AWS::Logs::LogGroup"]},"aws-apigateway-iot":{className:"ApiGatewayToIot",packageName:"aws-apigateway-iot",friendlyName:"API Gateway To IoT",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-iot/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-iot",requiredResourceTypes:["AWS::ApiGateway::RestApi","AWS::ApiGateway::Resource","AWS::ApiGateway::Method","AWS::IoT::TopicRule"]},"aws-apigateway-sagemakerendpoint":{className:"ApiGatewayToSagemakerendpoint",packageName:"aws-apigateway-sagemakerendpoint",friendlyName:"API Gateway To SageMaker Endpoint",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-sagemakerendpoint/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-sagemakerendpoint",requiredResourceTypes:["AWS::ApiGateway::RestApi","AWS::ApiGateway::Integration","AWS::SageMaker::Endpoint"]},"aws-cloudfront-apigateway":{className:"CloudFrontToApiGateway",packageName:"aws-cloudfront-apigateway",friendlyName:"CloudFront To API Gateway",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cloudfront-apigateway/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cloudfront-apigateway",requiredResourceTypes:["AWS::CloudFront::Distribution","AWS::ApiGateway::RestApi","AWS::ApiGateway::Method"]},"aws-dynamodbstreams-lambda-elasticsearch-kibana":{className:"DynamoDBStreamsToLambdaElasticsearchKibana",packageName:"aws-dynamodbstreams-lambda-elasticsearch-kibana",friendlyName:"DynamoDB Streams To Lambda Elasticsearch Kibana",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-dynamodbstreams-lambda-elasticsearch-kibana/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-dynamodbstreams-lambda-elasticsearch-kibana",requiredResourceTypes:["AWS::DynamoDB::Stream","AWS::Lambda::Function","AWS::Elasticsearch::Domain","AWS::IAM::Role","AWS::Logs::LogGroup"]},"aws-dynamodbstreams-pipes-stepfunctions":{className:"DynamoDBStreamsToPipesStepfunctions",packageName:"aws-dynamodbstreams-pipes-stepfunctions",friendlyName:"DynamoDB Streams To Pipes StepFunctions",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-dynamodbstreams-pipes-stepfunctions/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-dynamodbstreams-pipes-stepfunctions",requiredResourceTypes:["AWS::DynamoDB::Stream","AWS::StepFunctions::StateMachine"]},"aws-eventbridge-kinesisfirehose-s3":{className:"EventbridgeToKinesisfirehoseToS3",packageName:"aws-eventbridge-kinesisfirehose-s3",friendlyName:"EventBridge To Kinesis Firehose To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-kinesisfirehose-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-kinesisfirehose-s3",requiredResourceTypes:["AWS::Events::Rule","AWS::KinesisFirehose::DeliveryStream","AWS::S3::Bucket"]},"aws-eventbridge-lambda":{className:"EventbridgeToLambda",packageName:"aws-eventbridge-lambda",friendlyName:"EventBridge To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-lambda",requiredResourceTypes:["AWS::Events::Rule","AWS::Lambda::Function","AWS::IAM::Role"]},"aws-fargate-dynamodb":{className:"FargateToDynamodb",packageName:"aws-fargate-dynamodb",friendlyName:"Fargate To DynamoDB",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-dynamodb/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-dynamodb",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::DynamoDB::Table"]},"aws-fargate-eventbridge":{className:"FargateToEventbridge",packageName:"aws-fargate-eventbridge",friendlyName:"Fargate To EventBridge",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-eventbridge/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-eventbridge",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::Events::Rule"]},"aws-fargate-kinesisfirehose":{className:"FargateToKinesisfirehose",packageName:"aws-fargate-kinesisfirehose",friendlyName:"Fargate To Kinesis Firehose",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-kinesisfirehose/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-kinesisfirehose",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::KinesisFirehose::DeliveryStream"]},"aws-fargate-kinesisstreams":{className:"FargateToKinesisstreams",packageName:"aws-fargate-kinesisstreams",friendlyName:"Fargate To Kinesis Streams",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-kinesisstreams/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-kinesisstreams",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::Kinesis::Stream"]},"aws-fargate-opensearch":{className:"FargateToOpensearch",packageName:"aws-fargate-opensearch",friendlyName:"Fargate To OpenSearch",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-opensearch/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-opensearch",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::OpenSearch::Domain"]},"aws-fargate-s3":{className:"FargateToS3",packageName:"aws-fargate-s3",friendlyName:"Fargate To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-s3",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::S3::Bucket"]},"aws-fargate-secretsmanager":{className:"FargateToSecretsmanager",packageName:"aws-fargate-secretsmanager",friendlyName:"Fargate To SecretsManager",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-secretsmanager/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-secretsmanager",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::SecretsManager::Secret"]},"aws-fargate-sns":{className:"FargateToSns",packageName:"aws-fargate-sns",friendlyName:"Fargate To SNS",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-sns/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-sns",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::SNS::Topic"]},"aws-fargate-sqs":{className:"FargateToSqs",packageName:"aws-fargate-sqs",friendlyName:"Fargate To SQS",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-sqs",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::SQS::Queue"]},"aws-fargate-ssmstringparameter":{className:"FargateToSsmstringparameter",packageName:"aws-fargate-ssmstringparameter",friendlyName:"Fargate To SSM String Parameter",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-ssmstringparameter/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-ssmstringparameter",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::SSM::StringParameter"]},"aws-fargate-stepfunctions":{className:"FargateToStepfunctions",packageName:"aws-fargate-stepfunctions",friendlyName:"Fargate To StepFunctions",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-stepfunctions/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-stepfunctions",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::StepFunctions::StateMachine"]},"aws-iot-kinesisfirehose-s3":{className:"IotToKinesisfirehoseToS3",packageName:"aws-iot-kinesisfirehose-s3",friendlyName:"IoT To Kinesis Firehose To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-iot-kinesisfirehose-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-iot-kinesisfirehose-s3",requiredResourceTypes:["AWS::IoT::TopicRule","AWS::KinesisFirehose::DeliveryStream","AWS::S3::Bucket"]},"aws-iot-kinesisstreams":{className:"IotToKinesisstreams",packageName:"aws-iot-kinesisstreams",friendlyName:"IoT To Kinesis Streams",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-iot-kinesisstreams/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-iot-kinesisstreams",requiredResourceTypes:["AWS::IoT::TopicRule","AWS::Kinesis::Stream"]},"aws-iot-lambda":{className:"IotToLambda",packageName:"aws-iot-lambda",friendlyName:"IoT To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-iot-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-iot-lambda",requiredResourceTypes:["AWS::IoT::TopicRule","AWS::Lambda::Function","AWS::IAM::Role"]}};var m1=async t=>{let e={};for(let s of t)try{let n=await import(`@aws-solutions-constructs/${s}`),r=Object.keys(n).find(u=>/^[A-Z][a-zA-Z0-9]*To[A-Z][a-zA-Z0-9]*$/.test(u));if(!r)continue;let i=`https://docs.aws.amazon.com/solutions/latest/${s}/`,o=`https://github.com/awslabs/aws-solutions-constructs/tree/main/${s}`,c=f1[s]?.requiredResourceTypes||[];e[s]={className:r,packageName:s,friendlyName:r.replace(/([a-z0-9])([A-Z])/g,"$1 $2").trim(),documentationUrl:i,githubUrl:o,requiredResourceTypes:c}}catch{}return e};var P=(t,e)=>t.Metadata?.["aws:cdk:path"]??e;var h1={LOW:0,MEDIUM:1,HIGH:2,CRITICAL:3},T=(t,e)=>t?.resourceIdMetadata?.[e]?.constructLevel;var _=t=>t==="L3-aws-solutions"||t==="L3-third-party";var $=t=>{let e=h1[t]??0;return e<=0?"LOW":Object.entries(h1).find(([,s])=>s===e-1)?.[0]},D=(t,e,s)=>{if(!_(e))return t;let n=s?` Look for a \`${s}\` argument on the construct.`:"";return`${t} This resource is owned by an L3 pattern \u2014 fix via the pattern's props${n} rather than escape-hatching the underlying CFN resource.`},g1=(t,e)=>{let s=t?.cdkContext?.[e];return s===!0||s==="true"};var y1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CertificateManager::Certificate")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];return i.Properties?.ValidationMethod==="EMAIL"&&l.push(e(r,"ACM certificate uses email validation instead of DNS validation.",D("Use DNS validation for automated certificate renewal. Email validation requires manual intervention for renewals.",o),c("LOW"),"Operational Excellence",u,"cdkInsights")),i.Properties?.CertificateTransparencyLoggingPreference==="DISABLED"&&l.push(e(r,"ACM certificate has certificate transparency logging disabled.",D("Enable certificate transparency logging for security monitoring and to detect misissued certificates.",o),c("LOW"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var x1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::ApiGateway::RestApi"&&!i.Properties?.EndpointConfiguration?.Types?.includes("PRIVATE")){let o=T(s,r),a=_(o);n[r]={issues:[e(r,"API Gateway is publicly accessible.",D("If this API is intentionally public, ignore this finding (or suppress it via .cdk-insights.json). For internal APIs, use PRIVATE endpoints to restrict access.",o,"endpointConfiguration / endpointTypes"),a?"LOW":"MEDIUM","Security",P(i,r),"cdkInsights")]}}return n},{});var Q9=t=>typeof t=="string"&&t.toUpperCase()==="OPTIONS",b1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{let o=i.Type==="AWS::ApiGateway::Method",a=i.Type==="AWS::ApiGatewayV2::Route";if(!o&&!a)return n;let c=i.Properties??{},u=c.AuthorizationType;if(o&&Q9(c.HttpMethod)||!(u===void 0||u==="NONE"))return n;let d=P(i,r),p=T(s,r),f=_(p),m=o?"API Gateway Method has no authorization (AuthorizationType is NONE).":"API Gateway v2 Route has no authorization (AuthorizationType is NONE).";return n[r]={issues:[e(r,m,D("Set AuthorizationType to AWS_IAM, COGNITO_USER_POOLS, CUSTOM (REST), or JWT (HTTP API). Public-by-default endpoints expose backend Lambdas to anyone on the internet without authentication. If the route is intentionally public (e.g. a webhook receiver), prefer api-key + WAF rate limiting.",p,"methodOptions.authorizationType"),f?"MEDIUM":"HIGH","Security",d,"cdkInsights")]},n},{});var S1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::AppSync::GraphQLApi")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[],d=i.Properties?.AuthenticationType;d==="API_KEY"&&l.push(e(r,"AppSync API uses API key authentication.",D("Consider using AWS_IAM, AMAZON_COGNITO_USER_POOLS, or OPENID_CONNECT for production workloads. API keys are best for development or public read-only access.",o),c("MEDIUM"),"Security",u,"cdkInsights"));let p=i.Properties?.AdditionalAuthenticationProviders;return d!=="AWS_IAM"&&(!p||p.length===0)&&l.push(e(r,"AppSync API does not have multiple authentication providers configured.",D("Consider adding AdditionalAuthenticationProviders for flexibility in authenticating different client types.",o),c("LOW"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var v1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::AppSync::GraphQLApi")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[],d=i.Properties?.LogConfig;return d?d.FieldLogLevel==="NONE"&&l.push(e(r,"AppSync API has field-level logging disabled.",D("Set FieldLogLevel to ERROR or ALL to capture GraphQL resolver execution details.",o),c("LOW"),"Operational Excellence",u,"cdkInsights")):l.push(e(r,"AppSync API does not have logging configured.",D("Enable LogConfig to capture request/response logs in CloudWatch for debugging and monitoring.",o),c("MEDIUM"),"Operational Excellence",u,"cdkInsights")),i.Properties?.XrayEnabled!==!0&&l.push(e(r,"AppSync API does not have X-Ray tracing enabled.",D("Enable XrayEnabled for distributed tracing and performance analysis.",o),c("LOW"),"Operational Excellence",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var C1=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::AppSync::GraphQLApi"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::WAFv2::WebACLAssociation"),i=new Set(r.map(([,o])=>{let a=o.Properties?.ResourceArn;return typeof a=="string"?a:a?.["Fn::GetAtt"]?.[0]?a["Fn::GetAtt"][0]:null}).filter(Boolean));return n.reduce((o,[a,c])=>{let u=P(c,a);if(!i.has(a)){let d=T(s,a),p=_(d),f=m=>p?$(m):m;o[a]={issues:[e(a,"AppSync API does not have AWS WAF protection.",D("Associate a WAF WebACL to protect against common web exploits and control access to the API.",d),f("MEDIUM"),"Security",u,"cdkInsights")]}}return o},{})};var D1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Backup::BackupPlan")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[],p=i.Properties?.BackupPlan?.BackupPlanRule||[];for(let f of p){(f.CopyActions||[]).length===0&&l.push(e(r,`Backup rule "${f.RuleName||"unnamed"}" does not have cross-region copy configured.`,D("Add CopyActions to replicate backups to another region for disaster recovery.",o),c("LOW"),"Reliability",u,"cdkInsights"));let g=f.Lifecycle;!g?.DeleteAfterDays&&!g?.MoveToColdStorageAfterDays&&l.push(e(r,`Backup rule "${f.RuleName||"unnamed"}" has no lifecycle configuration.`,D("Set DeleteAfterDays or MoveToColdStorageAfterDays to manage backup retention and costs.",o),c("LOW"),"Cost Optimization",u,"cdkInsights"))}return l.length>0&&(n[r]={issues:l}),n},{});var w1=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Backup::BackupVault"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Backup::BackupVaultLock"),i=new Set(r.map(([,o])=>{let a=o.Properties?.BackupVaultName;return typeof a=="string"?a:typeof a=="object"&&a?.Ref?a.Ref:null}).filter(Boolean));return n.reduce((o,[a,c])=>{let u=T(s,a),l=_(u),d=y=>l?$(y):y,p=P(c,a),f=[];c.Properties?.EncryptionKeyArn||f.push(e(a,"Backup vault uses default AWS-managed encryption key.",D("Specify a customer-managed KMS key using EncryptionKeyArn for additional control over encryption.",u),d("LOW"),"Security",p,"cdkInsights"));let g=c.Properties?.BackupVaultName,h=typeof g=="string"?g:typeof g=="object"?g?.Ref:void 0;return i.has(a)||h&&i.has(h)||f.push(e(a,"Backup vault does not have a vault lock configured.",D("Add a BackupVaultLock to enforce retention policies and prevent backup deletion for compliance requirements.",u),d("LOW"),"Security",p,"cdkInsights")),f.length>0&&(o[a]={issues:f}),o},{})};var A1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CloudFront::Distribution")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r);return i.Properties?.DistributionConfig?.DefaultCacheBehavior?.ViewerProtocolPolicy==="allow-all"&&(n[r]={issues:[e(r,"CloudFront distribution allows HTTP traffic (ViewerProtocolPolicy is allow-all).",D('Set ViewerProtocolPolicy to "https-only" or "redirect-to-https" to enforce HTTPS and protect data in transit.',o),c("HIGH"),"Security",u,"cdkInsights")]}),n},{});var E1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CloudFront::Distribution")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r);return i.Properties?.DistributionConfig?.Logging?.Bucket||(n[r]={issues:[e(r,"CloudFront distribution does not have access logging enabled.",D("Enable access logging to an S3 bucket to track viewer requests for security analysis, auditing, and troubleshooting.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var X9=["SSLv3","TLSv1","TLSv1_2016","TLSv1.1_2016"],I1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CloudFront::Distribution")return n;let o=P(i,r),c=i.Properties?.DistributionConfig?.ViewerCertificate,u=c?.MinimumProtocolVersion;if(c?.CloudFrontDefaultCertificate)return n;let l=T(s,r),d=_(l),p=f=>d?$(f):f;return u&&X9.includes(u)&&(n[r]={issues:[e(r,`CloudFront distribution uses outdated TLS version (${u}).`,D("Use TLSv1.2_2021 or later for improved security. Older TLS versions have known vulnerabilities.",l),p("MEDIUM"),"Security",o,"cdkInsights")]}),n},{});var k1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CloudFront::Distribution")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.DistributionConfig?.WebACLId||(n[r]={issues:[e(r,"CloudFront distribution has no WAF WebACL associated.",D("Associate a WAF WebACL to protect against common web exploits, SQL injection, XSS, and DDoS attacks.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var R1=(t,e)=>Object.entries(t.Resources||{}).some(([,n])=>n.Type==="AWS::CloudTrail::Trail")?{}:{Global:{issues:[e("Global","No CloudTrail Trail defined in this stack.","CloudTrail is most commonly configured at the AWS account or organization level (one Trail covers every stack). If account-level CloudTrail is already in place, suppress this rule. If not, add a CloudTrail Trail at the account level \u2014 defining one per stack is rarely the right shape.","LOW","Security","Global","cdkInsights")]}};var F1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CloudWatch::Alarm")return n;let o=T(s,r),a=_(o),c=g=>a?$(g):g,u=P(i,r),l=[],d=i.Properties?.AlarmActions,p=i.Properties?.OKActions,f=i.Properties?.InsufficientDataActions;return(!d||d.length===0)&&l.push(e(r,"CloudWatch Alarm has no alarm actions configured.",D("Add AlarmActions (SNS topic, Lambda, etc.) to receive notifications when the alarm state changes to ALARM.",o),c("MEDIUM"),"Operational Excellence",u,"cdkInsights")),i.Properties?.TreatMissingData||l.push(e(r,"CloudWatch Alarm does not specify how to treat missing data.",D("Set TreatMissingData to define alarm behavior when data points are missing (missing, ignore, breaching, or notBreaching).",o),c("LOW"),"Operational Excellence",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var _1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Logs::LogGroup")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.KmsKeyId||(n[r]={issues:[e(r,"CloudWatch Log Group is not encrypted with a customer-managed KMS key.",D("Enable KMS encryption using KmsKeyId to protect sensitive log data at rest with customer-managed keys.",o),c("LOW"),"Security",u,"cdkInsights")]}),n},{});var eW="@aws-cdk/aws-lambda:logRetentionDefaultsTo30Days",tW=t=>/\/LogRetention[0-9A-Fa-f]*$/.test(t)||/LogRetention[0-9A-Fa-f]+$/.test(t),T1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Logs::LogGroup")return n;let o=P(i,r),a=i.Properties?.RetentionInDays,c=T(s,r),u=_(c);return a!==void 0||g1(s,eW)&&tW(o||r)||(n[r]={issues:[e(r,"CloudWatch Log Group has no retention period set (logs retained indefinitely).",D("Set RetentionInDays to control storage costs. Consider 30-90 days for operational logs, longer for compliance requirements.",c,"logGroupProps.retention"),u?"LOW":"MEDIUM","Cost Optimization",o,"cdkInsights")]}),n},{});var P1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Cognito::UserPool")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r),l=i.Properties?.MfaConfiguration;return(!l||l==="OFF")&&(n[r]={issues:[e(r,"Cognito User Pool has MFA disabled.",D("Enable MFA (OPTIONAL or ON) to add an extra layer of security for user authentication.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var L1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Cognito::UserPool")return n;let o=[],a=P(i,r),c=i.Properties?.PasswordPolicy,u=T(s,r),l=_(u),d=p=>l?$(p):p;if(!c)o.push(e(r,"Cognito User Pool has no password policy configured.",D("Configure a strong password policy with minimum length, uppercase, lowercase, numbers, and symbols requirements.",u,"passwordPolicy"),d("HIGH"),"Security",a,"cdkInsights"));else{let p=c.MinimumLength||8;p<12&&o.push(e(r,`Cognito password policy has minimum length of ${p} characters.`,D("Set MinimumLength to at least 12 characters for stronger security against brute-force attacks.",u,"passwordPolicy.minLength"),d("MEDIUM"),"Security",a,"cdkInsights")),c.RequireSymbols===!1&&o.push(e(r,"Cognito password policy does not require symbols.",D("Enable RequireSymbols for stronger password complexity requirements.",u,"passwordPolicy.requireSymbols"),d("LOW"),"Security",a,"cdkInsights"))}return o.length>0&&(n[r]={issues:o}),n},{});var O1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Cognito::UserPool")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r),l=i.Properties?.UserPoolAddOns?.AdvancedSecurityMode;return(!l||l==="OFF")&&(n[r]={issues:[e(r,"Cognito User Pool does not have advanced security features enabled.",D("Enable UserPoolAddOns with AdvancedSecurityMode set to AUDIT or ENFORCED to detect compromised credentials and block suspicious sign-ins.",o),c("LOW"),"Security",u,"cdkInsights")]}),n},{});var M1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::DynamoDB::Table"||i.Properties?.SSESpecification?.SSEEnabled===!0)return n;let a=P(i,r),c=T(s,r),u=_(c);return n[r]={issues:[e(r,"DynamoDB Table is not configured with KMS encryption.",D("Set SSESpecification.SSEEnabled to true and provide a customer-managed KMSMasterKeyId. Without SSESpecification, DynamoDB encrypts with an AWS-owned key \u2014 adequate for general use but not for HIPAA / PCI-DSS workloads that require customer-controlled key rotation and audit.",c,"tableProps.encryption"),u?"LOW":"MEDIUM","Security",a,"cdkInsights")]},n},{});var B1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::DynamoDB::Table"||i.Properties?.PointInTimeRecoverySpecification?.PointInTimeRecoveryEnabled===!0)return n;let a=P(i,r),c=T(s,r),u=_(c);return n[r]={issues:[e(r,"DynamoDB Table does not have Point-in-Time Recovery enabled.",D("Set PointInTimeRecoverySpecification.PointInTimeRecoveryEnabled to true to enable continuous backups for the last 35 days. Required by HIPAA and SOC2 for data resilience.",c,"tableProps.pointInTimeRecovery"),u?"LOW":"MEDIUM","Reliability",a,"cdkInsights")]},n},{});var N1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::DynamoDB::Table")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=i.Properties?.BillingMode,l=P(i,r);return(!u||u==="PROVISIONED")&&(n[r]={issues:[e(r,"DynamoDB table uses provisioned capacity without on-demand billing.",D("Consider using BillingMode: PAY_PER_REQUEST for automatic scaling and cost optimization, especially for unpredictable workloads. For predictable workloads, configure Application Auto Scaling.",o),c("MEDIUM"),"Cost Optimization",l,"cdkInsights")]}),n},{});var W1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::DynamoDB::Table"&&!i.Properties?.StreamSpecification){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"DynamoDB table does not have streams enabled.",D("Consider enabling DynamoDB Streams to capture item-level changes for analytics, auditing, event-driven architectures, and cross-region replication.",o),c("LOW"),"Operational Excellence",P(i,r),"cdkInsights")]}}return n},{});var $1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EC2::Volume")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=[],l=P(i,r),d=i.Properties??{};return d.Encrypted!==!0&&u.push(e(r,"EBS Volume is not encrypted.",D("Enable encryption on EBS volumes to protect data at rest. Use the Encrypted property and optionally specify a KmsKeyId.",o),c("HIGH"),"Security",l,"cdkInsights")),d.VolumeType==="gp2"&&u.push(e(r,"EBS Volume uses gp2 storage type.",D("Consider migrating to gp3 for up to 20% cost savings with better baseline performance (3,000 IOPS and 125 MB/s throughput).",o),c("LOW"),"Cost Optimization",l,"cdkInsights")),u.length>0&&(n[r]={issues:u}),n},{});var j1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EFS::FileSystem"||i.Properties?.Encrypted===!0)return n;let a=P(i,r),c=T(s,r),u=_(c);return n[r]={issues:[e(r,"EFS FileSystem is not encrypted at rest.",D("Set Encrypted to true and provide KmsKeyId for a customer-managed key. Encryption can only be enabled at filesystem creation; existing unencrypted filesystems require data migration to a new encrypted filesystem.",c,"fileSystemProps.encrypted"),u?"MEDIUM":"HIGH","Security",a,"cdkInsights")]},n},{});var U1=t=>Array.isArray(t)&&t.length>0,G1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::AutoScaling::AutoScalingGroup")return n;let o=i.Properties??{};if(!(U1(o.LoadBalancerNames)||U1(o.TargetGroupARNs))||o.HealthCheckType==="ELB")return n;let u=P(i,r),l=T(s,r),d=_(l);return n[r]={issues:[e(r,"AutoScalingGroup attached to a load balancer is not using ELB health checks.",D("Set HealthCheckType to ELB so unhealthy instances detected by the load balancer are recycled. EC2 health checks (the default) only catch instance-level failures, missing app-level outages the LB would otherwise detect.",l,"asgProps.healthCheckType"),d?"LOW":"MEDIUM","Reliability",u,"cdkInsights")]},n},{});var H1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::AutoScaling::LaunchConfiguration"||i.Properties?.AssociatePublicIpAddress!==!0)return n;let o=P(i,r),a=T(s,r),c=_(a);return n[r]={issues:[e(r,"AutoScaling LaunchConfiguration sets AssociatePublicIpAddress=true.",D("Set AssociatePublicIpAddress to false. Instances launched from this configuration will get a public IP and be reachable from the internet directly; prefer placing them in private subnets behind an ALB / NLB.",a,"launchConfigProps.associatePublicIpAddress"),c?"MEDIUM":"HIGH","Security",o,"cdkInsights")]},n},{});var z1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::EC2::Instance"&&i.Properties?.InstanceType?.toString().startsWith("t2")){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"EC2 instance is using an older t2 instance. Consider upgrading to t3 for better performance and cost savings.",D("Upgrade to a t3 instance for improved performance, lower latency, and better cost efficiency.",o),c("MEDIUM"),"Cost Optimization",P(i,r),"cdkInsights")]}}return n},{});var V1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::EC2::NatGateway"){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"NAT Gateway detected. NAT Gateways incur hourly charges (~$0.045/hr) plus data processing fees (~$0.045/GB).",D("Consider alternatives like NAT instances for lower traffic, VPC endpoints for AWS services, or IPv6 egress-only internet gateways to reduce costs.",o),c("LOW"),"Cost Optimization",P(i,r),"cdkInsights")]}}return n},{});var q1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EC2::Instance")return n;let o=i.Properties?.NetworkInterfaces;if(!Array.isArray(o)||o.length===0||!o.some(d=>d&&d.AssociatePublicIpAddress===!0))return n;let c=P(i,r),u=T(s,r),l=_(u);return n[r]={issues:[e(r,"EC2 Instance has a network interface with public IP association (AssociatePublicIpAddress=true).",D("Set AssociatePublicIpAddress to false on the NetworkInterface, or remove the property and rely on subnet defaults. A public IP on the instance ENI makes it directly internet-reachable; prefer a NAT/ALB for outbound and inbound traffic.",u,"instanceProps.associatePublicIpAddress"),l?"MEDIUM":"HIGH","Security",c,"cdkInsights")]},n},{});var sW=[22,3389,3306,5432,1433,27017,6379],nW=t=>t.CidrIp==="0.0.0.0/0"||t.CidrIpv6==="::/0",rW=(t,e,s)=>e===void 0||s===void 0?!1:t>=e&&t<=s,K1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EC2::SecurityGroup")return n;let o=T(s,r),a=_(o),c=h=>a?$(h):h,u=[],l=P(i,r),d=i.Properties?.SecurityGroupIngress||[],p=i.Properties?.SecurityGroupEgress||[],f=d.some(h=>h.CidrIp==="0.0.0.0/0"),m=d.some(h=>h.CidrIpv6==="::/0");f&&u.push(e(r,"Security Group allows unrestricted IPv4 ingress (0.0.0.0/0).",D("Restrict security group rules to specific IPs and ports.",o),c("HIGH"),"Security",l,"cdkInsights")),m&&u.push(e(r,"Security Group allows unrestricted IPv6 ingress (::/0).",D("Restrict security group rules to specific IPs and ports.",o),c("HIGH"),"Security",l,"cdkInsights"));for(let h of d)if(nW(h)){for(let x of sW)if(rW(x,h.FromPort,h.ToPort)){u.push(e(r,`Security Group exposes port ${x} to the internet.`,D("Restrict access to management and database ports. Use bastion hosts, VPN, or AWS Systems Manager Session Manager instead.",o),c("CRITICAL"),"Security",l,"cdkInsights"));break}}return p.some(h=>h.CidrIp==="0.0.0.0/0")&&u.push(e(r,"Security Group allows unrestricted egress to 0.0.0.0/0.",D("Consider restricting egress rules to specific destinations for defense in depth.",o),c("LOW"),"Security",l,"cdkInsights")),d.length===0&&p.length===0&&u.push(e(r,"Security Group has no ingress or egress rules defined.",D("Review if this security group is in use. Empty security groups may indicate orphaned resources or misconfiguration.",o),c("LOW"),"Operational Excellence",l,"cdkInsights")),u.length>0&&(n[r]={issues:u}),n},{});var Z1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EC2::Subnet"||i.Properties?.MapPublicIpOnLaunch!==!0)return n;let o=P(i,r),a=T(s,r),c=_(a);return n[r]={issues:[e(r,"EC2 Subnet auto-assigns public IPs to launched instances (MapPublicIpOnLaunch=true).",D("Set MapPublicIpOnLaunch to false unless this is intentionally a public subnet. Instances should opt into a public IP at the ENI level rather than inheriting it from subnet defaults \u2014 keeps the blast radius small if a private workload accidentally lands here.",a,"subnetProps.mapPublicIpOnLaunch"),c?"LOW":"MEDIUM","Security",o,"cdkInsights")]},n},{});var Y1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECR::Repository")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.ImageTagMutability!=="IMMUTABLE"&&(n[r]={issues:[e(r,"ECR repository allows mutable image tags.",D("Set ImageTagMutability to IMMUTABLE to prevent image tags from being overwritten, ensuring deployment consistency.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var J1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECR::Repository")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.LifecyclePolicy?.LifecyclePolicyText||(n[r]={issues:[e(r,"ECR repository does not have a lifecycle policy configured.",D("Add a lifecycle policy to automatically clean up old or untagged images and reduce storage costs.",o),c("MEDIUM"),"Cost Optimization",u,"cdkInsights")]}),n},{});var Q1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECR::Repository")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];return i.Properties?.ImageScanningConfiguration?.ScanOnPush!==!0&&l.push(e(r,"ECR repository does not have image scanning on push enabled.",D("Enable ScanOnPush in ImageScanningConfiguration to automatically scan images for vulnerabilities when pushed.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var X1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECS::TaskDefinition")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=[],l=P(i,r),d=i.Properties?.ContainerDefinitions||[];for(let p of d)p.LogConfiguration?.LogDriver||u.push(e(r,`ECS container "${p.Name||"unnamed"}" has no logging configuration.`,D("Configure LogConfiguration with awslogs driver to send container logs to CloudWatch for monitoring and debugging.",o),c("MEDIUM"),"Operational Excellence",l,"cdkInsights"));return u.length>0&&(n[r]={issues:u}),n},{});var ek=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECS::Service")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=i.Properties?.ServiceConnectConfiguration;if(!u||u.Enabled!==!0||u.LogConfiguration?.LogDriver)return n;let d=P(i,r);return n[r]={issues:[e(r,"ECS Service Connect is enabled without an access log configuration.",D("Configure ServiceConnectConfiguration.LogConfiguration with a LogDriver (e.g. awslogs) to capture inter-service traffic metadata for audit, debugging, and incident response.",o),c("MEDIUM"),"Security",d,"cdkInsights")]},n},{});var tk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECS::TaskDefinition")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=[],l=P(i,r),d=i.Properties?.ContainerDefinitions||[];for(let p of d){let f=p.Memory||p.MemoryReservation,m=p.Cpu;!f&&!m&&u.push(e(r,`ECS container "${p.Name||"unnamed"}" has no CPU or memory limits defined.`,D("Define CPU and Memory limits to prevent runaway containers and ensure predictable resource allocation.",o),c("LOW"),"Reliability",l,"cdkInsights"))}return u.length>0&&(n[r]={issues:u}),n},{});var iW=/(^|_)(secret|password|passwd|pwd|credential|private_key|api_key|api_secret|auth_token|access_key|access_secret|bearer_token|jwt_secret|encryption_key|signing_key)(_|$)/i,sk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECS::TaskDefinition")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=[],l=P(i,r),d=i.Properties?.ContainerDefinitions||[];for(let p of d){let f=p.Environment||[];for(let m of f)iW.test(m.Name||"")&&u.push(e(r,`ECS task definition has sensitive environment variable "${m.Name}" in plaintext.`,D('Use AWS Secrets Manager or SSM Parameter Store with the "secrets" property instead of plaintext environment variables.',o),c("HIGH"),"Security",l,"cdkInsights"))}return u.length>0&&(n[r]={issues:u}),n},{});var nk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EKS::Cluster")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];return i.Properties?.EncryptionConfig?.some(f=>f.Resources?.includes("secrets"))||l.push(e(r,"EKS cluster does not have Kubernetes secrets encryption enabled.",D("Configure EncryptionConfig with a KMS key to encrypt secrets stored in etcd.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var rk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EKS::Cluster")return n;let o=T(s,r),a=_(o),c=h=>a?$(h):h,u=P(i,r),l=[],p=i.Properties?.Logging?.ClusterLogging?.EnabledTypes||[],f=p.map(h=>h.Type).filter(h=>!!h),g=["api","audit","authenticator","controllerManager","scheduler"].filter(h=>!f.includes(h));return g.length>0&&l.push(e(r,`EKS cluster is missing control plane logging for: ${g.join(", ")}.`,D("Enable all control plane log types (api, audit, authenticator, controllerManager, scheduler) for comprehensive cluster monitoring.",o),c("MEDIUM"),"Operational Excellence",u,"cdkInsights")),p.length===0?(n[r]={issues:[e(r,"EKS cluster does not have any control plane logging enabled.",D("Enable control plane logging to CloudWatch for audit trails and troubleshooting Kubernetes API issues.",o),c("MEDIUM"),"Security",u,"cdkInsights")]},n):(l.length>0&&(n[r]={issues:l}),n)},{});var ik=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EKS::Cluster")return n;let o=T(s,r),a=_(o),c=g=>a?$(g):g,u=P(i,r),l=[],d=i.Properties?.ResourcesVpcConfig,p=d?.EndpointPublicAccess,f=d?.EndpointPrivateAccess,m=d?.PublicAccessCidrs;return p===!0&&f!==!0&&l.push(e(r,"EKS cluster has only public endpoint access enabled.",D("Enable EndpointPrivateAccess to allow communication between nodes and the API server within the VPC.",o),c("MEDIUM"),"Security",u,"cdkInsights")),p===!0&&(!m||m.length===0||m.includes("0.0.0.0/0"))&&l.push(e(r,"EKS cluster public endpoint is accessible from the internet (0.0.0.0/0).",D("Restrict PublicAccessCidrs to specific IP ranges that need to access the Kubernetes API.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var ok=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElasticLoadBalancingV2::LoadBalancer")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r);return(i.Properties?.LoadBalancerAttributes||[]).some(p=>p.Key==="deletion_protection.enabled"&&p.Value==="true")||(n[r]={issues:[e(r,"Load Balancer does not have deletion protection enabled.",D("Enable deletion protection to prevent accidental deletion of the load balancer in production environments.",o),c("MEDIUM"),"Reliability",u,"cdkInsights")]}),n},{});var ak=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElasticLoadBalancingV2::Listener")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=i.Properties?.Protocol,d=i.Properties?.Port;return l==="HTTP"&&d!==80?n[r]={issues:[e(r,`Load Balancer listener uses HTTP protocol on port ${d}.`,D("Use HTTPS protocol with a valid SSL certificate to encrypt traffic in transit.",o),c("HIGH"),"Security",u,"cdkInsights")]}:l==="HTTP"&&d===80&&((i.Properties?.DefaultActions||[]).some(m=>m.Type==="redirect"&&m.RedirectConfig?.Protocol==="HTTPS")||(n[r]={issues:[e(r,"Load Balancer HTTP listener on port 80 does not redirect to HTTPS.",D("Configure the HTTP listener to redirect to HTTPS to ensure encrypted traffic.",o),c("MEDIUM"),"Security",u,"cdkInsights")]})),n},{});var ck=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElasticLoadBalancingV2::LoadBalancer")return n;let o=P(i,r);if(!(i.Properties?.LoadBalancerAttributes||[]).some(u=>u.Key==="access_logs.s3.enabled"&&u.Value==="true")){let u=T(s,r),l=_(u),d=p=>l?$(p):p;n[r]={issues:[e(r,"Load Balancer does not have access logging enabled.",D("Enable access logging to S3 for security analysis, auditing, and troubleshooting of traffic patterns.",u,"accessLogs / logAccessLogs"),d("MEDIUM"),"Security",o,"cdkInsights")]}}return n},{});var oW=["ELBSecurityPolicy-2016-08","ELBSecurityPolicy-TLS-1-0-2015-04","ELBSecurityPolicy-TLS-1-1-2017-01","ELBSecurityPolicy-2015-05"],uk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElasticLoadBalancingV2::Listener")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=i.Properties?.Protocol,d=i.Properties?.SslPolicy;return l!=="HTTPS"&&l!=="TLS"||d&&oW.includes(d)&&(n[r]={issues:[e(r,`Load Balancer listener uses outdated security policy (${d}).`,D("Use ELBSecurityPolicy-TLS13-1-2-2021-06 or later for TLS 1.3 support, or at minimum ELBSecurityPolicy-TLS-1-2-2017-01 for TLS 1.2.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var lk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElastiCache::ReplicationGroup")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[],d=i.Properties?.AuthToken,p=i.Properties?.TransitEncryptionEnabled;return!d&&p===!0&&l.push(e(r,"ElastiCache Redis cluster has transit encryption but no AUTH token configured.",D("Set AuthToken to require authentication for Redis connections, providing an additional security layer.",o),c("MEDIUM"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var dk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElastiCache::ReplicationGroup"&&i.Type!=="AWS::ElastiCache::CacheCluster")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];return i.Properties?.AtRestEncryptionEnabled!==!0&&l.push(e(r,"ElastiCache cluster does not have encryption at rest enabled.",D("Enable AtRestEncryptionEnabled to protect cached data at rest using AWS-managed or customer-managed keys.",o),c("HIGH"),"Security",u,"cdkInsights")),i.Properties?.TransitEncryptionEnabled!==!0&&l.push(e(r,"ElastiCache cluster does not have encryption in transit enabled.",D("Enable TransitEncryptionEnabled to protect data during transfer between clients and the cache.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var pk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElastiCache::ReplicationGroup")return n;let o=T(s,r),a=_(o),c=g=>a?$(g):g,u=P(i,r),l=[],d=i.Properties?.AutomaticFailoverEnabled,p=i.Properties?.NumNodeGroups||1,f=i.Properties?.ReplicasPerNodeGroup||0;return d!==!0&&(p>1||f>0)&&l.push(e(r,"ElastiCache replication group has replicas but automatic failover is not enabled.",D("Enable AutomaticFailoverEnabled to automatically promote a replica to primary if the primary node fails.",o),c("MEDIUM"),"Reliability",u,"cdkInsights")),i.Properties?.MultiAZEnabled!==!0&&d===!0&&l.push(e(r,"ElastiCache replication group has automatic failover but Multi-AZ is not enabled.",D("Enable MultiAZEnabled to distribute nodes across availability zones for higher availability.",o),c("MEDIUM"),"Reliability",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var fk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Events::Rule")return n;let o=P(i,r),a=T(s,r),c=_(a),u=d=>c?$(d):d,l=[];return i.Properties?.State!=="ENABLED"&&l.push(e(r,"EventBridge rule is disabled or not explicitly enabled.",D("Ensure the EventBridge rule State is set to ENABLED to trigger events as expected.",a,"enabled / state"),u("MEDIUM"),"Operational Excellence",o,"cdkInsights")),(!i.Properties?.Targets||Array.isArray(i.Properties.Targets)&&i.Properties.Targets.length===0)&&l.push(e(r,"EventBridge rule has no targets configured. Events matching this rule will be silently dropped.",D("Add at least one target (Lambda, SQS, SNS, Step Functions, etc.) to process matched events. Without targets, the rule matches events but takes no action.",a,"targets"),u("HIGH"),"Reliability",o,"cdkInsights")),l.length>0&&(n[r]={issues:[...n[r]?.issues||[],...l]}),n},{});var aW=t=>{if(t==="*")return!0;if(t&&typeof t=="object"){let e=t.AWS;if(e==="*"||Array.isArray(e)&&e.includes("*"))return!0}return!1},cW=t=>t.Condition!==void 0&&t.Condition!==null&&typeof t.Condition=="object"&&Object.keys(t.Condition).length>0,mk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Events::EventBusPolicy")return n;let o=i.Properties??{},a=[];o.Principal!==void 0&&a.push({Effect:"Allow",Principal:o.Principal,Condition:o.Condition});let c=o.Statement;if(c&&(Array.isArray(c.Statement)?a.push(...c.Statement):a.push(c)),a.filter(f=>(f.Effect===void 0||f.Effect==="Allow")&&aW(f.Principal)&&!cW(f)).length===0)return n;let l=P(i,r),d=T(s,r),p=_(d);return n[r]={issues:[e(r,"EventBridge EventBusPolicy grants access to wildcard Principal without a Condition.",D("Replace wildcard Principal with a specific AWS account / org ID, or add a Condition (e.g. aws:PrincipalOrgID) to scope cross-account access. Wildcard principals on an event bus mean any AWS account can publish events to your bus.",d,"eventBusPolicyProps.statement"),p?"HIGH":"CRITICAL","Security",l,"cdkInsights")]},n},{});var hk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Glue::Connection")return n;let o=T(s,r),a=_(o),c=m=>a?$(m):m,u=P(i,r),l=[],d=i.Properties?.ConnectionInput,p=d?.ConnectionType,f=d?.PhysicalConnectionRequirements;if(p==="JDBC"){f?.SubnetId||l.push(e(r,"Glue JDBC connection does not specify a VPC subnet.",D("Configure PhysicalConnectionRequirements with SubnetId and SecurityGroupIdList for network isolation.",o),c("MEDIUM"),"Security",u,"cdkInsights"));let g=d?.ConnectionProperties?.JDBC_CONNECTION_URL||"";typeof g=="string"&&!g.includes("ssl=true")&&!g.includes("useSSL=true")&&l.push(e(r,"Glue JDBC connection URL may not enforce SSL.",D("Ensure the JDBC connection URL includes SSL parameters to encrypt data in transit.",o),c("LOW"),"Security",u,"cdkInsights"))}return l.length>0&&(n[r]={issues:l}),n},{});var gk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Glue::Job")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=[];return i.Properties?.SecurityConfiguration||l.push(e(r,"Glue job does not have a security configuration specified.",D("Create and attach a SecurityConfiguration to enable encryption for job bookmarks, S3 data, and CloudWatch logs.",o),c("MEDIUM"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var yk=/^\d{12}$/,xk=/arn:aws:iam::(\d{12}):root/,uW=t=>{if(!t)return[];if(typeof t=="string"){if(yk.test(t))return[t];let e=t.match(xk);return e?[e[1]]:[]}return typeof t=="object"&&t.AWS?(Array.isArray(t.AWS)?t.AWS:[t.AWS]).flatMap(s=>{if(yk.test(s))return[s];let n=s.match(xk);return n?[n[1]]:[]}):[]},bk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::IAM::Role")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=[],l=P(i,r),d=i.Properties?.AssumeRolePolicyDocument;if(d?.Statement){for(let p of d.Statement)if(p.Effect==="Allow"){let f=uW(p.Principal);for(let m of f)u.push(e(r,`IAM Role allows cross-account trust from account ${m}.`,D("Verify this cross-account trust relationship is intentional and the external account is trusted. Consider adding conditions to restrict access.",o),c("MEDIUM"),"Security",l,"cdkInsights"))}}return u.length>0&&(n[r]={issues:u}),n},{});var Sk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::IAM::Policy"&&i.Type!=="AWS::IAM::Role")return n;let o=i.Properties?.Policies,a=[];if(Array.isArray(o))for(let f of o)f?.PolicyDocument&&a.push(f.PolicyDocument);let c=i.Properties?.PolicyDocument;c&&a.push(c);let u=T(s,r),l=_(u),d=f=>l?$(f):f,p=[];for(let f of a){if(!f?.Statement)continue;let m=f.Statement;for(let g of m)if(g.Effect==="Allow"){let h=g.Action,x=g.Resource,y=h==="*"||Array.isArray(h)&&h.includes("*"),b=x==="*"||Array.isArray(x)&&x.includes("*");y&&b?p.push(e(r,"IAM policy allows all actions (*) on all resources (*). This grants administrative access.",D("Restrict both actions and resources to follow the principle of least privilege.",u,"rolePolicy / inlinePolicies"),d("CRITICAL"),"Security",r,"cdkInsights")):y?p.push(e(r,"IAM policy allows all actions (*). This is overly permissive.",D("Specify only the required actions instead of using wildcards.",u,"rolePolicy / inlinePolicies"),d("CRITICAL"),"Security",r,"cdkInsights")):b&&p.push(e(r,"IAM policy allows actions on all resources (*). This is overly permissive.",D("Restrict resources to specific ARNs instead of using wildcards.",u,"rolePolicy / inlinePolicies"),d("HIGH"),"Security",r,"cdkInsights"))}}return p.length>0&&(n[r]={issues:p}),n},{});var lW=[/\/ServiceRole\/Resource$/,/\/Role\/Resource$/,/\/InstanceRole\/Resource$/,/CustomResourceProvider\/Role$/],dW=t=>lW.some(e=>e.test(t)),vk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::IAM::Role")return n;let o=T(s,r),a=_(o),c=l=>a?$(l):l,u=P(i,r);return dW(u)||i.Properties?.PermissionsBoundary||(n[r]={issues:[e(r,"IAM Role has no permission boundary configured.",D("Consider using permission boundaries to limit the maximum permissions for delegated access and prevent privilege escalation.",o),c("LOW"),"Security",u,"cdkInsights")]}),n},{});var Ck=t=>Array.isArray(t)&&t.length>0,Dk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::IAM::User")return n;let o=i.Properties??{},a=Ck(o.Policies),c=Ck(o.ManagedPolicyArns);if(!a&&!c)return n;let u=P(i,r),l=T(s,r),d=_(l),p=[];return a&&p.push(e(r,"IAM User has inline policies attached.",D("Move policies to an IAM Group and add the user to the group, or attach via a Role assumed by the user. CIS AWS Foundations 1.15 requires users to inherit permissions through groups.",l,"userProps.attachInlinePolicy"),d?"LOW":"MEDIUM","Security",u,"cdkInsights")),c&&p.push(e(r,"IAM User has managed policies attached directly.",D("Attach managed policies to an IAM Group and add the user to that group. Direct attachment violates CIS AWS Foundations 1.15 (users must inherit permissions through groups).",l,"userProps.managedPolicies"),d?"LOW":"MEDIUM","Security",u,"cdkInsights")),n[r]={issues:p},n},{});var wk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Kinesis::Stream")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=[],d=i.Properties?.StreamEncryption;return(!d?.EncryptionType||d.EncryptionType==="NONE")&&l.push(e(r,"Kinesis Data Stream does not have server-side encryption enabled.",D("Enable StreamEncryption with EncryptionType KMS to protect data at rest.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Ak=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Kinesis::Stream")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];i.Properties?.RetentionPeriodHours===24&&l.push(e(r,"Kinesis Data Stream uses minimum retention period (24 hours).",D("Consider increasing RetentionPeriodHours for applications that need to replay or reprocess data during failures.",o),c("LOW"),"Reliability",u,"cdkInsights"));let p=i.Properties?.StreamModeDetails?.StreamMode;return l.length>0&&(n[r]={issues:l}),n},{});var pW=t=>typeof t=="string"?t==="*":typeof t=="object"?Object.values(t).some(e=>Array.isArray(e)?e.includes("*"):e==="*"):!1,Ek=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if((i.Type==="AWS::KMS::Key"&&Array.isArray(i.Properties?.KeyPolicy?.Statement)?i.Properties.KeyPolicy.Statement:[]).some(c=>pW(c.Principal))){let c=T(s,r),u=_(c);n[r]={issues:[e(r,"KMS key has a public policy.",D("Restrict the KMS key policy to specific IAM roles or users to prevent unauthorized access.",c,"keyPolicy / admins / encryptionKey"),u?"HIGH":"CRITICAL","Security",P(i,r),"cdkInsights")]}}return n},{});var Ik=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Lambda::Function")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.ReservedConcurrentExecutions===void 0&&(n[r]={issues:[e(r,"Lambda function has no reserved concurrency configured.",D("Consider setting ReservedConcurrentExecutions to prevent the function from consuming all available account concurrency and to control scaling behavior.",o),c("LOW"),"Reliability",u,"cdkInsights")]}),n},{});var fW=new Set(["events.amazonaws.com","sns.amazonaws.com","s3.amazonaws.com","ses.amazonaws.com","codecommit.amazonaws.com","codepipeline.amazonaws.com","config.amazonaws.com","cloudwatch.amazonaws.com","iot.amazonaws.com","logs.amazonaws.com","pipes.amazonaws.com","scheduler.amazonaws.com","cognito-idp.amazonaws.com"]),mW=new Set(["apigateway.amazonaws.com","elasticloadbalancing.amazonaws.com","lambda.amazonaws.com"]),cy=t=>{if(typeof t=="string")return t;if(typeof t=="object"&&t!==null){let e=t;if(typeof e.Ref=="string")return e.Ref;let s=e["Fn::GetAtt"];if(Array.isArray(s)&&typeof s[0]=="string")return s[0]}return null},hW=t=>{let e=new Map,s=(n,r)=>{e.has(n)||e.set(n,new Set),e.get(n)?.add(r)};for(let n of Object.values(t))if(n.Type==="AWS::Lambda::Permission"){let r=cy(n.Properties?.FunctionName),i=n.Properties?.Principal;if(!r||typeof i!="string")continue;fW.has(i)?s(r,"async"):mW.has(i)&&s(r,"sync")}else if(n.Type==="AWS::Lambda::EventSourceMapping"){let r=cy(n.Properties?.FunctionName);r&&s(r,"event-source")}else if(n.Type==="AWS::Lambda::EventInvokeConfig"){let r=cy(n.Properties?.FunctionName);r&&s(r,"async")}return e},kk=(t,e,s)=>{let n=t.Resources||{},r=hW(n);return Object.entries(n).reduce((i,[o,a])=>{if(a.Type!=="AWS::Lambda::Function"||a.Properties?.DeadLetterConfig?.TargetArn)return i;let c=P(a,o),u=T(s,o),l=_(u),d=r.get(o)??new Set(["unknown"]),p=d.has("async"),f=d.has("sync"),m=d.has("event-source");return f&&!p&&!m?i:m&&!p?(i[o]={issues:[e(o,"Lambda function consumes an event source mapping without a failure destination.",D("For SQS/Kinesis/DynamoDB Streams, configure an OnFailure destination on the EventSourceMapping (DestinationConfig.OnFailure) \u2014 function-level DeadLetterConfig is for async invocations and does not apply to poll-based event sources.",u,"onFailure / deadLetterQueue (on EventSourceMapping)"),l?"LOW":"MEDIUM","Reliability",c,"cdkInsights")]},i):p?(i[o]={issues:[e(o,"Lambda function has no Dead Letter Queue configured for async invocations.",D("Configure a Dead Letter Queue (SQS or SNS) via DeadLetterConfig to capture failed async invocations for debugging, monitoring, and retry processing.",u,"deadLetterQueueEnabled / deadLetterQueue"),l?"LOW":"MEDIUM","Reliability",c,"cdkInsights")]},i):(i[o]={issues:[e(o,"Lambda function has no Dead Letter Queue configured (invocation mode could not be inferred).",D("No invocation source was detected in this template. If the function is invoked async (EventBridge, SNS, S3, etc.), configure DeadLetterConfig to capture failures. If it is invoked sync (API Gateway, ALB, direct invoke), DLQ does not apply and this finding can be suppressed.",u,"deadLetterQueueEnabled / deadLetterQueue"),"LOW","Reliability",c,"cdkInsights")]},i)},{})};var gW=/\b(secret|password|passwd|pwd|credential|private_key|api_key|api_secret|auth_token|access_key|access_secret|bearer_token|jwt_secret|encryption_key|signing_key)\b/i,Rk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::Lambda::Function"){let o=T(s,r),a=_(o),c=l=>a?$(l):l,u=Object.entries(i.Properties?.Environment?.Variables||{}).filter(([l])=>gW.test(l)).map(([l])=>e(r,`Lambda function contains sensitive environment variable: ${l}.`,D("Store sensitive environment variables in AWS Secrets Manager or SSM Parameter Store instead of plaintext environment variables.",o),c("HIGH"),"Security",P(i,r),"cdkInsights"));u.length>0&&(n[r]={issues:u})}return n},{});var Fk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::Lambda::Function"){let o=T(s,r),a=_(o),c=l=>a?$(l):l,u=i.Properties?.MemorySize;typeof u=="number"&&u>1024&&(n[r]={issues:[e(r,"Lambda function has high memory allocation.",D("Consider reducing memory for cost savings.",o),c("MEDIUM"),"Cost Optimization",P(i,r),"cdkInsights")]})}return n},{});var yW=t=>typeof t=="string"&&/^\d{12}$/.test(t),xW=t=>{if(!t||typeof t!="object")return!1;let e=t.Ref;return typeof e=="string"&&e.endsWith("AccountId")},bW=t=>t==="*"||t===void 0,_k=t=>typeof t=="string"&&t.endsWith(".amazonaws.com"),Tk=t=>t?!!(t.SourceArn||t.SourceAccount||t.PrincipalOrgID||t.OrganizationId):!1,Pk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{let o=i.Type==="AWS::Lambda::Permission",a=i.Type==="AWS::Lambda::LayerVersionPermission";if(!o&&!a)return n;let c=i.Properties??{},u=c.Principal,l=[],d=P(i,r),p=T(s,r),f=_(p);return bW(u)?l.push(e(r,`${i.Type} grants public access via wildcard Principal.`,D("Set Principal to a specific AWS account ID, an AWS service principal with SourceArn/SourceAccount, or an OrganizationId. Wildcard principals make the function/layer reachable from any AWS account.",p,"permissionProps.principal"),f?"HIGH":"CRITICAL","Security",d,"cdkInsights")):o&&_k(u)&&!Tk(c)?l.push(e(r,"Lambda::Permission grants a service principal access without SourceArn / SourceAccount / PrincipalOrgID.",D("Constrain the service principal: set SourceArn to the specific resource that may invoke the function, or SourceAccount to your AWS account ID. Without one of these, any account using that AWS service can invoke this function (confused-deputy risk).",p,"permissionProps.sourceArn"),f?"MEDIUM":"HIGH","Security",d,"cdkInsights")):o&&!yW(u)&&!xW(u)&&!_k(u)&&!Tk(c)&&l.push(e(r,"Lambda::Permission has an unrecognised Principal shape with no source restriction.",D("Confirm the Principal resolves to an account ID, an org ID, or an AWS service plus a SourceArn/SourceAccount. Wildcards or unrestricted patterns expose the function publicly.",p,"permissionProps.principal"),f?"LOW":"MEDIUM","Security",d,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var SW={nodejs:"nodejs22.x","nodejs4.3":"nodejs22.x","nodejs4.3-edge":"nodejs22.x","nodejs6.10":"nodejs22.x","nodejs8.10":"nodejs22.x","nodejs10.x":"nodejs22.x","nodejs12.x":"nodejs22.x","nodejs14.x":"nodejs22.x","nodejs16.x":"nodejs22.x","nodejs18.x":"nodejs22.x","python2.7":"python3.13","python3.6":"python3.13","python3.7":"python3.13","python3.8":"python3.13","python3.9":"python3.13",java8:"java21","java8.al2":"java21",java11:"java21","dotnetcore1.0":"dotnet8","dotnetcore2.0":"dotnet8","dotnetcore2.1":"dotnet8","dotnetcore3.1":"dotnet8","dotnet5.0":"dotnet8",dotnet6:"dotnet8","ruby2.5":"ruby3.3","ruby2.7":"ruby3.3","go1.x":"provided.al2023"},Lk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Lambda::Function")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=i.Properties?.Runtime;if(typeof u!="string")return n;let l=SW[u];return l&&(n[r]={issues:[e(r,`Lambda function uses deprecated runtime "${u}". This runtime has reached or is approaching end-of-life and will no longer receive security patches.`,D(`Upgrade to "${l}" for continued security patches, performance improvements, and long-term support.`,o),c("HIGH"),"Security",P(i,r),"cdkInsights")]}),n},{});var Ok=(t,e,s)=>Object.values(t.Resources||{}).some(r=>r.Type==="AWS::EC2::NatGateway")?Object.entries(t.Resources||{}).reduce((r,[i,o])=>{if(o.Type!=="AWS::Lambda::Function")return r;let a=T(s,i),c=_(a),u=p=>c?$(p):p,l=P(o,i),d=o.Properties?.VpcConfig;return d?.SubnetIds&&d.SubnetIds.length>0&&(r[i]={issues:[e(i,"Lambda function in VPC with NAT Gateway detected. NAT Gateway costs can accumulate quickly.",D("Evaluate if VPC attachment is necessary. Consider using VPC endpoints for AWS services to reduce NAT costs. NAT Gateway charges ~$0.045/hr plus $0.045/GB processed.",a),u("MEDIUM"),"Cost Optimization",l,"cdkInsights")]}),r},{}):{};var Mk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::MSK::Cluster")return n;let o=T(s,r),a=_(o),c=g=>a?$(g):g,u=P(i,r),l=[],d=i.Properties?.ClientAuthentication,p=(d?.Tls?.CertificateAuthorityArnList?.length??0)>0,f=d?.Sasl?.Scram?.Enabled===!0||d?.Sasl?.Iam?.Enabled===!0,m=d?.Unauthenticated?.Enabled===!0;return!p&&!f&&l.push(e(r,"MSK cluster does not have client authentication configured.",D("Enable SASL/SCRAM, IAM authentication, or mutual TLS for client authentication.",o),c("HIGH"),"Security",u,"cdkInsights")),m&&l.push(e(r,"MSK cluster allows unauthenticated access.",D("Disable unauthenticated access and require client authentication for all connections.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Bk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::MSK::Cluster")return n;let o=T(s,r),a=_(o),c=m=>a?$(m):m,u=P(i,r),l=[],d=i.Properties?.EncryptionInfo;d?.EncryptionAtRest?.DataVolumeKMSKeyId||l.push(e(r,"MSK cluster does not use a customer-managed KMS key for encryption at rest.",D("Specify DataVolumeKMSKeyId in EncryptionAtRest for additional control over data encryption.",o),c("LOW"),"Security",u,"cdkInsights"));let f=d?.EncryptionInTransit;return f?.ClientBroker!=="TLS"&&l.push(e(r,"MSK cluster does not enforce TLS encryption for client-broker communication.",D("Set ClientBroker to TLS in EncryptionInTransit to encrypt data between clients and brokers.",o),c("HIGH"),"Security",u,"cdkInsights")),f?.InCluster!==!0&&l.push(e(r,"MSK cluster does not have encryption enabled for inter-broker communication.",D("Set InCluster to true in EncryptionInTransit to encrypt data between brokers.",o),c("MEDIUM"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Nk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::MSK::Cluster")return n;let o=T(s,r),a=_(o),c=h=>a?$(h):h,u=P(i,r),l=[],p=i.Properties?.LoggingInfo?.BrokerLogs,f=p?.CloudWatchLogs?.Enabled===!0,m=p?.Firehose?.Enabled===!0,g=p?.S3?.Enabled===!0;return!f&&!m&&!g&&l.push(e(r,"MSK cluster does not have broker logging configured.",D("Enable broker logs to CloudWatch, Firehose, or S3 for monitoring and troubleshooting Kafka operations.",o),c("MEDIUM"),"Operational Excellence",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Wk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::OpenSearchService::Domain"&&i.Type!=="AWS::Elasticsearch::Domain")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];i.Properties?.AdvancedSecurityOptions?.Enabled!==!0&&l.push(e(r,"OpenSearch domain does not have fine-grained access control enabled.",D("Enable AdvancedSecurityOptions to use IAM or internal user database for document-level and field-level security.",o),c("MEDIUM"),"Security",u,"cdkInsights"));let p=i.Properties?.VPCOptions;return(!p?.SubnetIds||p.SubnetIds.length===0)&&l.push(e(r,"OpenSearch domain is not deployed within a VPC.",D("Configure VPCOptions with subnet IDs to deploy the domain within a VPC for network isolation.",o),c("MEDIUM"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var $k=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::OpenSearchService::Domain"&&i.Type!=="AWS::Elasticsearch::Domain")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];return i.Properties?.EncryptionAtRestOptions?.Enabled!==!0&&l.push(e(r,"OpenSearch domain does not have encryption at rest enabled.",D("Enable EncryptionAtRestOptions to protect indexed data at rest using AWS KMS.",o),c("HIGH"),"Security",u,"cdkInsights")),i.Properties?.NodeToNodeEncryptionOptions?.Enabled!==!0&&l.push(e(r,"OpenSearch domain does not have node-to-node encryption enabled.",D("Enable NodeToNodeEncryptionOptions to encrypt data in transit between nodes within the cluster.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var jk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::OpenSearchService::Domain"&&i.Type!=="AWS::Elasticsearch::Domain")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=[],d=i.Properties?.LogPublishingOptions;return d?.AUDIT_LOGS?.Enabled||l.push(e(r,"OpenSearch domain does not have audit logging enabled.",D("Enable AUDIT_LOGS in LogPublishingOptions to track user activity for security and compliance monitoring.",o),c("LOW"),"Security",u,"cdkInsights")),d?.ES_APPLICATION_LOGS?.Enabled||l.push(e(r,"OpenSearch domain does not have application logging enabled.",D("Enable ES_APPLICATION_LOGS in LogPublishingOptions to capture error logs for troubleshooting.",o),c("LOW"),"Operational Excellence",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Uk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::RDS::DBInstance")return n;let o=P(i,r),a=i.Properties?.BackupRetentionPeriod,c=T(s,r),u=_(c),l=d=>u?$(d):d;return a===0?n[r]={issues:[e(r,"RDS instance has automated backups disabled (BackupRetentionPeriod is 0).",D("Enable automated backups with at least 7 days retention for production databases to enable point-in-time recovery.",c,"backupRetention"),l("HIGH"),"Reliability",o,"cdkInsights")]}:a!==void 0&&a<7&&(n[r]={issues:[e(r,`RDS backup retention period is only ${a} day(s).`,D("Consider increasing backup retention to at least 7 days for production databases.",c,"backupRetention"),l("MEDIUM"),"Reliability",o,"cdkInsights")]}),n},{});var Gk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::RDS::DBInstance")return n;let o=T(s,r),a=_(o),c=l=>a?$(l):l,u=P(i,r);return i.Properties?.DeletionProtection!==!0&&(n[r]={issues:[e(r,"RDS instance does not have deletion protection enabled.",D("Enable DeletionProtection to prevent accidental database deletion.",o),c("MEDIUM"),"Reliability",u,"cdkInsights")]}),n},{});var Hk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::RDS::DBInstance"&&i.Properties?.StorageEncrypted!==!0){let o=T(s,r),a=_(o);n[r]={issues:[e(r,"RDS instance is not encrypted.",D("Enable encryption to protect data at rest and meet compliance standards.",o,"storageEncrypted / storageEncryptionKey"),a?"HIGH":"CRITICAL","Security",P(i,r),"cdkInsights")]}}return n},{});var vW=new Set(["AWS::RDS::DBInstance","AWS::RDS::DBCluster"]),zk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(!vW.has(i.Type))return n;let o=i.Properties?.EnableCloudwatchLogsExports;if(Array.isArray(o)&&o.length>0)return n;let a=P(i,r),c=T(s,r),u=_(c);return n[r]={issues:[e(r,"RDS database does not export logs to CloudWatch.",D("Set EnableCloudwatchLogsExports to the relevant log types for the engine (e.g. ['error','general','slowquery'] for MySQL, ['postgresql'] for PostgreSQL, ['audit','error','general','slowquery'] for MariaDB).",c,"databaseProps.cloudwatchLogsExports"),u?"LOW":"MEDIUM","Security",a,"cdkInsights")]},n},{});var CW=new Set([1,5,10,15,30,60]),Vk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::RDS::DBInstance")return n;let o=i.Properties?.MonitoringInterval,a=typeof o=="number"?o:typeof o=="string"?Number.parseInt(o,10):void 0;if(typeof a=="number"&&CW.has(a))return n;let c=P(i,r),u=T(s,r),l=_(u);return n[r]={issues:[e(r,"RDS Instance does not have enhanced monitoring enabled.",D("Set MonitoringInterval to 1, 5, 10, 15, 30, or 60 (seconds) and provide MonitoringRoleArn so RDS can publish OS-level metrics to CloudWatch Logs.",u,"databaseProps.monitoringInterval"),l?"LOW":"MEDIUM","Operational Excellence",c,"cdkInsights")]},n},{});var qk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::RDS::DBInstance")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=i.Properties??{},l=u.MultiAZ===!0,d=u.StorageType==="gp2",p=typeof u.StorageType>"u";return l&&(d||p)&&(n[r]={issues:[e(r,d?"RDS instance is using Multi-AZ with gp2 storage. Consider gp3 for lower costs.":"RDS instance is using Multi-AZ without explicitly setting a storage type. gp3 may offer better performance and cost savings.",D("Switch to gp3 storage for RDS to reduce costs and improve performance.",o),c("MEDIUM"),"Cost Optimization",P(i,r),"cdkInsights")]}),n},{});var Kk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::RDS::DBInstance")return n;let o=T(s,r),a=_(o),c=l=>a?$(l):l,u=P(i,r);return i.Properties?.PubliclyAccessible===!0&&(n[r]={issues:[e(r,"RDS instance is publicly accessible from the internet.",D("Set PubliclyAccessible to false and access the database through private subnets, bastion hosts, or VPN. If public access is intentional (e.g. a dev or staging database with restricted security groups), suppress this rule for the resource.",o),c("HIGH"),"Security",u,"cdkInsights")]}),n},{});var Zk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Redshift::Cluster")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=[];return i.Properties?.Encrypted!==!0&&l.push(e(r,"Redshift cluster does not have encryption at rest enabled.",D("Set Encrypted to true and specify a KmsKeyId to protect data at rest.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Yk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Redshift::Cluster")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.LoggingProperties?.BucketName||(n[r]={issues:[e(r,"Redshift cluster does not have audit logging enabled.",D("Configure LoggingProperties with an S3 bucket to capture connection logs, user activity, and query activity.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var Jk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Redshift::Cluster")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.PubliclyAccessible===!0&&(n[r]={issues:[e(r,"Redshift cluster is publicly accessible.",D("Set PubliclyAccessible to false and use VPC endpoints or bastion hosts for secure access. If public access is intentional (e.g. analytics tooling or customer-facing dashboards) ensure security groups restrict the source CIDRs and suppress this rule for the resource.",o),c("HIGH"),"Security",u,"cdkInsights")]}),n},{});var Qk=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Route53::HostedZone"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Route53::DNSSEC"),i=new Set(r.map(([,o])=>{let a=o.Properties?.HostedZoneId;return typeof a=="string"?a:a?.Ref?a.Ref:null}).filter(Boolean));return n.reduce((o,[a,c])=>{if(c.Properties?.HostedZoneConfig?.Comment?.includes("private"))return o;let u=P(c,a);if(!i.has(a)){let d=T(s,a),p=_(d),f=m=>p?$(m):m;o[a]={issues:[e(a,"Route53 Hosted Zone does not have DNSSEC signing enabled.",D("Enable DNSSEC to protect against DNS spoofing and cache poisoning attacks by cryptographically signing DNS records.",d),f("LOW"),"Security",u,"cdkInsights")]}}return o},{})};var Xk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Route53::HealthCheck")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=[],d=i.Properties?.HealthCheckConfig;return d?.Type==="HTTP"&&l.push(e(r,"Route53 Health Check uses HTTP instead of HTTPS.",D("Use HTTPS for health checks to ensure the endpoint supports secure connections and to validate SSL certificates.",o),c("LOW"),"Security",u,"cdkInsights")),d?.RequestInterval===30&&l.push(e(r,"Route53 Health Check uses standard (30 second) request interval.",D("Consider using fast interval (10 seconds) for critical endpoints to detect failures more quickly.",o),c("LOW"),"Reliability",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var eR=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Route53::HostedZone"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Route53::QueryLoggingConfig"),i=new Set(r.map(([,o])=>{let a=o.Properties?.HostedZoneId;return typeof a=="string"?a:a?.Ref?a.Ref:null}).filter(Boolean));return n.reduce((o,[a,c])=>{let u=P(c,a);if(!i.has(a)){let d=T(s,a),p=_(d),f=m=>p?$(m):m;o[a]={issues:[e(a,"Route53 Hosted Zone does not have query logging enabled.",D("Enable query logging to CloudWatch Logs for DNS query analysis, troubleshooting, and security monitoring.",d),f("LOW"),"Security",u,"cdkInsights")]}}return o},{})};var tR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::Bucket")return n;let o=[],a=i.Properties??{},c=P(i,r),u=T(s,r),l=_(u);a.BucketEncryption||o.push(e(r,"S3 Bucket lacks encryption.",D("Enable encryption at rest for better security.",u,"bucketProps.encryption"),l?"MEDIUM":"HIGH","Security",c,"cdkInsights"));let d=a?.PublicAccessBlockConfiguration;return d?(d.BlockPublicAcls===!1&&o.push(e(r,"S3 Bucket allows public ACLs (BlockPublicAcls is false).","Set BlockPublicAcls to true to prevent public ACLs from being applied.","CRITICAL","Security",c,"cdkInsights")),d.BlockPublicPolicy===!1&&o.push(e(r,"S3 Bucket allows public bucket policies (BlockPublicPolicy is false).","Set BlockPublicPolicy to true to prevent public bucket policies.","CRITICAL","Security",c,"cdkInsights")),d.IgnorePublicAcls===!1&&o.push(e(r,"S3 Bucket does not ignore public ACLs (IgnorePublicAcls is false).","Set IgnorePublicAcls to true to ignore any public ACLs on the bucket.","HIGH","Security",c,"cdkInsights")),d.RestrictPublicBuckets===!1&&o.push(e(r,"S3 Bucket does not restrict public bucket access (RestrictPublicBuckets is false).","Set RestrictPublicBuckets to true to restrict access to the bucket to only authorized users.","HIGH","Security",c,"cdkInsights"))):o.push(e(r,"S3 Bucket has no PublicAccessBlockConfiguration defined.","Configure PublicAccessBlockConfiguration with BlockPublicAcls, BlockPublicPolicy, IgnorePublicAcls, and RestrictPublicBuckets all set to true.","HIGH","Security",c,"cdkInsights")),a.VersioningConfiguration||o.push(e(r,"S3 Bucket has no versioning enabled.","Enable versioning to protect against accidental deletions.","MEDIUM","Operational Excellence",c,"cdkInsights")),o.length>0&&(n[r]={issues:o}),n},{});var DW=new Set(["*","s3:*","s3:DeleteBucket","s3:DeleteBucketPolicy","s3:PutBucketPolicy"]),wW=new Set(["aws:PrincipalArn","aws:PrincipalAccount","aws:PrincipalIsAWSService"]),AW=new Set(["StringNotEquals","StringNotLike","ArnNotLike","ArnNotEquals"]),EW=t=>{if(t==="*")return!0;if(t&&typeof t=="object"&&!Array.isArray(t)){let e=t,s=e.AWS;if(s==="*"||Array.isArray(s)&&s.includes("*")||e.Service==="*")return!0}return!1},IW=t=>typeof t=="string"?[t]:Array.isArray(t)?t.filter(e=>typeof e=="string"):[],kW=t=>IW(t).find(e=>DW.has(e)),RW=t=>t===!1||t==="false"||t==="False",FW=t=>{if(t==null)return!0;let e=Array.isArray(t)?t:[t];if(e.length===0)return!0;for(let s of e){if(typeof s!="string"||s==="*")return!0;let n=s.split(":::")[1];if(n===void 0||!n.includes("/"))return!0}return!1},_W=t=>{let e=t.Condition;if(!e||typeof e!="object")return!1;let s=e.Bool??e.BoolIfExists;return s?RW(s["aws:SecureTransport"]):!1},TW=t=>{if(!t||typeof t!="object")return!1;for(let[e,s]of Object.entries(t)){if(!s||typeof s!="object")continue;let n=Object.keys(s);if(n.includes("aws:PrincipalIsAWSService"))return!0;if(AW.has(e)){for(let r of n)if(wW.has(r))return!0}}return!1},PW=t=>{if(t.Effect!=="Deny"||t.NotPrincipal!==void 0||!EW(t.Principal))return;let e=kW(t.Action);if(e&&!_W(t)&&!TW(t.Condition)&&FW(t.Resource))return e},sR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::BucketPolicy")return n;let o=i.Properties?.PolicyDocument?.Statement;if(!Array.isArray(o))return n;let a=o.map(PW).find(d=>d!==void 0);if(!a)return n;let c=P(i,r),u=T(s,r),l=_(u);return n[r]={issues:[e(r,`Bucket policy contains a Deny statement on ${a} with Principal: '*' and no carveout for the account root or admin role. This will lock the account out of the bucket \u2014 recovery requires breaking glass on the account root credentials to remove the bucket policy. AWS Support will typically not intervene for this scenario.`,D("Add a NotPrincipal exemption for the account root (e.g. arn:aws:iam::<account>:root) or use a Condition with StringNotEquals on aws:PrincipalArn to exempt your admin role(s). If the Deny is intended for transport security, scope it with aws:SecureTransport rather than a blanket Deny on Principal: '*'.",u,"bucketPolicyProps.statements"),l?"HIGH":"CRITICAL","Security",c,"cdkInsights")]},n},{});var LW=t=>t===!1||t==="false"||t==="False",OW=t=>{if(t.Effect!=="Deny")return!1;let e=t.Condition;if(!e||typeof e!="object")return!1;let s=e.Bool??e.BoolIfExists;return s?LW(s["aws:SecureTransport"]):!1},nR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::BucketPolicy")return n;let o=i.Properties?.PolicyDocument?.Statement;if(Array.isArray(o)&&o.some(OW))return n;let c=P(i,r),u=T(s,r),l=_(u);return n[r]={issues:[e(r,"S3 BucketPolicy does not deny non-SSL/TLS requests.",D("Add a Deny statement with Condition.Bool['aws:SecureTransport']=false to enforce TLS for all S3 access. CIS AWS Foundations 2.1.1 and PCI-DSS require encrypted-in-transit requests.",u,"bucketPolicyProps.statements"),l?"MEDIUM":"HIGH","Security",c,"cdkInsights")]},n},{});var rR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::Bucket")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r);return(i.Properties?.LifecycleConfiguration?.Rules||[]).length===0&&(n[r]={issues:[e(r,"S3 bucket has no lifecycle policy configured.",D("Configure lifecycle rules to automatically transition objects to cheaper storage classes (e.g., Glacier) or delete old versions to optimize storage costs.",o),c("MEDIUM"),"Cost Optimization",u,"cdkInsights")]}),n},{});var iR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::Bucket"||(i.Properties??{}).LoggingConfiguration?.DestinationBucketName)return n;let c=P(i,r),u=T(s,r),l=_(u);return n[r]={issues:[e(r,"S3 Bucket has no access logging configured.",D("Set LoggingConfiguration.DestinationBucketName to capture object-level access logs in a separate bucket. Required by CIS AWS Foundations 2.1.2 and useful for incident forensics.",u,"bucketProps.serverAccessLogsBucket"),l?"LOW":"MEDIUM","Security",c,"cdkInsights")]},n},{});var MW=/\b(prod|production|critical|backup|dr|disaster|recovery|primary)\b/i,oR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::Bucket")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=i.Properties?.BucketName||r,d=i.Properties?.ReplicationConfiguration;return MW.test(l)&&!d?.Rules?.length&&(n[r]={issues:[e(r,"Critical S3 bucket does not have cross-region replication configured.",D("Consider enabling cross-region replication for disaster recovery and data durability on production/critical buckets.",o),c("LOW"),"Reliability",u,"cdkInsights")]}),n},{});var aR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::S3::Bucket"&&!i.Properties?.IntelligentTieringConfigurations){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"S3 Bucket does not use Intelligent-Tiering. Consider enabling it for cost optimization.",D("Enable Intelligent-Tiering for automatic cost optimization of infrequently accessed objects.",o),c("LOW"),"Cost Optimization",P(i,r),"cdkInsights")]}}return n},{});var cR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{let o=i.Properties??{};if(i.Type==="AWS::SecretsManager::Secret"&&o.PublicPolicy){let a=T(s,r),c=_(a),u=l=>c?$(l):l;n[r]={issues:[e(r,"Secret is publicly accessible.",D("Restrict secret access using IAM policies to ensure only authorized entities can retrieve it.",a),u("CRITICAL"),"Security",P(i,r),"cdkInsights")]}}return n},{});var uR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::SNS::Topic"&&!i.Properties?.KmsMasterKeyId){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"SNS topic is not encrypted.",D("Enable AWS KMS encryption for SNS to protect sensitive messages in transit and at rest.",o),c("HIGH"),"Security",P(i,r),"cdkInsights")]}}return n},{});var lR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::SQS::Queue"&&!i.Properties?.KmsMasterKeyId){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"SQS queue is not encrypted.",D("Enable AWS KMS encryption for SQS to protect message data in transit and at rest.",o),c("HIGH"),"Security",P(i,r),"cdkInsights")]}}return n},{});var dR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::StepFunctions::StateMachine"&&i.Properties?.LoggingConfiguration===void 0){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"Step Function lacks logging configuration.",D("Enable logging for the Step Function using AWS CloudWatch to improve monitoring and debugging.",o),c("HIGH"),"Security",P(i,r),"cdkInsights")]}}return n},{});var pR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EC2::SecurityGroup")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);if(i.Properties?.GroupName==="default"){let d=i.Properties?.SecurityGroupIngress||[],p=i.Properties?.SecurityGroupEgress||[];(d.length>0||p.length>0)&&(n[r]={issues:[e(r,"VPC default security group has rules configured.",D("Remove all rules from the default security group and use custom security groups instead. Default groups cannot be deleted but should have no rules.",o),c("MEDIUM"),"Security",u,"cdkInsights")]})}return n},{});var fR=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::EC2::VPC"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::EC2::FlowLog"),i=new Set(r.filter(([,o])=>o.Properties?.ResourceType==="VPC").map(([,o])=>{let a=o.Properties?.ResourceId;return typeof a=="string"?a:a?.Ref?a.Ref:null}).filter(Boolean));return n.reduce((o,[a,c])=>{let u=P(c,a);if(!i.has(a)){let d=T(s,a),p=_(d),f=m=>p?$(m):m;o[a]={issues:[e(a,"VPC does not have flow logs enabled.",D("Enable VPC Flow Logs to capture network traffic information for security analysis and troubleshooting.",d),f("MEDIUM"),"Security",u,"cdkInsights")]}}return o},{})};var mR=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::WAFv2::WebACL"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::WAFv2::LoggingConfiguration"),i=new Set(r.map(([,o])=>{let a=o.Properties?.ResourceArn;return typeof a=="string"?a:a?.Ref?a.Ref:a?.["Fn::GetAtt"]?.[0]?a["Fn::GetAtt"][0]:null}).filter(Boolean));return n.reduce((o,[a,c])=>{let u=P(c,a);if(!(i.has(a)||r.some(([,d])=>{let p=d.Properties?.ResourceArn;return typeof p=="object"&&(p?.Ref===a||p?.["Fn::GetAtt"]?.[0]===a)}))){let d=T(s,a),p=_(d),f=m=>p?$(m):m;o[a]={issues:[e(a,"WAF WebACL does not have logging configured.",D("Enable WAF logging to capture detailed information about web requests for security analysis and compliance.",d),f("MEDIUM"),"Security",u,"cdkInsights")]}}return o},{})};var hR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::WAFv2::WebACL")return n;let o=T(s,r),a=_(o),c=m=>a?$(m):m,u=P(i,r),l=[],d=i.Properties?.DefaultAction;d?.Allow&&!d?.Block&&l.push(e(r,"WAF WebACL has default action set to Allow, which permits all traffic not matching rules.",D("Consider setting the default action to Block and explicitly allowing known-good traffic patterns for defense-in-depth.",o),c("MEDIUM"),"Security",u,"cdkInsights")),i.Properties?.VisibilityConfig?.CloudWatchMetricsEnabled||l.push(e(r,"WAF WebACL does not have CloudWatch metrics enabled.",D("Enable CloudWatchMetricsEnabled in VisibilityConfig to monitor WAF activity and detect potential attacks.",o),c("MEDIUM"),"Security",u,"cdkInsights"));let f=i.Properties?.Rules;return(!f||f.length===0)&&l.push(e(r,"WAF WebACL has no rules defined.",D("Add WAF rules to protect against common web exploits like SQL injection, XSS, and bot traffic.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var BW=t=>Object.values(t.Resources||{}).some(e=>e.Type==="Custom::S3BucketNotifications"),gR=t=>Object.values(t.Resources||{}).some(e=>e.Type==="AWS::Lambda::EventSourceMapping"),yR=t=>Object.values(t.Resources||{}).some(e=>e.Type==="AWS::Events::Rule"),xR=(t,e)=>Object.values(t.Resources||{}).some(s=>s.Type!=="AWS::ElasticLoadBalancingV2::Listener"?!1:(s.Properties?.DefaultActions||s.Properties?.Actions)?.some(r=>r.TargetGroupArn?.startsWith(e))),NW=t=>Object.values(t.Resources||{}).some(e=>e.Type==="AWS::Lambda::Permission"&&e.Properties?.Principal==="apigateway.amazonaws.com"),gp=(t,e)=>Object.values(t.Resources||{}).some(s=>s.Type==="AWS::ApiGateway::Integration"&&typeof s.Properties?.Uri=="string"&&s.Properties.Uri.includes(e)),eu=(t,e)=>Object.values(t.Resources||{}).some(s=>s.Type==="AWS::IoT::TopicRule"&&s.Properties?.TopicRulePayload?.actions?.some(n=>Object.hasOwn(n,e))),WW=t=>Object.values(t.Resources||{}).some(e=>e.Type==="AWS::ECS::Service"),bR=(t,e)=>Object.values(t.Resources||{}).some(s=>s.Type==="AWS::SNS::Subscription"&&s.Properties?.Protocol===e),SR=(t,e)=>{let s=[],n={},r={};for(let[o,a]of Object.entries(e)){let c=a.requiredResourceTypes||[];if(c.length!==0){r[o]=c.length;for(let u of c)n[u]||(n[u]=[]),n[u].push(o)}}let i={};for(let o of Object.values(t.Resources||{})){let a=o.Type,c=n[a];if(c){for(let u of c)if(i[u]=(i[u]||0)+1,i[u]===r[u]){let l=e[u],d=!0;switch(u){case"aws-s3-lambda":d=BW(t)||gR(t);break;case"aws-dynamodbstreams-lambda":d=gR(t);break;case"aws-eventbridge-lambda":d=yR(t);break;case"aws-alb-fargate":d=xR(t,"arn:aws:ecs:");break;case"aws-alb-lambda":d=xR(t,"arn:aws:lambda:");break;case"aws-apigateway-lambda":d=NW(t);break;case"aws-apigateway-sqs":d=gp(t,"sqs");break;case"aws-apigateway-dynamodb":d=gp(t,"dynamodb");break;case"aws-apigateway-kinesisstreams":d=gp(t,"kinesis");break;case"aws-apigateway-sagemakerendpoint":d=gp(t,"sagemaker");break;case"aws-iot-lambda":d=eu(t,"lambda");break;case"aws-iot-kinesisstreams":d=eu(t,"kinesis");break;case"aws-iot-kinesisfirehose-s3":d=eu(t,"firehose");break;case"aws-iot-sqs":d=eu(t,"sqs");break;case"aws-iot-s3":d=eu(t,"s3");break;case"aws-sns-lambda":d=bR(t,"lambda");break;case"aws-sns-sqs":d=bR(t,"sqs");break;case"aws-fargate-dynamodb":case"aws-fargate-eventbridge":case"aws-fargate-kinesisfirehose":case"aws-fargate-kinesisstreams":case"aws-fargate-opensearch":case"aws-fargate-s3":case"aws-fargate-secretsmanager":case"aws-fargate-sns":case"aws-fargate-sqs":case"aws-fargate-ssmstringparameter":case"aws-fargate-stepfunctions":d=WW(t);break;case"aws-eventbridge-kinesisfirehose-s3":case"aws-eventbridge-kinesisstreams":case"aws-eventbridge-sns":case"aws-eventbridge-sqs":case"aws-eventbridge-stepfunctions":d=yR(t);break}if(!d)continue;s.push({resourceId:l.className,issue:`Possible Pattern detected: ${l.friendlyName}`,recommendation:`Consider using the AWS Solutions Construct \`${l.className}\` from \`@aws-solutions-constructs/${u}\`.`,severity:"LOW",wafPillar:"Operational Excellence",docUrl:l.documentationUrl,githubUrl:l.githubUrl,constructPath:l.className,foundBy:"cdkInsights"}),delete r[u]}}}return s};var vR=()=>({iamPolicies:Sk,iamPermissionBoundary:vk,iamCrossAccountTrust:bk,iamUserPolicies:Dk,s3Buckets:tR,s3BucketLogging:iR,s3BucketPolicySsl:nR,s3BucketPolicySelfLockout:sR,s3IntelligentTiering:aR,s3LifecyclePolicy:rR,s3Replication:oR,securityGroups:K1,ec2InstanceType:z1,ec2PublicIp:q1,ec2SubnetAutoPublicIp:Z1,natGatewayUsage:V1,ebsVolumes:$1,lambdaEnvironmentVariables:Rk,lambdaMemory:Fk,lambdaReservedConcurrency:Ik,lambdaDeadLetterQueue:kk,lambdaRuntime:Lk,lambdaVpcNatWarning:Ok,lambdaPermission:Pk,rdsEncryption:Hk,rdsMultiAZ:qk,rdsPublicAccess:Kk,rdsBackupRetention:Uk,rdsDeletionProtection:Gk,rdsLogging:zk,rdsEnhancedMonitoring:Vk,dynamoDBAutoScaling:N1,dynamoDBStreams:W1,dynamoDBPitr:B1,dynamoDBEncryption:M1,cloudFrontHttpsOnly:A1,cloudFrontWafAssociation:k1,cloudFrontLogging:E1,cloudFrontTls:I1,elbDeletionProtection:ok,elbLogging:ck,elbHttpsListeners:ak,elbSecurityPolicy:uk,ecsSecrets:sk,ecsLogging:X1,ecsServiceConnectLogs:ek,ecsResources:tk,cognitoPasswordPolicy:L1,cognitoMfa:P1,cognitoAdvancedSecurity:O1,wafWebAcl:hR,wafLogging:mR,cloudWatchLogRetention:T1,cloudWatchEncryption:_1,cloudWatchAlarms:F1,route53Dnssec:Qk,route53HealthChecks:Xk,route53QueryLogging:eR,elastiCacheEncryption:dk,elastiCacheAuth:lk,elastiCacheFailover:pk,ecrScanning:Q1,ecrLifecycle:J1,ecrImmutableTags:Y1,openSearchEncryption:$k,openSearchAccessControl:Wk,openSearchLogging:jk,acmValidation:y1,backupPlans:D1,backupVault:w1,vpcFlowLogs:fR,vpcDefaultSecurityGroup:pR,kinesisEncryption:wk,kinesisRetention:Ak,appSyncAuth:S1,appSyncLogging:v1,appSyncWaf:C1,eksPublicEndpoint:ik,eksEncryption:nk,eksLogging:rk,redshiftEncryption:Zk,redshiftPublicAccess:Jk,redshiftLogging:Yk,mskEncryption:Bk,mskAuth:Mk,mskLogging:Nk,glueEncryption:gk,glueConnections:hk,efsEncryption:j1,autoScalingGroupHealthCheck:G1,autoScalingLaunchConfigPublicIp:H1,apiGateway:x1,apiGatewayMethodAuth:b1,secretsManager:cR,cloudTrailLogging:R1,eventBridgeRules:fk,eventBusPolicy:mk,kmsKeys:Ek,sns:uR,sqs:lR,stepFunctions:dR,crossResourceRelationships:fp,stackArchitecture:mp,solutionsPatterns:SR});var tu=(t={})=>{let{ttl:e=3e5,maxSize:s=1e3}=t,n=new Map,r=new Set,i=[],o=Date.now(),a=6e4,c=f=>Date.now()-f.timestamp>f.ttl,u=f=>{r.delete(f)},l=()=>{let f=0;for(let m=0;m<i.length;m++)r.has(i[m])&&(i[f++]=i[m]);i.length=f},d=()=>{let f=Date.now();if(f-o<a)return;o=f;let m=[];for(let[g,h]of n.entries())c(h)&&m.push(g);for(let g of m)n.delete(g),u(g);m.length>0&&l()},p=()=>{for(;n.size>=s&&i.length>0;){let f=i.shift();f&&r.has(f)&&(n.delete(f),r.delete(f))}};return{get(f){let m=n.get(f);if(m){if(c(m)){n.delete(f),u(f);return}return m.value}},set(f,m,g){n.size>=s*.9&&d(),p(),r.has(f)&&u(f),n.set(f,{value:m,timestamp:Date.now(),ttl:g??e}),r.add(f),i.push(f)},clear(){n.clear(),r.clear(),i.length=0},size(){return n.size},has(f){let m=n.get(f);return m?c(m)?(n.delete(f),u(f),!1):!0:!1}}},CR=(t,e={})=>{let s=tu(e);return(...n)=>{let r;try{r=JSON.stringify(n)}catch{return t(...n)}let i=s.get(r);if(i!==void 0)return i;let o=t(...n);return s.set(r,o),o}};function su(t,e){let s=e.split("."),n=t;for(let r of s){if(n==null||typeof n!="object")return;n=n[r]}return n}function uy(t,e){switch(t.type){case"property_exists":{let s=su(e,t.path),n=s!=null;return t.negate?!n:n}case"property_equals":{let s=su(e,t.path),n=JSON.stringify(s)===JSON.stringify(t.value);return t.negate?!n:n}case"property_matches":{let s=su(e,t.path);if(typeof s!="string")return!!t.negate;let n=new RegExp(t.pattern).test(s);return t.negate?!n:n}case"property_gt":{let s=su(e,t.path);return typeof s!="number"?!1:s>t.value}case"property_lt":{let s=su(e,t.path);return typeof s!="number"?!1:s<t.value}case"and":return t.conditions.every(s=>uy(s,e));case"or":return t.conditions.some(s=>uy(s,e));default:return!1}}function DR(t,e,s){if(e.length===0)return{};let n={};for(let[r,i]of Object.entries(t.Resources||{}))for(let o of e)if(o.resourceTypes.some(c=>c.endsWith("*")?i.Type.startsWith(c.slice(0,-1)):i.Type===c))try{if(uy(o.condition,i)){let u=s(r,`[${o.ruleId}] ${o.description}`,o.recommendation,o.severity,o.wafPillar,"","cdkInsights");u.ruleId=o.ruleId,n[r]||(n[r]={issues:[]}),n[r].issues.push(u)}}catch(c){qe.warn(`Error evaluating custom rule '${o.ruleId}' on resource '${r}'`,{error:c instanceof Error?c.message:String(c)})}return n}var nu={"iam-policies-overly-permissive":{ruleId:"iam-policies-overly-permissive",checkKey:"iamPolicies",name:"IAM Overly Permissive Policies",description:"Detects IAM policies with overly permissive actions like * wildcards.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Review IAM policies for overly broad permissions","Replace wildcard (*) actions with specific actions","Use IAM Access Analyzer to identify unused permissions"],resourceTypes:["AWS::IAM::Policy","AWS::IAM::Role","AWS::IAM::ManagedPolicy"]},"iam-permission-boundary-missing":{ruleId:"iam-permission-boundary-missing",checkKey:"iamPermissionBoundary",name:"IAM Permission Boundary Missing",description:"Detects IAM roles without permission boundaries.",severity:"LOW",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html",complianceFrameworks:["SOC2","CIS","NIST"],remediationSteps:["Create a permission boundary policy","Attach the permission boundary to IAM roles"],resourceTypes:["AWS::IAM::Role"]},"iam-cross-account-trust":{ruleId:"iam-cross-account-trust",checkKey:"iamCrossAccountTrust",name:"IAM Cross-Account Trust",description:"Detects IAM roles with cross-account trust relationships.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Verify cross-account trust is intentional","Add conditions to restrict access (e.g., external ID)","Document the business justification"],resourceTypes:["AWS::IAM::Role"]},"iam-user-direct-policies":{ruleId:"iam-user-direct-policies",checkKey:"iamUserPolicies",name:"IAM User Direct Policies",description:"Detects IAM Users with policies attached directly (inline Policies or ManagedPolicyArns). CIS AWS Foundations 1.15 requires users to inherit permissions through groups.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#use-groups-for-permissions",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Create an IAM Group with the required policies","Add the user to the group instead of attaching policies directly","Remove Policies and ManagedPolicyArns from AWS::IAM::User resources"],resourceTypes:["AWS::IAM::User"]},"s3-bucket-public-access":{ruleId:"s3-bucket-public-access",checkKey:"s3Buckets",name:"S3 Bucket Public Access",description:"Detects S3 buckets with public access enabled.",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Enable S3 Block Public Access settings","Review bucket policies for public access","Use VPC endpoints for private access"],resourceTypes:["AWS::S3::Bucket"]},"s3-intelligent-tiering":{ruleId:"s3-intelligent-tiering",checkKey:"s3IntelligentTiering",name:"S3 Intelligent Tiering",description:"Recommends S3 Intelligent Tiering for cost optimization.",severity:"LOW",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering.html",remediationSteps:["Enable S3 Intelligent-Tiering for buckets with varying access patterns","Configure archive access tiers for infrequently accessed data"],resourceTypes:["AWS::S3::Bucket"]},"s3-lifecycle-policy-missing":{ruleId:"s3-lifecycle-policy-missing",checkKey:"s3LifecyclePolicy",name:"S3 Lifecycle Policy Missing",description:"Detects S3 buckets without lifecycle policies.",severity:"MEDIUM",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html",remediationSteps:["Create lifecycle rules to transition objects to cheaper storage classes","Set expiration rules for temporary data","Use lifecycle rules to delete incomplete multipart uploads"],resourceTypes:["AWS::S3::Bucket"]},"s3-replication-missing":{ruleId:"s3-replication-missing",checkKey:"s3Replication",name:"S3 Replication Missing",description:"Detects critical S3 buckets without cross-region replication.",severity:"LOW",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html",remediationSteps:["Enable cross-region replication for disaster recovery","Configure replication rules for critical data"],resourceTypes:["AWS::S3::Bucket"]},"s3-bucket-access-logging-disabled":{ruleId:"s3-bucket-access-logging-disabled",checkKey:"s3BucketLogging",name:"S3 Bucket Access Logging Disabled",description:"Detects S3 buckets without server access logging configured. Required by CIS AWS Foundations 2.1.2 and useful for incident forensics.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Set LoggingConfiguration.DestinationBucketName on the bucket to capture access logs","Use a separate bucket for logs to avoid recursive logging","Configure a lifecycle rule on the log bucket to manage storage costs"],resourceTypes:["AWS::S3::Bucket"]},"s3-bucket-policy-non-ssl":{ruleId:"s3-bucket-policy-non-ssl",checkKey:"s3BucketPolicySsl",name:"S3 BucketPolicy Permits Non-SSL Requests",description:"Detects AWS::S3::BucketPolicy resources that lack a Deny statement enforcing aws:SecureTransport. Without this, the bucket accepts plain HTTP requests in addition to HTTPS.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html#enforce-tls",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Add a Deny statement with Action s3:* and Condition Bool aws:SecureTransport=false","Apply the Deny to both the bucket ARN and the bucket-objects ARN (arn/* )","Use BoolIfExists if the policy already accepts unsigned requests via specific clauses"],resourceTypes:["AWS::S3::BucketPolicy"]},"s3-bucket-policy-self-lockout":{ruleId:"s3-bucket-policy-self-lockout",checkKey:"s3BucketPolicySelfLockout",name:"S3 BucketPolicy Self-Lockout",description:"Detects AWS::S3::BucketPolicy resources containing a Deny statement on s3:DeleteBucket, s3:*, or * with a broad Principal and no NotPrincipal or aws:PrincipalArn carveout for the account root or admin role. Such a policy locks the account out of its own bucket \u2014 recovery requires breaking glass on the account root credentials, since AWS Support typically declines to intervene where customers have a self-service path via root.",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html",complianceFrameworks:["SOC2","NIST"],remediationSteps:["Add a NotPrincipal exemption for the account root (arn:aws:iam::<account>:root) or admin role(s)","Or use a Condition with StringNotEquals on aws:PrincipalArn to exempt admin role ARNs","If the Deny is intended for transport security, scope it with aws:SecureTransport rather than a blanket Deny on Principal: '*'"],resourceTypes:["AWS::S3::BucketPolicy"]},"lambda-env-sensitive-data":{ruleId:"lambda-env-sensitive-data",checkKey:"lambdaEnvironmentVariables",name:"Lambda Sensitive Environment Variables",description:"Detects Lambda functions with sensitive data in environment variables.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Move sensitive data to AWS Secrets Manager","Use SSM Parameter Store with SecureString","Enable Lambda environment variable encryption"],resourceTypes:["AWS::Lambda::Function"]},"lambda-memory-optimization":{ruleId:"lambda-memory-optimization",checkKey:"lambdaMemory",name:"Lambda Memory Optimization",description:"Detects Lambda functions with suboptimal memory configuration.",severity:"LOW",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html#configuration-memory-console",remediationSteps:["Use AWS Lambda Power Tuning to find optimal memory","Consider cost vs performance tradeoffs"],resourceTypes:["AWS::Lambda::Function"]},"lambda-reserved-concurrency-missing":{ruleId:"lambda-reserved-concurrency-missing",checkKey:"lambdaReservedConcurrency",name:"Lambda Reserved Concurrency Missing",description:"Detects Lambda functions without reserved concurrency.",severity:"LOW",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html",remediationSteps:["Set reserved concurrency for critical functions","Use provisioned concurrency for latency-sensitive workloads"],resourceTypes:["AWS::Lambda::Function"]},"lambda-dlq-missing":{ruleId:"lambda-dlq-missing",checkKey:"lambdaDeadLetterQueue",name:"Lambda Dead Letter Queue Missing",description:"Detects Lambda functions without dead letter queue configuration.",severity:"MEDIUM",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-dlq",remediationSteps:["Configure a dead letter queue (SQS or SNS)","Set up monitoring for DLQ messages","Implement retry logic for failed invocations"],resourceTypes:["AWS::Lambda::Function"]},"lambda-vpc-nat-cost":{ruleId:"lambda-vpc-nat-cost",checkKey:"lambdaVpcNatWarning",name:"Lambda VPC NAT Gateway Cost Warning",description:"Warns about potential NAT Gateway costs for VPC-attached Lambda functions.",severity:"MEDIUM",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html",remediationSteps:["Use VPC endpoints instead of NAT Gateway where possible","Consider if VPC attachment is necessary","Monitor NAT Gateway data processing costs"],resourceTypes:["AWS::Lambda::Function"]},"lambda-permission-public":{ruleId:"lambda-permission-public",checkKey:"lambdaPermission",name:"Lambda Permission Permits Public Access",description:"Detects AWS::Lambda::Permission and AWS::Lambda::LayerVersionPermission resources that grant invoke / use rights with a wildcard Principal, or grant a service principal without a SourceArn / SourceAccount / PrincipalOrgID restriction (confused-deputy risk).",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Replace wildcard Principal with a specific 12-digit AWS account ID or {Ref: AWS::AccountId}","For service principals, set SourceArn to the specific resource that may invoke the function","For S3 service principal, set SourceAccount to your AWS account ID","For LayerVersionPermission, prefer OrganizationId over wildcard Principal"],resourceTypes:["AWS::Lambda::Permission","AWS::Lambda::LayerVersionPermission"]},"dynamodb-autoscaling-missing":{ruleId:"dynamodb-autoscaling-missing",checkKey:"dynamoDBAutoScaling",name:"DynamoDB Auto Scaling Missing",description:"Detects DynamoDB tables without auto-scaling enabled.",severity:"MEDIUM",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/AutoScaling.html",remediationSteps:["Enable DynamoDB auto-scaling or use on-demand capacity","Set appropriate minimum and maximum capacity units"],resourceTypes:["AWS::DynamoDB::Table"]},"dynamodb-streams-disabled":{ruleId:"dynamodb-streams-disabled",checkKey:"dynamoDBStreams",name:"DynamoDB Streams Disabled",description:"Detects DynamoDB tables without streams enabled.",severity:"LOW",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html",remediationSteps:["Enable DynamoDB Streams for change data capture","Consider point-in-time recovery for data protection"],resourceTypes:["AWS::DynamoDB::Table"]},"dynamodb-encryption-aws-owned-key":{ruleId:"dynamodb-encryption-aws-owned-key",checkKey:"dynamoDBEncryption",name:"DynamoDB Table Uses AWS-Owned Encryption Key",description:"Detects AWS::DynamoDB::Table resources without SSESpecification.SSEEnabled=true. DynamoDB always encrypts at rest, but the default AWS-owned key cannot be inspected, audited, or rotated by the customer \u2014 inadequate for HIPAA / PCI-DSS / FedRAMP workloads.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set SSESpecification.SSEEnabled to true on the table","Provide SSESpecification.KMSMasterKeyId pointing at a customer-managed KMS key","Verify the KMS key has rotation enabled (kms-key-rotation-disabled covers this)"],resourceTypes:["AWS::DynamoDB::Table"]},"dynamodb-pitr-disabled":{ruleId:"dynamodb-pitr-disabled",checkKey:"dynamoDBPitr",name:"DynamoDB Point-in-Time Recovery Disabled",description:"Detects DynamoDB tables without Point-in-Time Recovery enabled. PITR provides continuous backups for the last 35 days and is required for SOC2 / HIPAA data resilience.",severity:"MEDIUM",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/PointInTimeRecovery.html",remediationSteps:["Set PointInTimeRecoverySpecification.PointInTimeRecoveryEnabled to true on the table","Verify the AWS region supports PITR for your table type (Provisioned / On-Demand)"],resourceTypes:["AWS::DynamoDB::Table"]},"rds-encryption-disabled":{ruleId:"rds-encryption-disabled",checkKey:"rdsEncryption",name:"RDS Encryption Disabled",description:"Detects RDS instances without encryption at rest.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Enable encryption for new RDS instances","For existing instances, create encrypted snapshot and restore"],resourceTypes:["AWS::RDS::DBInstance","AWS::RDS::DBCluster"]},"rds-multi-az-disabled":{ruleId:"rds-multi-az-disabled",checkKey:"rdsMultiAZ",name:"RDS Multi-AZ Disabled",description:"Detects RDS instances without Multi-AZ deployment.",severity:"MEDIUM",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html",remediationSteps:["Enable Multi-AZ for production databases","Consider Aurora for automatic multi-AZ"],resourceTypes:["AWS::RDS::DBInstance"]},"rds-publicly-accessible":{ruleId:"rds-publicly-accessible",checkKey:"rdsPublicAccess",name:"RDS Publicly Accessible",description:"Detects RDS instances that are publicly accessible.",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Set PubliclyAccessible to false","Use VPC security groups to control access","Access databases through bastion hosts or VPN"],resourceTypes:["AWS::RDS::DBInstance"]},"rds-backup-retention-low":{ruleId:"rds-backup-retention-low",checkKey:"rdsBackupRetention",name:"RDS Backup Retention Low",description:"Detects RDS instances with insufficient backup retention.",severity:"MEDIUM",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html",complianceFrameworks:["SOC2","HIPAA","NIST"],remediationSteps:["Set backup retention period to at least 7 days","Consider longer retention for compliance requirements","Enable cross-region backup replication"],resourceTypes:["AWS::RDS::DBInstance","AWS::RDS::DBCluster"]},"rds-deletion-protection-disabled":{ruleId:"rds-deletion-protection-disabled",checkKey:"rdsDeletionProtection",name:"RDS Deletion Protection Disabled",description:"Detects RDS instances without deletion protection.",severity:"MEDIUM",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DeleteInstance.html",remediationSteps:["Enable deletion protection for production databases","Use CloudFormation DeletionPolicy: Retain"],resourceTypes:["AWS::RDS::DBInstance","AWS::RDS::DBCluster"]},"rds-logging-disabled":{ruleId:"rds-logging-disabled",checkKey:"rdsLogging",name:"RDS Logging Disabled",description:"Detects RDS DBInstance and DBCluster resources without EnableCloudwatchLogsExports configured. Engine logs (error, slow query, audit) are not exported to CloudWatch for retention or analysis.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set EnableCloudwatchLogsExports to the engine's relevant log types (e.g. ['error','slowquery'] for MySQL, ['postgresql'] for PostgreSQL)","Configure a CloudWatch Logs retention policy on the resulting log group","For Aurora, enable both DBCluster and per-instance log exports"],resourceTypes:["AWS::RDS::DBInstance","AWS::RDS::DBCluster"]},"rds-enhanced-monitoring-disabled":{ruleId:"rds-enhanced-monitoring-disabled",checkKey:"rdsEnhancedMonitoring",name:"RDS Enhanced Monitoring Disabled",description:"Detects RDS instances without enhanced monitoring (MonitoringInterval missing or set to 0). OS-level metrics are not published to CloudWatch Logs.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html",remediationSteps:["Set MonitoringInterval to one of 1, 5, 10, 15, 30, or 60 (seconds)","Provide MonitoringRoleArn pointing at an IAM role with AmazonRDSEnhancedMonitoringRole attached"],resourceTypes:["AWS::RDS::DBInstance"]},"ec2-instance-type-outdated":{ruleId:"ec2-instance-type-outdated",checkKey:"ec2InstanceType",name:"EC2 Instance Type Outdated",description:"Detects EC2 instances using older generation instance types.",severity:"LOW",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html",remediationSteps:["Upgrade to current generation instance types","Use AWS Compute Optimizer for recommendations"],resourceTypes:["AWS::EC2::Instance"]},"nat-gateway-usage":{ruleId:"nat-gateway-usage",checkKey:"natGatewayUsage",name:"NAT Gateway Usage",description:"Identifies NAT Gateway usage for cost awareness.",severity:"LOW",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html",remediationSteps:["Consider VPC endpoints to reduce NAT Gateway traffic","Use NAT instances for lower traffic volumes"],resourceTypes:["AWS::EC2::NatGateway"]},"security-group-unrestricted-ingress":{ruleId:"security-group-unrestricted-ingress",checkKey:"securityGroups",name:"Security Group Unrestricted Ingress",description:"Detects security groups with unrestricted ingress (0.0.0.0/0).",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Restrict ingress to specific IP ranges","Use security group references for internal traffic","Implement least privilege network access"],resourceTypes:["AWS::EC2::SecurityGroup"]},"ebs-volume-unencrypted":{ruleId:"ebs-volume-unencrypted",checkKey:"ebsVolumes",name:"EBS Volume Unencrypted",description:"Detects EBS volumes without encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Enable EBS encryption by default in account settings","Use KMS customer managed keys for additional control"],resourceTypes:["AWS::EC2::Volume"]},"ec2-subnet-auto-public-ip":{ruleId:"ec2-subnet-auto-public-ip",checkKey:"ec2SubnetAutoPublicIp",name:"EC2 Subnet Auto-Assigns Public IPs",description:"Detects AWS::EC2::Subnet resources with MapPublicIpOnLaunch=true. Instances launched into the subnet inherit a public IP by default, which makes them internet-reachable without an explicit opt-in at the ENI level.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set MapPublicIpOnLaunch to false unless this is intentionally a public subnet","Have instances opt into a public IP via the ENI configuration when needed","Use VPC endpoints / NAT for outbound access from private subnets"],resourceTypes:["AWS::EC2::Subnet"]},"ec2-instance-public-ip":{ruleId:"ec2-instance-public-ip",checkKey:"ec2PublicIp",name:"EC2 Instance Public IP",description:"Detects EC2 instances whose NetworkInterfaces specify AssociatePublicIpAddress=true, exposing the instance directly to the internet.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Set AssociatePublicIpAddress to false on the NetworkInterface","Place the instance in a private subnet and use a NAT Gateway / VPC endpoint for outbound","Use an ALB / NLB in a public subnet to front the workload instead"],resourceTypes:["AWS::EC2::Instance"]},"cloudfront-https-only":{ruleId:"cloudfront-https-only",checkKey:"cloudFrontHttpsOnly",name:"CloudFront HTTPS Only",description:"Detects CloudFront distributions allowing HTTP traffic.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set ViewerProtocolPolicy to https-only or redirect-to-https","Configure custom SSL certificate"],resourceTypes:["AWS::CloudFront::Distribution"]},"cloudfront-waf-missing":{ruleId:"cloudfront-waf-missing",checkKey:"cloudFrontWafAssociation",name:"CloudFront WAF Missing",description:"Detects CloudFront distributions without WAF association.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-awswaf.html",complianceFrameworks:["SOC2","PCI-DSS","NIST"],remediationSteps:["Associate AWS WAF web ACL with CloudFront distribution","Configure WAF rules for common attack patterns"],resourceTypes:["AWS::CloudFront::Distribution"]},"cloudfront-logging-disabled":{ruleId:"cloudfront-logging-disabled",checkKey:"cloudFrontLogging",name:"CloudFront Logging Disabled",description:"Detects CloudFront distributions without access logging.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable standard logging to S3","Consider real-time logs for detailed analysis"],resourceTypes:["AWS::CloudFront::Distribution"]},"cloudfront-tls-outdated":{ruleId:"cloudfront-tls-outdated",checkKey:"cloudFrontTls",name:"CloudFront TLS Outdated",description:"Detects CloudFront distributions using outdated TLS versions.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/secure-connections-supported-viewer-protocols-ciphers.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set MinimumProtocolVersion to TLSv1.2_2021 or higher","Use a custom SSL certificate"],resourceTypes:["AWS::CloudFront::Distribution"]},"elb-deletion-protection-disabled":{ruleId:"elb-deletion-protection-disabled",checkKey:"elbDeletionProtection",name:"ELB Deletion Protection Disabled",description:"Detects load balancers without deletion protection.",severity:"MEDIUM",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html#deletion-protection",remediationSteps:["Enable deletion protection for production load balancers","Use CloudFormation DeletionPolicy: Retain"],resourceTypes:["AWS::ElasticLoadBalancingV2::LoadBalancer"]},"elb-logging-disabled":{ruleId:"elb-logging-disabled",checkKey:"elbLogging",name:"ELB Logging Disabled",description:"Detects load balancers without access logging.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable access logging to S3","Configure log retention policy"],resourceTypes:["AWS::ElasticLoadBalancingV2::LoadBalancer"]},"elb-https-listeners-missing":{ruleId:"elb-https-listeners-missing",checkKey:"elbHttpsListeners",name:"ELB HTTPS Listeners Missing",description:"Detects load balancers with HTTP listeners not redirecting to HTTPS.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Add HTTPS listener with valid SSL certificate","Configure HTTP to HTTPS redirect"],resourceTypes:["AWS::ElasticLoadBalancingV2::Listener"]},"elb-security-policy-outdated":{ruleId:"elb-security-policy-outdated",checkKey:"elbSecurityPolicy",name:"ELB Security Policy Outdated",description:"Detects load balancers using outdated TLS security policies.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Update to ELBSecurityPolicy-TLS13-1-2-2021-06 or newer","Remove support for deprecated protocols"],resourceTypes:["AWS::ElasticLoadBalancingV2::Listener"]},"ecs-secrets-plaintext":{ruleId:"ecs-secrets-plaintext",checkKey:"ecsSecrets",name:"ECS Secrets in Plaintext",description:"Detects ECS task definitions with sensitive data in plaintext environment variables.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Use secrets property with Secrets Manager ARN","Use SSM Parameter Store SecureString"],resourceTypes:["AWS::ECS::TaskDefinition"]},"ecs-logging-disabled":{ruleId:"ecs-logging-disabled",checkKey:"ecsLogging",name:"ECS Logging Disabled",description:"Detects ECS task definitions without logging configured.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_awslogs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Configure awslogs log driver","Set up CloudWatch log groups with retention"],resourceTypes:["AWS::ECS::TaskDefinition"]},"ecs-service-connect-access-logs-missing":{ruleId:"ecs-service-connect-access-logs-missing",checkKey:"ecsServiceConnectLogs",name:"ECS Service Connect Access Logs Missing",description:"Detects ECS services with Service Connect enabled but no access log configuration, leaving inter-service traffic unaudited.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect-logging.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set ServiceConnectConfiguration.LogConfiguration with a LogDriver such as awslogs","Send Service Connect logs to a CloudWatch log group with a retention policy","Confirm log group encryption is configured for sensitive workloads"],resourceTypes:["AWS::ECS::Service"]},"ecs-resources-missing":{ruleId:"ecs-resources-missing",checkKey:"ecsResources",name:"ECS Resource Limits Missing",description:"Detects ECS task definitions without CPU/memory limits.",severity:"LOW",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size",remediationSteps:["Set CPU and memory at task level for Fargate","Set container-level memory limits for EC2"],resourceTypes:["AWS::ECS::TaskDefinition"]},"cognito-password-policy-weak":{ruleId:"cognito-password-policy-weak",checkKey:"cognitoPasswordPolicy",name:"Cognito Password Policy Weak",description:"Detects Cognito user pools with weak password policies.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-policies.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set minimum password length to at least 12 characters","Require uppercase, lowercase, numbers, and symbols"],resourceTypes:["AWS::Cognito::UserPool"]},"cognito-mfa-disabled":{ruleId:"cognito-mfa-disabled",checkKey:"cognitoMfa",name:"Cognito MFA Disabled",description:"Detects Cognito user pools without MFA enabled.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable MFA (OPTIONAL or ON)","Configure SMS or TOTP as MFA method"],resourceTypes:["AWS::Cognito::UserPool"]},"cognito-advanced-security-disabled":{ruleId:"cognito-advanced-security-disabled",checkKey:"cognitoAdvancedSecurity",name:"Cognito Advanced Security Disabled",description:"Detects Cognito user pools without advanced security features.",severity:"LOW",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html",complianceFrameworks:["SOC2","NIST"],remediationSteps:["Enable advanced security mode (AUDIT or ENFORCED)","Configure risk-based adaptive authentication"],resourceTypes:["AWS::Cognito::UserPool"]},"api-gateway-method-auth-missing":{ruleId:"api-gateway-method-auth-missing",checkKey:"apiGatewayMethodAuth",name:"API Gateway Method Has No Authorization",description:"Detects AWS::ApiGateway::Method and AWS::ApiGatewayV2::Route resources where AuthorizationType is missing or NONE (excluding OPTIONS preflight). Public-by-default endpoints expose backend Lambdas to anyone on the internet.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set AuthorizationType to AWS_IAM, COGNITO_USER_POOLS, or CUSTOM (REST APIs)","Use JWT or AWS_IAM AuthorizationType for HTTP APIs (v2)","If the route is intentionally public (e.g. webhook receiver), prefer api-key + WAF rate limiting and suppress this rule explicitly"],resourceTypes:["AWS::ApiGateway::Method","AWS::ApiGatewayV2::Route"]},"api-gateway-logging-disabled":{ruleId:"api-gateway-logging-disabled",checkKey:"apiGateway",name:"API Gateway Logging Disabled",description:"Detects API Gateway stages without logging enabled.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-logging.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable CloudWatch logging for API stages","Configure access logging for request/response details"],resourceTypes:["AWS::ApiGateway::Stage","AWS::ApiGatewayV2::Stage"]},"secrets-manager-rotation-disabled":{ruleId:"secrets-manager-rotation-disabled",checkKey:"secretsManager",name:"Secrets Manager Rotation Disabled",description:"Detects secrets without automatic rotation configured.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable automatic rotation","Set rotation schedule (e.g., every 30 days)"],resourceTypes:["AWS::SecretsManager::Secret"]},"cloudtrail-logging-disabled":{ruleId:"cloudtrail-logging-disabled",checkKey:"cloudTrailLogging",name:"CloudTrail Logging Disabled",description:"Detects CloudTrail trails with logging disabled.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-getting-started.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Ensure IsLogging is enabled","Configure multi-region trails","Enable log file validation"],resourceTypes:["AWS::CloudTrail::Trail"]},"eventbridge-bus-policy-wildcard-principal":{ruleId:"eventbridge-bus-policy-wildcard-principal",checkKey:"eventBusPolicy",name:"EventBridge Bus Policy Allows Wildcard Principal",description:"Detects AWS::Events::EventBusPolicy with an Allow statement targeting Principal=* (or AWS=*) without a Condition restricting access. Without the condition, any AWS account can publish events to the bus.",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-bus-perms.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Replace wildcard Principal with specific 12-digit AWS account IDs","Or scope the policy with a Condition such as aws:PrincipalOrgID","Verify the StatementId is descriptive \u2014 easier to audit later"],resourceTypes:["AWS::Events::EventBusPolicy"]},"eventbridge-dlq-missing":{ruleId:"eventbridge-dlq-missing",checkKey:"eventBridgeRules",name:"EventBridge DLQ Missing",description:"Detects EventBridge rules without dead letter queue.",severity:"LOW",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rule-dlq.html",remediationSteps:["Configure dead letter queue for failed event delivery","Set up monitoring for DLQ messages"],resourceTypes:["AWS::Events::Rule"]},"kms-key-rotation-disabled":{ruleId:"kms-key-rotation-disabled",checkKey:"kmsKeys",name:"KMS Key Rotation Disabled",description:"Detects KMS keys without automatic rotation.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Enable automatic key rotation","Key rotation occurs annually"],resourceTypes:["AWS::KMS::Key"]},"sns-encryption-disabled":{ruleId:"sns-encryption-disabled",checkKey:"sns",name:"SNS Encryption Disabled",description:"Detects SNS topics without encryption.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable server-side encryption with KMS","Use customer managed keys for additional control"],resourceTypes:["AWS::SNS::Topic"]},"sqs-encryption-disabled":{ruleId:"sqs-encryption-disabled",checkKey:"sqs",name:"SQS Encryption Disabled",description:"Detects SQS queues without encryption.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable server-side encryption with KMS","Use SQS-managed keys (SSE-SQS) or customer managed keys"],resourceTypes:["AWS::SQS::Queue"]},"stepfunctions-logging-disabled":{ruleId:"stepfunctions-logging-disabled",checkKey:"stepFunctions",name:"Step Functions Logging Disabled",description:"Detects Step Functions state machines without logging.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/step-functions/latest/dg/cw-logs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable CloudWatch Logs for state machine execution","Set appropriate log level (ALL, ERROR, FATAL, OFF)"],resourceTypes:["AWS::StepFunctions::StateMachine"]},"acm-certificate-email-validation":{ruleId:"acm-certificate-email-validation",checkKey:"acmValidation",name:"ACM Certificate Validation Hardening",description:"Detects ACM certificates using email validation or with certificate transparency logging disabled.",severity:"LOW",wafPillar:"Security",complianceFrameworks:["SOC2","NIST"],awsDocUrl:"https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html",remediationSteps:["Use DNS validation for automated certificate renewal","Enable certificate transparency logging to detect misissuance"],resourceTypes:["AWS::CertificateManager::Certificate"]},"appsync-api-key-auth":{ruleId:"appsync-api-key-auth",checkKey:"appSyncAuth",name:"AppSync API Key Authentication",description:"Detects AppSync APIs using API key authentication or lacking additional authentication providers.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/appsync/latest/devguide/security-authz.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Use AWS_IAM, Cognito User Pools, or OIDC for production workloads","Configure AdditionalAuthenticationProviders for client flexibility"],resourceTypes:["AWS::AppSync::GraphQLApi"]},"appsync-logging-disabled":{ruleId:"appsync-logging-disabled",checkKey:"appSyncLogging",name:"AppSync Logging Disabled",description:"Detects AppSync APIs without logging, field-level logging, or X-Ray tracing.",severity:"MEDIUM",wafPillar:"Operational Excellence",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],awsDocUrl:"https://docs.aws.amazon.com/appsync/latest/devguide/monitoring.html",remediationSteps:["Configure LogConfig to capture request/response logs in CloudWatch","Set FieldLogLevel to ERROR or ALL for resolver execution detail","Enable XrayEnabled for distributed tracing"],resourceTypes:["AWS::AppSync::GraphQLApi"]},"appsync-waf-missing":{ruleId:"appsync-waf-missing",checkKey:"appSyncWaf",name:"AppSync WAF Missing",description:"Detects AppSync APIs without an associated AWS WAF WebACL.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/appsync/latest/devguide/WAF-Integration.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Associate a WAFv2 WebACL with the AppSync API","Define rules to protect against common web exploits"],resourceTypes:["AWS::AppSync::GraphQLApi","AWS::WAFv2::WebACLAssociation"]},"backup-plan-misconfigured":{ruleId:"backup-plan-misconfigured",checkKey:"backupPlans",name:"Backup Plan Misconfigured",description:"Detects Backup plan rules without cross-region copy or lifecycle configuration.",severity:"LOW",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/aws-backup/latest/devguide/about-backup-plans.html",remediationSteps:["Add CopyActions to replicate backups cross-region for DR","Set DeleteAfterDays / MoveToColdStorageAfterDays to manage retention and cost"],resourceTypes:["AWS::Backup::BackupPlan"]},"backup-vault-hardening":{ruleId:"backup-vault-hardening",checkKey:"backupVault",name:"Backup Vault Hardening",description:"Detects Backup vaults using AWS-managed keys or without a vault lock for compliance.",severity:"LOW",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/aws-backup/latest/devguide/vaultlock.html",complianceFrameworks:["SOC2","HIPAA","NIST"],remediationSteps:["Specify a customer-managed KMS key via EncryptionKeyArn","Add a BackupVaultLock to enforce retention and prevent deletion"],resourceTypes:["AWS::Backup::BackupVault","AWS::Backup::BackupVaultLock"]},"cloudwatch-alarm-actions-missing":{ruleId:"cloudwatch-alarm-actions-missing",checkKey:"cloudWatchAlarms",name:"CloudWatch Alarm Actions Missing",description:"Detects CloudWatch Alarms without alarm actions or missing-data handling.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html",remediationSteps:["Add AlarmActions (SNS, Lambda, SSM) for state-change notifications","Set TreatMissingData to define behaviour for missing data points"],resourceTypes:["AWS::CloudWatch::Alarm"]},"cloudwatch-logs-encryption-disabled":{ruleId:"cloudwatch-logs-encryption-disabled",checkKey:"cloudWatchEncryption",name:"CloudWatch Logs Encryption Disabled",description:"Detects CloudWatch Log Groups not encrypted with a customer-managed KMS key.",severity:"LOW",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set KmsKeyId on the LogGroup to encrypt with a customer-managed key"],resourceTypes:["AWS::Logs::LogGroup"]},"cloudwatch-logs-retention-missing":{ruleId:"cloudwatch-logs-retention-missing",checkKey:"cloudWatchLogRetention",name:"CloudWatch Logs Retention Missing",description:"Detects CloudWatch Log Groups without an explicit retention period (logs retained indefinitely).",severity:"MEDIUM",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html",remediationSteps:["Set RetentionInDays to control storage cost (30\u201390 days for ops, longer for compliance)"],resourceTypes:["AWS::Logs::LogGroup"]},"ecr-mutable-tags":{ruleId:"ecr-mutable-tags",checkKey:"ecrImmutableTags",name:"ECR Mutable Image Tags",description:"Detects ECR repositories that allow image tags to be overwritten.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-tag-mutability.html",complianceFrameworks:["SOC2","PCI-DSS","NIST"],remediationSteps:["Set ImageTagMutability to IMMUTABLE"],resourceTypes:["AWS::ECR::Repository"]},"ecr-lifecycle-policy-missing":{ruleId:"ecr-lifecycle-policy-missing",checkKey:"ecrLifecycle",name:"ECR Lifecycle Policy Missing",description:"Detects ECR repositories without a lifecycle policy to clean up old images.",severity:"MEDIUM",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html",remediationSteps:["Define a LifecyclePolicy to expire untagged or excess image versions"],resourceTypes:["AWS::ECR::Repository"]},"ecr-scan-on-push-disabled":{ruleId:"ecr-scan-on-push-disabled",checkKey:"ecrScanning",name:"ECR Scan-on-Push Disabled",description:"Detects ECR repositories without image vulnerability scanning on push.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable ScanOnPush in ImageScanningConfiguration","Or use enhanced scanning at the registry level"],resourceTypes:["AWS::ECR::Repository"]},"eks-secrets-encryption-disabled":{ruleId:"eks-secrets-encryption-disabled",checkKey:"eksEncryption",name:"EKS Secrets Encryption Disabled",description:"Detects EKS clusters without envelope encryption for Kubernetes secrets in etcd.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/eks/latest/userguide/enable-kms.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:['Configure EncryptionConfig with a KMS key referencing resources: ["secrets"]'],resourceTypes:["AWS::EKS::Cluster"]},"eks-control-plane-logging-disabled":{ruleId:"eks-control-plane-logging-disabled",checkKey:"eksLogging",name:"EKS Control Plane Logging Disabled",description:"Detects EKS clusters with no control plane log types enabled.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable api, audit, authenticator, controllerManager, and scheduler logs"],resourceTypes:["AWS::EKS::Cluster"]},"eks-public-endpoint-unrestricted":{ruleId:"eks-public-endpoint-unrestricted",checkKey:"eksPublicEndpoint",name:"EKS Public Endpoint Unrestricted",description:"Detects EKS clusters with the API endpoint reachable from 0.0.0.0/0 or only via the public network.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable EndpointPrivateAccess for in-VPC node communication","Restrict PublicAccessCidrs to known administrative IP ranges"],resourceTypes:["AWS::EKS::Cluster"]},"elasticache-auth-token-missing":{ruleId:"elasticache-auth-token-missing",checkKey:"elastiCacheAuth",name:"ElastiCache AUTH Token Missing",description:"Detects Redis replication groups with transit encryption but no AUTH token configured.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/auth.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set AuthToken to require Redis client authentication"],resourceTypes:["AWS::ElastiCache::ReplicationGroup"]},"elasticache-encryption-disabled":{ruleId:"elasticache-encryption-disabled",checkKey:"elastiCacheEncryption",name:"ElastiCache Encryption Disabled",description:"Detects ElastiCache clusters without at-rest or in-transit encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/at-rest-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set AtRestEncryptionEnabled: true","Set TransitEncryptionEnabled: true"],resourceTypes:["AWS::ElastiCache::ReplicationGroup","AWS::ElastiCache::CacheCluster"]},"elasticache-failover-disabled":{ruleId:"elasticache-failover-disabled",checkKey:"elastiCacheFailover",name:"ElastiCache Automatic Failover Disabled",description:"Detects ElastiCache replication groups without automatic failover or Multi-AZ.",severity:"MEDIUM",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA"],awsDocUrl:"https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/AutoFailover.html",remediationSteps:["Enable AutomaticFailoverEnabled","Enable MultiAZEnabled to span availability zones"],resourceTypes:["AWS::ElastiCache::ReplicationGroup"]},"glue-connection-network-isolation":{ruleId:"glue-connection-network-isolation",checkKey:"glueConnections",name:"Glue Connection Network Isolation",description:"Detects Glue JDBC connections without VPC subnet placement or SSL enforcement.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/glue/latest/dg/setup-vpc-for-glue-access.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set PhysicalConnectionRequirements with SubnetId and SecurityGroupIdList","Include SSL parameters in the JDBC connection URL"],resourceTypes:["AWS::Glue::Connection"]},"glue-job-encryption-missing":{ruleId:"glue-job-encryption-missing",checkKey:"glueEncryption",name:"Glue Job Encryption Missing",description:"Detects Glue jobs without an attached SecurityConfiguration for encrypting bookmarks, S3 data, and CloudWatch logs.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/glue/latest/dg/encryption-security-configuration.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Create a SecurityConfiguration enabling KMS encryption for all targets","Reference it via the job's SecurityConfiguration property"],resourceTypes:["AWS::Glue::Job"]},"kinesis-encryption-disabled":{ruleId:"kinesis-encryption-disabled",checkKey:"kinesisEncryption",name:"Kinesis Encryption Disabled",description:"Detects Kinesis Data Streams without server-side KMS encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set StreamEncryption with EncryptionType: KMS and a KeyId"],resourceTypes:["AWS::Kinesis::Stream"]},"kinesis-retention-minimum":{ruleId:"kinesis-retention-minimum",checkKey:"kinesisRetention",name:"Kinesis Minimum Retention",description:"Detects Kinesis Data Streams using the default 24-hour retention period.",severity:"LOW",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/streams/latest/dev/kinesis-extended-retention.html",remediationSteps:["Increase RetentionPeriodHours to support replay/reprocessing during incidents"],resourceTypes:["AWS::Kinesis::Stream"]},"lambda-runtime-deprecated":{ruleId:"lambda-runtime-deprecated",checkKey:"lambdaRuntime",name:"Lambda Deprecated Runtime",description:"Detects Lambda functions using runtimes that have reached or are approaching end-of-life.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html",complianceFrameworks:["SOC2","PCI-DSS","NIST"],remediationSteps:["Upgrade to a currently supported runtime","Track AWS Lambda runtime deprecation announcements"],resourceTypes:["AWS::Lambda::Function"]},"msk-client-authentication-missing":{ruleId:"msk-client-authentication-missing",checkKey:"mskAuth",name:"MSK Client Authentication Missing",description:"Detects MSK clusters without client authentication or that allow unauthenticated access.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/msk/latest/developerguide/kafka_apis_iam.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable SASL/SCRAM, IAM auth, or mTLS in ClientAuthentication","Disable Unauthenticated access"],resourceTypes:["AWS::MSK::Cluster"]},"msk-encryption-weak":{ruleId:"msk-encryption-weak",checkKey:"mskEncryption",name:"MSK Encryption Weak",description:"Detects MSK clusters without TLS for client-broker traffic, without inter-broker encryption, or using AWS-managed keys for at-rest encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/msk/latest/developerguide/msk-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set ClientBroker to TLS in EncryptionInTransit","Set InCluster to true in EncryptionInTransit","Specify DataVolumeKMSKeyId for at-rest encryption"],resourceTypes:["AWS::MSK::Cluster"]},"msk-broker-logging-disabled":{ruleId:"msk-broker-logging-disabled",checkKey:"mskLogging",name:"MSK Broker Logging Disabled",description:"Detects MSK clusters without broker logs configured.",severity:"MEDIUM",wafPillar:"Operational Excellence",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],awsDocUrl:"https://docs.aws.amazon.com/msk/latest/developerguide/msk-logging.html",remediationSteps:["Enable broker logs to CloudWatch Logs, Firehose, or S3"],resourceTypes:["AWS::MSK::Cluster"]},"opensearch-access-control-weak":{ruleId:"opensearch-access-control-weak",checkKey:"openSearchAccessControl",name:"OpenSearch Access Control Weak",description:"Detects OpenSearch domains without fine-grained access control or VPC placement.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable AdvancedSecurityOptions","Configure VPCOptions to deploy the domain inside a VPC"],resourceTypes:["AWS::OpenSearchService::Domain","AWS::Elasticsearch::Domain"]},"opensearch-encryption-disabled":{ruleId:"opensearch-encryption-disabled",checkKey:"openSearchEncryption",name:"OpenSearch Encryption Disabled",description:"Detects OpenSearch domains without at-rest encryption or node-to-node encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/encryption-at-rest.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable EncryptionAtRestOptions with a KMS key","Enable NodeToNodeEncryptionOptions"],resourceTypes:["AWS::OpenSearchService::Domain","AWS::Elasticsearch::Domain"]},"opensearch-logging-disabled":{ruleId:"opensearch-logging-disabled",checkKey:"openSearchLogging",name:"OpenSearch Logging Disabled",description:"Detects OpenSearch domains without audit logs or application logs published to CloudWatch.",severity:"LOW",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/audit-logs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable AUDIT_LOGS in LogPublishingOptions","Enable ES_APPLICATION_LOGS in LogPublishingOptions"],resourceTypes:["AWS::OpenSearchService::Domain","AWS::Elasticsearch::Domain"]},"redshift-encryption-disabled":{ruleId:"redshift-encryption-disabled",checkKey:"redshiftEncryption",name:"Redshift Encryption Disabled",description:"Detects Redshift clusters without at-rest encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-db-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set Encrypted: true and specify a KmsKeyId"],resourceTypes:["AWS::Redshift::Cluster"]},"redshift-audit-logging-disabled":{ruleId:"redshift-audit-logging-disabled",checkKey:"redshiftLogging",name:"Redshift Audit Logging Disabled",description:"Detects Redshift clusters without audit logging to S3 (connection, user, query activity).",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set LoggingProperties with a target S3 bucket and key prefix"],resourceTypes:["AWS::Redshift::Cluster"]},"redshift-publicly-accessible":{ruleId:"redshift-publicly-accessible",checkKey:"redshiftPublicAccess",name:"Redshift Publicly Accessible",description:"Detects Redshift clusters reachable from the public internet.",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-vpc.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Set PubliclyAccessible: false","Use VPC endpoints, bastion hosts, or VPN for access"],resourceTypes:["AWS::Redshift::Cluster"]},"route53-dnssec-disabled":{ruleId:"route53-dnssec-disabled",checkKey:"route53Dnssec",name:"Route 53 DNSSEC Disabled",description:"Detects Route 53 hosted zones without DNSSEC signing enabled.",severity:"LOW",wafPillar:"Security",complianceFrameworks:["SOC2","NIST"],awsDocUrl:"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-configuring-dnssec.html",remediationSteps:["Create an AWS::Route53::DNSSEC resource for the hosted zone","Configure a key-signing key (KSK)"],resourceTypes:["AWS::Route53::HostedZone","AWS::Route53::DNSSEC"]},"route53-health-check-suboptimal":{ruleId:"route53-health-check-suboptimal",checkKey:"route53HealthChecks",name:"Route 53 Health Check Suboptimal",description:"Detects Route 53 health checks using HTTP instead of HTTPS or the standard request interval.",severity:"LOW",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html",remediationSteps:["Use HTTPS to validate certificate and endpoint security","Use a 10-second request interval for critical endpoints"],resourceTypes:["AWS::Route53::HealthCheck"]},"route53-query-logging-disabled":{ruleId:"route53-query-logging-disabled",checkKey:"route53QueryLogging",name:"Route 53 Query Logging Disabled",description:"Detects Route 53 hosted zones without query logging.",severity:"LOW",wafPillar:"Security",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/query-logs.html",remediationSteps:["Create an AWS::Route53::QueryLoggingConfig pointing to a CloudWatch Logs group"],resourceTypes:["AWS::Route53::HostedZone","AWS::Route53::QueryLoggingConfig"]},"vpc-default-security-group-rules-present":{ruleId:"vpc-default-security-group-rules-present",checkKey:"vpcDefaultSecurityGroup",name:"VPC Default Security Group Has Rules",description:"Detects default VPC security groups with ingress or egress rules; defaults should be empty.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/vpc/latest/userguide/default-security-group.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Remove all rules from the default security group","Use purpose-built security groups instead"],resourceTypes:["AWS::EC2::SecurityGroup"]},"vpc-flow-logs-missing":{ruleId:"vpc-flow-logs-missing",checkKey:"vpcFlowLogs",name:"VPC Flow Logs Missing",description:"Detects VPCs without flow logs configured.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Create an AWS::EC2::FlowLog resource targeting the VPC","Send logs to CloudWatch Logs or S3"],resourceTypes:["AWS::EC2::VPC","AWS::EC2::FlowLog"]},"waf-logging-disabled":{ruleId:"waf-logging-disabled",checkKey:"wafLogging",name:"WAF Logging Disabled",description:"Detects WAFv2 WebACLs without logging configuration for analysed requests.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/waf/latest/developerguide/logging.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Create an AWS::WAFv2::LoggingConfiguration for the WebACL"],resourceTypes:["AWS::WAFv2::WebACL","AWS::WAFv2::LoggingConfiguration"]},"autoscaling-group-no-elb-healthcheck":{ruleId:"autoscaling-group-no-elb-healthcheck",checkKey:"autoScalingGroupHealthCheck",name:"AutoScaling Group Not Using ELB Health Checks",description:"Detects AWS::AutoScaling::AutoScalingGroup resources attached to a load balancer (LoadBalancerNames or TargetGroupARNs) but using EC2 health checks. EC2 health checks miss app-level outages the load balancer would otherwise detect.",severity:"MEDIUM",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/autoscaling/ec2/userguide/healthcheck.html",remediationSteps:["Set HealthCheckType to ELB on the AutoScalingGroup","Set HealthCheckGracePeriod to give instances time to bootstrap before the LB starts probing","Verify the ALB / NLB target group has appropriate health-check thresholds"],resourceTypes:["AWS::AutoScaling::AutoScalingGroup"]},"autoscaling-launch-config-public-ip":{ruleId:"autoscaling-launch-config-public-ip",checkKey:"autoScalingLaunchConfigPublicIp",name:"AutoScaling LaunchConfiguration Assigns Public IP",description:"Detects AWS::AutoScaling::LaunchConfiguration with AssociatePublicIpAddress=true. Instances launched from this configuration get a public IP and are internet-reachable directly.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroupExamples.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set AssociatePublicIpAddress to false on the LaunchConfiguration","Place instances in private subnets behind an ALB / NLB","Use a NAT Gateway / VPC endpoints for outbound traffic","Migrate to AWS::EC2::LaunchTemplate (LaunchConfiguration is deprecated)"],resourceTypes:["AWS::AutoScaling::LaunchConfiguration"]},"efs-encryption-disabled":{ruleId:"efs-encryption-disabled",checkKey:"efsEncryption",name:"EFS Encryption Disabled",description:"Detects AWS::EFS::FileSystem resources without Encrypted=true. The CFN default is unencrypted (unlike the EFS console default), and encryption can only be enabled at filesystem creation.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/efs/latest/ug/encryption-at-rest.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set Encrypted to true on the AWS::EFS::FileSystem resource","Provide KmsKeyId pointing at a customer-managed KMS key for additional control","For existing unencrypted filesystems, migrate data to a new encrypted filesystem"],resourceTypes:["AWS::EFS::FileSystem"]},"waf-webacl-misconfigured":{ruleId:"waf-webacl-misconfigured",checkKey:"wafWebAcl",name:"WAF WebACL Misconfigured",description:"Detects WAFv2 WebACLs with no rules, default Allow action, or CloudWatch metrics disabled.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/waf/latest/developerguide/web-acl.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Add WAF rules covering the OWASP Top 10 baseline","Set DefaultAction to Block for defence-in-depth","Enable CloudWatchMetricsEnabled in VisibilityConfig"],resourceTypes:["AWS::WAFv2::WebACL"]},"cross-resource-misconfiguration":{ruleId:"cross-resource-misconfiguration",checkKey:"crossResourceRelationships",name:"Cross-Resource Misconfiguration",description:"Detects misconfigurations only visible across multiple resources: Lambda functions referencing VPC-only resources without VpcConfig, S3 replication without encryption configuration, and security groups exposing non-standard ports to the public when used by sensitive services.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/welcome.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Configure VpcConfig on Lambda functions that reach VPC-only resources (RDS, ElastiCache, Redshift, OpenSearch, ECS Service)","Specify EncryptionConfiguration on S3 replication rules so replicated objects retain encryption at the destination","Restrict 0.0.0.0/0 ingress on non-standard ports for security groups attached to sensitive services"],resourceTypes:["AWS::Lambda::Function","AWS::S3::Bucket","AWS::EC2::SecurityGroup","AWS::RDS::DBInstance","AWS::ElastiCache::CacheCluster","AWS::Redshift::Cluster","AWS::OpenSearchService::Domain","AWS::Elasticsearch::Domain","AWS::ECS::Service"]},"stack-architecture-recommendations":{ruleId:"stack-architecture-recommendations",checkKey:"stackArchitecture",name:"Stack Architecture Recommendations",description:"Detects architectural omissions across the stack: missing CloudWatch Alarms on critical resources, Lambda functions without X-Ray tracing, public-facing resources without WAF, RDS databases without Secrets Manager rotation, and excessive NAT Gateway usage.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html",remediationSteps:["Add CloudWatch Alarms on key metrics (Lambda errors, ECS task failures, RDS connections)","Enable X-Ray tracing on Lambda functions for distributed-request visibility","Associate AWS WAF with public-facing API Gateway, ALB, or CloudFront distributions","Use Secrets Manager with automatic rotation for RDS database credentials","Audit NAT Gateway count and consider VPC endpoints or NAT instances for cost reduction"],resourceTypes:["AWS::Lambda::Function","AWS::ApiGateway::RestApi","AWS::ApiGatewayV2::Api","AWS::ElasticLoadBalancingV2::LoadBalancer","AWS::CloudFront::Distribution","AWS::RDS::DBInstance","AWS::EC2::NatGateway","AWS::CloudWatch::Alarm"]}};var $W=(()=>{let t=new Map;for(let e of Object.values(nu))e.checkKey&&e.ruleId&&t.set(e.checkKey,e.ruleId);return t})(),jW={IAM:["AWS::IAM::"],S3:["AWS::S3::"],Lambda:["AWS::Lambda::"],DynamoDB:["AWS::DynamoDB::"],RDS:["AWS::RDS::"],EC2:["AWS::EC2::"],SNS:["AWS::SNS::"],SQS:["AWS::SQS::"],StepFunctions:["AWS::StepFunctions::"],CloudTrail:["AWS::CloudTrail::"],ApiGateway:["AWS::ApiGateway::","AWS::ApiGatewayV2::"],SecretsManager:["AWS::SecretsManager::"],KMS:["AWS::KMS::"],EventBridge:["AWS::Events::"],CloudFront:["AWS::CloudFront::"],ELB:["AWS::ElasticLoadBalancing::","AWS::ElasticLoadBalancingV2::"],ECS:["AWS::ECS::"],Cognito:["AWS::Cognito::"],WAF:["AWS::WAFv2::","AWS::WAF::"],CloudWatch:["AWS::CloudWatch::","AWS::Logs::"],Route53:["AWS::Route53::"],ElastiCache:["AWS::ElastiCache::"],ECR:["AWS::ECR::"],OpenSearch:["AWS::OpenSearchService::","AWS::Elasticsearch::"],ACM:["AWS::CertificateManager::"],Backup:["AWS::Backup::"],VPC:["AWS::EC2::VPC","AWS::EC2::FlowLog","AWS::EC2::SecurityGroup"],Kinesis:["AWS::Kinesis::"],AppSync:["AWS::AppSync::"],EKS:["AWS::EKS::"],Redshift:["AWS::Redshift::"],MSK:["AWS::MSK::"],Glue:["AWS::Glue::"],EFS:["AWS::EFS::"],AutoScaling:["AWS::AutoScaling::"]},sle=tu({ttl:3e5,maxSize:100});var UW=CR(vR,{ttl:6e5,maxSize:10}),GW=t=>{if(t.includes("All services")||t.length===0)return s=>!s.Type.startsWith("AWS::CDK::");let e=[];for(let s of t){if(s==="All services")continue;let n=jW[s];n&&e.push(...n)}return e.length===0?s=>!s.Type.startsWith("AWS::CDK::"):s=>!s.Type.startsWith("AWS::CDK::")&&e.some(n=>s.Type.startsWith(n))},HW=t=>{let e=new Map,s={CRITICAL:4,HIGH:3,MEDIUM:2,LOW:1};for(let n of t){let r=n.issue,i=e.get(r);i?s[n.severity]>s[i.severity]&&e.set(r,n):e.set(r,n)}return Array.from(e.values())},zW=(t,e,s,n)=>{let r={CRITICAL:0,HIGH:0,MEDIUM:0,LOW:0},i={},o=0;for(let a of Object.values(t))for(let c of a.issues){o++,r[c.severity]++;let u=c.ruleId?Dc(c.ruleId)??"Other":"Other";i[u]=(i[u]||0)+1}return{totalResources:e,analyzedResources:Object.keys(t).length,totalFindings:o,findingsBySeverity:r,findingsByService:i,analysisTimeMs:Date.now()-n,servicesAnalyzed:s}},ly=(t,e,s=[],n={},r=[],i)=>VW(t,e,{selectedServices:s,solutionsRegistry:n,deduplicateFindings:!0,includeStatistics:!1,customRules:r,ruleContext:i}).findings,VW=(t,e,s={})=>{let n=Date.now(),{selectedServices:r=[],solutionsRegistry:i={},deduplicateFindings:o=!0,customRules:a=[],ruleContext:c}=s,u=UW(),l=new Set(["solutionsPatterns","stackArchitecture","crossResourceRelationships"]),d=Object.keys(u).filter(C=>!l.has(C)),{services:p}=sd(r),f=m2(p,d),m={},g=GW(p),h=Object.keys(t.Resources||{}).length,x=Object.entries(t.Resources||{}).filter(([,C])=>g(C)).reduce((C,[I,E])=>(C[I]=E,C),{}),y=[];for(let C of f)try{let I=u[C];if(typeof I!="function"){let j=Dc(C)??C;qe.warn(`\u26A0\uFE0F Service check function for ${j} (${C}) is not available`);continue}let E=I({Resources:x},e,c);y.push(C);let w=$W.get(C);for(let[j,H]of Object.entries(E)){if(m[j]||(m[j]={issues:[]}),w)for(let z of H.issues)z.ruleId||(z.ruleId=w);m[j].issues.push(...H.issues)}}catch(I){let E=Dc(C)??C;qe.warn(`\u26A0\uFE0F Error in ${E} analysis (${C})`,{error:I instanceof Error?I.message:String(I)})}if(Object.keys(i).length>0)try{let C=u.solutionsPatterns({Resources:x},i);for(let I of C){let E=I.resourceId;m[E]||(m[E]={issues:[]}),m[E].issues.push(I)}}catch(C){qe.warn("\u26A0\uFE0F Error in solutions pattern analysis",{error:C instanceof Error?C.message:String(C)})}if(a.length>0)try{let C=DR(t,a,e);for(let[I,E]of Object.entries(C))m[I]||(m[I]={issues:[]}),m[I].issues.push(...E.issues);qe.info(`Custom rules evaluated: ${a.length} rule(s)`)}catch(C){qe.warn("\u26A0\uFE0F Error evaluating custom rules",{error:C instanceof Error?C.message:String(C)})}if(o)for(let C of Object.keys(m))m[C].issues=HW(m[C].issues);Object.keys(m).length===0&&qe.info(`\x1B[32m\u2705 No security or cost issues detected!\x1B[0m
227
+ ${e}`:e:t,I9=(t,e)=>t?!!(e?.startsWith("AWS::CDK::")||e?.startsWith("Cfn")||t.endsWith("/Resource")||t==="Resource"||t.includes("Asset")||t.includes("CustomResource")):!1,YI=(t,e,s,n,r)=>{let i=Pa("cdk.out");return Object.entries(t).reduce((o,[a,c])=>{let u=Object.keys(e).find(ne=>e[ne]===a)??c.cdkPath,l=s[a]?.__constructType??n.Resources?.[a]?.Type??"",d=r[a]?.githubUrl,p=r[a]?.docUrl,f=r[a]?.constructName,m=r[a]?.constructLevel,g=r[a]?.fqn,h=I9(u,l),x=s[a]?.displayName,y=x??s[a]?.__friendlyName??u.split("/").pop()??a,b=x??u??c.locationHint,S=ap(i,a),C=c.appliedMixins??s[a]?.__appliedMixins,I=A9(C),E=[...c.sources?.cdkInsights?.issues??[],...c.sources?.cdkNag?.issues??[]].map(ne=>({...ne,recommendation:UI(E9(ne.recommendation,I),m),locationHint:b,githubUrl:d,docUrl:p,constructName:f,...m?{constructLevel:m}:{},...g?{fqn:g}:{},...S?.filePath&&{sourceLocation:{filePath:S.filePath,line:S.line||1,column:S.column||1,confidence:S.confidence||"low",...S.frames&&S.frames.length>0?{frames:S.frames}:{}}},stackName:S?.stackName,stackId:S?.stackName,timestamp:new Date().toISOString()})),w=E.filter(ne=>ne.foundBy!=="cdkNag"),j=E.filter(ne=>ne.foundBy==="cdkNag"),H=s[a],z=c.parentPath||H?.__parentPath,q=c.childCount??H?.__childCount,L=c.tags||H?.__tags,G=c.sourceLocation||H?.__sourceLocation,k=c.constructHierarchy||H?.__constructHierarchy,U=c.serviceCategory||H?.__serviceCategory,V=c.dependencies||H?.__dependencies,se=c.sensitiveProperties||H?.__sensitiveProperties,Y=c.usesDefaults??H?.__usesDefaults,Z=c.l2ConstructType||H?.__l2ConstructType,ee=c.l2ConstructId||H?.__l2ConstructId,le=c.createdBy||H?.__createdBy,Ce=c.rootSourceLocation||H?.__rootSourceLocation,K=c.searchHint||H?.__searchHint,Re=G?{filePath:G.filePath,line:G.line,column:G.column,endLine:G.endLine,endColumn:G.endColumn,confidence:G.confidence||"high",method:G.method,enclosingScope:G.enclosingScope,codeSnippet:G.codeSnippet}:S?.filePath?{filePath:S.filePath,line:S.line||1,column:S.column||1,confidence:S.confidence||"low"}:void 0;return o[a]={...c,resourceId:a,displayName:x,cdkPath:u,friendlyName:y,locationHint:b,constructName:f,githubUrl:d,docUrl:p,isGenerated:h,type:l,constructType:l,parentPath:z,childCount:q,tags:L,sourceLocation:Re,constructHierarchy:k,logicalId:a,serviceCategory:U,dependencies:V,sensitiveProperties:se,usesDefaults:Y,l2ConstructType:Z,l2ConstructId:ee,createdBy:le,rootSourceLocation:Ce,searchHint:K,appliedMixins:C,sources:{cdkInsights:{issues:w},cdkNag:{issues:j}}},o},{})};var k9=new Set(["AwsSolutions-IAM4","AwsSolutions-IAM5","AwsSolutions-S1","AwsSolutions-S2","AwsSolutions-S3","AwsSolutions-S10","AwsSolutions-RDS2","AwsSolutions-RDS6","AwsSolutions-RDS10","AwsSolutions-EC23","AwsSolutions-EC26","AwsSolutions-ECS4","AwsSolutions-COG2","AwsSolutions-COG3","AwsSolutions-ELB2","AwsSolutions-KMS5","AwsSolutions-L1","AwsSolutions-SMG4","AwsSolutions-DDB3","AwsSolutions-CB4"]),Zc={AwsSolutions:"https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions-rules","HIPAA.Security":"https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaasecurity-rules","NIST.800.53.R4":"https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-80053-rules","NIST.800.53.R5":"https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-80053-rules","PCI.DSS.321":"https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pcidss-rules"},JI={IAM:"Security",S:"Security",EC:"Security",VPC:"Security",KMS:"Security",SMG:"Security",COG:"Security",CFR:"Security",ELB:"Security",RDS:"Security",DDB:"Security",SQS:"Security",SNS:"Security",L:"Security",ECS:"Security",EKS:"Security",CB:"Security",ATH:"Security",OS:"Security",RS:"Security",TS:"Security",QL:"Security",APS:"Security",DOC:"Security",EFS:"Security",GL:"Security",KDF:"Security",KDS:"Security",LEX:"Security",MSK:"Security",N:"Security",QS:"Security",EMR:"Security",AS:"Reliability",AEC:"Reliability",KDA:"Reliability",CW:"Operational Excellence",CT:"Operational Excellence",SF:"Operational Excellence",EB:"Operational Excellence",ASC:"Operational Excellence",MS:"Operational Excellence",EVB:"Operational Excellence",C91:"Security"},QI=t=>t.match(/^((?:AwsSolutions|HIPAA\.Security|NIST\.800\.53\.R[45]|PCI\.DSS\.321)-[A-Z0-9]+)/i)?.[1],R9=t=>t.match(/-([A-Z]+)\d*$/i)?.[1]?.toUpperCase(),Yc=(t,e)=>{if(e&&k9.has(e))return"CRITICAL";switch(t){case"aws:cdk:error":return"HIGH";case"aws:cdk:warning":return"MEDIUM";case"aws:cdk:info":return"LOW";default:return"HIGH"}},Jc=t=>{if(!t)return"Security";let e=R9(t);return e&&JI[e]?JI[e]:"Security"},iy=t=>{if(t){if(t.startsWith("AwsSolutions-"))return Zc.AwsSolutions;if(t.startsWith("HIPAA.Security-"))return Zc["HIPAA.Security"];if(t.startsWith("NIST.800.53.R4-"))return Zc["NIST.800.53.R4"];if(t.startsWith("NIST.800.53.R5-"))return Zc["NIST.800.53.R5"];if(t.startsWith("PCI.DSS.321-"))return Zc["PCI.DSS.321"]}},XI=t=>t.startsWith("AwsSolutions-")||t.startsWith("HIPAA.Security-")||t.startsWith("NIST.800.53.R")||t.startsWith("PCI.DSS.321-");var e1=(t,e)=>{let s=/\[([^\]]*)\]\s*\[([^\]]*)\]\s*\[([^\]]*)\]/g,n=[],r=s.exec(t);for(;r!==null;){let i=r[1]??"",o=r[2],a=r[3];if(o&&a){let c=e[i]??i;n.push({resourceId:c,issue:a,severity:Yc("inline",o),wafPillar:Jc(o),foundBy:"cdkNag",constructPath:i,ruleId:o})}r=s.exec(t)}return n};var cp=te(require("node:fs")),t1=te(require("node:path"));var s1=(t=process.cwd())=>{let e=t1.join(t,"cdk.json");if(!cp.existsSync(e))return{context:{},found:!1};let s;try{s=cp.readFileSync(e,"utf-8")}catch{return{context:{},found:!1}}let n;try{n=JSON.parse(s)}catch{return{context:{},found:!1,source:e}}return n&&typeof n=="object"&&!Array.isArray(n)&&"context"in n&&typeof n.context=="object"&&n.context!==null&&!Array.isArray(n.context)?{context:n.context,found:!0,source:e}:{context:{},found:!0,source:e}};var n1=(t,e)=>e?Object.entries(t).reduce((s,[n,r])=>(s[n]={...r,__description:r.__description||e[n]},s),{}):{...t};var F9="aws:cdk:analytics:mixin",_9="*",r1=t=>{let e=new Set,s=[];for(let n of t){if(n.type!==F9||!n.data||typeof n.data!="object"||Array.isArray(n.data))continue;let r=n.data.mixin;typeof r!="string"||r.length===0||e.has(r)||(e.add(r),s.push({fqn:r,isCustom:r===_9}))}return s};var Qc="cdk-insights::",T9="aws:cdk:acknowledged-rules",oy="cdk-insights::nagFinding::",i1=t=>t.startsWith(Qc)&&!t.startsWith(oy),P9=t=>t.startsWith(oy),o1="2.2.0",L9=(t,e)=>{let s=t.split(".").map(Number),n=e.split(".").map(Number);for(let r=0;r<Math.max(s.length,n.length);r++){let i=s[r]||0,o=n[r]||0;if(i!==o)return i-o}return 0},O9=(t,e)=>{if(!t){ke.debug("Legacy cdk-insights metadata found (no version field)",{constructPath:e});return}L9(t,o1)<0&&ke.debug(`Metadata version ${t} is older than expected ${o1}`,{constructPath:e,hint:"Consider re-running cdk synth with the latest cdk-insights aspect"})},a1=(t,e,s,n,r)=>{try{let i=t.artifacts??{},a=(i[n]||i[`${n}.template.json`])?.metadata??{},c={...e},u={...s},l=[];for(let[p,{githubUrl:f,docUrl:m}]of Object.entries(r))if(f||m){let g=u[p]||{};u[p]={...g,...f&&{__github:f},...m&&{__docs:m}}}for(let[p,f]of Object.entries(a)){for(let b of f)if(b.type===T9&&!(!b.data||typeof b.data!="object"))for(let[S,C]of Object.entries(b.data)){if(!S.startsWith(Qc))continue;let I=S.slice(Qc.length);if(!I)continue;let E=typeof C=="string"?C:"";l.push({constructPath:p,ruleId:I,reason:E})}let m=f.find(b=>b.type==="aws:cdk:logicalId"&&typeof b.data=="string");if(!m)continue;let g=m.data,h=p.startsWith("/")?p.slice(1):p;c[h]=g;let x=r1(f);x.length>0&&(u[g]={...u[g],__appliedMixins:x});let y=f.find(b=>b.type==="aws:cdk:info"&&typeof b.data=="string"&&i1(b.data));if(y)try{let b=JSON.parse(y.data.slice(Qc.length)),{friendlyName:S,constructType:C,description:I,stackId:E,sourceLocation:w,parentPath:j,childCount:H,tags:z,version:q,logicalId:L,constructHierarchy:G,serviceCategory:k,dependencies:U,sensitiveProperties:V,usesDefaults:se,l2ConstructType:Y,l2ConstructId:Z,createdBy:ee,rootSourceLocation:le,searchHint:Ce}=b;O9(q,p);let K={...u[g]};S&&(K.__friendlyName=S),C&&(K.__constructType=C),I&&(K.__description=I),E&&(K.__stackId=n),w&&(K.__sourceLocation=w),j&&(K.__parentPath=j),H!==void 0&&(K.__childCount=H),z&&Object.keys(z).length>0&&(K.__tags=z),q&&(K.__metadataVersion=q),L&&(K.__logicalId=L),G?.length>0&&(K.__constructHierarchy=G),k&&(K.__serviceCategory=k),U?.length>0&&(K.__dependencies=U),V?.length>0&&(K.__sensitiveProperties=V),se!==void 0&&(K.__usesDefaults=se),Y&&(K.__l2ConstructType=Y),Z&&(K.__l2ConstructId=Z),ee&&(K.__createdBy=ee),le&&(K.__rootSourceLocation=le),Ce&&(K.__searchHint=Ce),u[g]=K}catch(b){ke.warn(`Failed to parse cdk-insights metadata for ${p}:`,{error:b})}}let d={};for(let[p,f]of Object.entries(a)){let m=f.find(I=>I.type==="aws:cdk:logicalId"&&typeof I.data=="string");if(!m)continue;let g=m.data,h=[],x=f.find(I=>I.type==="aws:cdk:info"&&typeof I.data=="string"&&i1(I.data));if(x)try{let I=JSON.parse(x.data.slice(Qc.length));Array.isArray(I.issues)&&(h=I.issues.map(E=>({resourceId:E.resourceId,issue:E.issue,recommendation:E.recommendation,severity:E.severity,wafPillar:E.wafPillar,foundBy:"cdkInsights",constructPath:p,stackId:u[g]?.__stackId,constructType:u[g]?.__constructType,githubUrl:s[g]?.__github,docUrl:s[g]?.__docs})))}catch(I){ke.warn(`Failed to parse cdk-insights metadata for ${p}:`,{error:I})}let y=f.filter(I=>(I.type==="aws:cdk:error"||I.type==="aws:cdk:warning")&&typeof I.data=="string"&&XI(I.data)).map(I=>{let E=I.data,w=QI(E),j=Yc(I.type,w);return{resourceId:g,issue:E,recommendation:void 0,severity:j,wafPillar:Jc(w),foundBy:"cdkNag",constructPath:p,ruleId:w,stackId:u[g]?.__stackId,constructType:u[g]?.__constructType,githubUrl:s[g]?.__github,docUrl:iy(w)||s[g]?.__docs}}),b=[];for(let I of f)if(I.type==="aws:cdk:info"&&typeof I.data=="string"&&P9(I.data))try{let E=JSON.parse(I.data.slice(oy.length)),w=E.level==="Error"?"aws:cdk:error":"aws:cdk:warning",j=Yc(w,E.ruleId);b.push({resourceId:g,issue:`${E.ruleId}${E.findingId?`[${E.findingId}]`:""}: ${E.ruleInfo}`,recommendation:E.ruleExplanation,severity:j,wafPillar:Jc(E.ruleId),foundBy:"cdkNag",constructPath:p,ruleId:E.ruleId,stackId:u[g]?.__stackId,constructType:u[g]?.__constructType,githubUrl:s[g]?.__github,docUrl:iy(E.ruleId)||s[g]?.__docs})}catch(E){ke.warn(`Failed to parse cdk-insights nag finding for ${p}:`,{error:E})}let S=[...y,...b],C=u[g];d[g]={resourceId:g,friendlyName:C?.__friendlyName||g,cdkPath:p,locationHint:p,type:s[g]?.Type,isGenerated:!1,constructType:C?.__constructType,parentPath:C?.__parentPath,childCount:C?.__childCount,tags:C?.__tags,sourceLocation:C?.__sourceLocation,logicalId:g,constructHierarchy:C?.__constructHierarchy,serviceCategory:C?.__serviceCategory,dependencies:C?.__dependencies,sensitiveProperties:C?.__sensitiveProperties,usesDefaults:C?.__usesDefaults,l2ConstructType:C?.__l2ConstructType,l2ConstructId:C?.__l2ConstructId,createdBy:C?.__createdBy,rootSourceLocation:C?.__rootSourceLocation,searchHint:C?.__searchHint,appliedMixins:C?.__appliedMixins,sources:{cdkInsights:{issues:h},cdkNag:{issues:S}}}}if(Object.keys(d).length===0)for(let p of Object.keys(u))d[p]={resourceId:p,friendlyName:p,cdkPath:p,isGenerated:!1,sources:{cdkInsights:{issues:[]},cdkNag:{issues:[]}}};return{pathToLogicalId:c,unifiedResourceMap:u,resourceIdMetadata:r,recommendationMap:d,acknowledgements:l}}catch(i){return ke.error("\u26A0\uFE0F Failed to parse manifest.json for logical ID mappings:",{error:i}),ke.warn("Unknown error in parseManifestMetadata",{error:i}),{pathToLogicalId:e,unifiedResourceMap:s,resourceIdMetadata:r,recommendationMap:{},acknowledgements:[]}}};var lr=te(require("node:fs")),up=te(require("node:path"));function M9(t){let e=up.join(t,"manifest.json");if(!lr.existsSync(e))return{};let s=JSON.parse(lr.readFileSync(e,"utf8")),n={};for(let r of Object.values(s.artifacts)){if(r.type!=="cdk:asset-manifest")continue;let i=r.properties.file,o=up.join(t,i);if(!lr.existsSync(o))continue;let a=JSON.parse(lr.readFileSync(o,"utf8"));for(let[c,u]of Object.entries(a.files||{}))n[c]=u.displayName}return n}function c1(t){let e={},s={},n={},r={},i=M9(t),o=lr.readdirSync(t).filter(a=>a.endsWith(".template.json"));for(let a of o){let c=a.replace(/\.template\.json$/,""),u=JSON.parse(lr.readFileSync(up.join(t,a),"utf8"));e[c]=u;for(let[l,d]of Object.entries(u.Resources||{})){if(new Set(["CDKMetadata","BootstrapVersion","CheckBootstrapVersion"]).has(l)||d.Type?.startsWith("AWS::CDK::")||d.Type==="AWS::SSM::Parameter")continue;let f={...d,displayName:l},m=f.Metadata??{};typeof m["aws:cdk:path"]=="string"&&(s[m["aws:cdk:path"]]=l);let g=m["aws:asset:path"],h=typeof g=="string"?g.replace(/^asset\./,""):void 0;if(h&&i[h])f.displayName=i[h];else if(typeof m["aws:cdk:path"]=="string"){let x=m["aws:cdk:path"].split("/"),y=x[x.length-1],b=y==="Resource"&&x.length>1?x[x.length-2]:y;f.displayName=b}n[l]=f,r[l]=f.displayName??l}}return{stacks:e,pathToLogicalId:s,unifiedResourceMap:n,displayNameMap:r,assetSourcePaths:Object.fromEntries(Object.entries(n).filter(([,a])=>a.Metadata?.["aws:asset:path"]).map(([a,c])=>[a,c.Metadata["aws:asset:path"]]))}}var lp=te(require("node:fs"));var B9=["cdk-nag","cdk-monitoring-constructs","cdk-watchful","@cdk-cosmos/","@aws-cdk-containers/","@aws-prototyping-sdk/"],N9=t=>t.startsWith("aws-cdk-lib.aws_")||t.startsWith("aws-cdk-lib.core.")||t.startsWith("aws-cdk-lib/aws-")||/^@aws-cdk\/aws[-_]/.test(t)||/^@aws-cdk\/core/.test(t),W9=t=>t.startsWith("@aws-solutions-constructs/"),$9=t=>B9.some(e=>t.startsWith(e)||t.startsWith(`${e}.`)),j9=t=>{let e=t.split(".");return e[e.length-1]??""},u1=t=>!t||typeof t!="string"?"unknown":j9(t).startsWith("Cfn")?"L1":W9(t)?"L3-aws-solutions":$9(t)?"L3-third-party":N9(t)?"L2":"L3-custom";var l1=t=>{let e="https://github.com/aws/aws-cdk/blob/main/packages",s="https://docs.aws.amazon.com/cdk/api/v2/docs",n=t.split(".");if(n.length<3)return{githubUrl:null,docUrl:null,constructName:null};let[,r,...i]=n,o=`${e}/aws-cdk-lib/${r}/lib/${i.join("/")}.ts`,a=`${s}/${t}.html`;return{githubUrl:o,docUrl:a,constructName:i[0]}};var d1=(t,e)=>{let s=`${t}/tree.json`;if(!lp.existsSync(s))return{pathToLogicalId:e,resourceIdMetadata:{}};let n=JSON.parse(lp.readFileSync(s,"utf-8")),i=(n.tree?.children?Object.values(n.tree.children):[n]).map(d=>({node:d,parentPath:""})),o=[];for(;i.length;){let d=i.pop();if(!d)continue;let{node:p,parentPath:f}=d,m=f?`${f}/${p.id}`:p.id,g=m.replace(/^\/+/,""),h=e[g],x=p.constructInfo?.fqn,y=p.attributes?.["aws:cdk:cloudformation:props"],b=y&&typeof y.description=="string"?y.description:void 0;if(o.push({logicalId:h,path:m,fqn:x,description:b}),p.children)for(let S of Object.values(p.children))i.push({node:S,parentPath:m})}let a={},c={},u={},l=d=>(c[d]||(c[d]={githubUrl:"",docUrl:"",constructName:"",constructLevel:"unknown"}),c[d]);for(let{logicalId:d,path:p,fqn:f,description:m}of o)if(d){if(a[p]=d,f){let g=l(d);g.fqn=f,g.constructLevel=u1(f);let{githubUrl:h,docUrl:x,constructName:y}=l1(f);h&&(g.githubUrl=h),x&&(g.docUrl=x,y&&(g.constructName=y))}m&&(u[d]=m)}return{pathToLogicalId:{...e,...a},resourceIdMetadata:c,autoGeneratedDescriptions:u}};var ay="cdk.out",dp=t=>{let e=MI({stackName:t,extractInlineNagFindings:e1}),s=Pa(ay),{context:n}=s1(),{stacks:r,pathToLogicalId:i,unifiedResourceMap:o,assetSourcePaths:a}=c1(ay),{pathToLogicalId:c,resourceIdMetadata:u,autoGeneratedDescriptions:l}=d1(ay,i),d={...i,...c},p=n1(o,l),f=t?r[t]?{[t]:r[t]}:{}:r,m={},g=Object.fromEntries(Object.entries(f).map(([y,b])=>{let{recommendationMap:S,unifiedResourceMap:C,acknowledgements:I}=a1(s,d,p,y,u);m[y]=I;let E={...p,...C};for(let[H,z]of Object.entries(b.Resources??{})){let q=E[H]?.__appliedMixins;q&&q.length>0&&(z.__appliedMixins=q)}let w=Object.fromEntries(Object.keys(b.Resources??{}).map(H=>[H,S[H]??{resourceId:H,friendlyName:d[H]??H,cdkPath:H,isGenerated:!1,sources:{cdkInsights:{issues:[]},cdkNag:{issues:[]}}}])),j=YI(w,d,E,b,u);return[y,j]})),{version:h,supportsBoxTraces:x}=lo();return{stacks:f,inlineFindings:e,pathToLogicalId:d,recommendationMapPerStack:g,assetSourcePaths:a,acknowledgementsPerStack:m,cdkVersion:h,supportsBoxTraces:x,cdkContext:n,resourceIdMetadata:u}};var g_=te(require("node:fs"));var La=(t,e)=>{let s=[];if(t==null)return s;if(typeof t=="string"){let n=t.matchAll(/\$\{([^.}]+)(?:\.[^}]+)?\}/g);for(let r of n){let i=r[1];e.has(i)&&s.push(i)}return s}if(Array.isArray(t)){for(let n of t)s.push(...La(n,e));return s}if(typeof t=="object"){let n=t;if("Ref"in n&&typeof n.Ref=="string"&&e.has(n.Ref)&&s.push(n.Ref),"Fn::GetAtt"in n){let r=n["Fn::GetAtt"];if(Array.isArray(r)&&typeof r[0]=="string")e.has(r[0])&&s.push(r[0]);else if(typeof r=="string"){let i=r.split(".")[0];e.has(i)&&s.push(i)}}if("Fn::Sub"in n){let r=n["Fn::Sub"];Array.isArray(r)?(s.push(...La(r[0],e)),r[1]&&typeof r[1]=="object"&&s.push(...La(r[1],e))):s.push(...La(r,e))}for(let[r,i]of Object.entries(n))["Ref","Fn::GetAtt","Fn::Sub"].includes(r)||s.push(...La(i,e))}return s},U9=t=>t.DependsOn?Array.isArray(t.DependsOn)?t.DependsOn:[t.DependsOn]:[],G9=(t,e)=>{if(e.length===0)return;let s=new Set(e.map(i=>i.type.split("::")[2]||i.type)),n=Array.from(s).slice(0,3),r=t.split("::")[2]||t;if(t.includes("SecurityGroup"))return`Security group attached to: ${n.join(", ")}`;if(t.includes("IAM::Role"))return`IAM role assumed by: ${n.join(", ")}`;if(t.includes("VPC")||t.includes("Subnet"))return`Network hosting: ${n.join(", ")}`;if(t.includes("KMS::Key"))return`Encryption key used by: ${n.join(", ")}`;if(t.includes("S3::Bucket")){if(n.some(i=>i.includes("Lambda")))return"S3 bucket accessed by Lambda functions";if(n.some(i=>i.includes("CloudFront")))return"S3 bucket serving as CloudFront origin"}if(t.includes("DynamoDB::Table")&&n.some(i=>i.includes("Lambda")))return"DynamoDB table accessed by Lambda functions";if(e.length>0)return`Referenced by ${e.length} resource${e.length>1?"s":""}: ${n.join(", ")}`},po=t=>{let e=new Set(Object.keys(t)),s={};for(let n of e)s[n]={dependencies:[],dependents:[]};for(let[n,r]of Object.entries(t)){let i=U9(r),o=La(r.Properties,e),a=[...new Set([...i,...o])];s[n].dependencies=a;for(let c of a)s[c]&&s[c].dependents.push(n)}for(let[n,r]of Object.entries(t)){let i=s[n],o=i.dependents.map(a=>({id:a,type:t[a]?.Type||"Unknown"}));i.usageDescription=G9(r.Type,o)}return s},pp=(t,e,s)=>{let n=e[t];if(!n)return{dependencies:[],dependents:[]};let r=n.dependencies.map(o=>{let a=s[o]?.Type?.split("::")[2]||o;return`${o} (${a})`}),i=n.dependents.map(o=>{let a=s[o]?.Type?.split("::")[2]||o;return`${o} (${a})`});return{dependencies:r,dependents:i,usageDescription:n.usageDescription}};var H9=(t,e,s)=>{let n={},r=new Set(["AWS::RDS::DBInstance","AWS::RDS::DBCluster","AWS::ElastiCache::CacheCluster","AWS::ElastiCache::ReplicationGroup","AWS::Redshift::Cluster","AWS::OpenSearchService::Domain","AWS::Elasticsearch::Domain","AWS::ECS::Service"]),i=new Set(Object.entries(t).filter(([,o])=>r.has(o.Type)).map(([o])=>o));for(let[o,a]of Object.entries(t)){if(a.Type!=="AWS::Lambda::Function")continue;let c=a.Properties||{},u=!!(c.VpcConfig&&(c.VpcConfig.SubnetIds||c.VpcConfig.SecurityGroupIds)),l=e[o];if(!l)continue;if(l.dependencies.some(p=>i.has(p))&&!u){n[o]||(n[o]={issues:[]});let p=l.dependencies.filter(f=>i.has(f));n[o].issues.push(s(o,`Lambda function references VPC resources (${p.join(", ")}) but is not VPC-enabled`,"Configure VpcConfig with appropriate SubnetIds and SecurityGroupIds to allow the Lambda function to connect to VPC resources. Without VPC configuration, the function cannot reach private resources like RDS databases.","HIGH","Reliability",a.Metadata?.["aws:cdk:path"]||o,"cdkInsights"))}}return n},z9=(t,e)=>{let s={},n=new Map;for(let[r,i]of Object.entries(t)){if(i.Type!=="AWS::S3::Bucket")continue;let o=i.Properties||{},a=!!(o.BucketEncryption||o.ServerSideEncryptionConfiguration);n.set(r,a)}for(let[r,i]of Object.entries(t)){if(i.Type!=="AWS::S3::Bucket")continue;let a=(i.Properties||{}).ReplicationConfiguration;if(!a)continue;let c=n.get(r),u=a.Rules;if(!(!u||!Array.isArray(u)))for(let l of u){if(l.Status!=="Enabled")continue;let d=l.Destination;if(!d||!d.Bucket)continue;let f=d.EncryptionConfiguration;c&&!f&&(s[r]||(s[r]={issues:[]}),s[r].issues.push(e(r,"S3 replication configured without encryption configuration for replicated objects","Specify EncryptionConfiguration in the replication rule to ensure replicated objects maintain encryption. Use ReplicaKmsKeyID to specify the KMS key for encrypting replicated objects in the destination bucket.","MEDIUM","Security",i.Metadata?.["aws:cdk:path"]||r,"cdkInsights")))}}return s},V9=(t,e,s)=>{let n={},r=new Set([80,443,8080,8443]);for(let[i,o]of Object.entries(t)){if(o.Type!=="AWS::EC2::SecurityGroup")continue;let c=(o.Properties||{}).SecurityGroupIngress||[],u=e[i];if(!(u&&u.dependents.length>0))continue;let d=[];for(let p of c){let f=p.CidrIp,m=p.CidrIpv6,g=p.FromPort,h=p.ToPort;if(!(f==="0.0.0.0/0"||m==="::/0")||g===void 0)continue;let y=h!==void 0&&h!==g,b=!r.has(g);(y||b)&&d.push(g)}if(d.length>0){n[i]||(n[i]={issues:[]});let p=u.dependents.map(f=>t[f]?.Type?.split("::")[2]||"Unknown").join(", ");n[i].issues.push(s(i,`Security group used by ${p} has public access on non-standard ports: ${d.join(", ")}`,"Restrict ingress rules to specific CIDR blocks or reference other security groups instead of allowing 0.0.0.0/0 on non-standard ports. Consider using a bastion host or VPN for administrative access.","HIGH","Security",o.Metadata?.["aws:cdk:path"]||i,"cdkInsights"))}}return n},fp=(t,e)=>{let s=t.Resources||{},n=po(s),r={},i=[H9(s,n,e),z9(s,e),V9(s,n,e)];for(let o of i)for(let[a,c]of Object.entries(o))r[a]||(r[a]={issues:[]}),r[a].issues.push(...c.issues);return r};var q9=t=>{let e=[],s=Object.values(t).map(w=>w.Type),n={};for(let w of s)n[w]=(n[w]||0)+1;let r=s.some(w=>w==="AWS::Lambda::Function"),i=s.some(w=>w==="AWS::ApiGateway::RestApi"||w==="AWS::ApiGatewayV2::Api"),o=s.some(w=>w==="AWS::DynamoDB::Table"),a=s.some(w=>w==="AWS::S3::Bucket");r&&(o||a)&&!s.some(w=>w.includes("ECS")||w.includes("EC2::Instance"))&&e.push("serverless");let c=s.some(w=>w==="AWS::ECS::Service"||w==="AWS::ECS::TaskDefinition"||w==="AWS::ECS::Cluster"),u=s.some(w=>w.startsWith("AWS::EKS::"));(c||u)&&e.push("container-based");let l=s.some(w=>w.startsWith("AWS::Events::")),d=s.some(w=>w==="AWS::SNS::Topic"),p=s.some(w=>w==="AWS::SQS::Queue"),f=s.some(w=>w.startsWith("AWS::Kinesis::")),m=s.some(w=>w.startsWith("AWS::StepFunctions::"));(l||d||p||f||m)&&r&&e.push("event-driven"),i&&e.push("api-gateway");let g=s.some(w=>w.startsWith("AWS::Glue::")),h=s.some(w=>w.startsWith("AWS::Athena::")),x=s.some(w=>w.startsWith("AWS::EMR::"));(f||g||h||x)&&e.push("data-processing");let y=s.some(w=>w==="AWS::CloudFront::Distribution");a&&y&&!r&&!c&&e.push("static-website");let b=n["AWS::Lambda::Function"]||0,S=n["AWS::ECS::Service"]||0;(b>=3||S>=2)&&e.push("microservices");let C=s.some(w=>w==="AWS::EC2::Instance"),I=s.some(w=>w==="AWS::RDS::DBInstance"||w==="AWS::RDS::DBCluster"),E=s.some(w=>w==="AWS::ElasticLoadBalancingV2::LoadBalancer");return C&&(I||E)&&e.push("traditional"),e},K9=(t,e)=>{let s={},n=Object.values(t).map(l=>l.Type),r=n.some(l=>l==="AWS::CloudWatch::Alarm"),i=n.some(l=>l==="AWS::Lambda::Function"),o=n.some(l=>l==="AWS::ECS::Service"),a=n.some(l=>l==="AWS::RDS::DBInstance"||l==="AWS::RDS::DBCluster");(i||o||a)&&!r&&(s["Stack Architecture"]={issues:[e("Stack Architecture","No CloudWatch Alarms defined for critical resources","Add CloudWatch Alarms to monitor key metrics like Lambda errors, ECS task failures, or RDS connections. Consider using CDK's built-in alarm methods or aws-cdk-lib/aws-cloudwatch.","MEDIUM","Operational Excellence","Stack Architecture","cdkInsights")]});let c=n.some(l=>l==="AWS::XRay::Group"||l==="AWS::XRay::SamplingRule");return n.filter(l=>l==="AWS::Lambda::Function").length>=3&&!c&&(s["Stack Architecture"]||(s["Stack Architecture"]={issues:[]}),s["Stack Architecture"].issues.push(e("Stack Architecture","Multiple Lambda functions without X-Ray tracing configuration","Enable X-Ray tracing for your Lambda functions to gain visibility into distributed request flows and identify performance bottlenecks. Set tracing: lambda.Tracing.ACTIVE on your functions.","LOW","Operational Excellence","Stack Architecture","cdkInsights"))),s},Z9=(t,e)=>{let s={},n=Object.values(t).map(p=>p.Type),r=n.some(p=>p==="AWS::ApiGateway::RestApi"||p==="AWS::ApiGatewayV2::Api"),i=n.some(p=>p==="AWS::ElasticLoadBalancingV2::LoadBalancer"),o=n.some(p=>p==="AWS::CloudFront::Distribution"),a=n.some(p=>p==="AWS::WAFv2::WebACL"||p==="AWS::WAF::WebACL");(r||i||o)&&!a&&(s["Stack Architecture"]||(s["Stack Architecture"]={issues:[]}),s["Stack Architecture"].issues.push(e("Stack Architecture","Public-facing resources without WAF protection","Consider adding AWS WAF to protect your API Gateway, ALB, or CloudFront distribution from common web exploits. WAF can help prevent SQL injection, XSS, and rate-limit malicious traffic.","MEDIUM","Security","Stack Architecture","cdkInsights")));let c=n.some(p=>p==="AWS::SecretsManager::Secret"),u=n.some(p=>p==="AWS::SSM::Parameter"),l=n.some(p=>p==="AWS::RDS::DBInstance"||p==="AWS::RDS::DBCluster"),d=!1;for(let[p,f]of Object.entries(t))if(f.Type==="AWS::Lambda::Function"){let m=f.Properties?.Environment?.Variables;if(m){let g=["PASSWORD","SECRET","API_KEY","TOKEN","CREDENTIAL"];for(let h of Object.keys(m))if(g.some(x=>h.toUpperCase().includes(x))){let x=m[h];if(typeof x=="string"&&!x.startsWith("{{")){d=!0;break}}}}return l&&!c&&!u&&(s["Stack Architecture"]||(s["Stack Architecture"]={issues:[]}),s["Stack Architecture"].issues.push(e("Stack Architecture","RDS database without Secrets Manager for credential rotation","Use AWS Secrets Manager to store and automatically rotate database credentials. This improves security by eliminating hardcoded passwords and enabling automatic credential rotation.","HIGH","Security","Stack Architecture","cdkInsights"))),s},Y9=(t,e)=>{let s={},n=Object.values(t).filter(u=>u.Type==="AWS::EC2::NatGateway").length;n>=3&&(s["Stack Architecture"]||(s["Stack Architecture"]={issues:[]}),s["Stack Architecture"].issues.push(e("Stack Architecture",`${n} NAT Gateways detected - potential cost optimization`,"Multiple NAT Gateways can be expensive ($32/month each + data processing). Consider if all are necessary, or explore alternatives like NAT instances for dev environments, or VPC endpoints for AWS services.","MEDIUM","Cost Optimization","Stack Architecture","cdkInsights")));let r=n>0,i=Object.values(t).some(u=>u.Type==="AWS::EC2::VPCEndpoint"),o=Object.values(t).some(u=>{if(u.Type!=="AWS::Lambda::Function")return!1;let l=u.Properties?.VpcConfig;return l?.SubnetIds||l?.SecurityGroupIds}),a=Object.values(t).some(u=>u.Type==="AWS::S3::Bucket"),c=Object.values(t).some(u=>u.Type==="AWS::DynamoDB::Table");return o&&r&&!i&&(a||c)&&(s["Stack Architecture"]||(s["Stack Architecture"]={issues:[]}),s["Stack Architecture"].issues.push(e("Stack Architecture","VPC Lambda functions accessing AWS services through NAT Gateway","Consider using VPC Endpoints (Gateway endpoints for S3/DynamoDB are free) instead of routing AWS service traffic through NAT Gateway. This reduces costs and improves latency.","LOW","Cost Optimization","Stack Architecture","cdkInsights"))),s},J9=(t,e,s)=>{let n={};for(let[r,i]of Object.entries(e)){let o=t[r];if(!o)continue;let a=i.dependents.length;if(a>=5){let c=o.Type.split("::")[2]||o.Type;n["Stack Architecture"]||(n["Stack Architecture"]={issues:[]}),n["Stack Architecture"].issues.push(s("Stack Architecture",`${c} (${r}) is a potential single point of failure with ${a} dependent resources`,"Consider adding redundancy or failover mechanisms for this critical resource. For databases, consider Multi-AZ. For queues, consider dead-letter queues. For Lambda, ensure proper error handling.","MEDIUM","Reliability","Stack Architecture","cdkInsights"))}}for(let[r,i]of Object.entries(t)){if(i.Type!=="AWS::DynamoDB::Table")continue;if(i.Properties?.PointInTimeRecoverySpecification?.PointInTimeRecoveryEnabled!==!0){let a=e[r];a&&a.dependents.length>=3&&(n["Stack Architecture"]||(n["Stack Architecture"]={issues:[]}),n["Stack Architecture"].issues.push(s("Stack Architecture",`Critical DynamoDB table ${r} has ${a.dependents.length} dependents but no point-in-time recovery`,"Enable Point-in-Time Recovery (PITR) for critical DynamoDB tables used by multiple resources. This provides continuous backups with 35-day retention.","HIGH","Reliability","Stack Architecture","cdkInsights")))}}return n},mp=(t,e)=>{let s=t.Resources||{};if(Object.keys(s).length<3)return{};let r=po(s),i=q9(s),o={},a=[K9(s,e),Z9(s,e),Y9(s,e),J9(s,r,e)];for(let c of a)for(let[u,l]of Object.entries(c))o[u]||(o[u]={issues:[]}),o[u].issues.push(...l.issues);return o};var hp=require("node:fs"),Xc=require("node:path");function p1(){let t=require.resolve("@aws-solutions-constructs/core/package.json"),e=(0,Xc.dirname)((0,Xc.dirname)(t));return(0,hp.readdirSync)(e).filter(s=>s!=="core"&&s.startsWith("aws-")&&(0,hp.statSync)((0,Xc.join)(e,s)).isDirectory())}var f1={"aws-apigateway-dynamodb":{className:"ApiGatewayToDynamoDB",packageName:"aws-apigateway-dynamodb",friendlyName:"Api Gateway To Dynamo DB",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-dynamodb/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-dynamodb",requiredResourceTypes:["AWS::DynamoDB::Table","AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Resource","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::IAM::Role","AWS::ApiGateway::Account","AWS::IAM::Policy"]},"aws-apigateway-kinesisstreams":{className:"ApiGatewayToKinesisStreams",packageName:"aws-apigateway-kinesisstreams",friendlyName:"Api Gateway To Kinesis Streams",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-kinesisstreams/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-kinesisstreams",requiredResourceTypes:["AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Resource","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::ApiGateway::RequestValidator","AWS::ApiGateway::Model","AWS::IAM::Role","AWS::ApiGateway::Account","AWS::IAM::Policy","AWS::CloudWatch::Alarm","AWS::Kinesis::Stream"]},"aws-apigateway-lambda":{className:"ApiGatewayToLambda",packageName:"aws-apigateway-lambda",friendlyName:"Api Gateway To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Resource","AWS::Lambda::Permission","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::ApiGateway::Account"]},"aws-apigateway-sqs":{className:"ApiGatewayToSqs",packageName:"aws-apigateway-sqs",friendlyName:"Api Gateway To Sqs",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-sqs",requiredResourceTypes:["AWS::SQS::Queue","AWS::SQS::QueuePolicy","AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::IAM::Role","AWS::ApiGateway::Account","AWS::IAM::Policy"]},"aws-apigatewayv2websocket-sqs":{className:"ApiGatewayV2WebSocketToSqs",packageName:"aws-apigatewayv2websocket-sqs",friendlyName:"Api Gateway V2 Web Socket To Sqs",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigatewayv2websocket-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigatewayv2websocket-sqs",requiredResourceTypes:["AWS::SQS::Queue","AWS::SQS::QueuePolicy","AWS::IAM::Role","AWS::IAM::Policy","AWS::ApiGatewayV2::Api","AWS::ApiGatewayV2::Integration","AWS::ApiGatewayV2::Route","AWS::ApiGatewayV2::Stage","AWS::Logs::LogGroup"]},"aws-cloudfront-apigateway-lambda":{className:"CloudFrontToApiGatewayToLambda",packageName:"aws-cloudfront-apigateway-lambda",friendlyName:"Cloud Front To Api Gateway To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cloudfront-apigateway-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cloudfront-apigateway-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Resource","AWS::Lambda::Permission","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::ApiGateway::Account","AWS::CloudFront::Function","AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::CloudFront::Distribution"]},"aws-cloudfront-mediastore":{className:"CloudFrontToMediaStore",packageName:"aws-cloudfront-mediastore",friendlyName:"Cloud Front To Media Store",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cloudfront-mediastore/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cloudfront-mediastore",requiredResourceTypes:["AWS::CloudFront::CloudFrontOriginAccessIdentity","AWS::MediaStore::Container","AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::CloudFront::OriginRequestPolicy","AWS::CloudFront::Function","AWS::CloudFront::Distribution"]},"aws-cloudfront-oai-s3":{className:"CloudFrontToOaiToS3",packageName:"aws-cloudfront-oai-s3",friendlyName:"Cloud Front To Oai To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cloudfront-oai-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cloudfront-oai-s3",requiredResourceTypes:["AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::CloudFront::Function","AWS::CloudFront::CloudFrontOriginAccessIdentity","AWS::CloudFront::Distribution"]},"aws-cloudfront-s3":{className:"CloudFrontToS3",packageName:"aws-cloudfront-s3",friendlyName:"Cloud Front To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cloudfront-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cloudfront-s3",requiredResourceTypes:["AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::CloudFront::Function","AWS::CloudFront::OriginAccessControl","AWS::CloudFront::Distribution"]},"aws-cognito-apigateway-lambda":{className:"CognitoToApiGatewayToLambda",packageName:"aws-cognito-apigateway-lambda",friendlyName:"Cognito To Api Gateway To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cognito-apigateway-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cognito-apigateway-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::Logs::LogGroup","AWS::ApiGateway::RestApi","AWS::ApiGateway::Deployment","AWS::ApiGateway::Stage","AWS::ApiGateway::Resource","AWS::Lambda::Permission","AWS::ApiGateway::Method","AWS::ApiGateway::UsagePlan","AWS::ApiGateway::Account","AWS::Cognito::UserPool","AWS::Cognito::UserPoolClient","AWS::ApiGateway::Authorizer"]},"aws-dynamodbstreams-lambda":{className:"DynamoDBStreamsToLambda",packageName:"aws-dynamodbstreams-lambda",friendlyName:"Dynamo DBStreams To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-dynamodbstreams-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-dynamodbstreams-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::Lambda::EventSourceMapping","AWS::DynamoDB::Table","AWS::SQS::Queue","AWS::SQS::QueuePolicy"]},"aws-kinesisfirehose-s3":{className:"KinesisFirehoseToS3",packageName:"aws-kinesisfirehose-s3",friendlyName:"Kinesis Firehose To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-kinesisfirehose-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-kinesisfirehose-s3",requiredResourceTypes:["AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::Logs::LogGroup","AWS::Logs::LogStream","AWS::IAM::Role","AWS::IAM::Policy","AWS::KinesisFirehose::DeliveryStream"]},"aws-kinesisstreams-kinesisfirehose-s3":{className:"KinesisStreamsToKinesisFirehoseToS3",packageName:"aws-kinesisstreams-kinesisfirehose-s3",friendlyName:"Kinesis Streams To Kinesis Firehose To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-kinesisstreams-kinesisfirehose-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-kinesisstreams-kinesisfirehose-s3",requiredResourceTypes:["AWS::Kinesis::Stream","AWS::S3::Bucket","AWS::S3::BucketPolicy","AWS::Logs::LogGroup","AWS::Logs::LogStream","AWS::IAM::Role","AWS::IAM::Policy","AWS::KinesisFirehose::DeliveryStream","AWS::CloudWatch::Alarm"]},"aws-s3-lambda":{className:"S3ToLambda",packageName:"aws-s3-lambda",friendlyName:"S3 To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-s3-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-s3-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::S3::Bucket","AWS::S3::BucketPolicy","Custom::S3BucketNotifications","AWS::Lambda::Permission"]},"aws-s3-sns":{className:"S3ToSns",packageName:"aws-s3-sns",friendlyName:"S3 To Sns",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-s3-sns/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-s3-sns",requiredResourceTypes:["AWS::S3::Bucket","AWS::S3::BucketPolicy","Custom::S3BucketNotifications","AWS::KMS::Key","AWS::SNS::Topic","AWS::SNS::TopicPolicy","AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function"]},"aws-s3-sqs":{className:"S3ToSqs",packageName:"aws-s3-sqs",friendlyName:"S3 To Sqs",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-s3-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-s3-sqs",requiredResourceTypes:["AWS::S3::Bucket","AWS::S3::BucketPolicy","Custom::S3BucketNotifications","AWS::SQS::Queue","AWS::SQS::QueuePolicy","AWS::KMS::Key","AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function"]},"aws-sns-lambda":{className:"SnsToLambda",packageName:"aws-sns-lambda",friendlyName:"Sns To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-sns-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-sns-lambda",requiredResourceTypes:["AWS::IAM::Role","AWS::IAM::Policy","AWS::Lambda::Function","AWS::Lambda::Permission","AWS::SNS::Subscription","AWS::SNS::Topic","AWS::SNS::TopicPolicy"]},"aws-sns-sqs":{className:"SnsToSqs",packageName:"aws-sns-sqs",friendlyName:"Sns To Sqs",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-sns-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-sns-sqs",requiredResourceTypes:["AWS::SNS::Topic","AWS::SNS::TopicPolicy","AWS::SQS::Queue","AWS::SQS::QueuePolicy","AWS::SNS::Subscription","AWS::KMS::Key"]},"aws-eventbridge-kinesisstreams":{className:"EventbridgeToKinesisStreams",packageName:"aws-eventbridge-kinesisstreams",friendlyName:"EventBridge To Kinesis Streams",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-kinesisstreams/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-kinesisstreams",requiredResourceTypes:["AWS::Events::Rule","AWS::Kinesis::Stream"]},"aws-eventbridge-sns":{className:"EventbridgeToSns",packageName:"aws-eventbridge-sns",friendlyName:"EventBridge To SNS",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-sns/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-sns",requiredResourceTypes:["AWS::Events::Rule","AWS::SNS::Topic"]},"aws-eventbridge-sqs":{className:"EventbridgeToSqs",packageName:"aws-eventbridge-sqs",friendlyName:"EventBridge To SQS",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-sqs",requiredResourceTypes:["AWS::Events::Rule","AWS::SQS::Queue"]},"aws-eventbridge-stepfunctions":{className:"EventbridgeToStepfunctions",packageName:"aws-eventbridge-stepfunctions",friendlyName:"EventBridge To StepFunctions",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-stepfunctions/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-stepfunctions",requiredResourceTypes:["AWS::Events::Rule","AWS::StepFunctions::StateMachine"]},"aws-alb-fargate":{className:"AlbToFargate",packageName:"aws-alb-fargate",friendlyName:"ALB To Fargate",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-alb-fargate/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-alb-fargate",requiredResourceTypes:["AWS::ElasticLoadBalancingV2::LoadBalancer","AWS::ElasticLoadBalancingV2::Listener","AWS::ECS::Cluster","AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::IAM::Role","AWS::Logs::LogGroup"]},"aws-alb-lambda":{className:"AlbToLambda",packageName:"aws-alb-lambda",friendlyName:"ALB To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-alb-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-alb-lambda",requiredResourceTypes:["AWS::ElasticLoadBalancingV2::LoadBalancer","AWS::ElasticLoadBalancingV2::Listener","AWS::Lambda::Function","AWS::IAM::Role","AWS::Logs::LogGroup"]},"aws-apigateway-iot":{className:"ApiGatewayToIot",packageName:"aws-apigateway-iot",friendlyName:"API Gateway To IoT",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-iot/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-iot",requiredResourceTypes:["AWS::ApiGateway::RestApi","AWS::ApiGateway::Resource","AWS::ApiGateway::Method","AWS::IoT::TopicRule"]},"aws-apigateway-sagemakerendpoint":{className:"ApiGatewayToSagemakerendpoint",packageName:"aws-apigateway-sagemakerendpoint",friendlyName:"API Gateway To SageMaker Endpoint",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-apigateway-sagemakerendpoint/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-apigateway-sagemakerendpoint",requiredResourceTypes:["AWS::ApiGateway::RestApi","AWS::ApiGateway::Integration","AWS::SageMaker::Endpoint"]},"aws-cloudfront-apigateway":{className:"CloudFrontToApiGateway",packageName:"aws-cloudfront-apigateway",friendlyName:"CloudFront To API Gateway",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-cloudfront-apigateway/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-cloudfront-apigateway",requiredResourceTypes:["AWS::CloudFront::Distribution","AWS::ApiGateway::RestApi","AWS::ApiGateway::Method"]},"aws-dynamodbstreams-lambda-elasticsearch-kibana":{className:"DynamoDBStreamsToLambdaElasticsearchKibana",packageName:"aws-dynamodbstreams-lambda-elasticsearch-kibana",friendlyName:"DynamoDB Streams To Lambda Elasticsearch Kibana",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-dynamodbstreams-lambda-elasticsearch-kibana/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-dynamodbstreams-lambda-elasticsearch-kibana",requiredResourceTypes:["AWS::DynamoDB::Stream","AWS::Lambda::Function","AWS::Elasticsearch::Domain","AWS::IAM::Role","AWS::Logs::LogGroup"]},"aws-dynamodbstreams-pipes-stepfunctions":{className:"DynamoDBStreamsToPipesStepfunctions",packageName:"aws-dynamodbstreams-pipes-stepfunctions",friendlyName:"DynamoDB Streams To Pipes StepFunctions",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-dynamodbstreams-pipes-stepfunctions/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-dynamodbstreams-pipes-stepfunctions",requiredResourceTypes:["AWS::DynamoDB::Stream","AWS::StepFunctions::StateMachine"]},"aws-eventbridge-kinesisfirehose-s3":{className:"EventbridgeToKinesisfirehoseToS3",packageName:"aws-eventbridge-kinesisfirehose-s3",friendlyName:"EventBridge To Kinesis Firehose To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-kinesisfirehose-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-kinesisfirehose-s3",requiredResourceTypes:["AWS::Events::Rule","AWS::KinesisFirehose::DeliveryStream","AWS::S3::Bucket"]},"aws-eventbridge-lambda":{className:"EventbridgeToLambda",packageName:"aws-eventbridge-lambda",friendlyName:"EventBridge To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-eventbridge-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-eventbridge-lambda",requiredResourceTypes:["AWS::Events::Rule","AWS::Lambda::Function","AWS::IAM::Role"]},"aws-fargate-dynamodb":{className:"FargateToDynamodb",packageName:"aws-fargate-dynamodb",friendlyName:"Fargate To DynamoDB",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-dynamodb/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-dynamodb",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::DynamoDB::Table"]},"aws-fargate-eventbridge":{className:"FargateToEventbridge",packageName:"aws-fargate-eventbridge",friendlyName:"Fargate To EventBridge",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-eventbridge/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-eventbridge",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::Events::Rule"]},"aws-fargate-kinesisfirehose":{className:"FargateToKinesisfirehose",packageName:"aws-fargate-kinesisfirehose",friendlyName:"Fargate To Kinesis Firehose",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-kinesisfirehose/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-kinesisfirehose",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::KinesisFirehose::DeliveryStream"]},"aws-fargate-kinesisstreams":{className:"FargateToKinesisstreams",packageName:"aws-fargate-kinesisstreams",friendlyName:"Fargate To Kinesis Streams",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-kinesisstreams/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-kinesisstreams",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::Kinesis::Stream"]},"aws-fargate-opensearch":{className:"FargateToOpensearch",packageName:"aws-fargate-opensearch",friendlyName:"Fargate To OpenSearch",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-opensearch/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-opensearch",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::OpenSearch::Domain"]},"aws-fargate-s3":{className:"FargateToS3",packageName:"aws-fargate-s3",friendlyName:"Fargate To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-s3",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::S3::Bucket"]},"aws-fargate-secretsmanager":{className:"FargateToSecretsmanager",packageName:"aws-fargate-secretsmanager",friendlyName:"Fargate To SecretsManager",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-secretsmanager/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-secretsmanager",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::SecretsManager::Secret"]},"aws-fargate-sns":{className:"FargateToSns",packageName:"aws-fargate-sns",friendlyName:"Fargate To SNS",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-sns/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-sns",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::SNS::Topic"]},"aws-fargate-sqs":{className:"FargateToSqs",packageName:"aws-fargate-sqs",friendlyName:"Fargate To SQS",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-sqs/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-sqs",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::SQS::Queue"]},"aws-fargate-ssmstringparameter":{className:"FargateToSsmstringparameter",packageName:"aws-fargate-ssmstringparameter",friendlyName:"Fargate To SSM String Parameter",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-ssmstringparameter/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-ssmstringparameter",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::SSM::StringParameter"]},"aws-fargate-stepfunctions":{className:"FargateToStepfunctions",packageName:"aws-fargate-stepfunctions",friendlyName:"Fargate To StepFunctions",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-fargate-stepfunctions/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-fargate-stepfunctions",requiredResourceTypes:["AWS::ECS::TaskDefinition","AWS::ECS::Service","AWS::StepFunctions::StateMachine"]},"aws-iot-kinesisfirehose-s3":{className:"IotToKinesisfirehoseToS3",packageName:"aws-iot-kinesisfirehose-s3",friendlyName:"IoT To Kinesis Firehose To S3",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-iot-kinesisfirehose-s3/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-iot-kinesisfirehose-s3",requiredResourceTypes:["AWS::IoT::TopicRule","AWS::KinesisFirehose::DeliveryStream","AWS::S3::Bucket"]},"aws-iot-kinesisstreams":{className:"IotToKinesisstreams",packageName:"aws-iot-kinesisstreams",friendlyName:"IoT To Kinesis Streams",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-iot-kinesisstreams/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-iot-kinesisstreams",requiredResourceTypes:["AWS::IoT::TopicRule","AWS::Kinesis::Stream"]},"aws-iot-lambda":{className:"IotToLambda",packageName:"aws-iot-lambda",friendlyName:"IoT To Lambda",documentationUrl:"https://docs.aws.amazon.com/solutions/latest/aws-iot-lambda/",githubUrl:"https://github.com/awslabs/aws-solutions-constructs/tree/main/aws-iot-lambda",requiredResourceTypes:["AWS::IoT::TopicRule","AWS::Lambda::Function","AWS::IAM::Role"]}};var m1=async t=>{let e={};for(let s of t)try{let n=await import(`@aws-solutions-constructs/${s}`),r=Object.keys(n).find(u=>/^[A-Z][a-zA-Z0-9]*To[A-Z][a-zA-Z0-9]*$/.test(u));if(!r)continue;let i=`https://docs.aws.amazon.com/solutions/latest/${s}/`,o=`https://github.com/awslabs/aws-solutions-constructs/tree/main/${s}`,c=f1[s]?.requiredResourceTypes||[];e[s]={className:r,packageName:s,friendlyName:r.replace(/([a-z0-9])([A-Z])/g,"$1 $2").trim(),documentationUrl:i,githubUrl:o,requiredResourceTypes:c}}catch{}return e};var P=(t,e)=>t.Metadata?.["aws:cdk:path"]??e;var h1={LOW:0,MEDIUM:1,HIGH:2,CRITICAL:3},T=(t,e)=>t?.resourceIdMetadata?.[e]?.constructLevel;var _=t=>t==="L3-aws-solutions"||t==="L3-third-party";var $=t=>{let e=h1[t]??0;return e<=0?"LOW":Object.entries(h1).find(([,s])=>s===e-1)?.[0]},D=(t,e,s)=>{if(!_(e))return t;let n=s?` Look for a \`${s}\` argument on the construct.`:"";return`${t} This resource is owned by an L3 pattern \u2014 fix via the pattern's props${n} rather than escape-hatching the underlying CFN resource.`},g1=(t,e)=>{let s=t?.cdkContext?.[e];return s===!0||s==="true"};var y1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CertificateManager::Certificate")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];return i.Properties?.ValidationMethod==="EMAIL"&&l.push(e(r,"ACM certificate uses email validation instead of DNS validation.",D("Use DNS validation for automated certificate renewal. Email validation requires manual intervention for renewals.",o),c("LOW"),"Operational Excellence",u,"cdkInsights")),i.Properties?.CertificateTransparencyLoggingPreference==="DISABLED"&&l.push(e(r,"ACM certificate has certificate transparency logging disabled.",D("Enable certificate transparency logging for security monitoring and to detect misissued certificates.",o),c("LOW"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var x1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::ApiGateway::RestApi"&&!i.Properties?.EndpointConfiguration?.Types?.includes("PRIVATE")){let o=T(s,r),a=_(o);n[r]={issues:[e(r,"API Gateway is publicly accessible.",D("If this API is intentionally public, ignore this finding (or suppress it via .cdk-insights.json). For internal APIs, use PRIVATE endpoints to restrict access.",o,"endpointConfiguration / endpointTypes"),a?"LOW":"MEDIUM","Security",P(i,r),"cdkInsights")]}}return n},{});var Q9=t=>typeof t=="string"&&t.toUpperCase()==="OPTIONS",b1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{let o=i.Type==="AWS::ApiGateway::Method",a=i.Type==="AWS::ApiGatewayV2::Route";if(!o&&!a)return n;let c=i.Properties??{},u=c.AuthorizationType;if(o&&Q9(c.HttpMethod)||!(u===void 0||u==="NONE"))return n;let d=P(i,r),p=T(s,r),f=_(p),m=o?"API Gateway Method has no authorization (AuthorizationType is NONE).":"API Gateway v2 Route has no authorization (AuthorizationType is NONE).";return n[r]={issues:[e(r,m,D("Set AuthorizationType to AWS_IAM, COGNITO_USER_POOLS, CUSTOM (REST), or JWT (HTTP API). Public-by-default endpoints expose backend Lambdas to anyone on the internet without authentication. If the route is intentionally public (e.g. a webhook receiver), prefer api-key + WAF rate limiting.",p,"methodOptions.authorizationType"),f?"MEDIUM":"HIGH","Security",d,"cdkInsights")]},n},{});var S1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::AppSync::GraphQLApi")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[],d=i.Properties?.AuthenticationType;d==="API_KEY"&&l.push(e(r,"AppSync API uses API key authentication.",D("Consider using AWS_IAM, AMAZON_COGNITO_USER_POOLS, or OPENID_CONNECT for production workloads. API keys are best for development or public read-only access.",o),c("MEDIUM"),"Security",u,"cdkInsights"));let p=i.Properties?.AdditionalAuthenticationProviders;return d!=="AWS_IAM"&&(!p||p.length===0)&&l.push(e(r,"AppSync API does not have multiple authentication providers configured.",D("Consider adding AdditionalAuthenticationProviders for flexibility in authenticating different client types.",o),c("LOW"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var v1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::AppSync::GraphQLApi")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[],d=i.Properties?.LogConfig;return d?d.FieldLogLevel==="NONE"&&l.push(e(r,"AppSync API has field-level logging disabled.",D("Set FieldLogLevel to ERROR or ALL to capture GraphQL resolver execution details.",o),c("LOW"),"Operational Excellence",u,"cdkInsights")):l.push(e(r,"AppSync API does not have logging configured.",D("Enable LogConfig to capture request/response logs in CloudWatch for debugging and monitoring.",o),c("MEDIUM"),"Operational Excellence",u,"cdkInsights")),i.Properties?.XrayEnabled!==!0&&l.push(e(r,"AppSync API does not have X-Ray tracing enabled.",D("Enable XrayEnabled for distributed tracing and performance analysis.",o),c("LOW"),"Operational Excellence",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var C1=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::AppSync::GraphQLApi"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::WAFv2::WebACLAssociation"),i=new Set(r.map(([,o])=>{let a=o.Properties?.ResourceArn;return typeof a=="string"?a:a?.["Fn::GetAtt"]?.[0]?a["Fn::GetAtt"][0]:null}).filter(Boolean));return n.reduce((o,[a,c])=>{let u=P(c,a);if(!i.has(a)){let d=T(s,a),p=_(d),f=m=>p?$(m):m;o[a]={issues:[e(a,"AppSync API does not have AWS WAF protection.",D("Associate a WAF WebACL to protect against common web exploits and control access to the API.",d),f("MEDIUM"),"Security",u,"cdkInsights")]}}return o},{})};var D1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Backup::BackupPlan")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[],p=i.Properties?.BackupPlan?.BackupPlanRule||[];for(let f of p){(f.CopyActions||[]).length===0&&l.push(e(r,`Backup rule "${f.RuleName||"unnamed"}" does not have cross-region copy configured.`,D("Add CopyActions to replicate backups to another region for disaster recovery.",o),c("LOW"),"Reliability",u,"cdkInsights"));let g=f.Lifecycle;!g?.DeleteAfterDays&&!g?.MoveToColdStorageAfterDays&&l.push(e(r,`Backup rule "${f.RuleName||"unnamed"}" has no lifecycle configuration.`,D("Set DeleteAfterDays or MoveToColdStorageAfterDays to manage backup retention and costs.",o),c("LOW"),"Cost Optimization",u,"cdkInsights"))}return l.length>0&&(n[r]={issues:l}),n},{});var w1=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Backup::BackupVault"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Backup::BackupVaultLock"),i=new Set(r.map(([,o])=>{let a=o.Properties?.BackupVaultName;return typeof a=="string"?a:typeof a=="object"&&a?.Ref?a.Ref:null}).filter(Boolean));return n.reduce((o,[a,c])=>{let u=T(s,a),l=_(u),d=y=>l?$(y):y,p=P(c,a),f=[];c.Properties?.EncryptionKeyArn||f.push(e(a,"Backup vault uses default AWS-managed encryption key.",D("Specify a customer-managed KMS key using EncryptionKeyArn for additional control over encryption.",u),d("LOW"),"Security",p,"cdkInsights"));let g=c.Properties?.BackupVaultName,h=typeof g=="string"?g:typeof g=="object"?g?.Ref:void 0;return i.has(a)||h&&i.has(h)||f.push(e(a,"Backup vault does not have a vault lock configured.",D("Add a BackupVaultLock to enforce retention policies and prevent backup deletion for compliance requirements.",u),d("LOW"),"Security",p,"cdkInsights")),f.length>0&&(o[a]={issues:f}),o},{})};var A1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CloudFront::Distribution")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r);return i.Properties?.DistributionConfig?.DefaultCacheBehavior?.ViewerProtocolPolicy==="allow-all"&&(n[r]={issues:[e(r,"CloudFront distribution allows HTTP traffic (ViewerProtocolPolicy is allow-all).",D('Set ViewerProtocolPolicy to "https-only" or "redirect-to-https" to enforce HTTPS and protect data in transit.',o),c("HIGH"),"Security",u,"cdkInsights")]}),n},{});var E1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CloudFront::Distribution")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r);return i.Properties?.DistributionConfig?.Logging?.Bucket||(n[r]={issues:[e(r,"CloudFront distribution does not have access logging enabled.",D("Enable access logging to an S3 bucket to track viewer requests for security analysis, auditing, and troubleshooting.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var X9=["SSLv3","TLSv1","TLSv1_2016","TLSv1.1_2016"],I1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CloudFront::Distribution")return n;let o=P(i,r),c=i.Properties?.DistributionConfig?.ViewerCertificate,u=c?.MinimumProtocolVersion;if(c?.CloudFrontDefaultCertificate)return n;let l=T(s,r),d=_(l),p=f=>d?$(f):f;return u&&X9.includes(u)&&(n[r]={issues:[e(r,`CloudFront distribution uses outdated TLS version (${u}).`,D("Use TLSv1.2_2021 or later for improved security. Older TLS versions have known vulnerabilities.",l),p("MEDIUM"),"Security",o,"cdkInsights")]}),n},{});var k1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CloudFront::Distribution")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.DistributionConfig?.WebACLId||(n[r]={issues:[e(r,"CloudFront distribution has no WAF WebACL associated.",D("Associate a WAF WebACL to protect against common web exploits, SQL injection, XSS, and DDoS attacks.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var R1=(t,e)=>Object.entries(t.Resources||{}).some(([,n])=>n.Type==="AWS::CloudTrail::Trail")?{}:{Global:{issues:[e("Global","No CloudTrail Trail defined in this stack.","CloudTrail is most commonly configured at the AWS account or organization level (one Trail covers every stack). If account-level CloudTrail is already in place, suppress this rule. If not, add a CloudTrail Trail at the account level \u2014 defining one per stack is rarely the right shape.","LOW","Security","Global","cdkInsights")]}};var F1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::CloudWatch::Alarm")return n;let o=T(s,r),a=_(o),c=g=>a?$(g):g,u=P(i,r),l=[],d=i.Properties?.AlarmActions,p=i.Properties?.OKActions,f=i.Properties?.InsufficientDataActions;return(!d||d.length===0)&&l.push(e(r,"CloudWatch Alarm has no alarm actions configured.",D("Add AlarmActions (SNS topic, Lambda, etc.) to receive notifications when the alarm state changes to ALARM.",o),c("MEDIUM"),"Operational Excellence",u,"cdkInsights")),i.Properties?.TreatMissingData||l.push(e(r,"CloudWatch Alarm does not specify how to treat missing data.",D("Set TreatMissingData to define alarm behavior when data points are missing (missing, ignore, breaching, or notBreaching).",o),c("LOW"),"Operational Excellence",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var _1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Logs::LogGroup")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.KmsKeyId||(n[r]={issues:[e(r,"CloudWatch Log Group is not encrypted with a customer-managed KMS key.",D("Enable KMS encryption using KmsKeyId to protect sensitive log data at rest with customer-managed keys.",o),c("LOW"),"Security",u,"cdkInsights")]}),n},{});var eW="@aws-cdk/aws-lambda:logRetentionDefaultsTo30Days",tW=t=>/\/LogRetention[0-9A-Fa-f]*$/.test(t)||/LogRetention[0-9A-Fa-f]+$/.test(t),T1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Logs::LogGroup")return n;let o=P(i,r),a=i.Properties?.RetentionInDays,c=T(s,r),u=_(c);return a!==void 0||g1(s,eW)&&tW(o||r)||(n[r]={issues:[e(r,"CloudWatch Log Group has no retention period set (logs retained indefinitely).",D("Set RetentionInDays to control storage costs. Consider 30-90 days for operational logs, longer for compliance requirements.",c,"logGroupProps.retention"),u?"LOW":"MEDIUM","Cost Optimization",o,"cdkInsights")]}),n},{});var P1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Cognito::UserPool")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r),l=i.Properties?.MfaConfiguration;return(!l||l==="OFF")&&(n[r]={issues:[e(r,"Cognito User Pool has MFA disabled.",D("Enable MFA (OPTIONAL or ON) to add an extra layer of security for user authentication.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var L1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Cognito::UserPool")return n;let o=[],a=P(i,r),c=i.Properties?.PasswordPolicy,u=T(s,r),l=_(u),d=p=>l?$(p):p;if(!c)o.push(e(r,"Cognito User Pool has no password policy configured.",D("Configure a strong password policy with minimum length, uppercase, lowercase, numbers, and symbols requirements.",u,"passwordPolicy"),d("HIGH"),"Security",a,"cdkInsights"));else{let p=c.MinimumLength||8;p<12&&o.push(e(r,`Cognito password policy has minimum length of ${p} characters.`,D("Set MinimumLength to at least 12 characters for stronger security against brute-force attacks.",u,"passwordPolicy.minLength"),d("MEDIUM"),"Security",a,"cdkInsights")),c.RequireSymbols===!1&&o.push(e(r,"Cognito password policy does not require symbols.",D("Enable RequireSymbols for stronger password complexity requirements.",u,"passwordPolicy.requireSymbols"),d("LOW"),"Security",a,"cdkInsights"))}return o.length>0&&(n[r]={issues:o}),n},{});var O1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Cognito::UserPool")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r),l=i.Properties?.UserPoolAddOns?.AdvancedSecurityMode;return(!l||l==="OFF")&&(n[r]={issues:[e(r,"Cognito User Pool does not have advanced security features enabled.",D("Enable UserPoolAddOns with AdvancedSecurityMode set to AUDIT or ENFORCED to detect compromised credentials and block suspicious sign-ins.",o),c("LOW"),"Security",u,"cdkInsights")]}),n},{});var M1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::DynamoDB::Table"||i.Properties?.SSESpecification?.SSEEnabled===!0)return n;let a=P(i,r),c=T(s,r),u=_(c);return n[r]={issues:[e(r,"DynamoDB Table is not configured with KMS encryption.",D("Set SSESpecification.SSEEnabled to true and provide a customer-managed KMSMasterKeyId. Without SSESpecification, DynamoDB encrypts with an AWS-owned key \u2014 adequate for general use but not for HIPAA / PCI-DSS workloads that require customer-controlled key rotation and audit.",c,"tableProps.encryption"),u?"LOW":"MEDIUM","Security",a,"cdkInsights")]},n},{});var B1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::DynamoDB::Table"||i.Properties?.PointInTimeRecoverySpecification?.PointInTimeRecoveryEnabled===!0)return n;let a=P(i,r),c=T(s,r),u=_(c);return n[r]={issues:[e(r,"DynamoDB Table does not have Point-in-Time Recovery enabled.",D("Set PointInTimeRecoverySpecification.PointInTimeRecoveryEnabled to true to enable continuous backups for the last 35 days. Required by HIPAA and SOC2 for data resilience.",c,"tableProps.pointInTimeRecoverySpecification"),u?"LOW":"MEDIUM","Reliability",a,"cdkInsights")]},n},{});var N1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::DynamoDB::Table")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=i.Properties?.BillingMode,l=P(i,r);return(!u||u==="PROVISIONED")&&(n[r]={issues:[e(r,"DynamoDB table uses provisioned capacity without on-demand billing.",D("Consider using BillingMode: PAY_PER_REQUEST for automatic scaling and cost optimization, especially for unpredictable workloads. For predictable workloads, configure Application Auto Scaling.",o),c("MEDIUM"),"Cost Optimization",l,"cdkInsights")]}),n},{});var W1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::DynamoDB::Table"&&!i.Properties?.StreamSpecification){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"DynamoDB table does not have streams enabled.",D("Consider enabling DynamoDB Streams to capture item-level changes for analytics, auditing, event-driven architectures, and cross-region replication.",o),c("LOW"),"Operational Excellence",P(i,r),"cdkInsights")]}}return n},{});var $1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EC2::Volume")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=[],l=P(i,r),d=i.Properties??{};return d.Encrypted!==!0&&u.push(e(r,"EBS Volume is not encrypted.",D("Enable encryption on EBS volumes to protect data at rest. Use the Encrypted property and optionally specify a KmsKeyId.",o),c("HIGH"),"Security",l,"cdkInsights")),d.VolumeType==="gp2"&&u.push(e(r,"EBS Volume uses gp2 storage type.",D("Consider migrating to gp3 for up to 20% cost savings with better baseline performance (3,000 IOPS and 125 MB/s throughput).",o),c("LOW"),"Cost Optimization",l,"cdkInsights")),u.length>0&&(n[r]={issues:u}),n},{});var j1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EFS::FileSystem"||i.Properties?.Encrypted===!0)return n;let a=P(i,r),c=T(s,r),u=_(c);return n[r]={issues:[e(r,"EFS FileSystem is not encrypted at rest.",D("Set Encrypted to true and provide KmsKeyId for a customer-managed key. Encryption can only be enabled at filesystem creation; existing unencrypted filesystems require data migration to a new encrypted filesystem.",c,"fileSystemProps.encrypted"),u?"MEDIUM":"HIGH","Security",a,"cdkInsights")]},n},{});var U1=t=>Array.isArray(t)&&t.length>0,G1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::AutoScaling::AutoScalingGroup")return n;let o=i.Properties??{};if(!(U1(o.LoadBalancerNames)||U1(o.TargetGroupARNs))||o.HealthCheckType==="ELB")return n;let u=P(i,r),l=T(s,r),d=_(l);return n[r]={issues:[e(r,"AutoScalingGroup attached to a load balancer is not using ELB health checks.",D("Set HealthCheckType to ELB so unhealthy instances detected by the load balancer are recycled. EC2 health checks (the default) only catch instance-level failures, missing app-level outages the LB would otherwise detect.",l,"asgProps.healthCheckType"),d?"LOW":"MEDIUM","Reliability",u,"cdkInsights")]},n},{});var H1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::AutoScaling::LaunchConfiguration"||i.Properties?.AssociatePublicIpAddress!==!0)return n;let o=P(i,r),a=T(s,r),c=_(a);return n[r]={issues:[e(r,"AutoScaling LaunchConfiguration sets AssociatePublicIpAddress=true.",D("Set AssociatePublicIpAddress to false. Instances launched from this configuration will get a public IP and be reachable from the internet directly; prefer placing them in private subnets behind an ALB / NLB.",a,"launchConfigProps.associatePublicIpAddress"),c?"MEDIUM":"HIGH","Security",o,"cdkInsights")]},n},{});var z1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::EC2::Instance"&&i.Properties?.InstanceType?.toString().startsWith("t2")){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"EC2 instance is using an older t2 instance. Consider upgrading to t3 for better performance and cost savings.",D("Upgrade to a t3 instance for improved performance, lower latency, and better cost efficiency.",o),c("MEDIUM"),"Cost Optimization",P(i,r),"cdkInsights")]}}return n},{});var V1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::EC2::NatGateway"){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"NAT Gateway detected. NAT Gateways incur hourly charges (~$0.045/hr) plus data processing fees (~$0.045/GB).",D("Consider alternatives like NAT instances for lower traffic, VPC endpoints for AWS services, or IPv6 egress-only internet gateways to reduce costs.",o),c("LOW"),"Cost Optimization",P(i,r),"cdkInsights")]}}return n},{});var q1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EC2::Instance")return n;let o=i.Properties?.NetworkInterfaces;if(!Array.isArray(o)||o.length===0||!o.some(d=>d&&d.AssociatePublicIpAddress===!0))return n;let c=P(i,r),u=T(s,r),l=_(u);return n[r]={issues:[e(r,"EC2 Instance has a network interface with public IP association (AssociatePublicIpAddress=true).",D("Set AssociatePublicIpAddress to false on the NetworkInterface, or remove the property and rely on subnet defaults. A public IP on the instance ENI makes it directly internet-reachable; prefer a NAT/ALB for outbound and inbound traffic.",u,"instanceProps.associatePublicIpAddress"),l?"MEDIUM":"HIGH","Security",c,"cdkInsights")]},n},{});var sW=[22,3389,3306,5432,1433,27017,6379],nW=t=>t.CidrIp==="0.0.0.0/0"||t.CidrIpv6==="::/0",rW=(t,e,s)=>e===void 0||s===void 0?!1:t>=e&&t<=s,K1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EC2::SecurityGroup")return n;let o=T(s,r),a=_(o),c=h=>a?$(h):h,u=[],l=P(i,r),d=i.Properties?.SecurityGroupIngress||[],p=i.Properties?.SecurityGroupEgress||[],f=d.some(h=>h.CidrIp==="0.0.0.0/0"),m=d.some(h=>h.CidrIpv6==="::/0");f&&u.push(e(r,"Security Group allows unrestricted IPv4 ingress (0.0.0.0/0).",D("Restrict security group rules to specific IPs and ports.",o),c("HIGH"),"Security",l,"cdkInsights")),m&&u.push(e(r,"Security Group allows unrestricted IPv6 ingress (::/0).",D("Restrict security group rules to specific IPs and ports.",o),c("HIGH"),"Security",l,"cdkInsights"));for(let h of d)if(nW(h)){for(let x of sW)if(rW(x,h.FromPort,h.ToPort)){u.push(e(r,`Security Group exposes port ${x} to the internet.`,D("Restrict access to management and database ports. Use bastion hosts, VPN, or AWS Systems Manager Session Manager instead.",o),c("CRITICAL"),"Security",l,"cdkInsights"));break}}return p.some(h=>h.CidrIp==="0.0.0.0/0")&&u.push(e(r,"Security Group allows unrestricted egress to 0.0.0.0/0.",D("Consider restricting egress rules to specific destinations for defense in depth.",o),c("LOW"),"Security",l,"cdkInsights")),d.length===0&&p.length===0&&u.push(e(r,"Security Group has no ingress or egress rules defined.",D("Review if this security group is in use. Empty security groups may indicate orphaned resources or misconfiguration.",o),c("LOW"),"Operational Excellence",l,"cdkInsights")),u.length>0&&(n[r]={issues:u}),n},{});var Z1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EC2::Subnet"||i.Properties?.MapPublicIpOnLaunch!==!0)return n;let o=P(i,r),a=T(s,r),c=_(a);return n[r]={issues:[e(r,"EC2 Subnet auto-assigns public IPs to launched instances (MapPublicIpOnLaunch=true).",D("Set MapPublicIpOnLaunch to false unless this is intentionally a public subnet. Instances should opt into a public IP at the ENI level rather than inheriting it from subnet defaults \u2014 keeps the blast radius small if a private workload accidentally lands here.",a,"subnetProps.mapPublicIpOnLaunch"),c?"LOW":"MEDIUM","Security",o,"cdkInsights")]},n},{});var Y1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECR::Repository")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.ImageTagMutability!=="IMMUTABLE"&&(n[r]={issues:[e(r,"ECR repository allows mutable image tags.",D("Set ImageTagMutability to IMMUTABLE to prevent image tags from being overwritten, ensuring deployment consistency.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var J1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECR::Repository")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.LifecyclePolicy?.LifecyclePolicyText||(n[r]={issues:[e(r,"ECR repository does not have a lifecycle policy configured.",D("Add a lifecycle policy to automatically clean up old or untagged images and reduce storage costs.",o),c("MEDIUM"),"Cost Optimization",u,"cdkInsights")]}),n},{});var Q1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECR::Repository")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];return i.Properties?.ImageScanningConfiguration?.ScanOnPush!==!0&&l.push(e(r,"ECR repository does not have image scanning on push enabled.",D("Enable ScanOnPush in ImageScanningConfiguration to automatically scan images for vulnerabilities when pushed.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var X1=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECS::TaskDefinition")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=[],l=P(i,r),d=i.Properties?.ContainerDefinitions||[];for(let p of d)p.LogConfiguration?.LogDriver||u.push(e(r,`ECS container "${p.Name||"unnamed"}" has no logging configuration.`,D("Configure LogConfiguration with awslogs driver to send container logs to CloudWatch for monitoring and debugging.",o),c("MEDIUM"),"Operational Excellence",l,"cdkInsights"));return u.length>0&&(n[r]={issues:u}),n},{});var ek=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECS::Service")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=i.Properties?.ServiceConnectConfiguration;if(!u||u.Enabled!==!0||u.LogConfiguration?.LogDriver)return n;let d=P(i,r);return n[r]={issues:[e(r,"ECS Service Connect is enabled without an access log configuration.",D("Configure ServiceConnectConfiguration.LogConfiguration with a LogDriver (e.g. awslogs) to capture inter-service traffic metadata for audit, debugging, and incident response.",o),c("MEDIUM"),"Security",d,"cdkInsights")]},n},{});var tk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECS::TaskDefinition")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=[],l=P(i,r),d=i.Properties?.ContainerDefinitions||[];for(let p of d){let f=p.Memory||p.MemoryReservation,m=p.Cpu;!f&&!m&&u.push(e(r,`ECS container "${p.Name||"unnamed"}" has no CPU or memory limits defined.`,D("Define CPU and Memory limits to prevent runaway containers and ensure predictable resource allocation.",o),c("LOW"),"Reliability",l,"cdkInsights"))}return u.length>0&&(n[r]={issues:u}),n},{});var iW=/(^|_)(secret|password|passwd|pwd|credential|private_key|api_key|api_secret|auth_token|access_key|access_secret|bearer_token|jwt_secret|encryption_key|signing_key)(_|$)/i,sk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ECS::TaskDefinition")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=[],l=P(i,r),d=i.Properties?.ContainerDefinitions||[];for(let p of d){let f=p.Environment||[];for(let m of f)iW.test(m.Name||"")&&u.push(e(r,`ECS task definition has sensitive environment variable "${m.Name}" in plaintext.`,D('Use AWS Secrets Manager or SSM Parameter Store with the "secrets" property instead of plaintext environment variables.',o),c("HIGH"),"Security",l,"cdkInsights"))}return u.length>0&&(n[r]={issues:u}),n},{});var nk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EKS::Cluster")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];return i.Properties?.EncryptionConfig?.some(f=>f.Resources?.includes("secrets"))||l.push(e(r,"EKS cluster does not have Kubernetes secrets encryption enabled.",D("Configure EncryptionConfig with a KMS key to encrypt secrets stored in etcd.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var rk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EKS::Cluster")return n;let o=T(s,r),a=_(o),c=h=>a?$(h):h,u=P(i,r),l=[],p=i.Properties?.Logging?.ClusterLogging?.EnabledTypes||[],f=p.map(h=>h.Type).filter(h=>!!h),g=["api","audit","authenticator","controllerManager","scheduler"].filter(h=>!f.includes(h));return g.length>0&&l.push(e(r,`EKS cluster is missing control plane logging for: ${g.join(", ")}.`,D("Enable all control plane log types (api, audit, authenticator, controllerManager, scheduler) for comprehensive cluster monitoring.",o),c("MEDIUM"),"Operational Excellence",u,"cdkInsights")),p.length===0?(n[r]={issues:[e(r,"EKS cluster does not have any control plane logging enabled.",D("Enable control plane logging to CloudWatch for audit trails and troubleshooting Kubernetes API issues.",o),c("MEDIUM"),"Security",u,"cdkInsights")]},n):(l.length>0&&(n[r]={issues:l}),n)},{});var ik=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EKS::Cluster")return n;let o=T(s,r),a=_(o),c=g=>a?$(g):g,u=P(i,r),l=[],d=i.Properties?.ResourcesVpcConfig,p=d?.EndpointPublicAccess,f=d?.EndpointPrivateAccess,m=d?.PublicAccessCidrs;return p===!0&&f!==!0&&l.push(e(r,"EKS cluster has only public endpoint access enabled.",D("Enable EndpointPrivateAccess to allow communication between nodes and the API server within the VPC.",o),c("MEDIUM"),"Security",u,"cdkInsights")),p===!0&&(!m||m.length===0||m.includes("0.0.0.0/0"))&&l.push(e(r,"EKS cluster public endpoint is accessible from the internet (0.0.0.0/0).",D("Restrict PublicAccessCidrs to specific IP ranges that need to access the Kubernetes API.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var ok=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElasticLoadBalancingV2::LoadBalancer")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r);return(i.Properties?.LoadBalancerAttributes||[]).some(p=>p.Key==="deletion_protection.enabled"&&p.Value==="true")||(n[r]={issues:[e(r,"Load Balancer does not have deletion protection enabled.",D("Enable deletion protection to prevent accidental deletion of the load balancer in production environments.",o),c("MEDIUM"),"Reliability",u,"cdkInsights")]}),n},{});var ak=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElasticLoadBalancingV2::Listener")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=i.Properties?.Protocol,d=i.Properties?.Port;return l==="HTTP"&&d!==80?n[r]={issues:[e(r,`Load Balancer listener uses HTTP protocol on port ${d}.`,D("Use HTTPS protocol with a valid SSL certificate to encrypt traffic in transit.",o),c("HIGH"),"Security",u,"cdkInsights")]}:l==="HTTP"&&d===80&&((i.Properties?.DefaultActions||[]).some(m=>m.Type==="redirect"&&m.RedirectConfig?.Protocol==="HTTPS")||(n[r]={issues:[e(r,"Load Balancer HTTP listener on port 80 does not redirect to HTTPS.",D("Configure the HTTP listener to redirect to HTTPS to ensure encrypted traffic.",o),c("MEDIUM"),"Security",u,"cdkInsights")]})),n},{});var ck=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElasticLoadBalancingV2::LoadBalancer")return n;let o=P(i,r);if(!(i.Properties?.LoadBalancerAttributes||[]).some(u=>u.Key==="access_logs.s3.enabled"&&u.Value==="true")){let u=T(s,r),l=_(u),d=p=>l?$(p):p;n[r]={issues:[e(r,"Load Balancer does not have access logging enabled.",D("Enable access logging to S3 for security analysis, auditing, and troubleshooting of traffic patterns.",u,"accessLogs / logAccessLogs"),d("MEDIUM"),"Security",o,"cdkInsights")]}}return n},{});var oW=["ELBSecurityPolicy-2016-08","ELBSecurityPolicy-TLS-1-0-2015-04","ELBSecurityPolicy-TLS-1-1-2017-01","ELBSecurityPolicy-2015-05"],uk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElasticLoadBalancingV2::Listener")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=i.Properties?.Protocol,d=i.Properties?.SslPolicy;return l!=="HTTPS"&&l!=="TLS"||d&&oW.includes(d)&&(n[r]={issues:[e(r,`Load Balancer listener uses outdated security policy (${d}).`,D("Use ELBSecurityPolicy-TLS13-1-2-2021-06 or later for TLS 1.3 support, or at minimum ELBSecurityPolicy-TLS-1-2-2017-01 for TLS 1.2.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var lk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElastiCache::ReplicationGroup")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[],d=i.Properties?.AuthToken,p=i.Properties?.TransitEncryptionEnabled;return!d&&p===!0&&l.push(e(r,"ElastiCache Redis cluster has transit encryption but no AUTH token configured.",D("Set AuthToken to require authentication for Redis connections, providing an additional security layer.",o),c("MEDIUM"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var dk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElastiCache::ReplicationGroup"&&i.Type!=="AWS::ElastiCache::CacheCluster")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];return i.Properties?.AtRestEncryptionEnabled!==!0&&l.push(e(r,"ElastiCache cluster does not have encryption at rest enabled.",D("Enable AtRestEncryptionEnabled to protect cached data at rest using AWS-managed or customer-managed keys.",o),c("HIGH"),"Security",u,"cdkInsights")),i.Properties?.TransitEncryptionEnabled!==!0&&l.push(e(r,"ElastiCache cluster does not have encryption in transit enabled.",D("Enable TransitEncryptionEnabled to protect data during transfer between clients and the cache.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var pk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::ElastiCache::ReplicationGroup")return n;let o=T(s,r),a=_(o),c=g=>a?$(g):g,u=P(i,r),l=[],d=i.Properties?.AutomaticFailoverEnabled,p=i.Properties?.NumNodeGroups||1,f=i.Properties?.ReplicasPerNodeGroup||0;return d!==!0&&(p>1||f>0)&&l.push(e(r,"ElastiCache replication group has replicas but automatic failover is not enabled.",D("Enable AutomaticFailoverEnabled to automatically promote a replica to primary if the primary node fails.",o),c("MEDIUM"),"Reliability",u,"cdkInsights")),i.Properties?.MultiAZEnabled!==!0&&d===!0&&l.push(e(r,"ElastiCache replication group has automatic failover but Multi-AZ is not enabled.",D("Enable MultiAZEnabled to distribute nodes across availability zones for higher availability.",o),c("MEDIUM"),"Reliability",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var fk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Events::Rule")return n;let o=P(i,r),a=T(s,r),c=_(a),u=d=>c?$(d):d,l=[];return i.Properties?.State!=="ENABLED"&&l.push(e(r,"EventBridge rule is disabled or not explicitly enabled.",D("Ensure the EventBridge rule State is set to ENABLED to trigger events as expected.",a,"enabled / state"),u("MEDIUM"),"Operational Excellence",o,"cdkInsights")),(!i.Properties?.Targets||Array.isArray(i.Properties.Targets)&&i.Properties.Targets.length===0)&&l.push(e(r,"EventBridge rule has no targets configured. Events matching this rule will be silently dropped.",D("Add at least one target (Lambda, SQS, SNS, Step Functions, etc.) to process matched events. Without targets, the rule matches events but takes no action.",a,"targets"),u("HIGH"),"Reliability",o,"cdkInsights")),l.length>0&&(n[r]={issues:[...n[r]?.issues||[],...l]}),n},{});var aW=t=>{if(t==="*")return!0;if(t&&typeof t=="object"){let e=t.AWS;if(e==="*"||Array.isArray(e)&&e.includes("*"))return!0}return!1},cW=t=>t.Condition!==void 0&&t.Condition!==null&&typeof t.Condition=="object"&&Object.keys(t.Condition).length>0,mk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Events::EventBusPolicy")return n;let o=i.Properties??{},a=[];o.Principal!==void 0&&a.push({Effect:"Allow",Principal:o.Principal,Condition:o.Condition});let c=o.Statement;if(c&&(Array.isArray(c.Statement)?a.push(...c.Statement):a.push(c)),a.filter(f=>(f.Effect===void 0||f.Effect==="Allow")&&aW(f.Principal)&&!cW(f)).length===0)return n;let l=P(i,r),d=T(s,r),p=_(d);return n[r]={issues:[e(r,"EventBridge EventBusPolicy grants access to wildcard Principal without a Condition.",D("Replace wildcard Principal with a specific AWS account / org ID, or add a Condition (e.g. aws:PrincipalOrgID) to scope cross-account access. Wildcard principals on an event bus mean any AWS account can publish events to your bus.",d,"eventBusPolicyProps.statement"),p?"HIGH":"CRITICAL","Security",l,"cdkInsights")]},n},{});var hk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Glue::Connection")return n;let o=T(s,r),a=_(o),c=m=>a?$(m):m,u=P(i,r),l=[],d=i.Properties?.ConnectionInput,p=d?.ConnectionType,f=d?.PhysicalConnectionRequirements;if(p==="JDBC"){f?.SubnetId||l.push(e(r,"Glue JDBC connection does not specify a VPC subnet.",D("Configure PhysicalConnectionRequirements with SubnetId and SecurityGroupIdList for network isolation.",o),c("MEDIUM"),"Security",u,"cdkInsights"));let g=d?.ConnectionProperties?.JDBC_CONNECTION_URL||"";typeof g=="string"&&!g.includes("ssl=true")&&!g.includes("useSSL=true")&&l.push(e(r,"Glue JDBC connection URL may not enforce SSL.",D("Ensure the JDBC connection URL includes SSL parameters to encrypt data in transit.",o),c("LOW"),"Security",u,"cdkInsights"))}return l.length>0&&(n[r]={issues:l}),n},{});var gk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Glue::Job")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=[];return i.Properties?.SecurityConfiguration||l.push(e(r,"Glue job does not have a security configuration specified.",D("Create and attach a SecurityConfiguration to enable encryption for job bookmarks, S3 data, and CloudWatch logs.",o),c("MEDIUM"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var yk=/^\d{12}$/,xk=/arn:aws:iam::(\d{12}):root/,uW=t=>{if(!t)return[];if(typeof t=="string"){if(yk.test(t))return[t];let e=t.match(xk);return e?[e[1]]:[]}return typeof t=="object"&&t.AWS?(Array.isArray(t.AWS)?t.AWS:[t.AWS]).flatMap(s=>{if(yk.test(s))return[s];let n=s.match(xk);return n?[n[1]]:[]}):[]},bk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::IAM::Role")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=[],l=P(i,r),d=i.Properties?.AssumeRolePolicyDocument;if(d?.Statement){for(let p of d.Statement)if(p.Effect==="Allow"){let f=uW(p.Principal);for(let m of f)u.push(e(r,`IAM Role allows cross-account trust from account ${m}.`,D("Verify this cross-account trust relationship is intentional and the external account is trusted. Consider adding conditions to restrict access.",o),c("MEDIUM"),"Security",l,"cdkInsights"))}}return u.length>0&&(n[r]={issues:u}),n},{});var Sk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::IAM::Policy"&&i.Type!=="AWS::IAM::Role")return n;let o=i.Properties?.Policies,a=[];if(Array.isArray(o))for(let f of o)f?.PolicyDocument&&a.push(f.PolicyDocument);let c=i.Properties?.PolicyDocument;c&&a.push(c);let u=T(s,r),l=_(u),d=f=>l?$(f):f,p=[];for(let f of a){if(!f?.Statement)continue;let m=f.Statement;for(let g of m)if(g.Effect==="Allow"){let h=g.Action,x=g.Resource,y=h==="*"||Array.isArray(h)&&h.includes("*"),b=x==="*"||Array.isArray(x)&&x.includes("*");y&&b?p.push(e(r,"IAM policy allows all actions (*) on all resources (*). This grants administrative access.",D("Restrict both actions and resources to follow the principle of least privilege.",u,"rolePolicy / inlinePolicies"),d("CRITICAL"),"Security",r,"cdkInsights")):y?p.push(e(r,"IAM policy allows all actions (*). This is overly permissive.",D("Specify only the required actions instead of using wildcards.",u,"rolePolicy / inlinePolicies"),d("CRITICAL"),"Security",r,"cdkInsights")):b&&p.push(e(r,"IAM policy allows actions on all resources (*). This is overly permissive.",D("Restrict resources to specific ARNs instead of using wildcards.",u,"rolePolicy / inlinePolicies"),d("HIGH"),"Security",r,"cdkInsights"))}}return p.length>0&&(n[r]={issues:p}),n},{});var lW=[/\/ServiceRole\/Resource$/,/\/Role\/Resource$/,/\/InstanceRole\/Resource$/,/CustomResourceProvider\/Role$/],dW=t=>lW.some(e=>e.test(t)),vk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::IAM::Role")return n;let o=T(s,r),a=_(o),c=l=>a?$(l):l,u=P(i,r);return dW(u)||i.Properties?.PermissionsBoundary||(n[r]={issues:[e(r,"IAM Role has no permission boundary configured.",D("Consider using permission boundaries to limit the maximum permissions for delegated access and prevent privilege escalation.",o),c("LOW"),"Security",u,"cdkInsights")]}),n},{});var Ck=t=>Array.isArray(t)&&t.length>0,Dk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::IAM::User")return n;let o=i.Properties??{},a=Ck(o.Policies),c=Ck(o.ManagedPolicyArns);if(!a&&!c)return n;let u=P(i,r),l=T(s,r),d=_(l),p=[];return a&&p.push(e(r,"IAM User has inline policies attached.",D("Move policies to an IAM Group and add the user to the group, or attach via a Role assumed by the user. CIS AWS Foundations 1.15 requires users to inherit permissions through groups.",l,"userProps.attachInlinePolicy"),d?"LOW":"MEDIUM","Security",u,"cdkInsights")),c&&p.push(e(r,"IAM User has managed policies attached directly.",D("Attach managed policies to an IAM Group and add the user to that group. Direct attachment violates CIS AWS Foundations 1.15 (users must inherit permissions through groups).",l,"userProps.managedPolicies"),d?"LOW":"MEDIUM","Security",u,"cdkInsights")),n[r]={issues:p},n},{});var wk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Kinesis::Stream")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=[],d=i.Properties?.StreamEncryption;return(!d?.EncryptionType||d.EncryptionType==="NONE")&&l.push(e(r,"Kinesis Data Stream does not have server-side encryption enabled.",D("Enable StreamEncryption with EncryptionType KMS to protect data at rest.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Ak=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Kinesis::Stream")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];i.Properties?.RetentionPeriodHours===24&&l.push(e(r,"Kinesis Data Stream uses minimum retention period (24 hours).",D("Consider increasing RetentionPeriodHours for applications that need to replay or reprocess data during failures.",o),c("LOW"),"Reliability",u,"cdkInsights"));let p=i.Properties?.StreamModeDetails?.StreamMode;return l.length>0&&(n[r]={issues:l}),n},{});var pW=t=>typeof t=="string"?t==="*":typeof t=="object"?Object.values(t).some(e=>Array.isArray(e)?e.includes("*"):e==="*"):!1,Ek=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if((i.Type==="AWS::KMS::Key"&&Array.isArray(i.Properties?.KeyPolicy?.Statement)?i.Properties.KeyPolicy.Statement:[]).some(c=>pW(c.Principal))){let c=T(s,r),u=_(c);n[r]={issues:[e(r,"KMS key has a public policy.",D("Restrict the KMS key policy to specific IAM roles or users to prevent unauthorized access.",c,"keyPolicy / admins / encryptionKey"),u?"HIGH":"CRITICAL","Security",P(i,r),"cdkInsights")]}}return n},{});var Ik=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Lambda::Function")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.ReservedConcurrentExecutions===void 0&&(n[r]={issues:[e(r,"Lambda function has no reserved concurrency configured.",D("Consider setting ReservedConcurrentExecutions to prevent the function from consuming all available account concurrency and to control scaling behavior.",o),c("LOW"),"Reliability",u,"cdkInsights")]}),n},{});var fW=new Set(["events.amazonaws.com","sns.amazonaws.com","s3.amazonaws.com","ses.amazonaws.com","codecommit.amazonaws.com","codepipeline.amazonaws.com","config.amazonaws.com","cloudwatch.amazonaws.com","iot.amazonaws.com","logs.amazonaws.com","pipes.amazonaws.com","scheduler.amazonaws.com","cognito-idp.amazonaws.com"]),mW=new Set(["apigateway.amazonaws.com","elasticloadbalancing.amazonaws.com","lambda.amazonaws.com"]),cy=t=>{if(typeof t=="string")return t;if(typeof t=="object"&&t!==null){let e=t;if(typeof e.Ref=="string")return e.Ref;let s=e["Fn::GetAtt"];if(Array.isArray(s)&&typeof s[0]=="string")return s[0]}return null},hW=t=>{let e=new Map,s=(n,r)=>{e.has(n)||e.set(n,new Set),e.get(n)?.add(r)};for(let n of Object.values(t))if(n.Type==="AWS::Lambda::Permission"){let r=cy(n.Properties?.FunctionName),i=n.Properties?.Principal;if(!r||typeof i!="string")continue;fW.has(i)?s(r,"async"):mW.has(i)&&s(r,"sync")}else if(n.Type==="AWS::Lambda::EventSourceMapping"){let r=cy(n.Properties?.FunctionName);r&&s(r,"event-source")}else if(n.Type==="AWS::Lambda::EventInvokeConfig"){let r=cy(n.Properties?.FunctionName);r&&s(r,"async")}return e},kk=(t,e,s)=>{let n=t.Resources||{},r=hW(n);return Object.entries(n).reduce((i,[o,a])=>{if(a.Type!=="AWS::Lambda::Function"||a.Properties?.DeadLetterConfig?.TargetArn)return i;let c=P(a,o),u=T(s,o),l=_(u),d=r.get(o)??new Set(["unknown"]),p=d.has("async"),f=d.has("sync"),m=d.has("event-source");return f&&!p&&!m?i:m&&!p?(i[o]={issues:[e(o,"Lambda function consumes an event source mapping without a failure destination.",D("For SQS/Kinesis/DynamoDB Streams, configure an OnFailure destination on the EventSourceMapping (DestinationConfig.OnFailure) \u2014 function-level DeadLetterConfig is for async invocations and does not apply to poll-based event sources.",u,"onFailure / deadLetterQueue (on EventSourceMapping)"),l?"LOW":"MEDIUM","Reliability",c,"cdkInsights")]},i):p?(i[o]={issues:[e(o,"Lambda function has no Dead Letter Queue configured for async invocations.",D("Configure a Dead Letter Queue (SQS or SNS) via DeadLetterConfig to capture failed async invocations for debugging, monitoring, and retry processing.",u,"deadLetterQueueEnabled / deadLetterQueue"),l?"LOW":"MEDIUM","Reliability",c,"cdkInsights")]},i):(i[o]={issues:[e(o,"Lambda function has no Dead Letter Queue configured (invocation mode could not be inferred).",D("No invocation source was detected in this template. If the function is invoked async (EventBridge, SNS, S3, etc.), configure DeadLetterConfig to capture failures. If it is invoked sync (API Gateway, ALB, direct invoke), DLQ does not apply and this finding can be suppressed.",u,"deadLetterQueueEnabled / deadLetterQueue"),"LOW","Reliability",c,"cdkInsights")]},i)},{})};var gW=/\b(secret|password|passwd|pwd|credential|private_key|api_key|api_secret|auth_token|access_key|access_secret|bearer_token|jwt_secret|encryption_key|signing_key)\b/i,Rk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::Lambda::Function"){let o=T(s,r),a=_(o),c=l=>a?$(l):l,u=Object.entries(i.Properties?.Environment?.Variables||{}).filter(([l])=>gW.test(l)).map(([l])=>e(r,`Lambda function contains sensitive environment variable: ${l}.`,D("Store sensitive environment variables in AWS Secrets Manager or SSM Parameter Store instead of plaintext environment variables.",o),c("HIGH"),"Security",P(i,r),"cdkInsights"));u.length>0&&(n[r]={issues:u})}return n},{});var Fk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::Lambda::Function"){let o=T(s,r),a=_(o),c=l=>a?$(l):l,u=i.Properties?.MemorySize;typeof u=="number"&&u>1024&&(n[r]={issues:[e(r,"Lambda function has high memory allocation.",D("Consider reducing memory for cost savings.",o),c("MEDIUM"),"Cost Optimization",P(i,r),"cdkInsights")]})}return n},{});var yW=t=>typeof t=="string"&&/^\d{12}$/.test(t),xW=t=>{if(!t||typeof t!="object")return!1;let e=t.Ref;return typeof e=="string"&&e.endsWith("AccountId")},bW=t=>t==="*"||t===void 0,_k=t=>typeof t=="string"&&t.endsWith(".amazonaws.com"),Tk=t=>t?!!(t.SourceArn||t.SourceAccount||t.PrincipalOrgID||t.OrganizationId):!1,Pk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{let o=i.Type==="AWS::Lambda::Permission",a=i.Type==="AWS::Lambda::LayerVersionPermission";if(!o&&!a)return n;let c=i.Properties??{},u=c.Principal,l=[],d=P(i,r),p=T(s,r),f=_(p);return bW(u)?l.push(e(r,`${i.Type} grants public access via wildcard Principal.`,D("Set Principal to a specific AWS account ID, an AWS service principal with SourceArn/SourceAccount, or an OrganizationId. Wildcard principals make the function/layer reachable from any AWS account.",p,"permissionProps.principal"),f?"HIGH":"CRITICAL","Security",d,"cdkInsights")):o&&_k(u)&&!Tk(c)?l.push(e(r,"Lambda::Permission grants a service principal access without SourceArn / SourceAccount / PrincipalOrgID.",D("Constrain the service principal: set SourceArn to the specific resource that may invoke the function, or SourceAccount to your AWS account ID. Without one of these, any account using that AWS service can invoke this function (confused-deputy risk).",p,"permissionProps.sourceArn"),f?"MEDIUM":"HIGH","Security",d,"cdkInsights")):o&&!yW(u)&&!xW(u)&&!_k(u)&&!Tk(c)&&l.push(e(r,"Lambda::Permission has an unrecognised Principal shape with no source restriction.",D("Confirm the Principal resolves to an account ID, an org ID, or an AWS service plus a SourceArn/SourceAccount. Wildcards or unrestricted patterns expose the function publicly.",p,"permissionProps.principal"),f?"LOW":"MEDIUM","Security",d,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var SW={nodejs:"nodejs22.x","nodejs4.3":"nodejs22.x","nodejs4.3-edge":"nodejs22.x","nodejs6.10":"nodejs22.x","nodejs8.10":"nodejs22.x","nodejs10.x":"nodejs22.x","nodejs12.x":"nodejs22.x","nodejs14.x":"nodejs22.x","nodejs16.x":"nodejs22.x","nodejs18.x":"nodejs22.x","python2.7":"python3.13","python3.6":"python3.13","python3.7":"python3.13","python3.8":"python3.13","python3.9":"python3.13",java8:"java21","java8.al2":"java21",java11:"java21","dotnetcore1.0":"dotnet8","dotnetcore2.0":"dotnet8","dotnetcore2.1":"dotnet8","dotnetcore3.1":"dotnet8","dotnet5.0":"dotnet8",dotnet6:"dotnet8","ruby2.5":"ruby3.3","ruby2.7":"ruby3.3","go1.x":"provided.al2023"},Lk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Lambda::Function")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=i.Properties?.Runtime;if(typeof u!="string")return n;let l=SW[u];return l&&(n[r]={issues:[e(r,`Lambda function uses deprecated runtime "${u}". This runtime has reached or is approaching end-of-life and will no longer receive security patches.`,D(`Upgrade to "${l}" for continued security patches, performance improvements, and long-term support.`,o),c("HIGH"),"Security",P(i,r),"cdkInsights")]}),n},{});var Ok=(t,e,s)=>Object.values(t.Resources||{}).some(r=>r.Type==="AWS::EC2::NatGateway")?Object.entries(t.Resources||{}).reduce((r,[i,o])=>{if(o.Type!=="AWS::Lambda::Function")return r;let a=T(s,i),c=_(a),u=p=>c?$(p):p,l=P(o,i),d=o.Properties?.VpcConfig;return d?.SubnetIds&&d.SubnetIds.length>0&&(r[i]={issues:[e(i,"Lambda function in VPC with NAT Gateway detected. NAT Gateway costs can accumulate quickly.",D("Evaluate if VPC attachment is necessary. Consider using VPC endpoints for AWS services to reduce NAT costs. NAT Gateway charges ~$0.045/hr plus $0.045/GB processed.",a),u("MEDIUM"),"Cost Optimization",l,"cdkInsights")]}),r},{}):{};var Mk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::MSK::Cluster")return n;let o=T(s,r),a=_(o),c=g=>a?$(g):g,u=P(i,r),l=[],d=i.Properties?.ClientAuthentication,p=(d?.Tls?.CertificateAuthorityArnList?.length??0)>0,f=d?.Sasl?.Scram?.Enabled===!0||d?.Sasl?.Iam?.Enabled===!0,m=d?.Unauthenticated?.Enabled===!0;return!p&&!f&&l.push(e(r,"MSK cluster does not have client authentication configured.",D("Enable SASL/SCRAM, IAM authentication, or mutual TLS for client authentication.",o),c("HIGH"),"Security",u,"cdkInsights")),m&&l.push(e(r,"MSK cluster allows unauthenticated access.",D("Disable unauthenticated access and require client authentication for all connections.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Bk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::MSK::Cluster")return n;let o=T(s,r),a=_(o),c=m=>a?$(m):m,u=P(i,r),l=[],d=i.Properties?.EncryptionInfo;d?.EncryptionAtRest?.DataVolumeKMSKeyId||l.push(e(r,"MSK cluster does not use a customer-managed KMS key for encryption at rest.",D("Specify DataVolumeKMSKeyId in EncryptionAtRest for additional control over data encryption.",o),c("LOW"),"Security",u,"cdkInsights"));let f=d?.EncryptionInTransit;return f?.ClientBroker!=="TLS"&&l.push(e(r,"MSK cluster does not enforce TLS encryption for client-broker communication.",D("Set ClientBroker to TLS in EncryptionInTransit to encrypt data between clients and brokers.",o),c("HIGH"),"Security",u,"cdkInsights")),f?.InCluster!==!0&&l.push(e(r,"MSK cluster does not have encryption enabled for inter-broker communication.",D("Set InCluster to true in EncryptionInTransit to encrypt data between brokers.",o),c("MEDIUM"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Nk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::MSK::Cluster")return n;let o=T(s,r),a=_(o),c=h=>a?$(h):h,u=P(i,r),l=[],p=i.Properties?.LoggingInfo?.BrokerLogs,f=p?.CloudWatchLogs?.Enabled===!0,m=p?.Firehose?.Enabled===!0,g=p?.S3?.Enabled===!0;return!f&&!m&&!g&&l.push(e(r,"MSK cluster does not have broker logging configured.",D("Enable broker logs to CloudWatch, Firehose, or S3 for monitoring and troubleshooting Kafka operations.",o),c("MEDIUM"),"Operational Excellence",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Wk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::OpenSearchService::Domain"&&i.Type!=="AWS::Elasticsearch::Domain")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];i.Properties?.AdvancedSecurityOptions?.Enabled!==!0&&l.push(e(r,"OpenSearch domain does not have fine-grained access control enabled.",D("Enable AdvancedSecurityOptions to use IAM or internal user database for document-level and field-level security.",o),c("MEDIUM"),"Security",u,"cdkInsights"));let p=i.Properties?.VPCOptions;return(!p?.SubnetIds||p.SubnetIds.length===0)&&l.push(e(r,"OpenSearch domain is not deployed within a VPC.",D("Configure VPCOptions with subnet IDs to deploy the domain within a VPC for network isolation.",o),c("MEDIUM"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var $k=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::OpenSearchService::Domain"&&i.Type!=="AWS::Elasticsearch::Domain")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=P(i,r),l=[];return i.Properties?.EncryptionAtRestOptions?.Enabled!==!0&&l.push(e(r,"OpenSearch domain does not have encryption at rest enabled.",D("Enable EncryptionAtRestOptions to protect indexed data at rest using AWS KMS.",o),c("HIGH"),"Security",u,"cdkInsights")),i.Properties?.NodeToNodeEncryptionOptions?.Enabled!==!0&&l.push(e(r,"OpenSearch domain does not have node-to-node encryption enabled.",D("Enable NodeToNodeEncryptionOptions to encrypt data in transit between nodes within the cluster.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var jk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::OpenSearchService::Domain"&&i.Type!=="AWS::Elasticsearch::Domain")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=[],d=i.Properties?.LogPublishingOptions;return d?.AUDIT_LOGS?.Enabled||l.push(e(r,"OpenSearch domain does not have audit logging enabled.",D("Enable AUDIT_LOGS in LogPublishingOptions to track user activity for security and compliance monitoring.",o),c("LOW"),"Security",u,"cdkInsights")),d?.ES_APPLICATION_LOGS?.Enabled||l.push(e(r,"OpenSearch domain does not have application logging enabled.",D("Enable ES_APPLICATION_LOGS in LogPublishingOptions to capture error logs for troubleshooting.",o),c("LOW"),"Operational Excellence",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Uk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::RDS::DBInstance")return n;let o=P(i,r),a=i.Properties?.BackupRetentionPeriod,c=T(s,r),u=_(c),l=d=>u?$(d):d;return a===0?n[r]={issues:[e(r,"RDS instance has automated backups disabled (BackupRetentionPeriod is 0).",D("Enable automated backups with at least 7 days retention for production databases to enable point-in-time recovery.",c,"backupRetention"),l("HIGH"),"Reliability",o,"cdkInsights")]}:a!==void 0&&a<7&&(n[r]={issues:[e(r,`RDS backup retention period is only ${a} day(s).`,D("Consider increasing backup retention to at least 7 days for production databases.",c,"backupRetention"),l("MEDIUM"),"Reliability",o,"cdkInsights")]}),n},{});var Gk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::RDS::DBInstance")return n;let o=T(s,r),a=_(o),c=l=>a?$(l):l,u=P(i,r);return i.Properties?.DeletionProtection!==!0&&(n[r]={issues:[e(r,"RDS instance does not have deletion protection enabled.",D("Enable DeletionProtection to prevent accidental database deletion.",o),c("MEDIUM"),"Reliability",u,"cdkInsights")]}),n},{});var Hk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::RDS::DBInstance"&&i.Properties?.StorageEncrypted!==!0){let o=T(s,r),a=_(o);n[r]={issues:[e(r,"RDS instance is not encrypted.",D("Enable encryption to protect data at rest and meet compliance standards.",o,"storageEncrypted / storageEncryptionKey"),a?"HIGH":"CRITICAL","Security",P(i,r),"cdkInsights")]}}return n},{});var vW=new Set(["AWS::RDS::DBInstance","AWS::RDS::DBCluster"]),zk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(!vW.has(i.Type))return n;let o=i.Properties?.EnableCloudwatchLogsExports;if(Array.isArray(o)&&o.length>0)return n;let a=P(i,r),c=T(s,r),u=_(c);return n[r]={issues:[e(r,"RDS database does not export logs to CloudWatch.",D("Set EnableCloudwatchLogsExports to the relevant log types for the engine (e.g. ['error','general','slowquery'] for MySQL, ['postgresql'] for PostgreSQL, ['audit','error','general','slowquery'] for MariaDB).",c,"databaseProps.cloudwatchLogsExports"),u?"LOW":"MEDIUM","Security",a,"cdkInsights")]},n},{});var CW=new Set([1,5,10,15,30,60]),Vk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::RDS::DBInstance")return n;let o=i.Properties?.MonitoringInterval,a=typeof o=="number"?o:typeof o=="string"?Number.parseInt(o,10):void 0;if(typeof a=="number"&&CW.has(a))return n;let c=P(i,r),u=T(s,r),l=_(u);return n[r]={issues:[e(r,"RDS Instance does not have enhanced monitoring enabled.",D("Set MonitoringInterval to 1, 5, 10, 15, 30, or 60 (seconds) and provide MonitoringRoleArn so RDS can publish OS-level metrics to CloudWatch Logs.",u,"databaseProps.monitoringInterval"),l?"LOW":"MEDIUM","Operational Excellence",c,"cdkInsights")]},n},{});var qk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::RDS::DBInstance")return n;let o=T(s,r),a=_(o),c=f=>a?$(f):f,u=i.Properties??{},l=u.MultiAZ===!0,d=u.StorageType==="gp2",p=typeof u.StorageType>"u";return l&&(d||p)&&(n[r]={issues:[e(r,d?"RDS instance is using Multi-AZ with gp2 storage. Consider gp3 for lower costs.":"RDS instance is using Multi-AZ without explicitly setting a storage type. gp3 may offer better performance and cost savings.",D("Switch to gp3 storage for RDS to reduce costs and improve performance.",o),c("MEDIUM"),"Cost Optimization",P(i,r),"cdkInsights")]}),n},{});var Kk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::RDS::DBInstance")return n;let o=T(s,r),a=_(o),c=l=>a?$(l):l,u=P(i,r);return i.Properties?.PubliclyAccessible===!0&&(n[r]={issues:[e(r,"RDS instance is publicly accessible from the internet.",D("Set PubliclyAccessible to false and access the database through private subnets, bastion hosts, or VPN. If public access is intentional (e.g. a dev or staging database with restricted security groups), suppress this rule for the resource.",o),c("HIGH"),"Security",u,"cdkInsights")]}),n},{});var Zk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Redshift::Cluster")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=[];return i.Properties?.Encrypted!==!0&&l.push(e(r,"Redshift cluster does not have encryption at rest enabled.",D("Set Encrypted to true and specify a KmsKeyId to protect data at rest.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var Yk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Redshift::Cluster")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.LoggingProperties?.BucketName||(n[r]={issues:[e(r,"Redshift cluster does not have audit logging enabled.",D("Configure LoggingProperties with an S3 bucket to capture connection logs, user activity, and query activity.",o),c("MEDIUM"),"Security",u,"cdkInsights")]}),n},{});var Jk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Redshift::Cluster")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);return i.Properties?.PubliclyAccessible===!0&&(n[r]={issues:[e(r,"Redshift cluster is publicly accessible.",D("Set PubliclyAccessible to false and use VPC endpoints or bastion hosts for secure access. If public access is intentional (e.g. analytics tooling or customer-facing dashboards) ensure security groups restrict the source CIDRs and suppress this rule for the resource.",o),c("HIGH"),"Security",u,"cdkInsights")]}),n},{});var Qk=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Route53::HostedZone"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Route53::DNSSEC"),i=new Set(r.map(([,o])=>{let a=o.Properties?.HostedZoneId;return typeof a=="string"?a:a?.Ref?a.Ref:null}).filter(Boolean));return n.reduce((o,[a,c])=>{if(c.Properties?.HostedZoneConfig?.Comment?.includes("private"))return o;let u=P(c,a);if(!i.has(a)){let d=T(s,a),p=_(d),f=m=>p?$(m):m;o[a]={issues:[e(a,"Route53 Hosted Zone does not have DNSSEC signing enabled.",D("Enable DNSSEC to protect against DNS spoofing and cache poisoning attacks by cryptographically signing DNS records.",d),f("LOW"),"Security",u,"cdkInsights")]}}return o},{})};var Xk=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::Route53::HealthCheck")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=[],d=i.Properties?.HealthCheckConfig;return d?.Type==="HTTP"&&l.push(e(r,"Route53 Health Check uses HTTP instead of HTTPS.",D("Use HTTPS for health checks to ensure the endpoint supports secure connections and to validate SSL certificates.",o),c("LOW"),"Security",u,"cdkInsights")),d?.RequestInterval===30&&l.push(e(r,"Route53 Health Check uses standard (30 second) request interval.",D("Consider using fast interval (10 seconds) for critical endpoints to detect failures more quickly.",o),c("LOW"),"Reliability",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var eR=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Route53::HostedZone"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::Route53::QueryLoggingConfig"),i=new Set(r.map(([,o])=>{let a=o.Properties?.HostedZoneId;return typeof a=="string"?a:a?.Ref?a.Ref:null}).filter(Boolean));return n.reduce((o,[a,c])=>{let u=P(c,a);if(!i.has(a)){let d=T(s,a),p=_(d),f=m=>p?$(m):m;o[a]={issues:[e(a,"Route53 Hosted Zone does not have query logging enabled.",D("Enable query logging to CloudWatch Logs for DNS query analysis, troubleshooting, and security monitoring.",d),f("LOW"),"Security",u,"cdkInsights")]}}return o},{})};var tR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::Bucket")return n;let o=[],a=i.Properties??{},c=P(i,r),u=T(s,r),l=_(u);a.BucketEncryption||o.push(e(r,"S3 Bucket lacks encryption.",D("Enable encryption at rest for better security.",u,"bucketProps.encryption"),l?"MEDIUM":"HIGH","Security",c,"cdkInsights"));let d=a?.PublicAccessBlockConfiguration;return d?(d.BlockPublicAcls===!1&&o.push(e(r,"S3 Bucket allows public ACLs (BlockPublicAcls is false).","Set BlockPublicAcls to true to prevent public ACLs from being applied.","CRITICAL","Security",c,"cdkInsights")),d.BlockPublicPolicy===!1&&o.push(e(r,"S3 Bucket allows public bucket policies (BlockPublicPolicy is false).","Set BlockPublicPolicy to true to prevent public bucket policies.","CRITICAL","Security",c,"cdkInsights")),d.IgnorePublicAcls===!1&&o.push(e(r,"S3 Bucket does not ignore public ACLs (IgnorePublicAcls is false).","Set IgnorePublicAcls to true to ignore any public ACLs on the bucket.","HIGH","Security",c,"cdkInsights")),d.RestrictPublicBuckets===!1&&o.push(e(r,"S3 Bucket does not restrict public bucket access (RestrictPublicBuckets is false).","Set RestrictPublicBuckets to true to restrict access to the bucket to only authorized users.","HIGH","Security",c,"cdkInsights"))):o.push(e(r,"S3 Bucket has no PublicAccessBlockConfiguration defined.","Configure PublicAccessBlockConfiguration with BlockPublicAcls, BlockPublicPolicy, IgnorePublicAcls, and RestrictPublicBuckets all set to true.","HIGH","Security",c,"cdkInsights")),a.VersioningConfiguration||o.push(e(r,"S3 Bucket has no versioning enabled.","Enable versioning to protect against accidental deletions.","MEDIUM","Operational Excellence",c,"cdkInsights")),o.length>0&&(n[r]={issues:o}),n},{});var DW=new Set(["*","s3:*","s3:DeleteBucket","s3:DeleteBucketPolicy","s3:PutBucketPolicy"]),wW=new Set(["aws:PrincipalArn","aws:PrincipalAccount","aws:PrincipalIsAWSService"]),AW=new Set(["StringNotEquals","StringNotLike","ArnNotLike","ArnNotEquals"]),EW=t=>{if(t==="*")return!0;if(t&&typeof t=="object"&&!Array.isArray(t)){let e=t,s=e.AWS;if(s==="*"||Array.isArray(s)&&s.includes("*")||e.Service==="*")return!0}return!1},IW=t=>typeof t=="string"?[t]:Array.isArray(t)?t.filter(e=>typeof e=="string"):[],kW=t=>IW(t).find(e=>DW.has(e)),RW=t=>t===!1||t==="false"||t==="False",FW=t=>{if(t==null)return!0;let e=Array.isArray(t)?t:[t];if(e.length===0)return!0;for(let s of e){if(typeof s!="string"||s==="*")return!0;let n=s.split(":::")[1];if(n===void 0||!n.includes("/"))return!0}return!1},_W=t=>{let e=t.Condition;if(!e||typeof e!="object")return!1;let s=e.Bool??e.BoolIfExists;return s?RW(s["aws:SecureTransport"]):!1},TW=t=>{if(!t||typeof t!="object")return!1;for(let[e,s]of Object.entries(t)){if(!s||typeof s!="object")continue;let n=Object.keys(s);if(n.includes("aws:PrincipalIsAWSService"))return!0;if(AW.has(e)){for(let r of n)if(wW.has(r))return!0}}return!1},PW=t=>{if(t.Effect!=="Deny"||t.NotPrincipal!==void 0||!EW(t.Principal))return;let e=kW(t.Action);if(e&&!_W(t)&&!TW(t.Condition)&&FW(t.Resource))return e},sR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::BucketPolicy")return n;let o=i.Properties?.PolicyDocument?.Statement;if(!Array.isArray(o))return n;let a=o.map(PW).find(d=>d!==void 0);if(!a)return n;let c=P(i,r),u=T(s,r),l=_(u);return n[r]={issues:[e(r,`Bucket policy contains a Deny statement on ${a} with Principal: '*' and no carveout for the account root or admin role. This will lock the account out of the bucket \u2014 recovery requires breaking glass on the account root credentials to remove the bucket policy. AWS Support will typically not intervene for this scenario.`,D("Add a NotPrincipal exemption for the account root (e.g. arn:aws:iam::<account>:root) or use a Condition with StringNotEquals on aws:PrincipalArn to exempt your admin role(s). If the Deny is intended for transport security, scope it with aws:SecureTransport rather than a blanket Deny on Principal: '*'.",u,"bucketPolicyProps.statements"),l?"HIGH":"CRITICAL","Security",c,"cdkInsights")]},n},{});var LW=t=>t===!1||t==="false"||t==="False",OW=t=>{if(t.Effect!=="Deny")return!1;let e=t.Condition;if(!e||typeof e!="object")return!1;let s=e.Bool??e.BoolIfExists;return s?LW(s["aws:SecureTransport"]):!1},nR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::BucketPolicy")return n;let o=i.Properties?.PolicyDocument?.Statement;if(Array.isArray(o)&&o.some(OW))return n;let c=P(i,r),u=T(s,r),l=_(u);return n[r]={issues:[e(r,"S3 BucketPolicy does not deny non-SSL/TLS requests.",D("Add a Deny statement with Condition.Bool['aws:SecureTransport']=false to enforce TLS for all S3 access. CIS AWS Foundations 2.1.1 and PCI-DSS require encrypted-in-transit requests.",u,"bucketPolicyProps.statements"),l?"MEDIUM":"HIGH","Security",c,"cdkInsights")]},n},{});var rR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::Bucket")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r);return(i.Properties?.LifecycleConfiguration?.Rules||[]).length===0&&(n[r]={issues:[e(r,"S3 bucket has no lifecycle policy configured.",D("Configure lifecycle rules to automatically transition objects to cheaper storage classes (e.g., Glacier) or delete old versions to optimize storage costs.",o),c("MEDIUM"),"Cost Optimization",u,"cdkInsights")]}),n},{});var iR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::Bucket"||(i.Properties??{}).LoggingConfiguration?.DestinationBucketName)return n;let c=P(i,r),u=T(s,r),l=_(u);return n[r]={issues:[e(r,"S3 Bucket has no access logging configured.",D("Set LoggingConfiguration.DestinationBucketName to capture object-level access logs in a separate bucket. Required by CIS AWS Foundations 2.1.2 and useful for incident forensics.",u,"bucketProps.serverAccessLogsBucket"),l?"LOW":"MEDIUM","Security",c,"cdkInsights")]},n},{});var MW=/\b(prod|production|critical|backup|dr|disaster|recovery|primary)\b/i,oR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::S3::Bucket")return n;let o=T(s,r),a=_(o),c=p=>a?$(p):p,u=P(i,r),l=i.Properties?.BucketName||r,d=i.Properties?.ReplicationConfiguration;return MW.test(l)&&!d?.Rules?.length&&(n[r]={issues:[e(r,"Critical S3 bucket does not have cross-region replication configured.",D("Consider enabling cross-region replication for disaster recovery and data durability on production/critical buckets.",o),c("LOW"),"Reliability",u,"cdkInsights")]}),n},{});var aR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::S3::Bucket"&&!i.Properties?.IntelligentTieringConfigurations){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"S3 Bucket does not use Intelligent-Tiering. Consider enabling it for cost optimization.",D("Enable Intelligent-Tiering for automatic cost optimization of infrequently accessed objects.",o),c("LOW"),"Cost Optimization",P(i,r),"cdkInsights")]}}return n},{});var cR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{let o=i.Properties??{};if(i.Type==="AWS::SecretsManager::Secret"&&o.PublicPolicy){let a=T(s,r),c=_(a),u=l=>c?$(l):l;n[r]={issues:[e(r,"Secret is publicly accessible.",D("Restrict secret access using IAM policies to ensure only authorized entities can retrieve it.",a),u("CRITICAL"),"Security",P(i,r),"cdkInsights")]}}return n},{});var uR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::SNS::Topic"&&!i.Properties?.KmsMasterKeyId){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"SNS topic is not encrypted.",D("Enable AWS KMS encryption for SNS to protect sensitive messages in transit and at rest.",o),c("HIGH"),"Security",P(i,r),"cdkInsights")]}}return n},{});var lR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::SQS::Queue"&&!i.Properties?.KmsMasterKeyId){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"SQS queue is not encrypted.",D("Enable AWS KMS encryption for SQS to protect message data in transit and at rest.",o),c("HIGH"),"Security",P(i,r),"cdkInsights")]}}return n},{});var dR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type==="AWS::StepFunctions::StateMachine"&&i.Properties?.LoggingConfiguration===void 0){let o=T(s,r),a=_(o),c=u=>a?$(u):u;n[r]={issues:[e(r,"Step Function lacks logging configuration.",D("Enable logging for the Step Function using AWS CloudWatch to improve monitoring and debugging.",o),c("HIGH"),"Security",P(i,r),"cdkInsights")]}}return n},{});var pR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::EC2::SecurityGroup")return n;let o=T(s,r),a=_(o),c=d=>a?$(d):d,u=P(i,r);if(i.Properties?.GroupName==="default"){let d=i.Properties?.SecurityGroupIngress||[],p=i.Properties?.SecurityGroupEgress||[];(d.length>0||p.length>0)&&(n[r]={issues:[e(r,"VPC default security group has rules configured.",D("Remove all rules from the default security group and use custom security groups instead. Default groups cannot be deleted but should have no rules.",o),c("MEDIUM"),"Security",u,"cdkInsights")]})}return n},{});var fR=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::EC2::VPC"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::EC2::FlowLog"),i=new Set(r.filter(([,o])=>o.Properties?.ResourceType==="VPC").map(([,o])=>{let a=o.Properties?.ResourceId;return typeof a=="string"?a:a?.Ref?a.Ref:null}).filter(Boolean));return n.reduce((o,[a,c])=>{let u=P(c,a);if(!i.has(a)){let d=T(s,a),p=_(d),f=m=>p?$(m):m;o[a]={issues:[e(a,"VPC does not have flow logs enabled.",D("Enable VPC Flow Logs to capture network traffic information for security analysis and troubleshooting.",d),f("MEDIUM"),"Security",u,"cdkInsights")]}}return o},{})};var mR=(t,e,s)=>{let n=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::WAFv2::WebACL"),r=Object.entries(t.Resources||{}).filter(([,o])=>o.Type==="AWS::WAFv2::LoggingConfiguration"),i=new Set(r.map(([,o])=>{let a=o.Properties?.ResourceArn;return typeof a=="string"?a:a?.Ref?a.Ref:a?.["Fn::GetAtt"]?.[0]?a["Fn::GetAtt"][0]:null}).filter(Boolean));return n.reduce((o,[a,c])=>{let u=P(c,a);if(!(i.has(a)||r.some(([,d])=>{let p=d.Properties?.ResourceArn;return typeof p=="object"&&(p?.Ref===a||p?.["Fn::GetAtt"]?.[0]===a)}))){let d=T(s,a),p=_(d),f=m=>p?$(m):m;o[a]={issues:[e(a,"WAF WebACL does not have logging configured.",D("Enable WAF logging to capture detailed information about web requests for security analysis and compliance.",d),f("MEDIUM"),"Security",u,"cdkInsights")]}}return o},{})};var hR=(t,e,s)=>Object.entries(t.Resources||{}).reduce((n,[r,i])=>{if(i.Type!=="AWS::WAFv2::WebACL")return n;let o=T(s,r),a=_(o),c=m=>a?$(m):m,u=P(i,r),l=[],d=i.Properties?.DefaultAction;d?.Allow&&!d?.Block&&l.push(e(r,"WAF WebACL has default action set to Allow, which permits all traffic not matching rules.",D("Consider setting the default action to Block and explicitly allowing known-good traffic patterns for defense-in-depth.",o),c("MEDIUM"),"Security",u,"cdkInsights")),i.Properties?.VisibilityConfig?.CloudWatchMetricsEnabled||l.push(e(r,"WAF WebACL does not have CloudWatch metrics enabled.",D("Enable CloudWatchMetricsEnabled in VisibilityConfig to monitor WAF activity and detect potential attacks.",o),c("MEDIUM"),"Security",u,"cdkInsights"));let f=i.Properties?.Rules;return(!f||f.length===0)&&l.push(e(r,"WAF WebACL has no rules defined.",D("Add WAF rules to protect against common web exploits like SQL injection, XSS, and bot traffic.",o),c("HIGH"),"Security",u,"cdkInsights")),l.length>0&&(n[r]={issues:l}),n},{});var BW=t=>Object.values(t.Resources||{}).some(e=>e.Type==="Custom::S3BucketNotifications"),gR=t=>Object.values(t.Resources||{}).some(e=>e.Type==="AWS::Lambda::EventSourceMapping"),yR=t=>Object.values(t.Resources||{}).some(e=>e.Type==="AWS::Events::Rule"),xR=(t,e)=>Object.values(t.Resources||{}).some(s=>s.Type!=="AWS::ElasticLoadBalancingV2::Listener"?!1:(s.Properties?.DefaultActions||s.Properties?.Actions)?.some(r=>r.TargetGroupArn?.startsWith(e))),NW=t=>Object.values(t.Resources||{}).some(e=>e.Type==="AWS::Lambda::Permission"&&e.Properties?.Principal==="apigateway.amazonaws.com"),gp=(t,e)=>Object.values(t.Resources||{}).some(s=>s.Type==="AWS::ApiGateway::Integration"&&typeof s.Properties?.Uri=="string"&&s.Properties.Uri.includes(e)),eu=(t,e)=>Object.values(t.Resources||{}).some(s=>s.Type==="AWS::IoT::TopicRule"&&s.Properties?.TopicRulePayload?.actions?.some(n=>Object.hasOwn(n,e))),WW=t=>Object.values(t.Resources||{}).some(e=>e.Type==="AWS::ECS::Service"),bR=(t,e)=>Object.values(t.Resources||{}).some(s=>s.Type==="AWS::SNS::Subscription"&&s.Properties?.Protocol===e),SR=(t,e)=>{let s=[],n={},r={};for(let[o,a]of Object.entries(e)){let c=a.requiredResourceTypes||[];if(c.length!==0){r[o]=c.length;for(let u of c)n[u]||(n[u]=[]),n[u].push(o)}}let i={};for(let o of Object.values(t.Resources||{})){let a=o.Type,c=n[a];if(c){for(let u of c)if(i[u]=(i[u]||0)+1,i[u]===r[u]){let l=e[u],d=!0;switch(u){case"aws-s3-lambda":d=BW(t)||gR(t);break;case"aws-dynamodbstreams-lambda":d=gR(t);break;case"aws-eventbridge-lambda":d=yR(t);break;case"aws-alb-fargate":d=xR(t,"arn:aws:ecs:");break;case"aws-alb-lambda":d=xR(t,"arn:aws:lambda:");break;case"aws-apigateway-lambda":d=NW(t);break;case"aws-apigateway-sqs":d=gp(t,"sqs");break;case"aws-apigateway-dynamodb":d=gp(t,"dynamodb");break;case"aws-apigateway-kinesisstreams":d=gp(t,"kinesis");break;case"aws-apigateway-sagemakerendpoint":d=gp(t,"sagemaker");break;case"aws-iot-lambda":d=eu(t,"lambda");break;case"aws-iot-kinesisstreams":d=eu(t,"kinesis");break;case"aws-iot-kinesisfirehose-s3":d=eu(t,"firehose");break;case"aws-iot-sqs":d=eu(t,"sqs");break;case"aws-iot-s3":d=eu(t,"s3");break;case"aws-sns-lambda":d=bR(t,"lambda");break;case"aws-sns-sqs":d=bR(t,"sqs");break;case"aws-fargate-dynamodb":case"aws-fargate-eventbridge":case"aws-fargate-kinesisfirehose":case"aws-fargate-kinesisstreams":case"aws-fargate-opensearch":case"aws-fargate-s3":case"aws-fargate-secretsmanager":case"aws-fargate-sns":case"aws-fargate-sqs":case"aws-fargate-ssmstringparameter":case"aws-fargate-stepfunctions":d=WW(t);break;case"aws-eventbridge-kinesisfirehose-s3":case"aws-eventbridge-kinesisstreams":case"aws-eventbridge-sns":case"aws-eventbridge-sqs":case"aws-eventbridge-stepfunctions":d=yR(t);break}if(!d)continue;s.push({resourceId:l.className,issue:`Possible Pattern detected: ${l.friendlyName}`,recommendation:`Consider using the AWS Solutions Construct \`${l.className}\` from \`@aws-solutions-constructs/${u}\`.`,severity:"LOW",wafPillar:"Operational Excellence",docUrl:l.documentationUrl,githubUrl:l.githubUrl,constructPath:l.className,foundBy:"cdkInsights"}),delete r[u]}}}return s};var vR=()=>({iamPolicies:Sk,iamPermissionBoundary:vk,iamCrossAccountTrust:bk,iamUserPolicies:Dk,s3Buckets:tR,s3BucketLogging:iR,s3BucketPolicySsl:nR,s3BucketPolicySelfLockout:sR,s3IntelligentTiering:aR,s3LifecyclePolicy:rR,s3Replication:oR,securityGroups:K1,ec2InstanceType:z1,ec2PublicIp:q1,ec2SubnetAutoPublicIp:Z1,natGatewayUsage:V1,ebsVolumes:$1,lambdaEnvironmentVariables:Rk,lambdaMemory:Fk,lambdaReservedConcurrency:Ik,lambdaDeadLetterQueue:kk,lambdaRuntime:Lk,lambdaVpcNatWarning:Ok,lambdaPermission:Pk,rdsEncryption:Hk,rdsMultiAZ:qk,rdsPublicAccess:Kk,rdsBackupRetention:Uk,rdsDeletionProtection:Gk,rdsLogging:zk,rdsEnhancedMonitoring:Vk,dynamoDBAutoScaling:N1,dynamoDBStreams:W1,dynamoDBPitr:B1,dynamoDBEncryption:M1,cloudFrontHttpsOnly:A1,cloudFrontWafAssociation:k1,cloudFrontLogging:E1,cloudFrontTls:I1,elbDeletionProtection:ok,elbLogging:ck,elbHttpsListeners:ak,elbSecurityPolicy:uk,ecsSecrets:sk,ecsLogging:X1,ecsServiceConnectLogs:ek,ecsResources:tk,cognitoPasswordPolicy:L1,cognitoMfa:P1,cognitoAdvancedSecurity:O1,wafWebAcl:hR,wafLogging:mR,cloudWatchLogRetention:T1,cloudWatchEncryption:_1,cloudWatchAlarms:F1,route53Dnssec:Qk,route53HealthChecks:Xk,route53QueryLogging:eR,elastiCacheEncryption:dk,elastiCacheAuth:lk,elastiCacheFailover:pk,ecrScanning:Q1,ecrLifecycle:J1,ecrImmutableTags:Y1,openSearchEncryption:$k,openSearchAccessControl:Wk,openSearchLogging:jk,acmValidation:y1,backupPlans:D1,backupVault:w1,vpcFlowLogs:fR,vpcDefaultSecurityGroup:pR,kinesisEncryption:wk,kinesisRetention:Ak,appSyncAuth:S1,appSyncLogging:v1,appSyncWaf:C1,eksPublicEndpoint:ik,eksEncryption:nk,eksLogging:rk,redshiftEncryption:Zk,redshiftPublicAccess:Jk,redshiftLogging:Yk,mskEncryption:Bk,mskAuth:Mk,mskLogging:Nk,glueEncryption:gk,glueConnections:hk,efsEncryption:j1,autoScalingGroupHealthCheck:G1,autoScalingLaunchConfigPublicIp:H1,apiGateway:x1,apiGatewayMethodAuth:b1,secretsManager:cR,cloudTrailLogging:R1,eventBridgeRules:fk,eventBusPolicy:mk,kmsKeys:Ek,sns:uR,sqs:lR,stepFunctions:dR,crossResourceRelationships:fp,stackArchitecture:mp,solutionsPatterns:SR});var tu=(t={})=>{let{ttl:e=3e5,maxSize:s=1e3}=t,n=new Map,r=new Set,i=[],o=Date.now(),a=6e4,c=f=>Date.now()-f.timestamp>f.ttl,u=f=>{r.delete(f)},l=()=>{let f=0;for(let m=0;m<i.length;m++)r.has(i[m])&&(i[f++]=i[m]);i.length=f},d=()=>{let f=Date.now();if(f-o<a)return;o=f;let m=[];for(let[g,h]of n.entries())c(h)&&m.push(g);for(let g of m)n.delete(g),u(g);m.length>0&&l()},p=()=>{for(;n.size>=s&&i.length>0;){let f=i.shift();f&&r.has(f)&&(n.delete(f),r.delete(f))}};return{get(f){let m=n.get(f);if(m){if(c(m)){n.delete(f),u(f);return}return m.value}},set(f,m,g){n.size>=s*.9&&d(),p(),r.has(f)&&u(f),n.set(f,{value:m,timestamp:Date.now(),ttl:g??e}),r.add(f),i.push(f)},clear(){n.clear(),r.clear(),i.length=0},size(){return n.size},has(f){let m=n.get(f);return m?c(m)?(n.delete(f),u(f),!1):!0:!1}}},CR=(t,e={})=>{let s=tu(e);return(...n)=>{let r;try{r=JSON.stringify(n)}catch{return t(...n)}let i=s.get(r);if(i!==void 0)return i;let o=t(...n);return s.set(r,o),o}};function su(t,e){let s=e.split("."),n=t;for(let r of s){if(n==null||typeof n!="object")return;n=n[r]}return n}function uy(t,e){switch(t.type){case"property_exists":{let s=su(e,t.path),n=s!=null;return t.negate?!n:n}case"property_equals":{let s=su(e,t.path),n=JSON.stringify(s)===JSON.stringify(t.value);return t.negate?!n:n}case"property_matches":{let s=su(e,t.path);if(typeof s!="string")return!!t.negate;let n=new RegExp(t.pattern).test(s);return t.negate?!n:n}case"property_gt":{let s=su(e,t.path);return typeof s!="number"?!1:s>t.value}case"property_lt":{let s=su(e,t.path);return typeof s!="number"?!1:s<t.value}case"and":return t.conditions.every(s=>uy(s,e));case"or":return t.conditions.some(s=>uy(s,e));default:return!1}}function DR(t,e,s){if(e.length===0)return{};let n={};for(let[r,i]of Object.entries(t.Resources||{}))for(let o of e)if(o.resourceTypes.some(c=>c.endsWith("*")?i.Type.startsWith(c.slice(0,-1)):i.Type===c))try{if(uy(o.condition,i)){let u=s(r,`[${o.ruleId}] ${o.description}`,o.recommendation,o.severity,o.wafPillar,"","cdkInsights");u.ruleId=o.ruleId,n[r]||(n[r]={issues:[]}),n[r].issues.push(u)}}catch(c){qe.warn(`Error evaluating custom rule '${o.ruleId}' on resource '${r}'`,{error:c instanceof Error?c.message:String(c)})}return n}var nu={"iam-policies-overly-permissive":{ruleId:"iam-policies-overly-permissive",checkKey:"iamPolicies",name:"IAM Overly Permissive Policies",description:"Detects IAM policies with overly permissive actions like * wildcards.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Review IAM policies for overly broad permissions","Replace wildcard (*) actions with specific actions","Use IAM Access Analyzer to identify unused permissions"],resourceTypes:["AWS::IAM::Policy","AWS::IAM::Role","AWS::IAM::ManagedPolicy"]},"iam-permission-boundary-missing":{ruleId:"iam-permission-boundary-missing",checkKey:"iamPermissionBoundary",name:"IAM Permission Boundary Missing",description:"Detects IAM roles without permission boundaries.",severity:"LOW",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html",complianceFrameworks:["SOC2","CIS","NIST"],remediationSteps:["Create a permission boundary policy","Attach the permission boundary to IAM roles"],resourceTypes:["AWS::IAM::Role"]},"iam-cross-account-trust":{ruleId:"iam-cross-account-trust",checkKey:"iamCrossAccountTrust",name:"IAM Cross-Account Trust",description:"Detects IAM roles with cross-account trust relationships.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Verify cross-account trust is intentional","Add conditions to restrict access (e.g., external ID)","Document the business justification"],resourceTypes:["AWS::IAM::Role"]},"iam-user-direct-policies":{ruleId:"iam-user-direct-policies",checkKey:"iamUserPolicies",name:"IAM User Direct Policies",description:"Detects IAM Users with policies attached directly (inline Policies or ManagedPolicyArns). CIS AWS Foundations 1.15 requires users to inherit permissions through groups.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#use-groups-for-permissions",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Create an IAM Group with the required policies","Add the user to the group instead of attaching policies directly","Remove Policies and ManagedPolicyArns from AWS::IAM::User resources"],resourceTypes:["AWS::IAM::User"]},"s3-bucket-public-access":{ruleId:"s3-bucket-public-access",checkKey:"s3Buckets",name:"S3 Bucket Public Access",description:"Detects S3 buckets with public access enabled.",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Enable S3 Block Public Access settings","Review bucket policies for public access","Use VPC endpoints for private access"],resourceTypes:["AWS::S3::Bucket"]},"s3-intelligent-tiering":{ruleId:"s3-intelligent-tiering",checkKey:"s3IntelligentTiering",name:"S3 Intelligent Tiering",description:"Recommends S3 Intelligent Tiering for cost optimization.",severity:"LOW",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering.html",remediationSteps:["Enable S3 Intelligent-Tiering for buckets with varying access patterns","Configure archive access tiers for infrequently accessed data"],resourceTypes:["AWS::S3::Bucket"]},"s3-lifecycle-policy-missing":{ruleId:"s3-lifecycle-policy-missing",checkKey:"s3LifecyclePolicy",name:"S3 Lifecycle Policy Missing",description:"Detects S3 buckets without lifecycle policies.",severity:"MEDIUM",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html",remediationSteps:["Create lifecycle rules to transition objects to cheaper storage classes","Set expiration rules for temporary data","Use lifecycle rules to delete incomplete multipart uploads"],resourceTypes:["AWS::S3::Bucket"]},"s3-replication-missing":{ruleId:"s3-replication-missing",checkKey:"s3Replication",name:"S3 Replication Missing",description:"Detects critical S3 buckets without cross-region replication.",severity:"LOW",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html",remediationSteps:["Enable cross-region replication for disaster recovery","Configure replication rules for critical data"],resourceTypes:["AWS::S3::Bucket"]},"s3-bucket-access-logging-disabled":{ruleId:"s3-bucket-access-logging-disabled",checkKey:"s3BucketLogging",name:"S3 Bucket Access Logging Disabled",description:"Detects S3 buckets without server access logging configured. Required by CIS AWS Foundations 2.1.2 and useful for incident forensics.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Set LoggingConfiguration.DestinationBucketName on the bucket to capture access logs","Use a separate bucket for logs to avoid recursive logging","Configure a lifecycle rule on the log bucket to manage storage costs"],resourceTypes:["AWS::S3::Bucket"]},"s3-bucket-policy-non-ssl":{ruleId:"s3-bucket-policy-non-ssl",checkKey:"s3BucketPolicySsl",name:"S3 BucketPolicy Permits Non-SSL Requests",description:"Detects AWS::S3::BucketPolicy resources that lack a Deny statement enforcing aws:SecureTransport. Without this, the bucket accepts plain HTTP requests in addition to HTTPS.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html#enforce-tls",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Add a Deny statement with Action s3:* and Condition Bool aws:SecureTransport=false","Apply the Deny to both the bucket ARN and the bucket-objects ARN (arn/* )","Use BoolIfExists if the policy already accepts unsigned requests via specific clauses"],resourceTypes:["AWS::S3::BucketPolicy"]},"s3-bucket-policy-self-lockout":{ruleId:"s3-bucket-policy-self-lockout",checkKey:"s3BucketPolicySelfLockout",name:"S3 BucketPolicy Self-Lockout",description:"Detects AWS::S3::BucketPolicy resources containing a Deny statement on s3:DeleteBucket, s3:*, or * with a broad Principal and no NotPrincipal or aws:PrincipalArn carveout for the account root or admin role. Such a policy locks the account out of its own bucket \u2014 recovery requires breaking glass on the account root credentials, since AWS Support typically declines to intervene where customers have a self-service path via root.",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html",complianceFrameworks:["SOC2","NIST"],remediationSteps:["Add a NotPrincipal exemption for the account root (arn:aws:iam::<account>:root) or admin role(s)","Or use a Condition with StringNotEquals on aws:PrincipalArn to exempt admin role ARNs","If the Deny is intended for transport security, scope it with aws:SecureTransport rather than a blanket Deny on Principal: '*'"],resourceTypes:["AWS::S3::BucketPolicy"]},"lambda-env-sensitive-data":{ruleId:"lambda-env-sensitive-data",checkKey:"lambdaEnvironmentVariables",name:"Lambda Sensitive Environment Variables",description:"Detects Lambda functions with sensitive data in environment variables.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Move sensitive data to AWS Secrets Manager","Use SSM Parameter Store with SecureString","Enable Lambda environment variable encryption"],resourceTypes:["AWS::Lambda::Function"]},"lambda-memory-optimization":{ruleId:"lambda-memory-optimization",checkKey:"lambdaMemory",name:"Lambda Memory Optimization",description:"Detects Lambda functions with suboptimal memory configuration.",severity:"LOW",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html#configuration-memory-console",remediationSteps:["Use AWS Lambda Power Tuning to find optimal memory","Consider cost vs performance tradeoffs"],resourceTypes:["AWS::Lambda::Function"]},"lambda-reserved-concurrency-missing":{ruleId:"lambda-reserved-concurrency-missing",checkKey:"lambdaReservedConcurrency",name:"Lambda Reserved Concurrency Missing",description:"Detects Lambda functions without reserved concurrency.",severity:"LOW",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html",remediationSteps:["Set reserved concurrency for critical functions","Use provisioned concurrency for latency-sensitive workloads"],resourceTypes:["AWS::Lambda::Function"]},"lambda-dlq-missing":{ruleId:"lambda-dlq-missing",checkKey:"lambdaDeadLetterQueue",name:"Lambda Dead Letter Queue Missing",description:"Detects Lambda functions without dead letter queue configuration.",severity:"MEDIUM",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-dlq",remediationSteps:["Configure a dead letter queue (SQS or SNS)","Set up monitoring for DLQ messages","Implement retry logic for failed invocations"],resourceTypes:["AWS::Lambda::Function"]},"lambda-vpc-nat-cost":{ruleId:"lambda-vpc-nat-cost",checkKey:"lambdaVpcNatWarning",name:"Lambda VPC NAT Gateway Cost Warning",description:"Warns about potential NAT Gateway costs for VPC-attached Lambda functions.",severity:"MEDIUM",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html",remediationSteps:["Use VPC endpoints instead of NAT Gateway where possible","Consider if VPC attachment is necessary","Monitor NAT Gateway data processing costs"],resourceTypes:["AWS::Lambda::Function"]},"lambda-permission-public":{ruleId:"lambda-permission-public",checkKey:"lambdaPermission",name:"Lambda Permission Permits Public Access",description:"Detects AWS::Lambda::Permission and AWS::Lambda::LayerVersionPermission resources that grant invoke / use rights with a wildcard Principal, or grant a service principal without a SourceArn / SourceAccount / PrincipalOrgID restriction (confused-deputy risk).",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Replace wildcard Principal with a specific 12-digit AWS account ID or {Ref: AWS::AccountId}","For service principals, set SourceArn to the specific resource that may invoke the function","For S3 service principal, set SourceAccount to your AWS account ID","For LayerVersionPermission, prefer OrganizationId over wildcard Principal"],resourceTypes:["AWS::Lambda::Permission","AWS::Lambda::LayerVersionPermission"]},"dynamodb-autoscaling-missing":{ruleId:"dynamodb-autoscaling-missing",checkKey:"dynamoDBAutoScaling",name:"DynamoDB Auto Scaling Missing",description:"Detects DynamoDB tables without auto-scaling enabled.",severity:"MEDIUM",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/AutoScaling.html",remediationSteps:["Enable DynamoDB auto-scaling or use on-demand capacity","Set appropriate minimum and maximum capacity units"],resourceTypes:["AWS::DynamoDB::Table"]},"dynamodb-streams-disabled":{ruleId:"dynamodb-streams-disabled",checkKey:"dynamoDBStreams",name:"DynamoDB Streams Disabled",description:"Detects DynamoDB tables without streams enabled.",severity:"LOW",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html",remediationSteps:["Enable DynamoDB Streams for change data capture","Consider point-in-time recovery for data protection"],resourceTypes:["AWS::DynamoDB::Table"]},"dynamodb-encryption-aws-owned-key":{ruleId:"dynamodb-encryption-aws-owned-key",checkKey:"dynamoDBEncryption",name:"DynamoDB Table Uses AWS-Owned Encryption Key",description:"Detects AWS::DynamoDB::Table resources without SSESpecification.SSEEnabled=true. DynamoDB always encrypts at rest, but the default AWS-owned key cannot be inspected, audited, or rotated by the customer \u2014 inadequate for HIPAA / PCI-DSS / FedRAMP workloads.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set SSESpecification.SSEEnabled to true on the table","Provide SSESpecification.KMSMasterKeyId pointing at a customer-managed KMS key","Verify the KMS key has rotation enabled (kms-key-rotation-disabled covers this)"],resourceTypes:["AWS::DynamoDB::Table"]},"dynamodb-pitr-disabled":{ruleId:"dynamodb-pitr-disabled",checkKey:"dynamoDBPitr",name:"DynamoDB Point-in-Time Recovery Disabled",description:"Detects DynamoDB tables without Point-in-Time Recovery enabled. PITR provides continuous backups for the last 35 days and is required for SOC2 / HIPAA data resilience.",severity:"MEDIUM",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/PointInTimeRecovery.html",remediationSteps:["Set PointInTimeRecoverySpecification.PointInTimeRecoveryEnabled to true on the table","Verify the AWS region supports PITR for your table type (Provisioned / On-Demand)"],resourceTypes:["AWS::DynamoDB::Table"]},"rds-encryption-disabled":{ruleId:"rds-encryption-disabled",checkKey:"rdsEncryption",name:"RDS Encryption Disabled",description:"Detects RDS instances without encryption at rest.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Enable encryption for new RDS instances","For existing instances, create encrypted snapshot and restore"],resourceTypes:["AWS::RDS::DBInstance","AWS::RDS::DBCluster"]},"rds-multi-az-disabled":{ruleId:"rds-multi-az-disabled",checkKey:"rdsMultiAZ",name:"RDS Multi-AZ Disabled",description:"Detects RDS instances without Multi-AZ deployment.",severity:"MEDIUM",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html",remediationSteps:["Enable Multi-AZ for production databases","Consider Aurora for automatic multi-AZ"],resourceTypes:["AWS::RDS::DBInstance"]},"rds-publicly-accessible":{ruleId:"rds-publicly-accessible",checkKey:"rdsPublicAccess",name:"RDS Publicly Accessible",description:"Detects RDS instances that are publicly accessible.",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Set PubliclyAccessible to false","Use VPC security groups to control access","Access databases through bastion hosts or VPN"],resourceTypes:["AWS::RDS::DBInstance"]},"rds-backup-retention-low":{ruleId:"rds-backup-retention-low",checkKey:"rdsBackupRetention",name:"RDS Backup Retention Low",description:"Detects RDS instances with insufficient backup retention.",severity:"MEDIUM",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html",complianceFrameworks:["SOC2","HIPAA","NIST"],remediationSteps:["Set backup retention period to at least 7 days","Consider longer retention for compliance requirements","Enable cross-region backup replication"],resourceTypes:["AWS::RDS::DBInstance","AWS::RDS::DBCluster"]},"rds-deletion-protection-disabled":{ruleId:"rds-deletion-protection-disabled",checkKey:"rdsDeletionProtection",name:"RDS Deletion Protection Disabled",description:"Detects RDS instances without deletion protection.",severity:"MEDIUM",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DeleteInstance.html",remediationSteps:["Enable deletion protection for production databases","Use CloudFormation DeletionPolicy: Retain"],resourceTypes:["AWS::RDS::DBInstance","AWS::RDS::DBCluster"]},"rds-logging-disabled":{ruleId:"rds-logging-disabled",checkKey:"rdsLogging",name:"RDS Logging Disabled",description:"Detects RDS DBInstance and DBCluster resources without EnableCloudwatchLogsExports configured. Engine logs (error, slow query, audit) are not exported to CloudWatch for retention or analysis.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set EnableCloudwatchLogsExports to the engine's relevant log types (e.g. ['error','slowquery'] for MySQL, ['postgresql'] for PostgreSQL)","Configure a CloudWatch Logs retention policy on the resulting log group","For Aurora, enable both DBCluster and per-instance log exports"],resourceTypes:["AWS::RDS::DBInstance","AWS::RDS::DBCluster"]},"rds-enhanced-monitoring-disabled":{ruleId:"rds-enhanced-monitoring-disabled",checkKey:"rdsEnhancedMonitoring",name:"RDS Enhanced Monitoring Disabled",description:"Detects RDS instances without enhanced monitoring (MonitoringInterval missing or set to 0). OS-level metrics are not published to CloudWatch Logs.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html",remediationSteps:["Set MonitoringInterval to one of 1, 5, 10, 15, 30, or 60 (seconds)","Provide MonitoringRoleArn pointing at an IAM role with AmazonRDSEnhancedMonitoringRole attached"],resourceTypes:["AWS::RDS::DBInstance"]},"ec2-instance-type-outdated":{ruleId:"ec2-instance-type-outdated",checkKey:"ec2InstanceType",name:"EC2 Instance Type Outdated",description:"Detects EC2 instances using older generation instance types.",severity:"LOW",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html",remediationSteps:["Upgrade to current generation instance types","Use AWS Compute Optimizer for recommendations"],resourceTypes:["AWS::EC2::Instance"]},"nat-gateway-usage":{ruleId:"nat-gateway-usage",checkKey:"natGatewayUsage",name:"NAT Gateway Usage",description:"Identifies NAT Gateway usage for cost awareness.",severity:"LOW",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html",remediationSteps:["Consider VPC endpoints to reduce NAT Gateway traffic","Use NAT instances for lower traffic volumes"],resourceTypes:["AWS::EC2::NatGateway"]},"security-group-unrestricted-ingress":{ruleId:"security-group-unrestricted-ingress",checkKey:"securityGroups",name:"Security Group Unrestricted Ingress",description:"Detects security groups with unrestricted ingress (0.0.0.0/0).",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Restrict ingress to specific IP ranges","Use security group references for internal traffic","Implement least privilege network access"],resourceTypes:["AWS::EC2::SecurityGroup"]},"ebs-volume-unencrypted":{ruleId:"ebs-volume-unencrypted",checkKey:"ebsVolumes",name:"EBS Volume Unencrypted",description:"Detects EBS volumes without encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Enable EBS encryption by default in account settings","Use KMS customer managed keys for additional control"],resourceTypes:["AWS::EC2::Volume"]},"ec2-subnet-auto-public-ip":{ruleId:"ec2-subnet-auto-public-ip",checkKey:"ec2SubnetAutoPublicIp",name:"EC2 Subnet Auto-Assigns Public IPs",description:"Detects AWS::EC2::Subnet resources with MapPublicIpOnLaunch=true. Instances launched into the subnet inherit a public IP by default, which makes them internet-reachable without an explicit opt-in at the ENI level.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set MapPublicIpOnLaunch to false unless this is intentionally a public subnet","Have instances opt into a public IP via the ENI configuration when needed","Use VPC endpoints / NAT for outbound access from private subnets"],resourceTypes:["AWS::EC2::Subnet"]},"ec2-instance-public-ip":{ruleId:"ec2-instance-public-ip",checkKey:"ec2PublicIp",name:"EC2 Instance Public IP",description:"Detects EC2 instances whose NetworkInterfaces specify AssociatePublicIpAddress=true, exposing the instance directly to the internet.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Set AssociatePublicIpAddress to false on the NetworkInterface","Place the instance in a private subnet and use a NAT Gateway / VPC endpoint for outbound","Use an ALB / NLB in a public subnet to front the workload instead"],resourceTypes:["AWS::EC2::Instance"]},"cloudfront-https-only":{ruleId:"cloudfront-https-only",checkKey:"cloudFrontHttpsOnly",name:"CloudFront HTTPS Only",description:"Detects CloudFront distributions allowing HTTP traffic.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set ViewerProtocolPolicy to https-only or redirect-to-https","Configure custom SSL certificate"],resourceTypes:["AWS::CloudFront::Distribution"]},"cloudfront-waf-missing":{ruleId:"cloudfront-waf-missing",checkKey:"cloudFrontWafAssociation",name:"CloudFront WAF Missing",description:"Detects CloudFront distributions without WAF association.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-awswaf.html",complianceFrameworks:["SOC2","PCI-DSS","NIST"],remediationSteps:["Associate AWS WAF web ACL with CloudFront distribution","Configure WAF rules for common attack patterns"],resourceTypes:["AWS::CloudFront::Distribution"]},"cloudfront-logging-disabled":{ruleId:"cloudfront-logging-disabled",checkKey:"cloudFrontLogging",name:"CloudFront Logging Disabled",description:"Detects CloudFront distributions without access logging.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable standard logging to S3","Consider real-time logs for detailed analysis"],resourceTypes:["AWS::CloudFront::Distribution"]},"cloudfront-tls-outdated":{ruleId:"cloudfront-tls-outdated",checkKey:"cloudFrontTls",name:"CloudFront TLS Outdated",description:"Detects CloudFront distributions using outdated TLS versions.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/secure-connections-supported-viewer-protocols-ciphers.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set MinimumProtocolVersion to TLSv1.2_2021 or higher","Use a custom SSL certificate"],resourceTypes:["AWS::CloudFront::Distribution"]},"elb-deletion-protection-disabled":{ruleId:"elb-deletion-protection-disabled",checkKey:"elbDeletionProtection",name:"ELB Deletion Protection Disabled",description:"Detects load balancers without deletion protection.",severity:"MEDIUM",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html#deletion-protection",remediationSteps:["Enable deletion protection for production load balancers","Use CloudFormation DeletionPolicy: Retain"],resourceTypes:["AWS::ElasticLoadBalancingV2::LoadBalancer"]},"elb-logging-disabled":{ruleId:"elb-logging-disabled",checkKey:"elbLogging",name:"ELB Logging Disabled",description:"Detects load balancers without access logging.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable access logging to S3","Configure log retention policy"],resourceTypes:["AWS::ElasticLoadBalancingV2::LoadBalancer"]},"elb-https-listeners-missing":{ruleId:"elb-https-listeners-missing",checkKey:"elbHttpsListeners",name:"ELB HTTPS Listeners Missing",description:"Detects load balancers with HTTP listeners not redirecting to HTTPS.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Add HTTPS listener with valid SSL certificate","Configure HTTP to HTTPS redirect"],resourceTypes:["AWS::ElasticLoadBalancingV2::Listener"]},"elb-security-policy-outdated":{ruleId:"elb-security-policy-outdated",checkKey:"elbSecurityPolicy",name:"ELB Security Policy Outdated",description:"Detects load balancers using outdated TLS security policies.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Update to ELBSecurityPolicy-TLS13-1-2-2021-06 or newer","Remove support for deprecated protocols"],resourceTypes:["AWS::ElasticLoadBalancingV2::Listener"]},"ecs-secrets-plaintext":{ruleId:"ecs-secrets-plaintext",checkKey:"ecsSecrets",name:"ECS Secrets in Plaintext",description:"Detects ECS task definitions with sensitive data in plaintext environment variables.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Use secrets property with Secrets Manager ARN","Use SSM Parameter Store SecureString"],resourceTypes:["AWS::ECS::TaskDefinition"]},"ecs-logging-disabled":{ruleId:"ecs-logging-disabled",checkKey:"ecsLogging",name:"ECS Logging Disabled",description:"Detects ECS task definitions without logging configured.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_awslogs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Configure awslogs log driver","Set up CloudWatch log groups with retention"],resourceTypes:["AWS::ECS::TaskDefinition"]},"ecs-service-connect-access-logs-missing":{ruleId:"ecs-service-connect-access-logs-missing",checkKey:"ecsServiceConnectLogs",name:"ECS Service Connect Access Logs Missing",description:"Detects ECS services with Service Connect enabled but no access log configuration, leaving inter-service traffic unaudited.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-connect-logging.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set ServiceConnectConfiguration.LogConfiguration with a LogDriver such as awslogs","Send Service Connect logs to a CloudWatch log group with a retention policy","Confirm log group encryption is configured for sensitive workloads"],resourceTypes:["AWS::ECS::Service"]},"ecs-resources-missing":{ruleId:"ecs-resources-missing",checkKey:"ecsResources",name:"ECS Resource Limits Missing",description:"Detects ECS task definitions without CPU/memory limits.",severity:"LOW",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#task_size",remediationSteps:["Set CPU and memory at task level for Fargate","Set container-level memory limits for EC2"],resourceTypes:["AWS::ECS::TaskDefinition"]},"cognito-password-policy-weak":{ruleId:"cognito-password-policy-weak",checkKey:"cognitoPasswordPolicy",name:"Cognito Password Policy Weak",description:"Detects Cognito user pools with weak password policies.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-policies.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set minimum password length to at least 12 characters","Require uppercase, lowercase, numbers, and symbols"],resourceTypes:["AWS::Cognito::UserPool"]},"cognito-mfa-disabled":{ruleId:"cognito-mfa-disabled",checkKey:"cognitoMfa",name:"Cognito MFA Disabled",description:"Detects Cognito user pools without MFA enabled.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-mfa.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable MFA (OPTIONAL or ON)","Configure SMS or TOTP as MFA method"],resourceTypes:["AWS::Cognito::UserPool"]},"cognito-advanced-security-disabled":{ruleId:"cognito-advanced-security-disabled",checkKey:"cognitoAdvancedSecurity",name:"Cognito Advanced Security Disabled",description:"Detects Cognito user pools without advanced security features.",severity:"LOW",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html",complianceFrameworks:["SOC2","NIST"],remediationSteps:["Enable advanced security mode (AUDIT or ENFORCED)","Configure risk-based adaptive authentication"],resourceTypes:["AWS::Cognito::UserPool"]},"api-gateway-method-auth-missing":{ruleId:"api-gateway-method-auth-missing",checkKey:"apiGatewayMethodAuth",name:"API Gateway Method Has No Authorization",description:"Detects AWS::ApiGateway::Method and AWS::ApiGatewayV2::Route resources where AuthorizationType is missing or NONE (excluding OPTIONS preflight). Public-by-default endpoints expose backend Lambdas to anyone on the internet.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set AuthorizationType to AWS_IAM, COGNITO_USER_POOLS, or CUSTOM (REST APIs)","Use JWT or AWS_IAM AuthorizationType for HTTP APIs (v2)","If the route is intentionally public (e.g. webhook receiver), prefer api-key + WAF rate limiting and suppress this rule explicitly"],resourceTypes:["AWS::ApiGateway::Method","AWS::ApiGatewayV2::Route"]},"api-gateway-logging-disabled":{ruleId:"api-gateway-logging-disabled",checkKey:"apiGateway",name:"API Gateway Logging Disabled",description:"Detects API Gateway stages without logging enabled.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-logging.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable CloudWatch logging for API stages","Configure access logging for request/response details"],resourceTypes:["AWS::ApiGateway::Stage","AWS::ApiGatewayV2::Stage"]},"secrets-manager-rotation-disabled":{ruleId:"secrets-manager-rotation-disabled",checkKey:"secretsManager",name:"Secrets Manager Rotation Disabled",description:"Detects secrets without automatic rotation configured.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable automatic rotation","Set rotation schedule (e.g., every 30 days)"],resourceTypes:["AWS::SecretsManager::Secret"]},"cloudtrail-logging-disabled":{ruleId:"cloudtrail-logging-disabled",checkKey:"cloudTrailLogging",name:"CloudTrail Logging Disabled",description:"Detects CloudTrail trails with logging disabled.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-getting-started.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Ensure IsLogging is enabled","Configure multi-region trails","Enable log file validation"],resourceTypes:["AWS::CloudTrail::Trail"]},"eventbridge-bus-policy-wildcard-principal":{ruleId:"eventbridge-bus-policy-wildcard-principal",checkKey:"eventBusPolicy",name:"EventBridge Bus Policy Allows Wildcard Principal",description:"Detects AWS::Events::EventBusPolicy with an Allow statement targeting Principal=* (or AWS=*) without a Condition restricting access. Without the condition, any AWS account can publish events to the bus.",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-bus-perms.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Replace wildcard Principal with specific 12-digit AWS account IDs","Or scope the policy with a Condition such as aws:PrincipalOrgID","Verify the StatementId is descriptive \u2014 easier to audit later"],resourceTypes:["AWS::Events::EventBusPolicy"]},"eventbridge-dlq-missing":{ruleId:"eventbridge-dlq-missing",checkKey:"eventBridgeRules",name:"EventBridge DLQ Missing",description:"Detects EventBridge rules without dead letter queue.",severity:"LOW",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rule-dlq.html",remediationSteps:["Configure dead letter queue for failed event delivery","Set up monitoring for DLQ messages"],resourceTypes:["AWS::Events::Rule"]},"kms-key-rotation-disabled":{ruleId:"kms-key-rotation-disabled",checkKey:"kmsKeys",name:"KMS Key Rotation Disabled",description:"Detects KMS keys without automatic rotation.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Enable automatic key rotation","Key rotation occurs annually"],resourceTypes:["AWS::KMS::Key"]},"sns-encryption-disabled":{ruleId:"sns-encryption-disabled",checkKey:"sns",name:"SNS Encryption Disabled",description:"Detects SNS topics without encryption.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable server-side encryption with KMS","Use customer managed keys for additional control"],resourceTypes:["AWS::SNS::Topic"]},"sqs-encryption-disabled":{ruleId:"sqs-encryption-disabled",checkKey:"sqs",name:"SQS Encryption Disabled",description:"Detects SQS queues without encryption.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable server-side encryption with KMS","Use SQS-managed keys (SSE-SQS) or customer managed keys"],resourceTypes:["AWS::SQS::Queue"]},"stepfunctions-logging-disabled":{ruleId:"stepfunctions-logging-disabled",checkKey:"stepFunctions",name:"Step Functions Logging Disabled",description:"Detects Step Functions state machines without logging.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/step-functions/latest/dg/cw-logs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable CloudWatch Logs for state machine execution","Set appropriate log level (ALL, ERROR, FATAL, OFF)"],resourceTypes:["AWS::StepFunctions::StateMachine"]},"acm-certificate-email-validation":{ruleId:"acm-certificate-email-validation",checkKey:"acmValidation",name:"ACM Certificate Validation Hardening",description:"Detects ACM certificates using email validation or with certificate transparency logging disabled.",severity:"LOW",wafPillar:"Security",complianceFrameworks:["SOC2","NIST"],awsDocUrl:"https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html",remediationSteps:["Use DNS validation for automated certificate renewal","Enable certificate transparency logging to detect misissuance"],resourceTypes:["AWS::CertificateManager::Certificate"]},"appsync-api-key-auth":{ruleId:"appsync-api-key-auth",checkKey:"appSyncAuth",name:"AppSync API Key Authentication",description:"Detects AppSync APIs using API key authentication or lacking additional authentication providers.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/appsync/latest/devguide/security-authz.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Use AWS_IAM, Cognito User Pools, or OIDC for production workloads","Configure AdditionalAuthenticationProviders for client flexibility"],resourceTypes:["AWS::AppSync::GraphQLApi"]},"appsync-logging-disabled":{ruleId:"appsync-logging-disabled",checkKey:"appSyncLogging",name:"AppSync Logging Disabled",description:"Detects AppSync APIs without logging, field-level logging, or X-Ray tracing.",severity:"MEDIUM",wafPillar:"Operational Excellence",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],awsDocUrl:"https://docs.aws.amazon.com/appsync/latest/devguide/monitoring.html",remediationSteps:["Configure LogConfig to capture request/response logs in CloudWatch","Set FieldLogLevel to ERROR or ALL for resolver execution detail","Enable XrayEnabled for distributed tracing"],resourceTypes:["AWS::AppSync::GraphQLApi"]},"appsync-waf-missing":{ruleId:"appsync-waf-missing",checkKey:"appSyncWaf",name:"AppSync WAF Missing",description:"Detects AppSync APIs without an associated AWS WAF WebACL.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/appsync/latest/devguide/WAF-Integration.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Associate a WAFv2 WebACL with the AppSync API","Define rules to protect against common web exploits"],resourceTypes:["AWS::AppSync::GraphQLApi","AWS::WAFv2::WebACLAssociation"]},"backup-plan-misconfigured":{ruleId:"backup-plan-misconfigured",checkKey:"backupPlans",name:"Backup Plan Misconfigured",description:"Detects Backup plan rules without cross-region copy or lifecycle configuration.",severity:"LOW",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/aws-backup/latest/devguide/about-backup-plans.html",remediationSteps:["Add CopyActions to replicate backups cross-region for DR","Set DeleteAfterDays / MoveToColdStorageAfterDays to manage retention and cost"],resourceTypes:["AWS::Backup::BackupPlan"]},"backup-vault-hardening":{ruleId:"backup-vault-hardening",checkKey:"backupVault",name:"Backup Vault Hardening",description:"Detects Backup vaults using AWS-managed keys or without a vault lock for compliance.",severity:"LOW",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/aws-backup/latest/devguide/vaultlock.html",complianceFrameworks:["SOC2","HIPAA","NIST"],remediationSteps:["Specify a customer-managed KMS key via EncryptionKeyArn","Add a BackupVaultLock to enforce retention and prevent deletion"],resourceTypes:["AWS::Backup::BackupVault","AWS::Backup::BackupVaultLock"]},"cloudwatch-alarm-actions-missing":{ruleId:"cloudwatch-alarm-actions-missing",checkKey:"cloudWatchAlarms",name:"CloudWatch Alarm Actions Missing",description:"Detects CloudWatch Alarms without alarm actions or missing-data handling.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html",remediationSteps:["Add AlarmActions (SNS, Lambda, SSM) for state-change notifications","Set TreatMissingData to define behaviour for missing data points"],resourceTypes:["AWS::CloudWatch::Alarm"]},"cloudwatch-logs-encryption-disabled":{ruleId:"cloudwatch-logs-encryption-disabled",checkKey:"cloudWatchEncryption",name:"CloudWatch Logs Encryption Disabled",description:"Detects CloudWatch Log Groups not encrypted with a customer-managed KMS key.",severity:"LOW",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set KmsKeyId on the LogGroup to encrypt with a customer-managed key"],resourceTypes:["AWS::Logs::LogGroup"]},"cloudwatch-logs-retention-missing":{ruleId:"cloudwatch-logs-retention-missing",checkKey:"cloudWatchLogRetention",name:"CloudWatch Logs Retention Missing",description:"Detects CloudWatch Log Groups without an explicit retention period (logs retained indefinitely).",severity:"MEDIUM",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html",remediationSteps:["Set RetentionInDays to control storage cost (30\u201390 days for ops, longer for compliance)"],resourceTypes:["AWS::Logs::LogGroup"]},"ecr-mutable-tags":{ruleId:"ecr-mutable-tags",checkKey:"ecrImmutableTags",name:"ECR Mutable Image Tags",description:"Detects ECR repositories that allow image tags to be overwritten.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-tag-mutability.html",complianceFrameworks:["SOC2","PCI-DSS","NIST"],remediationSteps:["Set ImageTagMutability to IMMUTABLE"],resourceTypes:["AWS::ECR::Repository"]},"ecr-lifecycle-policy-missing":{ruleId:"ecr-lifecycle-policy-missing",checkKey:"ecrLifecycle",name:"ECR Lifecycle Policy Missing",description:"Detects ECR repositories without a lifecycle policy to clean up old images.",severity:"MEDIUM",wafPillar:"Cost Optimization",awsDocUrl:"https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html",remediationSteps:["Define a LifecyclePolicy to expire untagged or excess image versions"],resourceTypes:["AWS::ECR::Repository"]},"ecr-scan-on-push-disabled":{ruleId:"ecr-scan-on-push-disabled",checkKey:"ecrScanning",name:"ECR Scan-on-Push Disabled",description:"Detects ECR repositories without image vulnerability scanning on push.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable ScanOnPush in ImageScanningConfiguration","Or use enhanced scanning at the registry level"],resourceTypes:["AWS::ECR::Repository"]},"eks-secrets-encryption-disabled":{ruleId:"eks-secrets-encryption-disabled",checkKey:"eksEncryption",name:"EKS Secrets Encryption Disabled",description:"Detects EKS clusters without envelope encryption for Kubernetes secrets in etcd.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/eks/latest/userguide/enable-kms.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:['Configure EncryptionConfig with a KMS key referencing resources: ["secrets"]'],resourceTypes:["AWS::EKS::Cluster"]},"eks-control-plane-logging-disabled":{ruleId:"eks-control-plane-logging-disabled",checkKey:"eksLogging",name:"EKS Control Plane Logging Disabled",description:"Detects EKS clusters with no control plane log types enabled.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable api, audit, authenticator, controllerManager, and scheduler logs"],resourceTypes:["AWS::EKS::Cluster"]},"eks-public-endpoint-unrestricted":{ruleId:"eks-public-endpoint-unrestricted",checkKey:"eksPublicEndpoint",name:"EKS Public Endpoint Unrestricted",description:"Detects EKS clusters with the API endpoint reachable from 0.0.0.0/0 or only via the public network.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable EndpointPrivateAccess for in-VPC node communication","Restrict PublicAccessCidrs to known administrative IP ranges"],resourceTypes:["AWS::EKS::Cluster"]},"elasticache-auth-token-missing":{ruleId:"elasticache-auth-token-missing",checkKey:"elastiCacheAuth",name:"ElastiCache AUTH Token Missing",description:"Detects Redis replication groups with transit encryption but no AUTH token configured.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/auth.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set AuthToken to require Redis client authentication"],resourceTypes:["AWS::ElastiCache::ReplicationGroup"]},"elasticache-encryption-disabled":{ruleId:"elasticache-encryption-disabled",checkKey:"elastiCacheEncryption",name:"ElastiCache Encryption Disabled",description:"Detects ElastiCache clusters without at-rest or in-transit encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/at-rest-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set AtRestEncryptionEnabled: true","Set TransitEncryptionEnabled: true"],resourceTypes:["AWS::ElastiCache::ReplicationGroup","AWS::ElastiCache::CacheCluster"]},"elasticache-failover-disabled":{ruleId:"elasticache-failover-disabled",checkKey:"elastiCacheFailover",name:"ElastiCache Automatic Failover Disabled",description:"Detects ElastiCache replication groups without automatic failover or Multi-AZ.",severity:"MEDIUM",wafPillar:"Reliability",complianceFrameworks:["SOC2","HIPAA"],awsDocUrl:"https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/AutoFailover.html",remediationSteps:["Enable AutomaticFailoverEnabled","Enable MultiAZEnabled to span availability zones"],resourceTypes:["AWS::ElastiCache::ReplicationGroup"]},"glue-connection-network-isolation":{ruleId:"glue-connection-network-isolation",checkKey:"glueConnections",name:"Glue Connection Network Isolation",description:"Detects Glue JDBC connections without VPC subnet placement or SSL enforcement.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/glue/latest/dg/setup-vpc-for-glue-access.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set PhysicalConnectionRequirements with SubnetId and SecurityGroupIdList","Include SSL parameters in the JDBC connection URL"],resourceTypes:["AWS::Glue::Connection"]},"glue-job-encryption-missing":{ruleId:"glue-job-encryption-missing",checkKey:"glueEncryption",name:"Glue Job Encryption Missing",description:"Detects Glue jobs without an attached SecurityConfiguration for encrypting bookmarks, S3 data, and CloudWatch logs.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/glue/latest/dg/encryption-security-configuration.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Create a SecurityConfiguration enabling KMS encryption for all targets","Reference it via the job's SecurityConfiguration property"],resourceTypes:["AWS::Glue::Job"]},"kinesis-encryption-disabled":{ruleId:"kinesis-encryption-disabled",checkKey:"kinesisEncryption",name:"Kinesis Encryption Disabled",description:"Detects Kinesis Data Streams without server-side KMS encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/streams/latest/dev/server-side-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set StreamEncryption with EncryptionType: KMS and a KeyId"],resourceTypes:["AWS::Kinesis::Stream"]},"kinesis-retention-minimum":{ruleId:"kinesis-retention-minimum",checkKey:"kinesisRetention",name:"Kinesis Minimum Retention",description:"Detects Kinesis Data Streams using the default 24-hour retention period.",severity:"LOW",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/streams/latest/dev/kinesis-extended-retention.html",remediationSteps:["Increase RetentionPeriodHours to support replay/reprocessing during incidents"],resourceTypes:["AWS::Kinesis::Stream"]},"lambda-runtime-deprecated":{ruleId:"lambda-runtime-deprecated",checkKey:"lambdaRuntime",name:"Lambda Deprecated Runtime",description:"Detects Lambda functions using runtimes that have reached or are approaching end-of-life.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html",complianceFrameworks:["SOC2","PCI-DSS","NIST"],remediationSteps:["Upgrade to a currently supported runtime","Track AWS Lambda runtime deprecation announcements"],resourceTypes:["AWS::Lambda::Function"]},"msk-client-authentication-missing":{ruleId:"msk-client-authentication-missing",checkKey:"mskAuth",name:"MSK Client Authentication Missing",description:"Detects MSK clusters without client authentication or that allow unauthenticated access.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/msk/latest/developerguide/kafka_apis_iam.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable SASL/SCRAM, IAM auth, or mTLS in ClientAuthentication","Disable Unauthenticated access"],resourceTypes:["AWS::MSK::Cluster"]},"msk-encryption-weak":{ruleId:"msk-encryption-weak",checkKey:"mskEncryption",name:"MSK Encryption Weak",description:"Detects MSK clusters without TLS for client-broker traffic, without inter-broker encryption, or using AWS-managed keys for at-rest encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/msk/latest/developerguide/msk-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set ClientBroker to TLS in EncryptionInTransit","Set InCluster to true in EncryptionInTransit","Specify DataVolumeKMSKeyId for at-rest encryption"],resourceTypes:["AWS::MSK::Cluster"]},"msk-broker-logging-disabled":{ruleId:"msk-broker-logging-disabled",checkKey:"mskLogging",name:"MSK Broker Logging Disabled",description:"Detects MSK clusters without broker logs configured.",severity:"MEDIUM",wafPillar:"Operational Excellence",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],awsDocUrl:"https://docs.aws.amazon.com/msk/latest/developerguide/msk-logging.html",remediationSteps:["Enable broker logs to CloudWatch Logs, Firehose, or S3"],resourceTypes:["AWS::MSK::Cluster"]},"opensearch-access-control-weak":{ruleId:"opensearch-access-control-weak",checkKey:"openSearchAccessControl",name:"OpenSearch Access Control Weak",description:"Detects OpenSearch domains without fine-grained access control or VPC placement.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable AdvancedSecurityOptions","Configure VPCOptions to deploy the domain inside a VPC"],resourceTypes:["AWS::OpenSearchService::Domain","AWS::Elasticsearch::Domain"]},"opensearch-encryption-disabled":{ruleId:"opensearch-encryption-disabled",checkKey:"openSearchEncryption",name:"OpenSearch Encryption Disabled",description:"Detects OpenSearch domains without at-rest encryption or node-to-node encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/encryption-at-rest.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable EncryptionAtRestOptions with a KMS key","Enable NodeToNodeEncryptionOptions"],resourceTypes:["AWS::OpenSearchService::Domain","AWS::Elasticsearch::Domain"]},"opensearch-logging-disabled":{ruleId:"opensearch-logging-disabled",checkKey:"openSearchLogging",name:"OpenSearch Logging Disabled",description:"Detects OpenSearch domains without audit logs or application logs published to CloudWatch.",severity:"LOW",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/opensearch-service/latest/developerguide/audit-logs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Enable AUDIT_LOGS in LogPublishingOptions","Enable ES_APPLICATION_LOGS in LogPublishingOptions"],resourceTypes:["AWS::OpenSearchService::Domain","AWS::Elasticsearch::Domain"]},"redshift-encryption-disabled":{ruleId:"redshift-encryption-disabled",checkKey:"redshiftEncryption",name:"Redshift Encryption Disabled",description:"Detects Redshift clusters without at-rest encryption.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-db-encryption.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set Encrypted: true and specify a KmsKeyId"],resourceTypes:["AWS::Redshift::Cluster"]},"redshift-audit-logging-disabled":{ruleId:"redshift-audit-logging-disabled",checkKey:"redshiftLogging",name:"Redshift Audit Logging Disabled",description:"Detects Redshift clusters without audit logging to S3 (connection, user, query activity).",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set LoggingProperties with a target S3 bucket and key prefix"],resourceTypes:["AWS::Redshift::Cluster"]},"redshift-publicly-accessible":{ruleId:"redshift-publicly-accessible",checkKey:"redshiftPublicAccess",name:"Redshift Publicly Accessible",description:"Detects Redshift clusters reachable from the public internet.",severity:"CRITICAL",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-vpc.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Set PubliclyAccessible: false","Use VPC endpoints, bastion hosts, or VPN for access"],resourceTypes:["AWS::Redshift::Cluster"]},"route53-dnssec-disabled":{ruleId:"route53-dnssec-disabled",checkKey:"route53Dnssec",name:"Route 53 DNSSEC Disabled",description:"Detects Route 53 hosted zones without DNSSEC signing enabled.",severity:"LOW",wafPillar:"Security",complianceFrameworks:["SOC2","NIST"],awsDocUrl:"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-configuring-dnssec.html",remediationSteps:["Create an AWS::Route53::DNSSEC resource for the hosted zone","Configure a key-signing key (KSK)"],resourceTypes:["AWS::Route53::HostedZone","AWS::Route53::DNSSEC"]},"route53-health-check-suboptimal":{ruleId:"route53-health-check-suboptimal",checkKey:"route53HealthChecks",name:"Route 53 Health Check Suboptimal",description:"Detects Route 53 health checks using HTTP instead of HTTPS or the standard request interval.",severity:"LOW",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover.html",remediationSteps:["Use HTTPS to validate certificate and endpoint security","Use a 10-second request interval for critical endpoints"],resourceTypes:["AWS::Route53::HealthCheck"]},"route53-query-logging-disabled":{ruleId:"route53-query-logging-disabled",checkKey:"route53QueryLogging",name:"Route 53 Query Logging Disabled",description:"Detects Route 53 hosted zones without query logging.",severity:"LOW",wafPillar:"Security",complianceFrameworks:["SOC2","HIPAA","NIST"],awsDocUrl:"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/query-logs.html",remediationSteps:["Create an AWS::Route53::QueryLoggingConfig pointing to a CloudWatch Logs group"],resourceTypes:["AWS::Route53::HostedZone","AWS::Route53::QueryLoggingConfig"]},"vpc-default-security-group-rules-present":{ruleId:"vpc-default-security-group-rules-present",checkKey:"vpcDefaultSecurityGroup",name:"VPC Default Security Group Has Rules",description:"Detects default VPC security groups with ingress or egress rules; defaults should be empty.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/vpc/latest/userguide/default-security-group.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Remove all rules from the default security group","Use purpose-built security groups instead"],resourceTypes:["AWS::EC2::SecurityGroup"]},"vpc-flow-logs-missing":{ruleId:"vpc-flow-logs-missing",checkKey:"vpcFlowLogs",name:"VPC Flow Logs Missing",description:"Detects VPCs without flow logs configured.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","CIS","NIST"],remediationSteps:["Create an AWS::EC2::FlowLog resource targeting the VPC","Send logs to CloudWatch Logs or S3"],resourceTypes:["AWS::EC2::VPC","AWS::EC2::FlowLog"]},"waf-logging-disabled":{ruleId:"waf-logging-disabled",checkKey:"wafLogging",name:"WAF Logging Disabled",description:"Detects WAFv2 WebACLs without logging configuration for analysed requests.",severity:"MEDIUM",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/waf/latest/developerguide/logging.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Create an AWS::WAFv2::LoggingConfiguration for the WebACL"],resourceTypes:["AWS::WAFv2::WebACL","AWS::WAFv2::LoggingConfiguration"]},"autoscaling-group-no-elb-healthcheck":{ruleId:"autoscaling-group-no-elb-healthcheck",checkKey:"autoScalingGroupHealthCheck",name:"AutoScaling Group Not Using ELB Health Checks",description:"Detects AWS::AutoScaling::AutoScalingGroup resources attached to a load balancer (LoadBalancerNames or TargetGroupARNs) but using EC2 health checks. EC2 health checks miss app-level outages the load balancer would otherwise detect.",severity:"MEDIUM",wafPillar:"Reliability",awsDocUrl:"https://docs.aws.amazon.com/autoscaling/ec2/userguide/healthcheck.html",remediationSteps:["Set HealthCheckType to ELB on the AutoScalingGroup","Set HealthCheckGracePeriod to give instances time to bootstrap before the LB starts probing","Verify the ALB / NLB target group has appropriate health-check thresholds"],resourceTypes:["AWS::AutoScaling::AutoScalingGroup"]},"autoscaling-launch-config-public-ip":{ruleId:"autoscaling-launch-config-public-ip",checkKey:"autoScalingLaunchConfigPublicIp",name:"AutoScaling LaunchConfiguration Assigns Public IP",description:"Detects AWS::AutoScaling::LaunchConfiguration with AssociatePublicIpAddress=true. Instances launched from this configuration get a public IP and are internet-reachable directly.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroupExamples.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set AssociatePublicIpAddress to false on the LaunchConfiguration","Place instances in private subnets behind an ALB / NLB","Use a NAT Gateway / VPC endpoints for outbound traffic","Migrate to AWS::EC2::LaunchTemplate (LaunchConfiguration is deprecated)"],resourceTypes:["AWS::AutoScaling::LaunchConfiguration"]},"efs-encryption-disabled":{ruleId:"efs-encryption-disabled",checkKey:"efsEncryption",name:"EFS Encryption Disabled",description:"Detects AWS::EFS::FileSystem resources without Encrypted=true. The CFN default is unencrypted (unlike the EFS console default), and encryption can only be enabled at filesystem creation.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/efs/latest/ug/encryption-at-rest.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Set Encrypted to true on the AWS::EFS::FileSystem resource","Provide KmsKeyId pointing at a customer-managed KMS key for additional control","For existing unencrypted filesystems, migrate data to a new encrypted filesystem"],resourceTypes:["AWS::EFS::FileSystem"]},"waf-webacl-misconfigured":{ruleId:"waf-webacl-misconfigured",checkKey:"wafWebAcl",name:"WAF WebACL Misconfigured",description:"Detects WAFv2 WebACLs with no rules, default Allow action, or CloudWatch metrics disabled.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/waf/latest/developerguide/web-acl.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Add WAF rules covering the OWASP Top 10 baseline","Set DefaultAction to Block for defence-in-depth","Enable CloudWatchMetricsEnabled in VisibilityConfig"],resourceTypes:["AWS::WAFv2::WebACL"]},"cross-resource-misconfiguration":{ruleId:"cross-resource-misconfiguration",checkKey:"crossResourceRelationships",name:"Cross-Resource Misconfiguration",description:"Detects misconfigurations only visible across multiple resources: Lambda functions referencing VPC-only resources without VpcConfig, S3 replication without encryption configuration, and security groups exposing non-standard ports to the public when used by sensitive services.",severity:"HIGH",wafPillar:"Security",awsDocUrl:"https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/welcome.html",complianceFrameworks:["SOC2","HIPAA","PCI-DSS","NIST"],remediationSteps:["Configure VpcConfig on Lambda functions that reach VPC-only resources (RDS, ElastiCache, Redshift, OpenSearch, ECS Service)","Specify EncryptionConfiguration on S3 replication rules so replicated objects retain encryption at the destination","Restrict 0.0.0.0/0 ingress on non-standard ports for security groups attached to sensitive services"],resourceTypes:["AWS::Lambda::Function","AWS::S3::Bucket","AWS::EC2::SecurityGroup","AWS::RDS::DBInstance","AWS::ElastiCache::CacheCluster","AWS::Redshift::Cluster","AWS::OpenSearchService::Domain","AWS::Elasticsearch::Domain","AWS::ECS::Service"]},"stack-architecture-recommendations":{ruleId:"stack-architecture-recommendations",checkKey:"stackArchitecture",name:"Stack Architecture Recommendations",description:"Detects architectural omissions across the stack: missing CloudWatch Alarms on critical resources, Lambda functions without X-Ray tracing, public-facing resources without WAF, RDS databases without Secrets Manager rotation, and excessive NAT Gateway usage.",severity:"MEDIUM",wafPillar:"Operational Excellence",awsDocUrl:"https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html",remediationSteps:["Add CloudWatch Alarms on key metrics (Lambda errors, ECS task failures, RDS connections)","Enable X-Ray tracing on Lambda functions for distributed-request visibility","Associate AWS WAF with public-facing API Gateway, ALB, or CloudFront distributions","Use Secrets Manager with automatic rotation for RDS database credentials","Audit NAT Gateway count and consider VPC endpoints or NAT instances for cost reduction"],resourceTypes:["AWS::Lambda::Function","AWS::ApiGateway::RestApi","AWS::ApiGatewayV2::Api","AWS::ElasticLoadBalancingV2::LoadBalancer","AWS::CloudFront::Distribution","AWS::RDS::DBInstance","AWS::EC2::NatGateway","AWS::CloudWatch::Alarm"]}};var $W=(()=>{let t=new Map;for(let e of Object.values(nu))e.checkKey&&e.ruleId&&t.set(e.checkKey,e.ruleId);return t})(),jW={IAM:["AWS::IAM::"],S3:["AWS::S3::"],Lambda:["AWS::Lambda::"],DynamoDB:["AWS::DynamoDB::"],RDS:["AWS::RDS::"],EC2:["AWS::EC2::"],SNS:["AWS::SNS::"],SQS:["AWS::SQS::"],StepFunctions:["AWS::StepFunctions::"],CloudTrail:["AWS::CloudTrail::"],ApiGateway:["AWS::ApiGateway::","AWS::ApiGatewayV2::"],SecretsManager:["AWS::SecretsManager::"],KMS:["AWS::KMS::"],EventBridge:["AWS::Events::"],CloudFront:["AWS::CloudFront::"],ELB:["AWS::ElasticLoadBalancing::","AWS::ElasticLoadBalancingV2::"],ECS:["AWS::ECS::"],Cognito:["AWS::Cognito::"],WAF:["AWS::WAFv2::","AWS::WAF::"],CloudWatch:["AWS::CloudWatch::","AWS::Logs::"],Route53:["AWS::Route53::"],ElastiCache:["AWS::ElastiCache::"],ECR:["AWS::ECR::"],OpenSearch:["AWS::OpenSearchService::","AWS::Elasticsearch::"],ACM:["AWS::CertificateManager::"],Backup:["AWS::Backup::"],VPC:["AWS::EC2::VPC","AWS::EC2::FlowLog","AWS::EC2::SecurityGroup"],Kinesis:["AWS::Kinesis::"],AppSync:["AWS::AppSync::"],EKS:["AWS::EKS::"],Redshift:["AWS::Redshift::"],MSK:["AWS::MSK::"],Glue:["AWS::Glue::"],EFS:["AWS::EFS::"],AutoScaling:["AWS::AutoScaling::"]},sle=tu({ttl:3e5,maxSize:100});var UW=CR(vR,{ttl:6e5,maxSize:10}),GW=t=>{if(t.includes("All services")||t.length===0)return s=>!s.Type.startsWith("AWS::CDK::");let e=[];for(let s of t){if(s==="All services")continue;let n=jW[s];n&&e.push(...n)}return e.length===0?s=>!s.Type.startsWith("AWS::CDK::"):s=>!s.Type.startsWith("AWS::CDK::")&&e.some(n=>s.Type.startsWith(n))},HW=t=>{let e=new Map,s={CRITICAL:4,HIGH:3,MEDIUM:2,LOW:1};for(let n of t){let r=n.issue,i=e.get(r);i?s[n.severity]>s[i.severity]&&e.set(r,n):e.set(r,n)}return Array.from(e.values())},zW=(t,e,s,n)=>{let r={CRITICAL:0,HIGH:0,MEDIUM:0,LOW:0},i={},o=0;for(let a of Object.values(t))for(let c of a.issues){o++,r[c.severity]++;let u=c.ruleId?Dc(c.ruleId)??"Other":"Other";i[u]=(i[u]||0)+1}return{totalResources:e,analyzedResources:Object.keys(t).length,totalFindings:o,findingsBySeverity:r,findingsByService:i,analysisTimeMs:Date.now()-n,servicesAnalyzed:s}},ly=(t,e,s=[],n={},r=[],i)=>VW(t,e,{selectedServices:s,solutionsRegistry:n,deduplicateFindings:!0,includeStatistics:!1,customRules:r,ruleContext:i}).findings,VW=(t,e,s={})=>{let n=Date.now(),{selectedServices:r=[],solutionsRegistry:i={},deduplicateFindings:o=!0,customRules:a=[],ruleContext:c}=s,u=UW(),l=new Set(["solutionsPatterns","stackArchitecture","crossResourceRelationships"]),d=Object.keys(u).filter(C=>!l.has(C)),{services:p}=sd(r),f=m2(p,d),m={},g=GW(p),h=Object.keys(t.Resources||{}).length,x=Object.entries(t.Resources||{}).filter(([,C])=>g(C)).reduce((C,[I,E])=>(C[I]=E,C),{}),y=[];for(let C of f)try{let I=u[C];if(typeof I!="function"){let j=Dc(C)??C;qe.warn(`\u26A0\uFE0F Service check function for ${j} (${C}) is not available`);continue}let E=I({Resources:x},e,c);y.push(C);let w=$W.get(C);for(let[j,H]of Object.entries(E)){if(m[j]||(m[j]={issues:[]}),w)for(let z of H.issues)z.ruleId||(z.ruleId=w);m[j].issues.push(...H.issues)}}catch(I){let E=Dc(C)??C;qe.warn(`\u26A0\uFE0F Error in ${E} analysis (${C})`,{error:I instanceof Error?I.message:String(I)})}if(Object.keys(i).length>0)try{let C=u.solutionsPatterns({Resources:x},i);for(let I of C){let E=I.resourceId;m[E]||(m[E]={issues:[]}),m[E].issues.push(I)}}catch(C){qe.warn("\u26A0\uFE0F Error in solutions pattern analysis",{error:C instanceof Error?C.message:String(C)})}if(a.length>0)try{let C=DR(t,a,e);for(let[I,E]of Object.entries(C))m[I]||(m[I]={issues:[]}),m[I].issues.push(...E.issues);qe.info(`Custom rules evaluated: ${a.length} rule(s)`)}catch(C){qe.warn("\u26A0\uFE0F Error evaluating custom rules",{error:C instanceof Error?C.message:String(C)})}if(o)for(let C of Object.keys(m))m[C].issues=HW(m[C].issues);Object.keys(m).length===0&&qe.info(`\x1B[32m\u2705 No security or cost issues detected!\x1B[0m
228
228
  `);let b=[...new Set(y.map(C=>Dc(C)).filter(C=>C!==void 0))],S=zW(m,h,b,n);return{findings:m,statistics:S}};var xs=t=>t?JSON.stringify(t).length:0,wR=t=>{if(!t||typeof t!="object")return 0;let s=t.Statement;return Array.isArray(s)?s.length:s&&typeof s=="object"?1:0},yp=(t,e)=>{if(!t)return null;if(typeof t=="string"&&e.has(t))return t;if(typeof t!="object")return null;let s=t;if("Ref"in s&&typeof s.Ref=="string"&&e.has(s.Ref))return s.Ref;if("Fn::GetAtt"in s){let n=s["Fn::GetAtt"];if(Array.isArray(n)&&typeof n[0]=="string"&&e.has(n[0]))return n[0];if(typeof n=="string"){let r=n.split(".")[0];if(e.has(r))return r}}return null};var dr=t=>{if(!t||typeof t!="object")return[];let s=t.Statement;return Array.isArray(s)?s:s&&typeof s=="object"?[s]:[]},Ze=(t,e)=>e<=0?0:t/e,Be=t=>t<1024?`${t} bytes`:`${(t/1024).toFixed(1)}KB`,Ur=t=>{let s=(t.Properties||{}).Policies;return Array.isArray(s)?s.map(n=>({name:n.PolicyName||"unnamed",document:n.PolicyDocument})):[]};var Ue=(t,e)=>Object.entries(t).filter(([,s])=>s.Type===e),AR=t=>{let e=new Set(Object.keys(t)),s=new Map;for(let[n,r]of Object.entries(t)){if(r.Type!=="AWS::Events::Rule")continue;let o=(r.Properties||{}).Targets;if(Array.isArray(o))for(let a of o){let c=a.DeadLetterConfig;if(!c?.Arn)continue;let u=yp(c.Arn,e);if(!u)continue;let l=s.get(u)||[];l.push(n),s.set(u,l)}}return s},ER=t=>{let e=new Map;for(let[s,n]of Object.entries(t)){if(n.Type!=="AWS::Events::Rule")continue;let r=n.Properties||{},i="default";typeof r.EventBusName=="string"?i=r.EventBusName:r.EventBusName&&typeof r.EventBusName=="object"&&(i=JSON.stringify(r.EventBusName));let o=e.get(i)||[];o.push(s),e.set(i,o)}return e};var IR=(t,e,s)=>{let n=new Set(Object.keys(s)),r=e.Properties||{},i=r.SecurityGroupIngress||[],o=r.SecurityGroupEgress||[],a=Array.isArray(i)?i.length:0,c=Array.isArray(o)?o.length:0;for(let[,u]of Object.entries(s))u.Type==="AWS::EC2::SecurityGroupIngress"&&yp(u.Properties?.GroupId,n)===t&&a++,u.Type==="AWS::EC2::SecurityGroupEgress"&&yp(u.Properties?.GroupId,n)===t&&c++;return{inbound:a,outbound:c}};var kR=t=>{let e=t.Effect||"Allow",s=Array.isArray(t.Action)?[...t.Action].sort():typeof t.Action=="string"?[t.Action]:[],n=Array.isArray(t.Resource)?[...t.Resource].sort():typeof t.Resource=="string"?[t.Resource]:[];return`${e}|${s.join(",")}|${n.join(",")}`},RR=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::IAM::Role"),i=Ue(n,"AWS::IAM::Policy");for(let[o,a]of r){let c=a.Metadata?.["aws:cdk:path"]||o,u=[],l=Ur(a);for(let f of l){if(!f.document)continue;let m=dr(f.document);for(let g of m)u.push({key:kR(g),source:`inline policy "${f.name}"`})}for(let[,f]of i){let m=f.Properties||{},g=m.Roles;if(!Array.isArray(g)||!g.some(S=>typeof S=="string"?S===o:S&&typeof S=="object"?S.Ref===o:!1))continue;let x=m.PolicyDocument;if(!x)continue;let y=dr(x),b=m.PolicyName||"unnamed";for(let S of y)u.push({key:kR(S),source:`attached policy "${b}"`})}let d=new Map;for(let{key:f,source:m}of u){let g=d.get(f)||[];g.push(m),d.set(f,g)}let p=0;for(let[,f]of d)f.length>1&&(p+=f.length-1);p>0&&(s[o]||(s[o]={issues:[]}),s[o].issues.push(e(o,`IAM role has ${p} duplicate policy statement(s) across its inline and attached policies. Duplicate statements increase policy size without adding permissions.`,"Consolidate duplicate statements into a single policy. Review inline policies and attached AWS::IAM::Policy resources for overlapping Effect + Action + Resource combinations.","LOW","Security",c,"cdkInsights")))}return s};var qW=t=>{for(let[,e]of Object.entries(t)){let s=e.Metadata?.["aws:cdk:path"];if(s&&/prod/i.test(s))return!0;if(e.Metadata){for(let n of Object.values(e.Metadata))if(typeof n=="string"&&/prod/i.test(n))return!0}}return!1},FR=(t,e)=>{let s={},n=t.Resources||{},r=qW(n),i=[...Ue(n,"AWS::DynamoDB::Table"),...Ue(n,"AWS::DynamoDB::GlobalTable")];for(let[o,a]of i)if(!((a.Properties||{}).PointInTimeRecoverySpecification?.PointInTimeRecoveryEnabled===!0)){let d=a.Metadata?.["aws:cdk:path"]||o,p=r?"HIGH":"MEDIUM",f=r?" This appears to be a production stack, making data recovery capabilities especially important.":"";s[o]||(s[o]={issues:[]}),s[o].issues.push(e(o,`DynamoDB table does not have Point-in-Time Recovery (PITR) enabled.${f} Without PITR, accidental data deletions or corruption cannot be recovered.`,"Enable PointInTimeRecoverySpecification.PointInTimeRecoveryEnabled on this table to allow restoration to any point within the last 35 days.",p,"Reliability",d,"cdkInsights"))}return s};var _R=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::Events::Rule");for(let[i,o]of r){let c=(o.Properties||{}).Targets;if(!Array.isArray(c))continue;let u=o.Metadata?.["aws:cdk:path"]||i,l=[];for(let d=0;d<c.length;d++)c[d].DeadLetterConfig||l.push(d);l.length>0&&(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`EventBridge rule has ${l.length} target(s) without a DeadLetterConfig. Failed invocations will be silently dropped after exhausting retries.`,"Configure a DeadLetterConfig with an SQS queue on each target to capture failed invocations for debugging and reprocessing.","MEDIUM","Reliability",u,"cdkInsights")))}return s};var TR=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::Lambda::Function"),i=Ue(n,"AWS::Logs::LogGroup"),o=new Set;for(let[,a]of i){let c=a.Properties?.LogGroupName;typeof c=="string"&&o.add(c)}for(let[a,c]of r){let l=(c.Properties||{}).FunctionName;if(typeof l!="string")continue;let d=`/aws/lambda/${l}`;if(!o.has(d)){let p=c.Metadata?.["aws:cdk:path"]||a;s[a]||(s[a]={issues:[]}),s[a].issues.push(e(a,`Lambda function "${l}" does not have an explicit AWS::Logs::LogGroup resource. CloudWatch will auto-create a log group with no retention policy, leading to indefinite log retention and increased costs.`,"Define an explicit AWS::Logs::LogGroup with a RetentionInDays property for this Lambda function to control log retention and avoid unbounded storage costs.","LOW","Operational Excellence",p,"cdkInsights"))}}return s};var PR=(t,e)=>{let s={},n=t.Resources||{},r=AR(n);for(let[i,o]of r){let a=o.length;if(a<=10)continue;let u=n[i]?.Metadata?.["aws:cdk:path"]||i,l=a>15?"HIGH":"MEDIUM",d=a>15?`SQS queue is used as a shared DLQ by ${a} EventBridge rules. This many targets will cause CDK to auto-generate excessive per-target SQS policy statements, risking policy size limit breaches.`:`SQS queue is used as a shared DLQ by ${a} EventBridge rules. As more rules are added, CDK will auto-generate per-target SQS policy statements that may exceed the policy size limit.`;s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,d,"Use dedicated DLQs per rule group, or create a single consolidated SQS policy using Queue.fromQueueArn() to prevent CDK from auto-generating per-target policy statements.",l,"Reliability",u,"cdkInsights"))}return s};var LR=(t,e)=>{let s={},n=t.Resources||{},r=new Set,i,o,a=0;for(let[u,l]of Object.entries(n))(l.__appliedMixins??[]).some(f=>f.isCustom)&&(r.add(l.Type),a++,i||(i=u,o=l.Metadata?.["aws:cdk:path"]||u));if(r.size<3||!i)return s;let c=Array.from(r).sort().join(", ");return s[i]={issues:[]},s[i].issues.push(e(i,`A user-defined CDK Mixin appears on ${a} resources across ${r.size} distinct CFN types in this stack (${c}). This is the template-visible signature of \`.with(customMixin)\` recursing through every descendant via \`target.node.findAll()\` \u2014 likely because the custom mixin's \`supports()\` filter accepts every construct.`,"Verify your custom mixin's `supports()` method narrows correctly to the intended resource type(s). If the broad application is intentional, you can suppress this finding via `Validations.of(scope).acknowledge({ id: 'cdk-insights::TL-MIXIN-002', reason: '...' })`.","LOW","Operational Excellence",o??i,"cdkInsights")),s};var OR=[{fqn:"aws-cdk-lib.aws_s3.mixins.BucketVersioning",cfnResourceType:"AWS::S3::Bucket",displayName:"BucketVersioning"},{fqn:"aws-cdk-lib.aws_s3.mixins.BucketEncryption",cfnResourceType:"AWS::S3::Bucket",displayName:"BucketEncryption"},{fqn:"aws-cdk-lib.aws_s3.mixins.BucketBlockPublicAccess",cfnResourceType:"AWS::S3::Bucket",displayName:"BucketBlockPublicAccess"}];var MR=(t,e)=>{let s={},n=t.Resources||{};for(let r of OR){let i=Ue(n,r.cfnResourceType);if(i.length<2)continue;let o=[],a=[];for(let[c,u]of i)(u.__appliedMixins??[]).some(p=>p.fqn===r.fqn)?o.push(c):a.push([c,u]);if(!(o.length===0||a.length===0))for(let[c,u]of a){let l=u.Metadata?.["aws:cdk:path"]||c;s[c]||(s[c]={issues:[]}),s[c].issues.push(e(c,`CDK Mixin \`${r.displayName}\` is applied to ${o.length}/${i.length} ${r.cfnResourceType} resources in this stack but missing from this one. This is the signature of \`Mixins.of(scope).apply(...)\` silently skipping resources outside the selector.`,`Either apply \`${r.displayName}\` to this resource explicitly via \`.with()\`, or switch the stack-wide application to \`Mixins.of(scope).requireAll().apply(new ${r.displayName}())\` so synth fails when the mixin can't be applied to a selected construct.`,"LOW","Security",l,"cdkInsights"))}}return s};var KW=new Set(["aws:SourceArn","aws:SourceAccount","aws:PrincipalOrgID","aws:SourceVpce"]),ZW=t=>{if(t==="*")return!0;if(t&&typeof t=="object"&&!Array.isArray(t)){let e=t,s=e.AWS;if(s==="*"||Array.isArray(s)&&s.includes("*")||e.Service==="*")return!0}return!1},YW=t=>{if(!t||typeof t!="object")return!1;let e=t;for(let s of Object.values(e))if(s&&typeof s=="object"){let n=s;for(let r of Object.keys(n))if(KW.has(r))return!0}return!1},BR=(t,e)=>{let s={},n=t.Resources||{},r=[];for(let[i,o]of Ue(n,"AWS::SQS::QueuePolicy")){let a=o.Metadata?.["aws:cdk:path"]||i;r.push([i,o.Properties?.PolicyDocument,a])}for(let[i,o]of Ue(n,"AWS::SNS::TopicPolicy")){let a=o.Metadata?.["aws:cdk:path"]||i;r.push([i,o.Properties?.PolicyDocument,a])}for(let[i,o]of Ue(n,"AWS::S3::BucketPolicy")){let a=o.Metadata?.["aws:cdk:path"]||i;r.push([i,o.Properties?.PolicyDocument,a])}for(let[i,o]of Ue(n,"AWS::KMS::Key")){let a=o.Metadata?.["aws:cdk:path"]||i;r.push([i,o.Properties?.KeyPolicy,a])}for(let[i,o,a]of r){if(!o)continue;let c=dr(o);for(let u of c){if((u.Effect||"Allow")!=="Allow"||!ZW(u.Principal))continue;let d=u.Condition,p=d!=null;p&&YW(d)||(p?(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,'Resource policy has a statement with Principal: "*" and a Condition that does not use a strongly restrictive key (aws:SourceArn, aws:SourceAccount, aws:PrincipalOrgID, or aws:SourceVpce). The current condition may not sufficiently limit access.',"Replace or supplement the existing Condition with aws:SourceArn, aws:SourceAccount, aws:PrincipalOrgID, or aws:SourceVpce to ensure only trusted sources can access this resource.","MEDIUM","Security",a,"cdkInsights"))):(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,'Resource policy has a statement with Principal: "*" and no Condition. This allows any AWS account or anonymous user to invoke the allowed actions.',"Add a restrictive Condition using aws:SourceArn, aws:SourceAccount, aws:PrincipalOrgID, or aws:SourceVpce to limit access to trusted sources.","HIGH","Security",a,"cdkInsights"))))}}return s};var JW=[{pattern:/^arn:aws[a-z-]*:iam::aws:policy\/service-role\/AWSLambdaBasicExecutionRole$/,name:"AWSLambdaBasicExecutionRole",actions:["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"]},{pattern:/^arn:aws[a-z-]*:iam::aws:policy\/service-role\/AWSLambdaVPCAccessExecutionRole$/,name:"AWSLambdaVPCAccessExecutionRole",actions:["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents","ec2:CreateNetworkInterface","ec2:DescribeNetworkInterfaces","ec2:DeleteNetworkInterface"]},{pattern:/^arn:aws[a-z-]*:iam::aws:policy\/AmazonDynamoDBReadOnlyAccess$/,name:"AmazonDynamoDBReadOnlyAccess",actions:["dynamodb:BatchGetItem","dynamodb:GetItem","dynamodb:Query","dynamodb:Scan","dynamodb:DescribeTable","dynamodb:DescribeReservedCapacity","dynamodb:DescribeReservedCapacityOfferings","dynamodb:ListTables","dynamodb:DescribeStream","dynamodb:ListStreams"]},{pattern:/^arn:aws[a-z-]*:iam::aws:policy\/AmazonDynamoDBFullAccess$/,name:"AmazonDynamoDBFullAccess",actions:["dynamodb:*"]},{pattern:/^arn:aws[a-z-]*:iam::aws:policy\/AmazonS3ReadOnlyAccess$/,name:"AmazonS3ReadOnlyAccess",actions:["s3:Get*","s3:List*"]},{pattern:/^arn:aws[a-z-]*:iam::aws:policy\/AmazonS3FullAccess$/,name:"AmazonS3FullAccess",actions:["s3:*"]},{pattern:/^arn:aws[a-z-]*:iam::aws:policy\/AmazonSQSFullAccess$/,name:"AmazonSQSFullAccess",actions:["sqs:*"]},{pattern:/^arn:aws[a-z-]*:iam::aws:policy\/AmazonSNSFullAccess$/,name:"AmazonSNSFullAccess",actions:["sns:*"]},{pattern:/^arn:aws[a-z-]*:iam::aws:policy\/CloudWatchFullAccess$/,name:"CloudWatchFullAccess",actions:["cloudwatch:*","logs:*"]},{pattern:/^arn:aws[a-z-]*:iam::aws:policy\/AWSStepFunctionsFullAccess$/,name:"AWSStepFunctionsFullAccess",actions:["states:*"]}],QW=(t,e)=>{if(t===e)return!0;let s=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${s}$`,"i").test(t)},NR=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::IAM::Role");for(let[i,o]of r){let c=(o.Properties||{}).ManagedPolicyArns;if(!Array.isArray(c)||c.length===0)continue;let u=[];for(let m of c)if(typeof m=="string"){for(let g of JW)if(g.pattern.test(m))for(let h of g.actions)u.push({action:h,policyName:g.name})}if(u.length===0)continue;let l=Ur(o),d=[];for(let m of l){if(!m.document)continue;let g=dr(m.document);for(let h of g){if((h.Effect||"Allow")!=="Allow")continue;let y=Array.isArray(h.Action)?h.Action:typeof h.Action=="string"?[h.Action]:[];for(let b of y)for(let S of u)if(QW(b,S.action)){d.push({action:b,policyName:S.policyName,inlinePolicy:m.name});break}}}if(d.length===0)continue;let p=o.Metadata?.["aws:cdk:path"]||i,f=[...new Set(d.map(m=>m.policyName))];s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`IAM role has ${d.length} inline action(s) that overlap with permissions already granted by managed policy(ies): ${f.join(", ")}. Redundant inline statements increase policy size without adding permissions.`,"Remove redundant inline policy statements that are already covered by attached managed policies. Review the managed policy permissions before adding inline actions.","LOW","Security",p,"cdkInsights"))}return s};var XW=t=>{let e=t.Effect||"Allow",s=JSON.stringify(t.Principal||"*"),n=JSON.stringify(t.Condition||null);return`${e}|${s}|${n}`},e$=t=>{let e=t.Action;return Array.isArray(e)?e:typeof e=="string"?[e]:[]},WR=(t,e)=>{let s={},n=t.Resources||{},r=[...Ue(n,"AWS::SQS::QueuePolicy"),...Ue(n,"AWS::SNS::TopicPolicy")];for(let[i,o]of r){let c=(o.Properties||{}).PolicyDocument;if(!c)continue;let u=dr(c);if(u.length<=2)continue;let l=o.Metadata?.["aws:cdk:path"]||i,d=new Map;for(let h=0;h<u.length;h++){let x=XW(u[h]),y=e$(u[h]),b=d.get(x)||[];b.push({actions:y,index:h}),d.set(x,b)}let p=0;for(let[,h]of d)h.length>1&&(p+=h.length-1);if(p<=0||p<2)continue;let f=u.length,g=p/f>.5?"MEDIUM":"LOW";s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Policy has ${f} statements, of which ${p} could be consolidated. Multiple statements share the same Effect, Principal, and Condition but differ only in Action values.`,"Consolidate statements that share the same Effect, Principal, and Condition into a single statement with an Action array. This reduces policy size and improves readability.",g,"Reliability",l,"cdkInsights"))}return s};var $R={"2.251.0":[{resourceType:"AWS::ElasticLoadBalancing::LoadBalancer",removedAttributes:["SourceSecurityGroup"],removedTypes:["PolicyItem","SourceSecurityGroup"],releaseUrl:"https://github.com/aws/aws-cdk/releases/tag/v2.251.0",notes:"Verified 2026-05-03 against release v2.251.0 (commit 9e6c2ef). Classic ELB v1 only. The removed names are GetAtt return attribute and authoring-time jsii types \u2014 synthesized CFN property shape is unchanged, and no CFN property additions affect covered resource types."}]};op();var t$=(t,e)=>{let s=[];for(let[n,r]of Object.entries(e))if(!(Kc(n,t)>0))for(let i of r)s.push({...i,introducedIn:n});return s},s$=(t,e)=>Object.values(e).filter(s=>s.resourceTypes.includes(t)).map(s=>s.ruleId),jR=(t,e,s,n="regression",r=$R,i=nu)=>{let o={};if(!s)return o;let a=t$(s,r);if(a.length===0)return o;let c=new Map;for(let[u,l]of Object.entries(t.Resources??{})){let d=c.get(l.Type)??[];d.push(u),c.set(l.Type,d)}for(let u of a){let l=c.get(u.resourceType);if(!l||l.length===0)continue;let d=s$(u.resourceType,i);if(d.length!==0)if(n==="regression"){let p=u.removedProperties??[],f=u.renamedProperties??[];if(p.length===0&&f.length===0)continue;let m=[...p.map(g=>`removed property "${g}"`),...f.map(g=>`renamed "${g.from}" \u2192 "${g.to}"`)].join(", ");for(let g of l)o[g]||(o[g]={issues:[]}),o[g].issues.push(e(g,`aws-cdk-lib v${u.introducedIn} regenerated the L1 schema for ${u.resourceType} (${m}). Existing cdk-insights rule(s) [${d.join(", ")}] may have silently lost coverage.`,`Verify rule coverage against the current schema. Release notes: ${u.releaseUrl}`,"LOW","Operational Excellence",g,"cdkInsights"))}else{let p=u.addedProperties??[];if(p.length===0)continue;let f=p.map(m=>`"${m}"`).join(", ");for(let m of l)o[m]||(o[m]={issues:[]}),o[m].issues.push(e(m,`aws-cdk-lib v${u.introducedIn} added new propert${p.length===1?"y":"ies"} ${f} to ${u.resourceType}. Existing cdk-insights rule(s) [${d.join(", ")}] don't evaluate ${p.length===1?"it":"them"} \u2014 consider whether a rule should.`,`Review the new propert${p.length===1?"y":"ies"} for security, cost, or compliance implications. Release notes: ${u.releaseUrl}`,"LOW","Operational Excellence",m,"cdkInsights"))}}return o},UR=(t,e)=>{let{version:s}=lo();return jR(t,e,s,"regression")},GR=(t,e)=>{let{version:s}=lo();return jR(t,e,s,"coverage-gap")};var oe={SQS_POLICY_MAX_BYTES:8192,SQS_POLICY_MAX_STATEMENTS:20,IAM_INLINE_POLICY_MAX_BYTES:2048,IAM_MANAGED_POLICY_MAX_BYTES:6144,IAM_ROLE_AGGREGATE_INLINE_MAX_BYTES:10240,LAMBDA_ENV_MAX_BYTES:4096,LAMBDA_MAX_LAYERS:5,S3_BUCKET_POLICY_MAX_BYTES:20480,SNS_TOPIC_POLICY_MAX_BYTES:30720,EVENTBRIDGE_RULES_PER_BUS_DEFAULT:300,CFN_MAX_RESOURCES:500,CFN_TEMPLATE_MAX_BYTES_DIRECT:51200,CFN_TEMPLATE_MAX_BYTES_S3:460800,SECURITY_GROUP_MAX_INBOUND_RULES:60,SECURITY_GROUP_MAX_OUTBOUND_RULES:60},gt=.8;var HR=(t,e)=>{let s={},n=Object.keys(t.Resources||{}).length,r="__TEMPLATE_LEVEL__";return n>=oe.CFN_MAX_RESOURCES?(s[r]||(s[r]={issues:[]}),s[r].issues.push(e(r,`CloudFormation template contains ${n} resources, reaching or exceeding the ${oe.CFN_MAX_RESOURCES}-resource limit. Deployment will fail.`,"Split the stack into multiple nested stacks or separate stacks to stay within the CloudFormation resource limit.","CRITICAL","Reliability","__TEMPLATE_LEVEL__","cdkInsights"))):Ze(n,oe.CFN_MAX_RESOURCES)>=gt&&(s[r]||(s[r]={issues:[]}),s[r].issues.push(e(r,`CloudFormation template contains ${n} resources (${Math.round(Ze(n,oe.CFN_MAX_RESOURCES)*100)}% of the ${oe.CFN_MAX_RESOURCES}-resource limit).`,"Consider splitting the stack into multiple nested stacks or separate stacks before this limit is reached.","HIGH","Reliability","__TEMPLATE_LEVEL__","cdkInsights"))),s};var zR=(t,e)=>{let s={},n=JSON.stringify(t).length,r="__TEMPLATE_LEVEL__";return n>=oe.CFN_TEMPLATE_MAX_BYTES_S3?(s[r]||(s[r]={issues:[]}),s[r].issues.push(e(r,`CloudFormation template is ${Be(n)}, exceeding the ${Be(oe.CFN_TEMPLATE_MAX_BYTES_S3)} S3 upload limit. Deployment will fail regardless of deployment method.`,"Split the stack into multiple nested stacks or separate stacks to reduce template size.","CRITICAL","Reliability","__TEMPLATE_LEVEL__","cdkInsights"))):Ze(n,oe.CFN_TEMPLATE_MAX_BYTES_S3)>=gt&&(s[r]||(s[r]={issues:[]}),s[r].issues.push(e(r,`CloudFormation template is ${Be(n)} (${Math.round(Ze(n,oe.CFN_TEMPLATE_MAX_BYTES_S3)*100)}% of the ${Be(oe.CFN_TEMPLATE_MAX_BYTES_S3)} S3 upload limit).`,"Consider splitting the stack into multiple nested stacks or separate stacks before this limit is reached.","MEDIUM","Reliability","__TEMPLATE_LEVEL__","cdkInsights"))),n>=oe.CFN_TEMPLATE_MAX_BYTES_DIRECT?(s[r]||(s[r]={issues:[]}),s[r].issues.push(e(r,`CloudFormation template is ${Be(n)}, exceeding the ${Be(oe.CFN_TEMPLATE_MAX_BYTES_DIRECT)} direct upload limit.`,"CDK uploads templates via S3 by default so this is informational. If deploying outside CDK with `aws cloudformation create-stack --template-body=...`, switch to `--template-url` or use S3.","LOW","Reliability","__TEMPLATE_LEVEL__","cdkInsights"))):Ze(n,oe.CFN_TEMPLATE_MAX_BYTES_DIRECT)>=gt&&(s[r]||(s[r]={issues:[]}),s[r].issues.push(e(r,`CloudFormation template is ${Be(n)} (${Math.round(Ze(n,oe.CFN_TEMPLATE_MAX_BYTES_DIRECT)*100)}% of the ${Be(oe.CFN_TEMPLATE_MAX_BYTES_DIRECT)} direct upload limit).`,"CDK uploads templates via S3 by default so this is informational. The S3-upload limit (450KB) is the one that actually applies to CDK deployments.","LOW","Reliability","__TEMPLATE_LEVEL__","cdkInsights"))),s};var VR=(t,e)=>{let s={},n=t.Resources||{},r=ER(n);for(let[i,o]of r){let a=o.length,c=o[0],l=n[c]?.Metadata?.["aws:cdk:path"]||c;a>=oe.EVENTBRIDGE_RULES_PER_BUS_DEFAULT?(s[c]||(s[c]={issues:[]}),s[c].issues.push(e(c,`EventBridge bus "${i}" has ${a} rules, reaching or exceeding the ${oe.EVENTBRIDGE_RULES_PER_BUS_DEFAULT}-rule default limit. Deployment may fail.`,"Request a service quota increase for EventBridge rules per bus, or split rules across multiple event buses.","HIGH","Reliability",l,"cdkInsights"))):Ze(a,oe.EVENTBRIDGE_RULES_PER_BUS_DEFAULT)>=gt&&(s[c]||(s[c]={issues:[]}),s[c].issues.push(e(c,`EventBridge bus "${i}" has ${a} rules (${Math.round(Ze(a,oe.EVENTBRIDGE_RULES_PER_BUS_DEFAULT)*100)}% of the ${oe.EVENTBRIDGE_RULES_PER_BUS_DEFAULT}-rule default limit).`,"Consider requesting a service quota increase or splitting rules across multiple event buses before this limit is reached.","MEDIUM","Reliability",l,"cdkInsights")))}return s};var qR=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::IAM::Role"),i=Ue(n,"AWS::IAM::User");for(let[o,a]of[...r,...i]){let c=a.Metadata?.["aws:cdk:path"]||o,u=Ur(a);for(let l of u){if(!l.document)continue;let d=xs(l.document);d>=oe.IAM_INLINE_POLICY_MAX_BYTES?(s[o]||(s[o]={issues:[]}),s[o].issues.push(e(o,`Inline policy "${l.name}" is ${Be(d)}, exceeding the ${Be(oe.IAM_INLINE_POLICY_MAX_BYTES)} limit. Deployment will fail.`,"Convert this inline policy to a managed policy, or reduce the number of statements and actions. Use wildcard patterns where appropriate to consolidate permissions.","CRITICAL","Reliability",c,"cdkInsights"))):Ze(d,oe.IAM_INLINE_POLICY_MAX_BYTES)>=gt&&(s[o]||(s[o]={issues:[]}),s[o].issues.push(e(o,`Inline policy "${l.name}" is ${Be(d)} (${Math.round(Ze(d,oe.IAM_INLINE_POLICY_MAX_BYTES)*100)}% of the ${Be(oe.IAM_INLINE_POLICY_MAX_BYTES)} limit). Adding more permissions may cause deployment failure.`,"Consider converting this inline policy to a managed policy before the limit is reached.","HIGH","Reliability",c,"cdkInsights")))}}return s};var KR=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::IAM::ManagedPolicy");for(let[i,o]of r){let c=(o.Properties||{}).PolicyDocument;if(!c)continue;let u=xs(c),l=o.Metadata?.["aws:cdk:path"]||i;u>=oe.IAM_MANAGED_POLICY_MAX_BYTES?(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Managed policy is ${Be(u)}, exceeding the ${Be(oe.IAM_MANAGED_POLICY_MAX_BYTES)} limit. Deployment will fail.`,"Split this managed policy into multiple smaller policies, or consolidate statements using wildcard patterns to reduce size.","CRITICAL","Reliability",l,"cdkInsights"))):Ze(u,oe.IAM_MANAGED_POLICY_MAX_BYTES)>=gt&&(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Managed policy is ${Be(u)} (${Math.round(Ze(u,oe.IAM_MANAGED_POLICY_MAX_BYTES)*100)}% of the ${Be(oe.IAM_MANAGED_POLICY_MAX_BYTES)} limit). Adding more permissions may cause deployment failure.`,"Consider splitting this managed policy into multiple policies before the limit is reached.","HIGH","Reliability",l,"cdkInsights")))}return s};var ZR=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::IAM::Role");for(let[i,o]of r){let a=o.Metadata?.["aws:cdk:path"]||i,c=Ur(o),u=0;for(let l of c)l.document&&(u+=xs(l.document));u!==0&&(u>=oe.IAM_ROLE_AGGREGATE_INLINE_MAX_BYTES?(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Aggregate inline policy size is ${Be(u)} across ${c.length} policies, exceeding the ${Be(oe.IAM_ROLE_AGGREGATE_INLINE_MAX_BYTES)} limit. Deployment will fail.`,"Convert some inline policies to managed policies to reduce the aggregate inline size. Consider consolidating overlapping permissions across policies.","CRITICAL","Reliability",a,"cdkInsights"))):Ze(u,oe.IAM_ROLE_AGGREGATE_INLINE_MAX_BYTES)>=gt&&(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Aggregate inline policy size is ${Be(u)} across ${c.length} policies (${Math.round(Ze(u,oe.IAM_ROLE_AGGREGATE_INLINE_MAX_BYTES)*100)}% of the ${Be(oe.IAM_ROLE_AGGREGATE_INLINE_MAX_BYTES)} limit). Adding more inline policies may cause deployment failure.`,"Consider converting some inline policies to managed policies before the aggregate limit is reached.","HIGH","Reliability",a,"cdkInsights"))))}return s};var YR=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::Lambda::Function");for(let[i,o]of r){let c=(o.Properties||{}).Environment;if(!c?.Variables)continue;let u=xs(c.Variables),l=o.Metadata?.["aws:cdk:path"]||i;u>=oe.LAMBDA_ENV_MAX_BYTES?(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Lambda environment variables are ${Be(u)}, exceeding the ${Be(oe.LAMBDA_ENV_MAX_BYTES)} limit. Deployment will fail.`,"Move large configuration values to SSM Parameter Store or Secrets Manager. Use a single JSON-encoded parameter instead of many individual environment variables.","CRITICAL","Reliability",l,"cdkInsights"))):Ze(u,oe.LAMBDA_ENV_MAX_BYTES)>=gt&&(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Lambda environment variables are ${Be(u)} (${Math.round(Ze(u,oe.LAMBDA_ENV_MAX_BYTES)*100)}% of the ${Be(oe.LAMBDA_ENV_MAX_BYTES)} limit). Adding more variables may cause deployment failure.`,"Consider moving some configuration values to SSM Parameter Store or Secrets Manager before the limit is reached.","HIGH","Reliability",l,"cdkInsights")))}return s};var JR=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::Lambda::Function");for(let[i,o]of r){let c=(o.Properties||{}).Layers;if(!Array.isArray(c))continue;let u=c.length,l=o.Metadata?.["aws:cdk:path"]||i;u>oe.LAMBDA_MAX_LAYERS?(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Lambda function has ${u} layers, exceeding the maximum of ${oe.LAMBDA_MAX_LAYERS} layers. Deployment will fail.`,"Consolidate layers by combining related dependencies into a single layer, or move some dependencies into the deployment package itself.","CRITICAL","Reliability",l,"cdkInsights"))):u===oe.LAMBDA_MAX_LAYERS&&(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Lambda function has ${u} of ${oe.LAMBDA_MAX_LAYERS} maximum layers. There is no headroom to add additional layers.`,"Consider consolidating layers by combining related dependencies into a single layer to free up a layer slot for future needs.","HIGH","Reliability",l,"cdkInsights")))}return s};var QR=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::S3::BucketPolicy");for(let[i,o]of r){let c=(o.Properties||{}).PolicyDocument;if(!c)continue;let u=xs(c),l=o.Metadata?.["aws:cdk:path"]||i;u>=oe.S3_BUCKET_POLICY_MAX_BYTES?(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`S3 bucket policy is ${Be(u)}, exceeding the ${Be(oe.S3_BUCKET_POLICY_MAX_BYTES)} limit. Deployment will fail.`,"Consolidate policy statements or split resources across multiple buckets to reduce policy size.","CRITICAL","Reliability",l,"cdkInsights"))):Ze(u,oe.S3_BUCKET_POLICY_MAX_BYTES)>=gt&&(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`S3 bucket policy is ${Be(u)} (${Math.round(Ze(u,oe.S3_BUCKET_POLICY_MAX_BYTES)*100)}% of the ${Be(oe.S3_BUCKET_POLICY_MAX_BYTES)} limit). Adding more statements may cause deployment failure.`,"Consider consolidating policy statements or splitting resources across multiple buckets before this limit is reached.","HIGH","Reliability",l,"cdkInsights")))}return s};var XR=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::EC2::SecurityGroup");for(let[i,o]of r){let{inbound:a,outbound:c}=IR(i,o,n),u=o.Metadata?.["aws:cdk:path"]||i;a>=oe.SECURITY_GROUP_MAX_INBOUND_RULES?(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Security group has ${a} inbound rules, reaching or exceeding the ${oe.SECURITY_GROUP_MAX_INBOUND_RULES}-rule limit. Deployment will fail.`,"Consolidate rules using CIDR ranges or prefix lists, or split workloads across multiple security groups.","CRITICAL","Reliability",u,"cdkInsights"))):Ze(a,oe.SECURITY_GROUP_MAX_INBOUND_RULES)>=gt&&(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Security group has ${a} inbound rules (${Math.round(Ze(a,oe.SECURITY_GROUP_MAX_INBOUND_RULES)*100)}% of the ${oe.SECURITY_GROUP_MAX_INBOUND_RULES}-rule limit).`,"Consider consolidating rules using CIDR ranges or prefix lists before this limit is reached.","HIGH","Reliability",u,"cdkInsights"))),c>=oe.SECURITY_GROUP_MAX_OUTBOUND_RULES?(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Security group has ${c} outbound rules, reaching or exceeding the ${oe.SECURITY_GROUP_MAX_OUTBOUND_RULES}-rule limit. Deployment will fail.`,"Consolidate rules using CIDR ranges or prefix lists, or split workloads across multiple security groups.","CRITICAL","Reliability",u,"cdkInsights"))):Ze(c,oe.SECURITY_GROUP_MAX_OUTBOUND_RULES)>=gt&&(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`Security group has ${c} outbound rules (${Math.round(Ze(c,oe.SECURITY_GROUP_MAX_OUTBOUND_RULES)*100)}% of the ${oe.SECURITY_GROUP_MAX_OUTBOUND_RULES}-rule limit).`,"Consider consolidating rules using CIDR ranges or prefix lists before this limit is reached.","HIGH","Reliability",u,"cdkInsights")))}return s};var eF=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::SNS::TopicPolicy");for(let[i,o]of r){let c=(o.Properties||{}).PolicyDocument;if(!c)continue;let u=xs(c),l=o.Metadata?.["aws:cdk:path"]||i;u>=oe.SNS_TOPIC_POLICY_MAX_BYTES?(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`SNS topic policy is ${Be(u)}, exceeding the ${Be(oe.SNS_TOPIC_POLICY_MAX_BYTES)} limit. Deployment will fail.`,"Consolidate policy statements or split subscriptions across multiple topics to reduce policy size.","CRITICAL","Reliability",l,"cdkInsights"))):Ze(u,oe.SNS_TOPIC_POLICY_MAX_BYTES)>=gt&&(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`SNS topic policy is ${Be(u)} (${Math.round(Ze(u,oe.SNS_TOPIC_POLICY_MAX_BYTES)*100)}% of the ${Be(oe.SNS_TOPIC_POLICY_MAX_BYTES)} limit). Adding more statements may cause deployment failure.`,"Consider consolidating policy statements or splitting subscriptions across multiple topics before this limit is reached.","HIGH","Reliability",l,"cdkInsights")))}return s};var tF=(t,e)=>{let s={},n=t.Resources||{},r=Ue(n,"AWS::SQS::QueuePolicy");for(let[i,o]of r){let c=(o.Properties||{}).PolicyDocument;if(!c)continue;let u=xs(c),l=wR(c),d=o.Metadata?.["aws:cdk:path"]||i;u>=oe.SQS_POLICY_MAX_BYTES?(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`SQS queue policy is ${Be(u)}, exceeding the ${Be(oe.SQS_POLICY_MAX_BYTES)} limit. Deployment will fail.`,"Consolidate policy statements into a single statement with broader conditions, or split targets across multiple queues. If using a shared DLQ with EventBridge targets, use Queue.fromQueueArn() to prevent CDK from auto-generating per-target statements.","CRITICAL","Reliability",d,"cdkInsights"))):Ze(u,oe.SQS_POLICY_MAX_BYTES)>=gt&&(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`SQS queue policy is ${Be(u)} (${Math.round(Ze(u,oe.SQS_POLICY_MAX_BYTES)*100)}% of the ${Be(oe.SQS_POLICY_MAX_BYTES)} limit). Adding more targets may cause deployment failure.`,"Consider consolidating policy statements or splitting targets across multiple queues before this limit is reached.","HIGH","Reliability",d,"cdkInsights"))),l>=oe.SQS_POLICY_MAX_STATEMENTS?(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`SQS queue policy has ${l} statements, reaching or exceeding the ${oe.SQS_POLICY_MAX_STATEMENTS}-statement limit.`,"Consolidate statements using wildcard conditions or array-valued Action/Resource fields instead of one statement per target.","CRITICAL","Reliability",d,"cdkInsights"))):Ze(l,oe.SQS_POLICY_MAX_STATEMENTS)>=gt&&(s[i]||(s[i]={issues:[]}),s[i].issues.push(e(i,`SQS queue policy has ${l} of ${oe.SQS_POLICY_MAX_STATEMENTS} maximum statements (${Math.round(Ze(l,oe.SQS_POLICY_MAX_STATEMENTS)*100)}%).`,"Consider consolidating policy statements before this limit is reached.","HIGH","Reliability",d,"cdkInsights")))}return s};var n$=[{ruleId:"TL-LIMIT-001",title:"SQS Queue Policy Size Limit",category:"serviceLimits",defaultSeverity:"CRITICAL",wafPillar:"Reliability",check:tF,description:"SQS queue policies must be under 8KB / 20 statements. Commonly exceeded when CDK auto-generates per-target policy statements for shared DLQs."},{ruleId:"TL-LIMIT-002",title:"IAM Inline Policy Size Limit",category:"serviceLimits",defaultSeverity:"CRITICAL",wafPillar:"Reliability",check:qR,description:"Each IAM inline policy must be under 2,048 bytes when URL-encoded."},{ruleId:"TL-LIMIT-003",title:"IAM Managed Policy Size Limit",category:"serviceLimits",defaultSeverity:"CRITICAL",wafPillar:"Reliability",check:KR,description:"IAM managed policies must be under 6,144 bytes."},{ruleId:"TL-LIMIT-004",title:"IAM Role Aggregate Inline Policy Size",category:"serviceLimits",defaultSeverity:"CRITICAL",wafPillar:"Reliability",check:ZR,description:"Total size of all inline policies on a single IAM role must be under 10,240 bytes."},{ruleId:"TL-LIMIT-005",title:"Lambda Environment Variables Size Limit",category:"serviceLimits",defaultSeverity:"CRITICAL",wafPillar:"Reliability",check:YR,description:"Lambda environment variables must total under 4KB including keys and values."},{ruleId:"TL-LIMIT-006",title:"Lambda Layers Limit",category:"serviceLimits",defaultSeverity:"CRITICAL",wafPillar:"Reliability",check:JR,description:"Lambda functions can have a maximum of 5 layers."},{ruleId:"TL-LIMIT-007",title:"S3 Bucket Policy Size Limit",category:"serviceLimits",defaultSeverity:"CRITICAL",wafPillar:"Reliability",check:QR,description:"S3 bucket policies must be under 20KB."},{ruleId:"TL-LIMIT-008",title:"SNS Topic Policy Size Limit",category:"serviceLimits",defaultSeverity:"CRITICAL",wafPillar:"Reliability",check:eF,description:"SNS topic policies must be under 30KB."},{ruleId:"TL-LIMIT-009",title:"EventBridge Rules Per Bus Limit",category:"serviceLimits",defaultSeverity:"HIGH",wafPillar:"Reliability",check:VR,description:"Default quota is 300 EventBridge rules per event bus."},{ruleId:"TL-LIMIT-010",title:"CloudFormation Stack Resource Count",category:"serviceLimits",defaultSeverity:"CRITICAL",wafPillar:"Reliability",check:HR,description:"CloudFormation stacks have a hard limit of 500 resources."},{ruleId:"TL-LIMIT-011",title:"CloudFormation Template Size",category:"serviceLimits",defaultSeverity:"CRITICAL",wafPillar:"Reliability",check:zR,description:"CloudFormation templates have a 51KB limit (direct) or 460KB limit (S3)."},{ruleId:"TL-LIMIT-012",title:"Security Group Rules Limit",category:"serviceLimits",defaultSeverity:"CRITICAL",wafPillar:"Reliability",check:XR,description:"Security groups have a default limit of 60 inbound and 60 outbound rules."},{ruleId:"TL-XRES-001",title:"Shared DLQ with Too Many EventBridge Targets",category:"crossResourceAntiPatterns",defaultSeverity:"HIGH",wafPillar:"Reliability",check:PR,description:"CDK generates one SQS policy statement per EventBridge target. Too many targets sharing a DLQ causes the policy to exceed the 8KB limit."},{ruleId:"TL-XRES-002",title:"EventBridge Targets Without DLQ",category:"crossResourceAntiPatterns",defaultSeverity:"MEDIUM",wafPillar:"Reliability",check:_R,description:"EventBridge rule targets should have a Dead Letter Queue for failed event delivery."},{ruleId:"TL-XRES-003",title:"Lambda Without Explicit Log Group",category:"crossResourceAntiPatterns",defaultSeverity:"LOW",wafPillar:"Operational Excellence",check:TR,description:"Lambda functions without explicit CloudWatch Log Groups use auto-created groups with infinite retention."},{ruleId:"TL-XRES-004",title:"DynamoDB Without Point-in-Time Recovery",category:"crossResourceAntiPatterns",defaultSeverity:"MEDIUM",wafPillar:"Reliability",check:FR,description:"DynamoDB tables should have PITR enabled, especially in production stacks."},{ruleId:"TL-XRES-005",title:"Duplicate IAM Policy Statements",category:"crossResourceAntiPatterns",defaultSeverity:"LOW",wafPillar:"Security",check:RR,description:"Duplicate policy statements across a role waste policy size budget and may indicate copy-paste errors."},{ruleId:"TL-POL-001",title:"Redundant SQS/SNS Policy Statements",category:"policyAnalysis",defaultSeverity:"MEDIUM",wafPillar:"Reliability",check:WR,description:"Policy statements that could be consolidated to reduce policy size."},{ruleId:"TL-POL-002",title:"IAM Overlapping Managed and Inline Policies",category:"policyAnalysis",defaultSeverity:"LOW",wafPillar:"Security",check:NR,description:"Inline policy statements that duplicate permissions from attached managed policies."},{ruleId:"TL-POL-003",title:"Overly Broad Resource Policy Principals",category:"policyAnalysis",defaultSeverity:"HIGH",wafPillar:"Security",check:BR,description:"Resource policies with wildcard (*) principals without restrictive conditions."},{ruleId:"TL-DRIFT-001",title:"CDK L1 Schema Drift",category:"schemaDrift",defaultSeverity:"LOW",wafPillar:"Operational Excellence",check:UR,description:"Detects when the user's aws-cdk-lib version regenerated an L1 CloudFormation resource schema in a way that may silently invalidate cdk-insights rule coverage."},{ruleId:"TL-DRIFT-002",title:"CDK L1 Schema Coverage Gap",category:"schemaDrift",defaultSeverity:"LOW",wafPillar:"Operational Excellence",check:GR,description:"Surfaces newly-added L1 CloudFormation properties on resource types already covered by cdk-insights rules. Hint that a new rule may be worth opening; not a regression."},{ruleId:"TL-MIXIN-001",title:"Compliance-Critical Mixin Applied Without Stack Coverage",category:"crossResourceAntiPatterns",defaultSeverity:"LOW",wafPillar:"Security",check:MR,description:"A compliance-critical CDK Mixin (e.g., BucketEncryption, BucketVersioning) is applied to some but not all resources of its target type in the stack \u2014 the template-visible signature of `Mixins.of(scope).apply(...)` silently skipping resources. Recommends `requireAll()` enforcement."},{ruleId:"TL-MIXIN-002",title:"Custom Mixin Applied Across Many Resource Types",category:"crossResourceAntiPatterns",defaultSeverity:"LOW",wafPillar:"Operational Excellence",check:LR,description:"A user-defined CDK Mixin appears on resources spanning 3+ distinct CFN types in the same stack \u2014 the template-visible signature of `.with(customMixin)` recursing through descendants because the mixin's `supports()` filter accepts every construct. Verify the supports() narrows to the intended resource type."}],dy=(t,e,s)=>{let n={};for(let r of n$)if(!(s&&s.length>0&&!s.some(o=>r.ruleId.toLowerCase().includes(o.toLowerCase())||r.category.toLowerCase().includes(o.toLowerCase())||r.title.toLowerCase().includes(o.toLowerCase()))))try{let i=r.check(t,e);for(let[o,a]of Object.entries(i)){n[o]||(n[o]={issues:[]});for(let c of a.issues)c.ruleId=r.ruleId;n[o].issues.push(...a.issues)}}catch{}return n};var ru={DEFAULT_MAX_CONCURRENT:5,DEFAULT_RETRY_ATTEMPTS:3,DEFAULT_RETRY_DELAY_MS:1e3,DEFAULT_TIMEOUT_MS:60*1e3};var iu={WARNING_PERCENTAGE:.8,HARD_STOP_PERCENTAGE:.9,DEFAULT_FREE_AI_INSIGHTS:500,DEFAULT_PRO_AI_INSIGHTS:5e3,DEFAULT_TEAM_AI_INSIGHTS_PER_SEAT:1e4};var bp=te(require("node:crypto")),cs=te(require("node:fs")),Sp=te(require("node:path"));var fo="3";var Oa=Sp.join(process.env.HOME||process.env.USERPROFILE||"",".cdk-insights","cache","analysis-cache.json"),r$=()=>{let t=Sp.dirname(Oa);cs.existsSync(t)||cs.mkdirSync(t,{recursive:!0})},i$=()=>{if(Vn())return new Map;try{if(cs.existsSync(Oa)){let t=JSON.parse(cs.readFileSync(Oa,"utf-8")),e=new Map,s=Date.now();for(let[n,r]of t.entries||[])s-r.timestamp>r.ttl||r.schemaVersion===fo&&e.set(n,r);return e}}catch(t){Hs.warn("Could not load cache from disk",{error:t instanceof Error?t.message:String(t)})}return new Map},sF=t=>{if(!Vn())try{r$();let e={entries:Array.from(t.entries()),timestamp:Date.now(),version:"1.0"};cs.writeFileSync(Oa,JSON.stringify(e,null,2),"utf-8")}catch(e){Hs.warn("Could not save cache to disk",{error:e instanceof Error?e.message:String(e)})}},o$=t=>{try{let e=cs.statSync(t),s=cs.readFileSync(t,"utf-8"),n=bp.createHash("sha256").update(s).digest("hex");return{filePath:t,lastModified:e.mtime.getTime(),hash:n}}catch{return null}},a$=t=>{let e={};for(let s of t){let n=o$(s);n&&(e[s]=n)}return e},c$=(t,e)=>t?bp.createHash("sha256").update(`${t}:${e||""}`).digest("hex").slice(0,16):"no-auth",u$=t=>bp.createHash("sha256").update(JSON.stringify(t)).digest("hex"),py=(t,e,s,n,r=[])=>{let i=c$(s,n),o=u$(e),a=a$(r);return{resourceId:t,authContext:i,resourceHash:o,fileHashes:a,schemaVersion:fo}},fy=t=>{let e=Object.entries(t.fileHashes).sort(([s],[n])=>s.localeCompare(n)).map(([s,n])=>`${s}:${n.hash}`).join("|");return`v${t.schemaVersion}:${t.resourceId}:${t.authContext}:${t.resourceHash}:${e}`};var xp=class{cache;ttl;maxSize;disabled=!1;constructor(e={}){this.ttl=e.ttl||6*60*60*1e3,this.maxSize=e.maxSize||1e3,this.disabled=e.disabled||!1,this.disabled?this.cache=new Map:this.cache=i$()}setDisabled(e){this.disabled=e,e&&this.cache.clear()}get(e){if(this.disabled){td();return}let s=this.cache.get(e);if(!s){td();return}if(Date.now()-s.timestamp>s.ttl){this.cache.delete(e),td();return}return d2(),s.value}set(e,s,n,r){this.disabled||(this.cache.size>=this.maxSize&&this.evictOldest(),this.cache.set(e,{value:s,timestamp:Date.now(),ttl:r??this.ttl,fileHashes:n.fileHashes,authContext:n.authContext,resourceHash:n.resourceHash,schemaVersion:n.schemaVersion}),p2(),this.cache.size%10===0&&sF(this.cache))}has(e){return this.cache.has(e)}clear(){if(this.cache.clear(),!Vn())try{cs.existsSync(Oa)&&cs.unlinkSync(Oa)}catch(e){Hs.warn("Could not clear disk cache",{error:e instanceof Error?e.message:String(e)})}}saveToDisk(){sF(this.cache)}size(){return this.cache.size}evictOldest(){let e,s=Date.now();for(let[n,r]of Array.from(this.cache.entries()))r.timestamp<s&&(s=r.timestamp,e=n);e&&this.cache.delete(e)}getStats(){return{size:this.cache.size,maxSize:this.maxSize,hitRate:0,totalHits:0,totalMisses:0}}getAllCachedResults(){return new Map(this.cache)}getCachedResultsForResources(e){let s=new Map;for(let[n,r]of Array.from(this.cache.entries())){let i=n.split(":")[0];e.includes(i)&&Date.now()-r.timestamp<=r.ttl&&s.set(i,r.value)}return s}hasCachedResult(e){for(let s of Array.from(this.cache.keys()))if(s.split(":")[0]===e)return!0;return!1}};var l$=new Set(["the","a","an","is","are","was","were","be","been","has","have","had","do","does","did","will","would","could","should","may","might","must","shall","can","this","that","these","those","it","its","to","for","of","in","on","at","by","with","from","or","and","not","no","but","if","then","else","when","where","resource","configuration","setting","configured","property","properties","which","lead","leads","leading","means","using","use","used","ensure","consider","also","such","most","more","any","all","some","other","each","every","necessary","unnecessary","recommended","default","specific","current","potential","possible","workloads","workload"]),d$=[["lacks","missing","without","absent","none","defined"],["encryption","encrypted","encrypt"],["configured","configuration","config","settings","setting"],["enabled","enable","active","activated"],["disabled","disable","inactive"],["public","publicly","open"],["access","accessible","accessibility"],["transit","transfer","transmission"],["rest","stored","storage"],["logging","logs","logged","log"],["dlq","dead","letter","queue"],["monitor","monitoring","observability"],["alarm","alarms","alert","alerts"],["unrestricted","permissive","overly"],["egress","outbound"],["ingress","inbound"],["recovery","backup","restore"],["pitr","point"],["function","functions"],["cluster","clusters"],["instance","instances"],["bucket","buckets"],["table","tables"],["domain","domains"],["node","nodes"],["policy","policies"],["rule","rules"],["subnet","subnets"],["high","higher","excessive","elevated"],["allocation","allocated","allocate"],["provisioned","provision"],["scaling","autoscaling","auto"],["restrict","restricted","restriction"],["expose","exposed","exposing","exposure"],["allow","allows","allowing"],["prevent","prevents","preventing"],["memory","ram","2gb","1gb"]],iF=new Map;for(let t of d$){let e=t[0];for(let s of t)iF.set(s,e)}var p$=t=>iF.get(t)||t,nF=t=>{if(!t)return new Set;let e=t.toLowerCase().replace(/[^\w\s]/g," ").replace(/\s+/g," ").trim().split(" ").filter(s=>s.length>2&&!l$.has(s)).map(p$);return new Set(e)},f$=(t,e)=>{if(t.size===0&&e.size===0)return 1;if(t.size===0||e.size===0)return 0;let s=[...t].filter(r=>e.has(r)).length,n=new Set([...t,...e]).size;return n>0?s/n:0},m$=.4,rF=3,my=(t,e)=>{let s=nF(t.issue),n=nF(e.issue);return s.size<rF||n.size<rF?!1:f$(s,n)>=m$},hy=t=>`${t.issue}::${t.severity}::${t.wafPillar}`,mo=t=>{let{existing:e,incoming:s}=t,n=new Set(e.map(hy)),r=[];for(let i of s){let o=hy(i);n.has(o)||e.some(u=>my(i,u))||r.some(u=>my(i,u))||(n.add(o),r.push(i))}return r},vp=(t,e)=>{let s=new Set,n=[];for(let r of t){let i=hy(r);s.has(i)||n.some(a=>my(r,a))||(s.add(i),n.push(r))}return n};var oF=te(require("node:crypto")),Ma=(t,e)=>{let s=`${t}:${e}`;return oF.createHash("sha256").update(s).digest("hex").slice(0,32)};var aF=t=>e=>{let s={},n={};return Object.entries(e).forEach(([r,i])=>{let o=t(i);s[o]=r,n[o]=i}),{redactedResources:n,mapping:s}};var cF=(t,e,s={})=>{let n=[];return t.forEach(r=>{let i=r.resourceId,o=s[i];if(!o&&i.includes("/")){let c=i.split("/"),u=c[c.length-2],l=Object.entries(e).find(([d,p])=>p.startsWith(u));l&&(o=l[1])}if(!o)return;let a=Object.entries(e).find(([,c])=>c===o)?.[0];if(!a){ke.warn(`\u26A0\uFE0F Unable to find redacted ID for logical resource: ${o}`);return}n.push({...r,resourceId:a})}),n};var uu=te(require("node:process"),1);var yy=te(require("node:process"),1);var ou=te(require("node:process"),1);var h$=(t,e,s,n)=>{if(s==="length"||s==="prototype"||s==="arguments"||s==="caller")return;let r=Object.getOwnPropertyDescriptor(t,s),i=Object.getOwnPropertyDescriptor(e,s);!g$(r,i)&&n||Object.defineProperty(t,s,i)},g$=function(t,e){return t===void 0||t.configurable||t.writable===e.writable&&t.enumerable===e.enumerable&&t.configurable===e.configurable&&(t.writable||t.value===e.value)},y$=(t,e)=>{let s=Object.getPrototypeOf(e);s!==Object.getPrototypeOf(t)&&Object.setPrototypeOf(t,s)},x$=(t,e)=>`/* Wrapped ${t}*/
229
229
  ${e}`,b$=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),S$=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),v$=(t,e,s)=>{let n=s===""?"":`with ${s.trim()}() `,r=x$.bind(null,n,e.toString());Object.defineProperty(r,"name",S$);let{writable:i,enumerable:o,configurable:a}=b$;Object.defineProperty(t,"toString",{value:r,writable:i,enumerable:o,configurable:a})};function gy(t,e,{ignoreNonConfigurable:s=!1}={}){let{name:n}=t;for(let r of Reflect.ownKeys(e))h$(t,e,r,s);return y$(t,e),v$(t,e,n),t}var Cp=new WeakMap,uF=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let s,n=0,r=t.displayName||t.name||"<anonymous>",i=function(...o){if(Cp.set(i,++n),n===1)s=t.apply(this,o),t=void 0;else if(e.throw===!0)throw new Error(`Function \`${r}\` can only be called once`);return s};return gy(i,t),Cp.set(i,n),i};uF.callCount=t=>{if(!Cp.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return Cp.get(t)};var lF=uF;var dF=ou.default.stderr.isTTY?ou.default.stderr:ou.default.stdout.isTTY?ou.default.stdout:void 0,C$=dF?lF(()=>{xd(()=>{dF.write("\x1B[?25h")},{alwaysLast:!0})}):()=>{},pF=C$;var Dp=!1,Ba={};Ba.show=(t=yy.default.stderr)=>{t.isTTY&&(Dp=!1,t.write("\x1B[?25h"))};Ba.hide=(t=yy.default.stderr)=>{t.isTTY&&(pF(),Dp=!0,t.write("\x1B[?25l"))};Ba.toggle=(t,e)=>{t!==void 0&&(Dp=t),Dp?Ba.show(e):Ba.hide(e)};var xy=Ba;var lu=te(by(),1);var rn=te(require("node:process"),1);function Sy(){return rn.default.platform!=="win32"?rn.default.env.TERM!=="linux":!!rn.default.env.CI||!!rn.default.env.WT_SESSION||!!rn.default.env.TERMINUS_SUBLIME||rn.default.env.ConEmuTask==="{cmd::Cmder}"||rn.default.env.TERM_PROGRAM==="Terminus-Sublime"||rn.default.env.TERM_PROGRAM==="vscode"||rn.default.env.TERM==="xterm-256color"||rn.default.env.TERM==="alacritty"||rn.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var w$={info:Ve.blue("\u2139"),success:Ve.green("\u2714"),warning:Ve.yellow("\u26A0"),error:Ve.red("\u2716")},A$={info:Ve.blue("i"),success:Ve.green("\u221A"),warning:Ve.yellow("\u203C"),error:Ve.red("\xD7")},E$=Sy()?w$:A$,au=E$;function vy({onlyFirst:t=!1}={}){let s=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(s,t?void 0:"g")}var I$=vy();function cu(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(I$,"")}function gF(t){return t===161||t===164||t===167||t===168||t===170||t===173||t===174||t>=176&&t<=180||t>=182&&t<=186||t>=188&&t<=191||t===198||t===208||t===215||t===216||t>=222&&t<=225||t===230||t>=232&&t<=234||t===236||t===237||t===240||t===242||t===243||t>=247&&t<=250||t===252||t===254||t===257||t===273||t===275||t===283||t===294||t===295||t===299||t>=305&&t<=307||t===312||t>=319&&t<=322||t===324||t>=328&&t<=331||t===333||t===338||t===339||t===358||t===359||t===363||t===462||t===464||t===466||t===468||t===470||t===472||t===474||t===476||t===593||t===609||t===708||t===711||t>=713&&t<=715||t===717||t===720||t>=728&&t<=731||t===733||t===735||t>=768&&t<=879||t>=913&&t<=929||t>=931&&t<=937||t>=945&&t<=961||t>=963&&t<=969||t===1025||t>=1040&&t<=1103||t===1105||t===8208||t>=8211&&t<=8214||t===8216||t===8217||t===8220||t===8221||t>=8224&&t<=8226||t>=8228&&t<=8231||t===8240||t===8242||t===8243||t===8245||t===8251||t===8254||t===8308||t===8319||t>=8321&&t<=8324||t===8364||t===8451||t===8453||t===8457||t===8467||t===8470||t===8481||t===8482||t===8486||t===8491||t===8531||t===8532||t>=8539&&t<=8542||t>=8544&&t<=8555||t>=8560&&t<=8569||t===8585||t>=8592&&t<=8601||t===8632||t===8633||t===8658||t===8660||t===8679||t===8704||t===8706||t===8707||t===8711||t===8712||t===8715||t===8719||t===8721||t===8725||t===8730||t>=8733&&t<=8736||t===8739||t===8741||t>=8743&&t<=8748||t===8750||t>=8756&&t<=8759||t===8764||t===8765||t===8776||t===8780||t===8786||t===8800||t===8801||t>=8804&&t<=8807||t===8810||t===8811||t===8814||t===8815||t===8834||t===8835||t===8838||t===8839||t===8853||t===8857||t===8869||t===8895||t===8978||t>=9312&&t<=9449||t>=9451&&t<=9547||t>=9552&&t<=9587||t>=9600&&t<=9615||t>=9618&&t<=9621||t===9632||t===9633||t>=9635&&t<=9641||t===9650||t===9651||t===9654||t===9655||t===9660||t===9661||t===9664||t===9665||t>=9670&&t<=9672||t===9675||t>=9678&&t<=9681||t>=9698&&t<=9701||t===9711||t===9733||t===9734||t===9737||t===9742||t===9743||t===9756||t===9758||t===9792||t===9794||t===9824||t===9825||t>=9827&&t<=9829||t>=9831&&t<=9834||t===9836||t===9837||t===9839||t===9886||t===9887||t===9919||t>=9926&&t<=9933||t>=9935&&t<=9939||t>=9941&&t<=9953||t===9955||t===9960||t===9961||t>=9963&&t<=9969||t===9972||t>=9974&&t<=9977||t===9979||t===9980||t===9982||t===9983||t===10045||t>=10102&&t<=10111||t>=11094&&t<=11097||t>=12872&&t<=12879||t>=57344&&t<=63743||t>=65024&&t<=65039||t===65533||t>=127232&&t<=127242||t>=127248&&t<=127277||t>=127280&&t<=127337||t>=127344&&t<=127373||t===127375||t===127376||t>=127387&&t<=127404||t>=917760&&t<=917999||t>=983040&&t<=1048573||t>=1048576&&t<=1114109}function yF(t){return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510}function xF(t){return t>=4352&&t<=4447||t===8986||t===8987||t===9001||t===9002||t>=9193&&t<=9196||t===9200||t===9203||t===9725||t===9726||t===9748||t===9749||t>=9776&&t<=9783||t>=9800&&t<=9811||t===9855||t>=9866&&t<=9871||t===9875||t===9889||t===9898||t===9899||t===9917||t===9918||t===9924||t===9925||t===9934||t===9940||t===9962||t===9970||t===9971||t===9973||t===9978||t===9981||t===9989||t===9994||t===9995||t===10024||t===10060||t===10062||t>=10067&&t<=10069||t===10071||t>=10133&&t<=10135||t===10160||t===10175||t===11035||t===11036||t===11088||t===11093||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12773||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=94176&&t<=94180||t===94192||t===94193||t>=94208&&t<=100343||t>=100352&&t<=101589||t>=101631&&t<=101640||t>=110576&&t<=110579||t>=110581&&t<=110587||t===110589||t===110590||t>=110592&&t<=110882||t===110898||t>=110928&&t<=110930||t===110933||t>=110948&&t<=110951||t>=110960&&t<=111355||t>=119552&&t<=119638||t>=119648&&t<=119670||t===126980||t===127183||t===127374||t>=127377&&t<=127386||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t===127568||t===127569||t>=127584&&t<=127589||t>=127744&&t<=127776||t>=127789&&t<=127797||t>=127799&&t<=127868||t>=127870&&t<=127891||t>=127904&&t<=127946||t>=127951&&t<=127955||t>=127968&&t<=127984||t===127988||t>=127992&&t<=128062||t===128064||t>=128066&&t<=128252||t>=128255&&t<=128317||t>=128331&&t<=128334||t>=128336&&t<=128359||t===128378||t===128405||t===128406||t===128420||t>=128507&&t<=128591||t>=128640&&t<=128709||t===128716||t>=128720&&t<=128722||t>=128725&&t<=128727||t>=128732&&t<=128735||t===128747||t===128748||t>=128756&&t<=128764||t>=128992&&t<=129003||t===129008||t>=129292&&t<=129338||t>=129340&&t<=129349||t>=129351&&t<=129535||t>=129648&&t<=129660||t>=129664&&t<=129673||t>=129679&&t<=129734||t>=129742&&t<=129756||t>=129759&&t<=129769||t>=129776&&t<=129784||t>=131072&&t<=196605||t>=196608&&t<=262141}function k$(t){if(!Number.isSafeInteger(t))throw new TypeError(`Expected a code point, got \`${typeof t}\`.`)}function bF(t,{ambiguousAsWide:e=!1}={}){return k$(t),yF(t)||xF(t)||e&&gF(t)?2:1}var CF=te(vF(),1),R$=new Intl.Segmenter,F$=new RegExp("^\\p{Default_Ignorable_Code_Point}$","u");function Cy(t,e={}){if(typeof t!="string"||t.length===0)return 0;let{ambiguousIsNarrow:s=!0,countAnsiEscapeCodes:n=!1}=e;if(n||(t=cu(t)),t.length===0)return 0;let r=0,i={ambiguousAsWide:!s};for(let{segment:o}of R$.segment(t)){let a=o.codePointAt(0);if(!(a<=31||a>=127&&a<=159)&&!(a>=8203&&a<=8207||a===65279)&&!(a>=768&&a<=879||a>=6832&&a<=6911||a>=7616&&a<=7679||a>=8400&&a<=8447||a>=65056&&a<=65071)&&!(a>=55296&&a<=57343)&&!(a>=65024&&a<=65039)&&!F$.test(o)){if((0,CF.default)().test(o)){r+=2;continue}r+=bF(a,i)}}return r}function Dy({stream:t=process.stdout}={}){return!!(t&&t.isTTY&&process.env.TERM!=="dumb"&&!("CI"in process.env))}var wy=te(require("node:process"),1);function Ay(){let{env:t}=wy.default,{TERM:e,TERM_PROGRAM:s}=t;return wy.default.platform!=="win32"?e!=="linux":!!t.WT_SESSION||!!t.TERMINUS_SUBLIME||t.ConEmuTask==="{cmd::Cmder}"||s==="Terminus-Sublime"||s==="vscode"||e==="xterm-256color"||e==="alacritty"||e==="rxvt-unicode"||e==="rxvt-unicode-256color"||t.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Cn=te(require("node:process"),1),_$=3,Ey=class{#n=0;start(){this.#n++,this.#n===1&&this.#s()}stop(){if(this.#n<=0)throw new Error("`stop` called more times than `start`");this.#n--,this.#n===0&&this.#e()}#s(){Cn.default.platform==="win32"||!Cn.default.stdin.isTTY||(Cn.default.stdin.setRawMode(!0),Cn.default.stdin.on("data",this.#i),Cn.default.stdin.resume())}#e(){Cn.default.stdin.isTTY&&(Cn.default.stdin.off("data",this.#i),Cn.default.stdin.pause(),Cn.default.stdin.setRawMode(!1))}#i(e){e[0]===_$&&Cn.default.emit("SIGINT")}},T$=new Ey,Iy=T$;var P$=te(by(),1),ky=class{#n=0;#s=!1;#e=0;#i=-1;#p=0;#t;#o;#r;#f;#h;#u;#l;#d;#g;#a;#c;color;constructor(e){typeof e=="string"&&(e={text:e}),this.#t={color:"cyan",stream:uu.default.stderr,discardStdin:!0,hideCursor:!0,...e},this.color=this.#t.color,this.spinner=this.#t.spinner,this.#h=this.#t.interval,this.#r=this.#t.stream,this.#u=typeof this.#t.isEnabled=="boolean"?this.#t.isEnabled:Dy({stream:this.#r}),this.#l=typeof this.#t.isSilent=="boolean"?this.#t.isSilent:!1,this.text=this.#t.text,this.prefixText=this.#t.prefixText,this.suffixText=this.#t.suffixText,this.indent=this.#t.indent,uu.default.env.NODE_ENV==="test"&&(this._stream=this.#r,this._isEnabled=this.#u,Object.defineProperty(this,"_linesToClear",{get(){return this.#n},set(s){this.#n=s}}),Object.defineProperty(this,"_frameIndex",{get(){return this.#i}}),Object.defineProperty(this,"_lineCount",{get(){return this.#e}}))}get indent(){return this.#d}set indent(e=0){if(!(e>=0&&Number.isInteger(e)))throw new Error("The `indent` option must be an integer from 0 and up");this.#d=e,this.#m()}get interval(){return this.#h??this.#o.interval??100}get spinner(){return this.#o}set spinner(e){if(this.#i=-1,this.#h=void 0,typeof e=="object"){if(e.frames===void 0)throw new Error("The given spinner must have a `frames` property");this.#o=e}else if(!Ay())this.#o=lu.default.line;else if(e===void 0)this.#o=lu.default.dots;else if(e!=="default"&&lu.default[e])this.#o=lu.default[e];else throw new Error(`There is no built-in spinner named '${e}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`)}get text(){return this.#g}set text(e=""){this.#g=e,this.#m()}get prefixText(){return this.#a}set prefixText(e=""){this.#a=e,this.#m()}get suffixText(){return this.#c}set suffixText(e=""){this.#c=e,this.#m()}get isSpinning(){return this.#f!==void 0}#y(e=this.#a,s=" "){return typeof e=="string"&&e!==""?e+s:typeof e=="function"?e()+s:""}#x(e=this.#c,s=" "){return typeof e=="string"&&e!==""?s+e:typeof e=="function"?s+e():""}#m(){let e=this.#r.columns??80,s=this.#y(this.#a,"-"),n=this.#x(this.#c,"-"),r=" ".repeat(this.#d)+s+"--"+this.#g+"--"+n;this.#e=0;for(let i of cu(r).split(`
230
230
  `))this.#e+=Math.max(1,Math.ceil(Cy(i,{countAnsiEscapeCodes:!0})/e))}get isEnabled(){return this.#u&&!this.#l}set isEnabled(e){if(typeof e!="boolean")throw new TypeError("The `isEnabled` option must be a boolean");this.#u=e}get isSilent(){return this.#l}set isSilent(e){if(typeof e!="boolean")throw new TypeError("The `isSilent` option must be a boolean");this.#l=e}frame(){let e=Date.now();(this.#i===-1||e-this.#p>=this.interval)&&(this.#i=++this.#i%this.#o.frames.length,this.#p=e);let{frames:s}=this.#o,n=s[this.#i];this.color&&(n=Ve[this.color](n));let r=typeof this.#a=="string"&&this.#a!==""?this.#a+" ":"",i=typeof this.text=="string"?" "+this.text:"",o=typeof this.#c=="string"&&this.#c!==""?" "+this.#c:"";return r+n+i+o}clear(){if(!this.#u||!this.#r.isTTY)return this;this.#r.cursorTo(0);for(let e=0;e<this.#n;e++)e>0&&this.#r.moveCursor(0,-1),this.#r.clearLine(1);return(this.#d||this.lastIndent!==this.#d)&&this.#r.cursorTo(this.#d),this.lastIndent=this.#d,this.#n=0,this}render(){return this.#l?this:(this.clear(),this.#r.write(this.frame()),this.#n=this.#e,this)}start(e){return e&&(this.text=e),this.#l?this:this.#u?this.isSpinning?this:(this.#t.hideCursor&&xy.hide(this.#r),this.#t.discardStdin&&uu.default.stdin.isTTY&&(this.#s=!0,Iy.start()),this.render(),this.#f=setInterval(this.render.bind(this),this.interval),this):(this.text&&this.#r.write(`- ${this.text}
@@ -239,7 +239,7 @@ ${ut.primary.bold(`${$t.rocket} ${s}`)}`),console.log(`${ut.comment("\u2500".rep
239
239
  ${ut.primary.bold(`${$t.chart} Analysis Complete!`)}`),console.log(ut.comment("\u2500".repeat(50))),console.log(ut.success(`\u2705 Completed: ${n}`)),i>0&&console.log(ut.error(`\u274C Failed: ${i}`)),o>0&&console.log(ut.warning(`\u23F0 Timed out: ${o}`)),console.log(ut.comment(`\u23F1\uFE0F Total time: ${x}s`))}}}createSpinner(e){let s=Ap({text:e,color:"blue",spinner:"dots"}).start();return{stop:n=>{n?s.succeed(n):s.stop()},fail:n=>{s.fail(n||"Failed")},warn:n=>{s.warn(n||"Warning")},info:n=>{s.info(n||"Info")}}}showSummary(e){console.log(`
240
240
  ${ut.primary.bold(`${$t.chart} Analysis Summary`)}`),console.log(ut.comment("\u2500".repeat(40))),console.log(ut.text(`Completed ${e.length} step${e.length===1?"":"s"} successfully!`))}header(e){console.log(`
241
241
  ${ut.primary.bold(`${$t.rocket} ${e}`)}`),console.log(`${ut.comment("\u2500".repeat(60))}
242
- `)}section(e,s=$t.info){console.log(ut.primary.bold(`${s} ${e}`))}success(e,s=$t.success){console.log(ut.success(`${s} ${e}`))}info(e,s=$t.info){console.log(ut.info(`${s} ${e}`))}warning(e,s=$t.warning){console.log(ut.warning(`${s} ${e}`))}error(e,s=$t.error){console.log(ut.error(`${s} ${e}`))}comment(e,s=""){console.log(ut.comment(`${s} ${e}`))}phase1(e){console.log(ut.info(`${$t.phase1} Phase 1: ${e}`))}phase2(e){console.log(ut.primary(`${$t.phase2} Phase 2: ${e}`))}phase3(e){console.log(ut.secondary(`${$t.phase3} Phase 3: ${e}`))}severityBadge(e){switch(e.toUpperCase()){case"CRITICAL":return ut.severity.critical.bold(`${$t.critical} CRITICAL`);case"HIGH":return ut.severity.high.bold(`${$t.high} HIGH`);case"MEDIUM":return ut.severity.medium.bold(`${$t.medium} MEDIUM`);case"LOW":return ut.severity.low.bold(`${$t.low} LOW`);default:return ut.comment(e)}}divider(){console.log(ut.comment("\u2500".repeat(60)))}newline(){console.log("")}clearLine(){process.stdout.write(`\r${" ".repeat(process.stdout.columns)}\r`)}},Ep=Ry.getInstance();var DF=t=>t&&(t.Name||t.ResourceName||t.FunctionName)||"Unnamed";var Fy=null,wF=t=>{Fy=t};var _y=()=>{if(Fy&&!process.env.CI)try{Fy.saveToDisk(),Q.info("\u{1F4BE} Cache saved to disk on exit")}catch(t){Q.warn("\u26A0\uFE0F Could not save cache on exit",{error:t instanceof Error?t.message:String(t)})}};process.on("exit",_y);process.on("SIGINT",()=>{_y(),process.exit(0)});process.on("SIGTERM",()=>{_y(),process.exit(0)});var L$={maxConcurrent:ru.DEFAULT_MAX_CONCURRENT,retryAttempts:ru.DEFAULT_RETRY_ATTEMPTS,retryDelay:ru.DEFAULT_RETRY_DELAY_MS,timeoutMs:ru.DEFAULT_TIMEOUT_MS},O$=t=>{if(!(t instanceof Error))return!1;let e=t.message??"";return e.startsWith("Polling timed out")||e==="Analysis timeout"||e.toLowerCase().includes("timeout")},Ip=(t,e)=>{let s=t.match(/^(.+?)(\s\([^)]+\))?$/);if(!s)return t;let[,n,r=""]=s;return`${Ma(e,n)}${r}`},M$=t=>{let e=tu({ttl:6e4,maxSize:1e3});return({analysisError:s,redactedId:n})=>{let r=s instanceof Error?s.message:"unknown",i=`${n}:${r}`,o=e.get(i)||0;return O$(s)?{status:"timeout",redactedId:n}:(e.set(i,o+1),o>t.retryAttempts?{status:"skipped",redactedId:n}:{status:"fail",redactedId:n,error:s})}},B$=({analyzeResource:t,redactionMapping:e,aggregatedResult:s,errorHandler:n,config:r,authToken:i,fingerprint:o,stackName:a,analysisCache:c,originalResources:u,relationships:l,aiModelId:d})=>async({redactedId:p,redactedResources:f,findingsByResource:m,progressTracker:g})=>{let h=m.get(p)||[],x=f[p];if(!x)return{status:"skipped",redactedId:p};let b=py(p,x,i,o,[]),S=fy(b),C=e[p];if(!C)return{status:"skipped",redactedId:p};let I=C,E=()=>(s[I]||(s[I]={issues:[]}),s[I]),w=c.get(S);if(w){let L=(w.issues||[]).map(k=>({...k,resource:I,resourceId:I})),G=E();return G.issues.push(...mo({existing:G.issues,incoming:L})),G.resourceName=w.resourceName,{status:"success",redactedId:p,resourceKey:I,remappedIssues:L,resourceName:w.resourceName}}let j=Ma(a,C),H=Ma("cdk-insights-stack",a),z=pp(C,l,u),q={dependencies:z.dependencies.map(L=>Ip(L,a)),dependents:z.dependents.map(L=>Ip(L,a)),usageDescription:z.usageDescription};for(let L=1;L<=r.retryAttempts;L++)try{let G=await Promise.race([t(H,j,x,x.Type,i,o,h,g,q,d),new Promise((V,se)=>setTimeout(()=>se(new Error("Analysis timeout")),r.timeoutMs))]);G.resourceId=I;let k=(G.issues||[]).map(V=>({...V,resource:I,resourceId:I})),U=E();return U.issues.push(...mo({existing:U.issues,incoming:k})),U.resourceName=G.resourceName,c.set(S,G,b),{status:"success",redactedId:p,resourceKey:I,remappedIssues:k,resourceName:G.resourceName}}catch(G){if(L===r.retryAttempts)return n({analysisError:G,redactedId:p});await new Promise(k=>setTimeout(k,r.retryDelay*2**(L-1)))}return{status:"fail",redactedId:p,error:new Error("Max retries exceeded")}},N$=async(t,e,s)=>{let n=Math.max(1,Math.floor(e)),r=0,i=Array.from({length:Math.min(n,t.length)}).map(async()=>{for(;r<t.length;){let o=r;r+=1;let a=t[o];await s(a)}});await Promise.allSettled(i)},W$=10,AF=({analyzeResource:t,analyzeResourcesBatch:e,redactResources:s,config:n=L$})=>async({stackName:r,resources:i,authToken:o,existingFindingsMap:a,pathToLogicalId:c,fingerprint:u,noCache:l=!1,cacheConfig:d,aiModelId:p,aiBatchSize:f})=>{let m={},g=[],h={startTime:Date.now(),processedCount:0,successCount:0,failureCount:0,timeoutCount:0},{redactedResources:x,mapping:y}=s(i),b=cF(a,y,c),S=new Map;for(let Y of b){let Z=S.get(Y.resourceId);Z?Z.push(Y):S.set(Y.resourceId,[Y])}let C=Object.keys(x),I=C.length,E=po(i),w=new xp({ttl:d?.ttl||6*60*60*1e3,maxSize:d?.maxSize||5e3,disabled:l||!d?.enabled});wF(w);let j=M$(n),H=B$({analyzeResource:t,redactionMapping:y,aggregatedResult:m,errorHandler:j,config:n,authToken:o,fingerprint:u,stackName:r,analysisCache:w,originalResources:i,relationships:E,aiModelId:p}),z=Ep.createSingleLineProgressTracker(I,"Analyzing resources with AI"),q=Math.min(Math.max(1,Math.floor(f??1)),W$);if(q>1&&!!e&&e){Q.debug("Batched analysis enabled",{batchSize:q,totalResources:I});let Y=Ma("cdk-insights-stack",r),Z=ee=>{let le=pp(ee,E,i);return{dependencies:le.dependencies.map(Ce=>Ip(Ce,r)),dependents:le.dependents.map(Ce=>Ip(Ce,r)),usageDescription:le.usageDescription}};for(let ee=0;ee<C.length;ee+=q){let le=C.slice(ee,ee+q),Ce=async()=>{for(let ne of le){let me=await H({redactedId:ne,redactedResources:x,findingsByResource:S,progressTracker:z});switch(h.processedCount++,me.status){case"success":h.successCount++;break;case"timeout":h.timeoutCount++,g.push({redactedId:ne,resourceData:x[ne],resourceType:x[ne].Type,existingFindings:S.get(ne)||[]});break;case"fail":case"skipped":h.failureCount++;break}}},K=new Map,Re=[];for(let ne of le){let me=x[ne],ue=y[ne];if(!me||!ue){h.processedCount++,h.failureCount++;continue}let xe=py(ne,me,o,u,[]),Ae=fy(xe),Ge=w.get(Ae);if(Ge){let kt=(Ge.issues||[]).map(R=>({...R,resource:ue,resourceId:ue}));m[ue]||(m[ue]={issues:[]});let rs=m[ue];rs.issues.push(...mo({existing:rs.issues,incoming:kt})),rs.resourceName=Ge.resourceName,h.processedCount++,h.successCount++;continue}let St=Ma(r,ue);K.set(St,{redactedId:ne,originalResourceId:ue,cacheKey:Ae,cacheComponents:xe}),Re.push({stableResourceId:St,resourceData:me,resourceType:me.Type,context:Z(ue),existingFindings:S.get(ne)||[]})}if(Re.length!==0)try{let ne=await Promise.race([e(Y,Re,o,u,p),new Promise((me,ue)=>setTimeout(()=>ue(new Error("Analysis timeout")),n.timeoutMs))]);for(let[me,ue]of K){let xe=ne.get(me);if(h.processedCount++,!xe){Q.warn(`Batched response missing entry for resource ${ue.originalResourceId}`,{stableResourceId:me,redactedId:ue.redactedId}),h.failureCount++;continue}let Ae=(xe.issues||[]).map(St=>({...St,resource:ue.originalResourceId,resourceId:ue.originalResourceId}));m[ue.originalResourceId]||(m[ue.originalResourceId]={issues:[]});let Ge=m[ue.originalResourceId];Ge.issues.push(...mo({existing:Ge.issues,incoming:Ae})),Ge.resourceName=xe.resourceName,w.set(ue.cacheKey,{resourceId:ue.originalResourceId,issues:xe.issues||[],resourceName:xe.resourceName},ue.cacheComponents),h.successCount++}}catch(ne){Q.warn("Batched analysis call failed \u2014 falling back to per-resource for this chunk",{error:ne instanceof Error?ne.message:String(ne),chunkSize:le.length}),await Ce()}}}else await N$(C,n.maxConcurrent,async Y=>{Q.debug(`Starting analysis for resource ${Y}`,{redactedId:Y,maxConcurrent:n.maxConcurrent});let Z=await H({redactedId:Y,redactedResources:x,findingsByResource:S,progressTracker:z});switch(h.processedCount++,Q.debug(`Resource ${Y} analysis result: ${Z.status}`,{redactedId:Y,status:Z.status,hasProgressTracker:!!z}),Z.status){case"success":h.successCount++,Q.debug(`Resource ${Y} completed successfully`,{redactedId:Y,resourceKey:Z.resourceKey});break;case"timeout":h.timeoutCount++,Q.warn(`Resource ${Y} timed out`,{redactedId:Y}),g.push({redactedId:Y,resourceData:x[Y],resourceType:x[Y].Type,existingFindings:S.get(Y)||[]});break;case"fail":case"skipped":h.failureCount++,Q.warn(`Resource ${Y} failed or was skipped`,{redactedId:Y,status:Z.status});break}});let G=Date.now()-h.startTime,k=z.getStats();if(Q.debug("Analysis completed with progress tracker stats",{progressTrackerStats:k,performanceMetrics:h,totalTime:G,totalResources:I,maxConcurrent:n.maxConcurrent}),A.analysisComplete(G,h.successCount,h.failureCount,h.timeoutCount),h.failureCount>0||h.timeoutCount>0){A.newline(),A.info("\u{1F4CA} Performance Analysis:");let Y=h.successCount>0?Math.round(G/1e3/h.successCount):0;A.comment(` \u23F1\uFE0F Average completion time: ${Y}s`),A.comment(` \u{1F4CA} Success rate: ${(h.successCount/I*100).toFixed(1)}%`)}if(g.length>0){A.newline(),A.warning("\u23F0 Timed Out Resources:"),A.comment(` \u{1F4CB} Total timed out: ${g.length}`);for(let Y of g){if(A.comment(` \u274C ${Y.resourceType}: ${Y.redactedId}`),Y.resourceData?.Properties){let ee=Y.resourceData.Properties,le=DF(ee);A.comment(` \u{1F4DD} Name: ${le}`)}Y.existingFindings.length>0&&A.comment(` \u{1F50D} Existing findings: ${Y.existingFindings.length}`),Y.resourceData?.Metadata&&A.comment(" \u{1F4CD} Has metadata: Yes"),["AWS::CloudFormation::Stack","AWS::Serverless::Application","AWS::ECS::Service"].includes(Y.resourceType)&&A.comment(" \u26A0\uFE0F Complex resource type - may require extended analysis time")}A.newline(),A.info("\u{1F4A1} Tip: Some resources are taking longer to analyze than expected."),A.comment(" This is normal for complex resources. The analysis will continue with the remaining resources."),A.warning(`Retrying ${g.length} resource${g.length===1?"":"s"} that need a little more time...`)}let U=new Set(Object.keys(m)),V=new Set(Object.values(y)),se=Array.from(V).filter(Y=>!U.has(Y)||!m[Y]?.issues?.length);if(se.length>0){let Y=w.getCachedResultsForResources(se),Z=0;for(let[ee,le]of Array.from(Y.entries())){if(m[ee]?.issues?.length>0)continue;let Ce=(le.issues||[]).map(K=>({...K,resource:ee,resourceId:ee}));Ce.length>0&&(m[ee]||(m[ee]={issues:[]}),m[ee].issues.push(...Ce),m[ee].resourceName=le.resourceName,Z+=Ce.length)}Z>0}return m};var Ty=require("node:child_process"),Zt=te(require("node:fs")),Py=te(require("node:os")),du=te(require("node:path"));var kF="1.27.0",$$={Security:"https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/",Reliability:"https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/","Performance Efficiency":"https://docs.aws.amazon.com/wellarchitected/latest/performance-efficiency-pillar/","Cost Optimization":"https://docs.aws.amazon.com/wellarchitected/latest/cost-optimization-pillar/","Operational Excellence":"https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/",Sustainability:"https://docs.aws.amazon.com/wellarchitected/latest/sustainability-pillar/"},EF=t=>t.toLowerCase().replace(/[^\w\s-]/g,"").trim().replace(/\s+/g,"-").replace(/-+/g,"-"),j$=(t,e)=>{let s=0;if(s+=2e3,e){let n=Object.values(t).filter(r=>{let i=r.sources.cdkInsights?.issues??[],o=r.sources.cdkNag?.issues??[];return i.length>0||o.length>0});s+=n.length*100}for(let[,n]of Object.entries(t)){let r=n.sources.cdkInsights?.issues??[],i=n.sources.cdkNag?.issues??[];for(let o of[...r,...i])s+=o.issue.length,s+=o.recommendation?.length||0,s+=o.codeSnippet?.length||0,s+=500}return s},U$=t=>t?t.split(`
242
+ `)}section(e,s=$t.info){console.log(ut.primary.bold(`${s} ${e}`))}success(e,s=$t.success){console.log(ut.success(`${s} ${e}`))}info(e,s=$t.info){console.log(ut.info(`${s} ${e}`))}warning(e,s=$t.warning){console.log(ut.warning(`${s} ${e}`))}error(e,s=$t.error){console.log(ut.error(`${s} ${e}`))}comment(e,s=""){console.log(ut.comment(`${s} ${e}`))}phase1(e){console.log(ut.info(`${$t.phase1} Phase 1: ${e}`))}phase2(e){console.log(ut.primary(`${$t.phase2} Phase 2: ${e}`))}phase3(e){console.log(ut.secondary(`${$t.phase3} Phase 3: ${e}`))}severityBadge(e){switch(e.toUpperCase()){case"CRITICAL":return ut.severity.critical.bold(`${$t.critical} CRITICAL`);case"HIGH":return ut.severity.high.bold(`${$t.high} HIGH`);case"MEDIUM":return ut.severity.medium.bold(`${$t.medium} MEDIUM`);case"LOW":return ut.severity.low.bold(`${$t.low} LOW`);default:return ut.comment(e)}}divider(){console.log(ut.comment("\u2500".repeat(60)))}newline(){console.log("")}clearLine(){process.stdout.write(`\r${" ".repeat(process.stdout.columns)}\r`)}},Ep=Ry.getInstance();var DF=t=>t&&(t.Name||t.ResourceName||t.FunctionName)||"Unnamed";var Fy=null,wF=t=>{Fy=t};var _y=()=>{if(Fy&&!process.env.CI)try{Fy.saveToDisk(),Q.info("\u{1F4BE} Cache saved to disk on exit")}catch(t){Q.warn("\u26A0\uFE0F Could not save cache on exit",{error:t instanceof Error?t.message:String(t)})}};process.on("exit",_y);process.on("SIGINT",()=>{_y(),process.exit(0)});process.on("SIGTERM",()=>{_y(),process.exit(0)});var L$={maxConcurrent:ru.DEFAULT_MAX_CONCURRENT,retryAttempts:ru.DEFAULT_RETRY_ATTEMPTS,retryDelay:ru.DEFAULT_RETRY_DELAY_MS,timeoutMs:ru.DEFAULT_TIMEOUT_MS},O$=t=>{if(!(t instanceof Error))return!1;let e=t.message??"";return e.startsWith("Polling timed out")||e==="Analysis timeout"||e.toLowerCase().includes("timeout")},Ip=(t,e)=>{let s=t.match(/^(.+?)(\s\([^)]+\))?$/);if(!s)return t;let[,n,r=""]=s;return`${Ma(e,n)}${r}`},M$=t=>{let e=tu({ttl:6e4,maxSize:1e3});return({analysisError:s,redactedId:n})=>{let r=s instanceof Error?s.message:"unknown",i=`${n}:${r}`,o=e.get(i)||0;return O$(s)?{status:"timeout",redactedId:n}:(e.set(i,o+1),o>t.retryAttempts?{status:"skipped",redactedId:n}:{status:"fail",redactedId:n,error:s})}},B$=({analyzeResource:t,redactionMapping:e,aggregatedResult:s,errorHandler:n,config:r,authToken:i,fingerprint:o,stackName:a,analysisCache:c,originalResources:u,relationships:l,aiModelId:d})=>async({redactedId:p,redactedResources:f,findingsByResource:m,progressTracker:g})=>{let h=m.get(p)||[],x=f[p];if(!x)return{status:"skipped",redactedId:p};let b=py(p,x,i,o,[]),S=fy(b),C=e[p];if(!C)return{status:"skipped",redactedId:p};let I=C,E=()=>(s[I]||(s[I]={issues:[]}),s[I]),w=c.get(S);if(w){let L=(w.issues||[]).map(k=>({...k,resource:I,resourceId:I})),G=E();return G.issues.push(...mo({existing:G.issues,incoming:L})),G.resourceName=w.resourceName,{status:"success",redactedId:p,resourceKey:I,remappedIssues:L,resourceName:w.resourceName}}let j=Ma(a,C),H=Ma("cdk-insights-stack",a),z=pp(C,l,u),q={dependencies:z.dependencies.map(L=>Ip(L,a)),dependents:z.dependents.map(L=>Ip(L,a)),usageDescription:z.usageDescription};for(let L=1;L<=r.retryAttempts;L++)try{let G=await Promise.race([t(H,j,x,x.Type,i,o,h,g,q,d),new Promise((V,se)=>setTimeout(()=>se(new Error("Analysis timeout")),r.timeoutMs))]);G.resourceId=I;let k=(G.issues||[]).map(V=>({...V,resource:I,resourceId:I})),U=E();return U.issues.push(...mo({existing:U.issues,incoming:k})),U.resourceName=G.resourceName,c.set(S,G,b),{status:"success",redactedId:p,resourceKey:I,remappedIssues:k,resourceName:G.resourceName}}catch(G){if(L===r.retryAttempts)return n({analysisError:G,redactedId:p});await new Promise(k=>setTimeout(k,r.retryDelay*2**(L-1)))}return{status:"fail",redactedId:p,error:new Error("Max retries exceeded")}},N$=async(t,e,s)=>{let n=Math.max(1,Math.floor(e)),r=0,i=Array.from({length:Math.min(n,t.length)}).map(async()=>{for(;r<t.length;){let o=r;r+=1;let a=t[o];await s(a)}});await Promise.allSettled(i)},W$=10,AF=({analyzeResource:t,analyzeResourcesBatch:e,redactResources:s,config:n=L$})=>async({stackName:r,resources:i,authToken:o,existingFindingsMap:a,pathToLogicalId:c,fingerprint:u,noCache:l=!1,cacheConfig:d,aiModelId:p,aiBatchSize:f})=>{let m={},g=[],h={startTime:Date.now(),processedCount:0,successCount:0,failureCount:0,timeoutCount:0},{redactedResources:x,mapping:y}=s(i),b=cF(a,y,c),S=new Map;for(let Y of b){let Z=S.get(Y.resourceId);Z?Z.push(Y):S.set(Y.resourceId,[Y])}let C=Object.keys(x),I=C.length,E=po(i),w=new xp({ttl:d?.ttl||6*60*60*1e3,maxSize:d?.maxSize||5e3,disabled:l||!d?.enabled});wF(w);let j=M$(n),H=B$({analyzeResource:t,redactionMapping:y,aggregatedResult:m,errorHandler:j,config:n,authToken:o,fingerprint:u,stackName:r,analysisCache:w,originalResources:i,relationships:E,aiModelId:p}),z=Ep.createSingleLineProgressTracker(I,"Analyzing resources with AI"),q=Math.min(Math.max(1,Math.floor(f??1)),W$);if(q>1&&!!e&&e){Q.debug("Batched analysis enabled",{batchSize:q,totalResources:I});let Y=Ma("cdk-insights-stack",r),Z=ee=>{let le=pp(ee,E,i);return{dependencies:le.dependencies.map(Ce=>Ip(Ce,r)),dependents:le.dependents.map(Ce=>Ip(Ce,r)),usageDescription:le.usageDescription}};for(let ee=0;ee<C.length;ee+=q){let le=C.slice(ee,ee+q),Ce=async()=>{for(let ne of le){let me=await H({redactedId:ne,redactedResources:x,findingsByResource:S,progressTracker:z});switch(h.processedCount++,me.status){case"success":h.successCount++;break;case"timeout":h.timeoutCount++,g.push({redactedId:ne,resourceData:x[ne],resourceType:x[ne].Type,existingFindings:S.get(ne)||[]});break;case"fail":case"skipped":h.failureCount++;break}}},K=new Map,Re=[];for(let ne of le){let me=x[ne],ue=y[ne];if(!me||!ue){h.processedCount++,h.failureCount++;continue}let xe=py(ne,me,o,u,[]),Ae=fy(xe),Ge=w.get(Ae);if(Ge){let kt=(Ge.issues||[]).map(R=>({...R,resource:ue,resourceId:ue}));m[ue]||(m[ue]={issues:[]});let rs=m[ue];rs.issues.push(...mo({existing:rs.issues,incoming:kt})),rs.resourceName=Ge.resourceName,h.processedCount++,h.successCount++;continue}let St=Ma(r,ue);K.set(St,{redactedId:ne,originalResourceId:ue,cacheKey:Ae,cacheComponents:xe}),Re.push({stableResourceId:St,resourceData:me,resourceType:me.Type,context:Z(ue),existingFindings:S.get(ne)||[]})}if(Re.length!==0)try{let ne=await Promise.race([e(Y,Re,o,u,p),new Promise((me,ue)=>setTimeout(()=>ue(new Error("Analysis timeout")),n.timeoutMs))]);for(let[me,ue]of K){let xe=ne.get(me);if(h.processedCount++,!xe){Q.warn(`Batched response missing entry for resource ${ue.originalResourceId}`,{stableResourceId:me,redactedId:ue.redactedId}),h.failureCount++;continue}let Ae=(xe.issues||[]).map(St=>({...St,resource:ue.originalResourceId,resourceId:ue.originalResourceId}));m[ue.originalResourceId]||(m[ue.originalResourceId]={issues:[]});let Ge=m[ue.originalResourceId];Ge.issues.push(...mo({existing:Ge.issues,incoming:Ae})),Ge.resourceName=xe.resourceName,w.set(ue.cacheKey,{resourceId:ue.originalResourceId,issues:xe.issues||[],resourceName:xe.resourceName},ue.cacheComponents),h.successCount++}}catch(ne){Q.warn("Batched analysis call failed \u2014 falling back to per-resource for this chunk",{error:ne instanceof Error?ne.message:String(ne),chunkSize:le.length}),await Ce()}}}else await N$(C,n.maxConcurrent,async Y=>{Q.debug(`Starting analysis for resource ${Y}`,{redactedId:Y,maxConcurrent:n.maxConcurrent});let Z=await H({redactedId:Y,redactedResources:x,findingsByResource:S,progressTracker:z});switch(h.processedCount++,Q.debug(`Resource ${Y} analysis result: ${Z.status}`,{redactedId:Y,status:Z.status,hasProgressTracker:!!z}),Z.status){case"success":h.successCount++,Q.debug(`Resource ${Y} completed successfully`,{redactedId:Y,resourceKey:Z.resourceKey});break;case"timeout":h.timeoutCount++,Q.warn(`Resource ${Y} timed out`,{redactedId:Y}),g.push({redactedId:Y,resourceData:x[Y],resourceType:x[Y].Type,existingFindings:S.get(Y)||[]});break;case"fail":case"skipped":h.failureCount++,Q.warn(`Resource ${Y} failed or was skipped`,{redactedId:Y,status:Z.status});break}});let G=Date.now()-h.startTime,k=z.getStats();if(Q.debug("Analysis completed with progress tracker stats",{progressTrackerStats:k,performanceMetrics:h,totalTime:G,totalResources:I,maxConcurrent:n.maxConcurrent}),A.analysisComplete(G,h.successCount,h.failureCount,h.timeoutCount),h.failureCount>0||h.timeoutCount>0){A.newline(),A.info("\u{1F4CA} Performance Analysis:");let Y=h.successCount>0?Math.round(G/1e3/h.successCount):0;A.comment(` \u23F1\uFE0F Average completion time: ${Y}s`),A.comment(` \u{1F4CA} Success rate: ${(h.successCount/I*100).toFixed(1)}%`)}if(g.length>0){A.newline(),A.warning("\u23F0 Timed Out Resources:"),A.comment(` \u{1F4CB} Total timed out: ${g.length}`);for(let Y of g){if(A.comment(` \u274C ${Y.resourceType}: ${Y.redactedId}`),Y.resourceData?.Properties){let ee=Y.resourceData.Properties,le=DF(ee);A.comment(` \u{1F4DD} Name: ${le}`)}Y.existingFindings.length>0&&A.comment(` \u{1F50D} Existing findings: ${Y.existingFindings.length}`),Y.resourceData?.Metadata&&A.comment(" \u{1F4CD} Has metadata: Yes"),["AWS::CloudFormation::Stack","AWS::Serverless::Application","AWS::ECS::Service"].includes(Y.resourceType)&&A.comment(" \u26A0\uFE0F Complex resource type - may require extended analysis time")}A.newline(),A.info("\u{1F4A1} Tip: Some resources are taking longer to analyze than expected."),A.comment(" This is normal for complex resources. The analysis will continue with the remaining resources."),A.warning(`Retrying ${g.length} resource${g.length===1?"":"s"} that need a little more time...`)}let U=new Set(Object.keys(m)),V=new Set(Object.values(y)),se=Array.from(V).filter(Y=>!U.has(Y)||!m[Y]?.issues?.length);if(se.length>0){let Y=w.getCachedResultsForResources(se),Z=0;for(let[ee,le]of Array.from(Y.entries())){if(m[ee]?.issues?.length>0)continue;let Ce=(le.issues||[]).map(K=>({...K,resource:ee,resourceId:ee}));Ce.length>0&&(m[ee]||(m[ee]={issues:[]}),m[ee].issues.push(...Ce),m[ee].resourceName=le.resourceName,Z+=Ce.length)}Z>0}return m};var Ty=require("node:child_process"),Zt=te(require("node:fs")),Py=te(require("node:os")),du=te(require("node:path"));var kF="1.27.1",$$={Security:"https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/",Reliability:"https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/","Performance Efficiency":"https://docs.aws.amazon.com/wellarchitected/latest/performance-efficiency-pillar/","Cost Optimization":"https://docs.aws.amazon.com/wellarchitected/latest/cost-optimization-pillar/","Operational Excellence":"https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/",Sustainability:"https://docs.aws.amazon.com/wellarchitected/latest/sustainability-pillar/"},EF=t=>t.toLowerCase().replace(/[^\w\s-]/g,"").trim().replace(/\s+/g,"-").replace(/-+/g,"-"),j$=(t,e)=>{let s=0;if(s+=2e3,e){let n=Object.values(t).filter(r=>{let i=r.sources.cdkInsights?.issues??[],o=r.sources.cdkNag?.issues??[];return i.length>0||o.length>0});s+=n.length*100}for(let[,n]of Object.entries(t)){let r=n.sources.cdkInsights?.issues??[],i=n.sources.cdkNag?.issues??[];for(let o of[...r,...i])s+=o.issue.length,s+=o.recommendation?.length||0,s+=o.codeSnippet?.length||0,s+=500}return s},U$=t=>t?t.split(`
243
243
  `).map(e=>e.trim()).filter(Boolean).join(`
244
244
  `):"",IF=t=>{let e=`- **Issue:** ${t.issue}`;return t.recommendation&&(e+=`
245
245
  - **Recommendation:** ${U$(t.recommendation)}`),t.context&&(t.context.property&&(e+=`
@@ -516,10 +516,10 @@ ${o}`)};var OF=require("node:child_process"),MF=()=>{try{return(0,OF.execFileSyn
516
516
  See: https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html`};return e[t]||e.secret||`Use AWS Secrets Manager or SSM Parameter Store to securely manage this value.
517
517
  See: https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html`};var gu=(t,e)=>{switch(t){case"property_name":return e?`Property name "${e}" suggests this contains sensitive data`:"Property name suggests sensitive data";case"value_pattern":return"Value matches a known secret pattern (API key, token, or credential format)";case"high_entropy":return"Value has high entropy (appears random), which is characteristic of secrets";default:return"Value appears to contain sensitive data"}};var yu={WAF_PILLAR:"Security",RULE_ID_PREFIX:"CDK-INSIGHTS-SENSITIVE",FOUND_BY:"cdkInsights"},i_=t=>{switch(t){case"value_pattern":return"CRITICAL";case"property_name":return"HIGH";case"high_entropy":return"MEDIUM"}},o_=t=>{let e=["CRITICAL","HIGH","MEDIUM","LOW"],s="MEDIUM",n=e.indexOf(s);for(let r of t){let i=i_(r.detectionReason),o=e.indexOf(i);o>=0&&o<n&&(s=i,n=o)}return s};var qy=(t,e)=>{let s=t.length,n=s>=20?`${t.slice(0,4)}\u2026${t.slice(-4)}`:null;return{valueLength:s,valueShape:n,...e}},Fj=t=>{for(let e of $y)if(e.test(t))return e.source},_j=t=>{for(let e of jy)if(e.test(t))return e.source},a_=(t,e,s={})=>{let n=[];return s.disabled?{hasSensitiveData:!1,resourceId:e,resourceType:t.Type,findings:[]}:(t.Properties&&Np(t.Properties,"",n,s),{hasSensitiveData:n.length>0,resourceId:e,resourceType:t.Type,findings:n})},Tj=new Set(["Tags"]),Pj=t=>{if(!Array.isArray(t)||t.length===0)return!1;let e=t[0];return typeof e=="object"&&e!==null&&"Key"in e&&"Value"in e},Np=(t,e,s,n)=>{if(t!=null){if(typeof t=="string"){Lj(t,e,s,n);return}if(Array.isArray(t)){if(Pj(t))return;t.forEach((r,i)=>{Np(r,`${e}[${i}]`,s,n)});return}if(typeof t=="object"){if(Bp(t))return;for(let[r,i]of Object.entries(t)){let o=e?`${e}.${r}`:r;if(!(Tj.has(r)&&(Array.isArray(i)||typeof i=="object"))&&!n.ignoreProperties?.includes(o)&&!n_(r)&&!r_(o)){if(Uy(r)){if(typeof i=="string"){if(!c_(i,n)){let a=Vy(r)||"secret";s.push({propertyPath:o,propertyName:r,detectionReason:"property_name",detectionReasonMessage:gu("property_name",r),recommendation:hu(a),diagnostics:qy(i,{matchedPropertyPattern:Fj(r)})})}}else Bp(i)||Np(i,o,s,n);continue}Np(i,o,s,n)}}}}},Lj=(t,e,s,n)=>{if(!c_(t,n)){if(Gy(t)){let r=e.split(".").pop()??e;s.push({propertyPath:e,propertyName:r,detectionReason:"value_pattern",detectionReasonMessage:gu("value_pattern"),recommendation:hu("secret"),diagnostics:qy(t,{matchedValuePattern:_j(t)})});return}if(Wy(t,n.strictMode)){let r=e.split(".").pop()??e,i=Mp(t),o=n.strictMode?4:4.5;s.push({propertyPath:e,propertyName:r,detectionReason:"high_entropy",detectionReasonMessage:gu("high_entropy"),recommendation:hu("secret"),diagnostics:qy(t,{entropy:Math.round(i*100)/100,entropyThreshold:o})})}}},c_=(t,e)=>!!(!t||t.trim()===""||Hy(t)||zy(t)||e.allowPatterns?.some(s=>t.includes(s)));var Ky=(t,e)=>({resourceId:t.resourceId,issue:Oj(t),recommendation:Bj(t),severity:o_(t.findings),wafPillar:yu.WAF_PILLAR,foundBy:yu.FOUND_BY,constructPath:t.resourceId,constructType:t.resourceType,stackName:e,ruleId:yu.RULE_ID_PREFIX,context:{property:t.findings.map(s=>s.propertyPath).join(", "),value:"[REDACTED]",expected:"AWS Secrets Manager or SSM Parameter Store reference",diagnostics:t.findings.map(s=>({propertyPath:s.propertyPath,detectionReason:s.detectionReason,...s.diagnostics}))}}),Oj=t=>{let e=t.findings.length===1?"Sensitive data detected in a resource property":`Sensitive data detected in ${t.findings.length} resource properties`,s=t.findings.map(n=>{let r=Mj(n),i=n.diagnostics?.valueShape?` [shape: ${n.diagnostics.valueShape}]`:n.diagnostics?.valueLength?` [length: ${n.diagnostics.valueLength}]`:"";return` - ${n.propertyPath}: ${r}${i}`});return[`${e}:`,...s,"","This resource was NOT sent to CDK Insights servers."].join(`
518
518
  `)},Mj=t=>{let e=t.diagnostics;switch(t.detectionReason){case"high_entropy":return e?.entropy!==void 0&&e?.entropyThreshold!==void 0?`high entropy (${e.entropy} bits/char, threshold ${e.entropyThreshold})`:"high entropy";case"value_pattern":return e?.matchedValuePattern?`value matches known-secret pattern /${e.matchedValuePattern}/`:"value matches a known-secret pattern";case"property_name":return`sensitive property name "${t.propertyName}"`;default:return"value appears sensitive"}},Bj=t=>{let e=t.findings.map(i=>`'${i.propertyPath}'`).join(", "),s=t.findings.some(i=>i.detectionReason==="high_entropy"),n=t.findings.some(i=>i.detectionReason==="property_name"),r=[];return r.push(" - A hardcoded API key, token, or password \u2192 move to AWS Secrets Manager or SSM Parameter Store."),s&&(r.push(" - A CDK-auto-generated resource name (likely if the property is a *Name) \u2192 provide an explicit name on the construct, or trust the short-circuit shipped with cdk-insights 1.2.7+."),r.push(" - A content hash (git SHA, Docker digest, JWT) \u2192 already exempt in 1.2.7+; upgrade the CLI if this is still firing.")),n&&r.push(" - An SSM parameter path or similar safe reference stored in a sensitive-sounding env var \u2192 pass it via CloudFormation intrinsics (Fn::Sub, !Ref) or SSM dynamic references ({{resolve:ssm:...}}) so the scanner can recognise it."),["Likely causes (in rough order of likelihood):",...r,"","If this is a known false positive, suppress it via the scanner config:",` { "ignoreProperties": [${e}] }`,"","See: https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html"].join(`
519
- `)},Zy=(t,e={})=>{let s=[],n=[],r=0;for(let[i,o]of Object.entries(t)){let a=a_(o,i,e);s.push(a),a.hasSensitiveData&&(n.push(i),r+=a.findings.length)}return{totalResourcesScanned:Object.keys(t).length,resourcesWithSensitiveData:n.length,totalFindings:r,hasSkippedResources:n.length>0,skippedResourceIds:n,detectionResults:s}};var $p=te(require("node:fs")),u_=te(require("node:path"));var Wp=".cdk-insights-rules.json",Nj=new Set(["CRITICAL","HIGH","MEDIUM","LOW"]),Wj=new Set(["Operational Excellence","Security","Cost Optimization","Reliability","Performance Efficiency","Sustainability"]),$j=new Set(["property_exists","property_equals","property_matches","property_gt","property_lt","and","or"]);function l_(t,e){if(!t||typeof t!="object")return qe.warn(`Custom rule '${e}': condition must be an object`),!1;let s=t;if(!s.type||!$j.has(s.type))return qe.warn(`Custom rule '${e}': invalid condition type '${s.type}'`),!1;if(s.type==="and"||s.type==="or")return!Array.isArray(s.conditions)||s.conditions.length===0?(qe.warn(`Custom rule '${e}': '${s.type}' condition requires non-empty conditions array`),!1):s.conditions.every(n=>l_(n,e));if(typeof s.path!="string"||s.path.length===0)return qe.warn(`Custom rule '${e}': condition requires a non-empty 'path'`),!1;if(s.type==="property_matches")try{new RegExp(s.pattern)}catch{return qe.warn(`Custom rule '${e}': invalid regex pattern '${s.pattern}'`),!1}return(s.type==="property_gt"||s.type==="property_lt")&&typeof s.value!="number"?(qe.warn(`Custom rule '${e}': '${s.type}' requires a numeric value`),!1):!0}function jj(t,e){if(!t||typeof t!="object")return qe.warn(`Custom rule at index ${e}: must be an object`),null;let s=t;return typeof s.ruleId!="string"||s.ruleId.length===0?(qe.warn(`Custom rule at index ${e}: ruleId is required`),null):typeof s.name!="string"||s.name.length===0?(qe.warn(`Custom rule '${s.ruleId}': name is required`),null):typeof s.description!="string"?(qe.warn(`Custom rule '${s.ruleId}': description is required`),null):Nj.has(s.severity)?Wj.has(s.wafPillar)?!Array.isArray(s.resourceTypes)||s.resourceTypes.length===0?(qe.warn(`Custom rule '${s.ruleId}': resourceTypes must be a non-empty array`),null):typeof s.recommendation!="string"?(qe.warn(`Custom rule '${s.ruleId}': recommendation is required`),null):l_(s.condition,s.ruleId)?s:null:(qe.warn(`Custom rule '${s.ruleId}': invalid wafPillar '${s.wafPillar}'`),null):(qe.warn(`Custom rule '${s.ruleId}': invalid severity '${s.severity}'`),null)}function d_(t=process.cwd()){let e=u_.join(t,Wp);if(!$p.existsSync(e))return[];try{let s=$p.readFileSync(e,"utf-8"),n=JSON.parse(s);if(!n.rules||!Array.isArray(n.rules))return qe.warn(`${Wp}: 'rules' must be an array`),[];let r=[];for(let i=0;i<n.rules.length;i++){let o=jj(n.rules[i],i);o&&r.push(o)}return r.length>0&&qe.info(`Loaded ${r.length} custom rule(s) from ${Wp}`),r}catch(s){return qe.warn(`Failed to load ${Wp}: ${s instanceof Error?s.message:String(s)}`),[]}}var Yy=require("aws-cdk-lib"),jp=require("cdk-nag");var p_="cdk-insights::",Uj=`${p_}nagFinding::`;var xu="1.0.0";var Gp=async(t,e)=>{try{return await t()}catch(s){return Q.warn(`\u26A0\uFE0F Error in ${e.operationName}:`,{error:s}),e.fallbackValue}},Gj=t=>!t||t.length===0||t.includes("All services"),Hj=(t,e)=>{if(Gj(e))return t;let s=new Set((e??[]).map(n=>`AWS::${n}::`));return Object.fromEntries(Object.entries(t).filter(([,n])=>{for(let r of s)if(n.Type.startsWith(r))return!0;return!1}))},zj=t=>Object.fromEntries(Object.entries(t).filter(([,e])=>!e.Type.startsWith("AWS::CDK::"))),Vj=t=>{let{stackName:e,pathToLogicalId:s}=t;return n=>({resourceId:n,friendlyName:s[n]??n,cdkPath:`${e}/${n}`,isGenerated:!1,sources:{cdkInsights:{issues:[]},cdkNag:{issues:[]}}})},Gr=(t,e,s)=>{let n=t[e];if(n)return n;let r=s(e);return t[e]=r,r},qj=t=>[...t.sources?.cdkInsights?.issues??[],...t.sources?.cdkNag?.issues??[]],f_=t=>{for(let e of Object.values(t)){for(let s of e.sources?.cdkInsights?.issues??[])if(s.severity==="CRITICAL")return!0;for(let s of e.sources?.cdkNag?.issues??[])if(s.severity==="CRITICAL")return!0}return!1},Kj=t=>{for(let[e,s]of Object.entries(t))(s.sources?.cdkInsights?.issues?.length??0)>0||(s.sources?.cdkNag?.issues?.length??0)>0||delete t[e];return t},Up=(t,e,s,n,r,i,o)=>({resourceId:t,issue:e,recommendation:s,severity:n,wafPillar:r,foundBy:o,constructPath:i}),Zj=t=>{let{recommendationMap:e,stackName:s,stackResources:n,manifest:r}=t;try{let i=new Map,o=a=>{let c=i.get(a);if(c)return c;let u=ap(r,a);return i.set(a,u),u};return Object.entries(e).reduce((a,[c,u])=>{let l=u.cdkPath||c,d=o(l),p=n[c]?.Type||"Unknown",f=m=>({...m,...d?.filePath&&{sourceLocation:{filePath:d.filePath,line:d.line||1,column:d.column||1,confidence:d.confidence||"low"}},stackName:s,constructType:p});return a[c]={...u,sources:{cdkInsights:{issues:(u.sources?.cdkInsights?.issues??[]).map(f)},cdkNag:{issues:(u.sources?.cdkNag?.issues??[]).map(f)}}},a},{})}catch(i){return Q.warn("\u26A0\uFE0F Could not enrich issues with source location:",{error:i}),e}},Yj=t=>{let{authToken:e,fingerprint:s,tier:n,quotaValidation:r}=t,i=!!(e&&s&&n),o=!r||r.canRunStaticAnalysis,a=!r||r.canRunAIAnalysis,c=!!(n&&zn.isFeatureEnabled("aiAnalysis",n));return{hasAuth:i,canRunStatic:o,canRunAI:i&&c&&a,isAiEnabledByTier:c,canRunAIByQuota:a}},Jj=async t=>{let{userResources:e,selectedServices:s,constructRegistry:n,canRunStatic:r,customRules:i=[],ruleContext:o}=t,a=Object.keys(e).length;return a===0?{}:r?(A.phase1(`Static analysis on ${a} resource${a===1?"":"s"}`),await Gp(()=>Promise.resolve(ly({Resources:e},Up,s||[],n,i,o)),{operationName:"static analysis",fallbackValue:{}})??{}):(A.warning("\u26A0\uFE0F Static analysis skipped due to license restrictions"),{})},Qj=async t=>{let{stackName:e,userResources:s,inlineFindings:n,pathToLogicalId:r,authToken:i,fingerprint:o,tier:a,noCache:c=!1,cache:u,capabilities:l,aiModelId:d,aiBatchSize:p}=t,f=Object.keys(s).length;if(f===0)return{results:{}};if(!l.hasAuth)return{results:{},skippedReason:"auth"};if(a&&!l.isAiEnabledByTier)return A.comment("\u{1F4A1} AI analysis is available with Pro tier - upgrade for deeper insights"),{results:{},skippedReason:"unavailable"};if(!l.canRunAIByQuota&&l.canRunStatic)return a==="pro"?A.comment("\u{1F4A1} AI analysis skipped \u2014 monthly AI credit allowance reached. Static scans continue; AI resumes next billing cycle."):A.comment("\u{1F4A1} AI analysis skipped \u2014 credit allowance reached. Upgrade to Pro for 5,000 AI credits/month."),{results:{},skippedReason:"cap-reached"};if(!l.canRunAI)return{results:{},skippedReason:"unavailable"};if(!i||!o)return Q.warn("AI analysis skipped: missing authToken or fingerprint"),{results:{},skippedReason:"auth"};A.phase2(`AI analysis on ${f} resource${f===1?"":"s"}`);let m=yn(),g=WF(yt,m),h=UF(yt,m),x=aF(e_),y=AF({analyzeResource:g,analyzeResourcesBatch:h,redactResources:x});return{results:await Gp(()=>y({stackName:e,resources:s,authToken:i,existingFindingsMap:n,pathToLogicalId:r,fingerprint:o,noCache:c,cacheConfig:u,aiModelId:d,aiBatchSize:p}),{operationName:"AI analysis",fallbackValue:{}})??{}}},m_=t=>{let{recommendationMap:e,ignoreRules:s=[],ignorePaths:n=[],acknowledgements:r=[],baselineExclude:i,stackName:o=""}=t;if(s.length===0&&n.length===0&&r.length===0&&(!i||i.size===0))return e;for(let[a,c]of Object.entries(e)){let u=[a,c.cdkPath,c.friendlyName,c.displayName].filter(p=>typeof p=="string"&&p.length>0);if(n.some(p=>u.some(f=>Op(f,p)))){delete e[a];continue}let d=[c.cdkPath].concat(u).filter(p=>typeof p=="string"&&p.length>0);for(let p of["cdkInsights","cdkNag"]){let f=c.sources?.[p];f&&(f.issues=f.issues.filter(m=>{let g=[m.constructPath,...d].filter(x=>typeof x=="string"&&x.length>0);if(Ny(m,g,{ignoreRules:s,acknowledgements:r}))return!1;if(i&&i.size>0){let x=Ly(o,c,m);if(i.has(x))return!1}return!0}))}}return e},Xj=t=>{let{recommendationMap:e,ruleFilter:s}=t;if(s.length===0)return e;for(let[n,r]of Object.entries(e)){let i=qj(r),o=Oy(i,s);if(o.length===0){delete e[n];continue}r.sources||(r.sources={cdkInsights:{issues:[]},cdkNag:{issues:[]}}),r.sources.cdkInsights||(r.sources.cdkInsights={issues:[]}),r.sources.cdkNag||(r.sources.cdkNag={issues:[]}),r.sources.cdkInsights.issues=o.filter(a=>a.foundBy==="cdkInsights"),r.sources.cdkNag.issues=o.filter(a=>a.foundBy==="cdkNag")}return e},eU=async t=>{let{stackName:e,recommendationMap:s,summary:n,tier:r}=t;if(!r||!zn.isFeatureEnabled("githubIntegration",r)){A.warning("GitHub integration is not available for your current tier"),A.comment(Il("githubIntegration",r??"free","GitHub integration"));return}let i=MF(),o=!!process.env.GITHUB_TOKEN;if(!i&&!o){A.warning("GitHub CLI not found and GITHUB_TOKEN not set. Skipping issue creation."),A.comment("Install GitHub CLI (gh) or set GITHUB_TOKEN environment variable to enable issue creation.");return}A.section("Creating GitHub Issue","\u{1F419}");let a=Na(e,s,n);await Gp(()=>LF({stackName:e,issueTitle:`CDK Insights Analysis for ${e}`,issueBody:a,ghCli:i,recommendations:s,summary:n}),{operationName:"creating GitHub issue"})},h_=async({stackName:t,stack:e,selectedServices:s,inlineFindings:n,recommendationMapPerStack:r,pathToLogicalId:i,constructRegistry:o,ruleFilter:a,ignoreRules:c,ignorePaths:u,acknowledgements:l=[],authToken:d,fingerprint:p,output:f,withIssue:m,tier:g,noCache:h=!1,warnSensitive:x=!1,sensitiveDataDetection:y={},cache:b,quotaValidation:S,manifest:C,customRules:I=[],cdkContext:E,resourceIdMetadata:w,aiModelId:j,aiBatchSize:H,forceLocal:z=!1,baselineExclude:q,collectFingerprints:L,skipRendering:G=!1})=>{let k=e.Resources??{},U=Hj(k,s),V=zj(U),se=new Set(Object.keys(V)),Y=se.size,Z=Yj({authToken:d,fingerprint:p,tier:g,quotaValidation:S}),ee=Vj({stackName:t,pathToLogicalId:i}),le=r[t]||{},Ce=ie=>{let He=ee(ie),at=le[ie];return at?{...He,...at,sources:He.sources}:He},K=Z.canRunAI?Object.fromEntries(Object.keys(V).map(ie=>[ie,Ce(ie)])):{};for(let[ie,He]of Object.entries(le)){let at=He.sources?.cdkNag?.issues??[];if(at.length===0)continue;Gr(K,ie,Ce).sources.cdkNag.issues.push(...at)}for(let ie of n)Gr(K,ie.resourceId,Ce).sources.cdkNag.issues.push(ie);let Re=E||w?{cdkContext:E,resourceIdMetadata:w}:void 0,ne=await Jj({userResources:V,selectedServices:s,constructRegistry:o,canRunStatic:Z.canRunStatic,customRules:I,ruleContext:Re});for(let[ie,He]of Object.entries(ne)){let at=Gr(K,ie,Ce),ku=He.issues??[];at.sources.cdkInsights.issues.push(...ku)}let me=dy(e,Up,a);for(let[ie,He]of Object.entries(me))Gr(K,ie,Ce).sources.cdkInsights.issues.push(...He.issues);let ue=mp(e,Up);for(let[ie,He]of Object.entries(ue))Gr(K,ie,Ce).sources.cdkInsights.issues.push(...He.issues);let xe=fp(e,Up);for(let[ie,He]of Object.entries(xe))Gr(K,ie,Ce).sources.cdkInsights.issues.push(...He.issues);let Ae=Zy(V,{disabled:y.disabled,ignoreProperties:y.ignoreProperties,allowPatterns:y.allowPatterns,strictMode:y.strictMode}),Ge=V;if(Ae.hasSkippedResources){let ie=Ae.resourcesWithSensitiveData;A.warning(`\u{1F512} Sensitive data detected in ${ie} resource${ie===1?"":"s"} - NOT sent to CDK Insights servers`),Ge=Object.fromEntries(Object.entries(V).filter(([He])=>!Ae.skippedResourceIds.includes(He)));for(let He of Ae.detectionResults)if(He.hasSensitiveData){let at=Gr(K,He.resourceId,Ce),ku=Ky(He,t);at.sources.cdkInsights.issues.push(ku)}}let St=new Set(Object.entries(K).filter(([,ie])=>ie.sources.cdkInsights.issues.length>0||ie.sources.cdkNag.issues.length>0).map(([ie])=>ie)),kt=Object.fromEntries(Object.entries(Ge).filter(([ie])=>St.has(ie))),rs=Object.keys(Ge).length-Object.keys(kt).length;rs>0&&Z.canRunAI&&A.comment(`\u{1F3AF} Skipping AI analysis on ${rs} resource${rs===1?"":"s"} with no static findings`);let R=await Qj({stackName:t,userResources:kt,inlineFindings:n,pathToLogicalId:i,authToken:d,fingerprint:p,tier:g,noCache:h,cache:b,capabilities:Z,aiModelId:j,aiBatchSize:H}),W=R.results,ae=z?"local-mode":R.skippedReason;d&&p&&Object.keys(W).length>0&&A.phase3("Processing results...");let J=s_({staticRecommendations:{},aiRecommendations:W,recommendationMap:K,ruleFilter:a,filterIssuesByRule:Oy});for(let[ie,He]of Object.entries(J.updatedMap)){let at=Gr(K,ie,Ce);at.sources.cdkInsights.issues.push(...mo({existing:at.sources.cdkInsights.issues,incoming:He.sources.cdkInsights.issues}))}if(Xj({recommendationMap:K,ruleFilter:a}),m_({recommendationMap:K,ignoreRules:c,ignorePaths:u,acknowledgements:l}),L)for(let{fingerprint:ie}of HF(t,K))L.add(ie);q&&q.size>0&&m_({recommendationMap:K,baselineExclude:q,stackName:t}),Kj(K);let N=Zj({recommendationMap:K,stackName:t,stackResources:V,manifest:C}),be=Lp(N,Y,se,ae),he=Object.keys(N).length>0;return r[t]=N,!G&&f&&f!=="table"&&QF(f,t,N,!0,be),m&&he&&await eU({stackName:t,recommendationMap:N,summary:be,tier:g}),{recommendationMap:N,summary:be,hasIssues:he,scannedResourceCount:Y,scannedResourceIds:se,stackName:t,sensitiveDataSummary:Ae,hasSensitiveData:Ae.hasSkippedResources}},Hp=async({stacks:t,inlineFindings:e,pathToLogicalId:s,output:n,recommendationMapPerStack:r,withIssue:i,services:o,ruleFilter:a=[],ignoreRules:c=[],ignorePaths:u=[],acknowledgementsPerStack:l={},authToken:d,fingerprint:p,failOnCritical:f,tier:m,noCache:g=!1,allowOveruse:h=!1,warnSensitive:x=!1,sensitiveDataDetection:y={},cache:b,quotaValidation:S,cdkContext:C,resourceIdMetadata:I,aiModelId:E,aiBatchSize:w,forceLocal:j=!1,baselineExclude:H,collectFingerprints:z,skipRendering:q=!1})=>{if(Q.info("\u{1F680} Starting CDK Insights analysis",{stackCount:Object.keys(t).length,stackNames:Object.keys(t),hasAuthToken:!!d,hasFingerprint:!!p,tier:m||"unknown",quotaValidation:S?{canRunStaticAnalysis:S.canRunStaticAnalysis,canRunAIAnalysis:S.canRunAIAnalysis,isTrial:S.quota?.isTrial}:null,services:o||["All services"],output:n||"table"}),S&&!S.quota.isTrial&&S.canRunAIAnalysis&&h){let Re=S.quota.currentResourcesAnalyzed>=S.quota.maxResources,ne=S.quota.wouldExceed;Re?(A.warning(`\u26A0\uFE0F You have used ${S.quota.currentResourcesAnalyzed}/${S.quota.maxResources} AI credits this billing period.`),A.warning(" Proceeding with AI analysis as --allow-overuse is enabled.")):ne&&(A.warning(`\u26A0\uFE0F This analysis will exceed your AI credit allowance (${S.quota.currentResourcesAnalyzed}/${S.quota.maxResources}).`),A.warning(" Proceeding with AI analysis as --allow-overuse is enabled."))}let L=d_(),G=Pa("cdk.out"),k=await Gp(()=>m1(p1()),{operationName:"loading construct metadata",fallbackValue:{}})??{},U={},V=!1,se=!1,Y=0,Z=new Set,ee=Object.keys(t),le=ee.length,Ce=Re=>{let{stackName:ne,map:me}=Re;for(let[ue,xe]of Object.entries(me))U[`${ne}:${ue}`]=xe};if(le>1)await Ep.runAnalysis({title:`Deep Analysis of ${le} CDK Stacks`,steps:ee.map((Re,ne)=>({title:`Analyzing stack ${ne+1}/${le}: ${Re}`,task:async()=>{let me=t[Re],ue=await h_({stackName:Re,stack:me,selectedServices:o,inlineFindings:e,recommendationMapPerStack:r,pathToLogicalId:s,constructRegistry:k,ruleFilter:a,ignoreRules:c,ignorePaths:u,acknowledgements:l[Re]??[],authToken:d,fingerprint:p,output:n,withIssue:i,tier:m,noCache:g,warnSensitive:x,sensitiveDataDetection:y,cache:b,quotaValidation:S,manifest:G,customRules:L,cdkContext:C,resourceIdMetadata:I,aiModelId:E,aiBatchSize:w,forceLocal:j,baselineExclude:H,collectFingerprints:z,skipRendering:q});Ce({stackName:ue.stackName,map:ue.recommendationMap}),Y+=ue.scannedResourceCount;for(let xe of ue.scannedResourceIds)Z.add(`${ue.stackName}:${xe}`);return!V&&ue.hasIssues&&(V=f_(ue.recommendationMap)),ue.hasSensitiveData&&(se=!0),!q&&(n==="summary"||n==="table")&&A.summary(ue.summary),ue}})),showSummary:!0});else{let[Re,ne]=Object.entries(t)[0]??[];if(!Re||!ne)return{recommendationMaps:{},hasCriticalIssues:!1,scannedResourceIds:new Set};let me=Object.entries(ne.Resources||{}).filter(([,xe])=>!xe.Type.startsWith("AWS::CDK::")).length;A.analysisStart(Re,me);let ue=await h_({stackName:Re,stack:ne,selectedServices:o,inlineFindings:e,recommendationMapPerStack:r,pathToLogicalId:s,constructRegistry:k,ruleFilter:a,ignoreRules:c,ignorePaths:u,acknowledgements:l[Re]??[],authToken:d,fingerprint:p,output:n,withIssue:i,tier:m,noCache:g,warnSensitive:x,sensitiveDataDetection:y,cache:b,quotaValidation:S,manifest:G,customRules:L,cdkContext:C,resourceIdMetadata:I,aiModelId:E,aiBatchSize:w,forceLocal:j,baselineExclude:H,collectFingerprints:z,skipRendering:q});Ce({stackName:ue.stackName,map:ue.recommendationMap}),Y+=ue.scannedResourceCount;for(let xe of ue.scannedResourceIds)Z.add(`${ue.stackName}:${xe}`);ue.hasIssues&&(V=f_(ue.recommendationMap)),ue.hasSensitiveData&&(se=!0),!q&&(n==="summary"||n==="table")&&A.summary(ue.summary)}if(q)return{recommendationMaps:U,hasCriticalIssues:!1,hasSensitiveData:se,scannedResourceIds:Z};if(Object.keys(U).length>0&&le>1){let Re=Lp(U,Y,Z);if(n==="table"||n==="summary")A.section("Overall Analysis Summary","\u{1F4CA}"),A.summary(Re),n==="table"&&(fu(U),A.section("Overall Analysis Summary (continued)","\u{1F4CA}"),A.summary(Re));else if(n==="sarif"){let ne=Pp("consolidated",U),me="consolidated_analysis_report.sarif";g_.writeFileSync(me,JSON.stringify(ne,null,2)),A.info(`\u{1F4C4} Consolidated SARIF report written to: ${me}`)}else n==="github-actions"&&_p("consolidated",U,Re.severityCounts,Y)}else if(n==="table"||n==="summary")if(Object.keys(U).length>0){let Re=Lp(U,Y,Z);A.section("Overall Analysis Summary","\u{1F4CA}"),A.summary(Re),n==="table"&&(fu(U),A.section("Overall Analysis Summary (continued)","\u{1F4CA}"),A.summary(Re))}else A.success("No issues found across all stacks!");return{recommendationMaps:U,hasCriticalIssues:!!f&&V||se&&!x,hasSensitiveData:se,scannedResourceIds:Z}};var zp={staticAnalysis:!0,basicServiceChecks:!0,localAnalysis:!0,jsonOutput:!0,tableOutput:!0,aiRecommendations:!1,githubIntegration:!1,teamCollaboration:!1,advancedOutputFormats:!1,customRules:!1,prioritySupport:!1,ciCdIntegration:!1},Jy={staticAnalysis:!0,basicServiceChecks:!0,localAnalysis:!0,jsonOutput:!0,tableOutput:!0,aiRecommendations:!0,githubIntegration:!0,teamCollaboration:!0,advancedOutputFormats:!0,customRules:!0,prioritySupport:!0,ciCdIntegration:!0};var bu=new Map,tU=new Set(["free","pro","enterprise","trial"]),sU=t=>{try{let e=t.split(".");if(e.length!==3)return;let s=JSON.parse(Buffer.from(e[1],"base64").toString());return s.tier&&tU.has(s.tier)?s.tier:void 0}catch{return}},Vp=async(t,e)=>{if(!t)return{isValid:!0,tier:"free",features:zp};if(bu.has(t)){let s=bu.get(t);if(s.expiresAt&&s.expiresAt>new Date)return s;bu.delete(t)}if(e){Zl.info("\u2705 License validated via JWT token from login");let n=sU(e)??"free",r=n==="pro"||n==="trial"||n==="enterprise"?Jy:zp,i={isValid:!0,tier:n,expiresAt:new Date(Date.now()+3600*1e3),features:r};return bu.set(t,i),i}if(process.env.NODE_ENV==="development"&&process.env.CDK_INSIGHTS_DEV_MODE==="true"){Zl.warn("\u26A0\uFE0F Development mode enabled - Pro features available for testing only");let s={isValid:!0,tier:"pro",expiresAt:new Date(Date.now()+24*60*60*1e3),features:Jy};return bu.set(t,s),s}return Zl.warn("\u26A0\uFE0F License key provided but no valid authentication token"),{isValid:!1,tier:"free",features:zp}};var y_=async t=>{let s={requestId:`enhanced-quota-${Date.now()}`,functionName:"validateEnhancedLicenseQuota"};Q.info("\u{1F50D} Starting enhanced license quota validation",s,{requestedResources:t.requestedResources,hasLicenseKey:!!t.licenseKey,hasUsageData:!!t.usageData});try{if(t.licenseInfo||t.usageData){let l=0;t.licenseInfo&&t.licenseInfo.currentPeriodUsage!==void 0&&t.licenseInfo.currentPeriodUsage!==null?(l=Number(t.licenseInfo.currentPeriodUsage),Q.info("\u{1F4CA} Using currentPeriodUsage from license (per-cycle source of truth)",s,{currentPeriodUsage:l})):t.usageData&&t.usageData.totalResourcesAnalyzed>0&&(l=t.usageData.totalResourcesAnalyzed,Q.info("\u{1F4CA} Using usage data from login (fallback \u2014 no currentPeriodUsage in license info)",s,{totalResourcesAnalyzed:t.usageData.totalResourcesAnalyzed,totalTokens:t.usageData.totalTokens,usageCount:t.usageData.usageCount}));let d=200,p=!0,f=!1;if(t.licenseInfo){let E=t.licenseInfo.licenseType||t.licenseInfo.tier;if(t.licenseInfo.status==="TRIAL"||t.licenseInfo.tier==="trial"){p=!0,d=t.licenseInfo.trialUsageLimit||t.licenseInfo.maxUsage||200;let w=t.licenseInfo.trialEnd||t.licenseInfo.expiresAt;w&&(f=Math.floor(Date.now()/1e3)>w)}else p=!1,E==="ENTERPRISE"?d=iu.DEFAULT_TEAM_AI_INSIGHTS_PER_SEAT*10:E==="TEAM"?d=iu.DEFAULT_TEAM_AI_INSIGHTS_PER_SEAT:E==="FREE"?d=Number(t.licenseInfo.maxUsage)||iu.DEFAULT_FREE_AI_INSIGHTS:d=iu.DEFAULT_PRO_AI_INSIGHTS}let m=Math.max(0,d-l),g=l+t.requestedResources>d,h=Math.floor(d*.8),x=Math.floor(d*.9),y=!0,b=!0,S=!0,C,I;if(f)y=!1,b=!1,S=!1,C="Trial license has expired",I="https://cdkinsights.dev/pricing";else if(g&&p){y=!1,b=!0,S=!1;let E=t.allowOveruse?" Note: --allow-overuse does not apply to trial licenses which have a hard usage limit.":"";C=`AI analysis would exceed your Free account allowance. You have used ${l}/${d} AI credits and are requesting ${t.requestedResources} more.${E}`,I="https://cdkinsights.dev/pricing"}else g&&!p?t.allowOveruse?(y=!0,b=!0,S=!0,C=`You have used ${l}/${d} AI credits this billing period. Proceeding with AI analysis as --allow-overuse is enabled.`):(y=!0,b=!0,S=!1,C=`AI analysis would exceed your monthly AI credit allowance (${l}/${d} used). AI is paused until your next billing cycle \u2014 static scans continue to work. Use --allow-overuse to proceed anyway.`):p&&l>=x&&t.requestedResources>10&&(y=!1,b=!0,S=!1,C=`Large AI analysis requests are blocked when approaching your Free account allowance. You have used ${l}/${d} AI credits.`,I="https://cdkinsights.dev/pricing");return p&&l>=h&&l<d&&Q.info("Trial usage approaching limit - will be displayed in enhanced UI",s,{currentResources:l,maxResources:d,warningThreshold:h}),Q.info("\u2705 Enhanced license quota validation completed successfully",s,{canProceed:y,canRunStaticAnalysis:b,canRunAIAnalysis:S,currentResources:l,maxResources:d,remainingResources:m,isTrial:p,trialExpired:f}),{canProceed:y,canRunStaticAnalysis:b,canRunAIAnalysis:S,quota:{currentResourcesAnalyzed:l,maxResources:d,remainingResources:m,isTrial:p,trialExpired:f,wouldExceed:g,warningThreshold:h,hardStopThreshold:x,currentTokens:t.usageData?t.usageData.totalTokens:t.licenseInfo?Number(t.licenseInfo.totalResourcesAnalyzed||0):0,maxTokens:1e6,remainingTokens:t.usageData?Math.max(0,1e6-t.usageData.totalTokens):1e6},reason:C,upgradePath:I,usageData:t.usageData}}Q.warn("\u274C No usage data available, using fallback validation",s);let n;if(t.licenseInfo){let l=Number(t.licenseInfo.currentPeriodUsage||0),d=Number(t.licenseInfo.totalResourcesAnalyzed||0),p=d>0?d:l;p>0&&(n={totalTokens:p,totalResourcesAnalyzed:p,totalCost:0,usageCount:1,successfulUsageCount:1,failedUsageCount:0,firstUsageAt:Number(t.licenseInfo.createdAt),lastUsageAt:Number(t.licenseInfo.lastUsageAt||t.licenseInfo.updatedAt)},Q.info("\u{1F4CA} Using usage data from license info",s,{totalResourcesAnalyzed:n.totalResourcesAnalyzed,totalTokens:n.totalTokens}))}let r=200,i=!0,o=!1;if(t.licenseInfo){let l=t.licenseInfo.licenseType||t.licenseInfo.tier;if(t.licenseInfo.status==="TRIAL"||t.licenseInfo.tier==="trial"){i=!0,r=t.licenseInfo.maxUsage?Number(t.licenseInfo.maxUsage):200;let d=t.licenseInfo.trialEnd||t.licenseInfo.expiresAt;d&&(o=Math.floor(Date.now()/1e3)>d)}else i=!1,l==="ENTERPRISE"?r=1e5:r=1e4}let a=n?n.totalResourcesAnalyzed:0,c=Math.max(0,r-a),u=a+t.requestedResources>r;return{canProceed:!0,canRunStaticAnalysis:!0,canRunAIAnalysis:!0,quota:{currentResourcesAnalyzed:a,maxResources:r,remainingResources:c,isTrial:i,trialExpired:o,wouldExceed:u,warningThreshold:Math.floor(r*.8),hardStopThreshold:Math.floor(r*.9),currentTokens:n?n.totalTokens:0,maxTokens:1e6,remainingTokens:1e6},reason:n?"Using usage data from license info":"No usage data available - proceeding with analysis",usageData:n||void 0}}catch(n){return Q.error("Enhanced license quota validation failed",s,n instanceof Error?n:new Error(String(n))),{canProceed:!0,canRunStaticAnalysis:!0,canRunAIAnalysis:!1,quota:{currentResourcesAnalyzed:0,maxResources:t.licenseInfo&&t.licenseInfo.maxUsage||200,remainingResources:t.licenseInfo&&t.licenseInfo.maxUsage||200,isTrial:t.licenseInfo?t.licenseInfo.status==="TRIAL"||t.licenseInfo.tier==="trial":!0,trialExpired:!1,wouldExceed:!1,warningThreshold:Math.floor((t.licenseInfo&&t.licenseInfo.maxUsage||200)*.8),hardStopThreshold:Math.floor((t.licenseInfo&&t.licenseInfo.maxUsage||200)*.9),currentTokens:0,maxTokens:1e6,remainingTokens:1e6},reason:"Enhanced quota validation failed - proceeding with analysis"}}};var Qy=()=>({CRITICAL:0,HIGH:0,MEDIUM:0,LOW:0}),Xy=()=>({"Operational Excellence":0,Security:0,"Cost Optimization":0,Reliability:0,"Performance Efficiency":0,Sustainability:0}),x_=t=>{let e=t.indexOf(":");return e===-1?{stackName:"",resourceId:t}:{stackName:t.slice(0,e),resourceId:t.slice(e+1)}},nU=t=>({issue:t.issue,recommendation:t.recommendation,severity:t.severity,wafPillar:t.wafPillar||"Security",foundBy:t.foundBy||"cdkInsights",ruleId:t.ruleId,codeSnippet:t.codeSnippet,constructPath:t.constructPath,constructType:t.constructType,sourceLocation:t.sourceLocation?{filePath:t.sourceLocation.filePath,line:t.sourceLocation.line,column:t.sourceLocation.column,confidence:t.sourceLocation.confidence}:void 0,aiConfidence:t.aiConfidence}),rU=(t,e)=>({resourceId:t.resourceId,logicalId:t.logicalId,cdkPath:t.cdkPath,friendlyName:t.friendlyName,resourceName:t.resourceName,constructType:t.constructType,serviceCategory:t.serviceCategory,tags:t.tags,sourceLocation:t.sourceLocation?{filePath:t.sourceLocation.filePath,line:t.sourceLocation.line,column:t.sourceLocation.column,confidence:t.sourceLocation.confidence??"medium"}:void 0,findings:e.map(nU)}),iU=(t,e,s)=>{e[t.severity]=(e[t.severity]??0)+1,s[t.wafPillar]=(s[t.wafPillar]??0)+1},b_=t=>{let e=new Map;for(let u of t.scannedResourceIds){let{stackName:l,resourceId:d}=x_(u);if(!l)continue;let p=e.get(l);p||(p={stackName:l,totalResources:0,scannedResourceIds:[],severityCounts:Qy(),wafPillarCounts:Xy(),resources:[]},e.set(l,p)),p.scannedResourceIds.push(d),p.totalResources+=1}for(let[u,l]of Object.entries(t.recommendationMaps)){let{stackName:d}=x_(u);if(!d)continue;let p=e.get(d);p||(p={stackName:d,totalResources:0,scannedResourceIds:[],severityCounts:Qy(),wafPillarCounts:Xy(),resources:[]},e.set(d,p));let f=[...l.sources?.cdkInsights?.issues??[],...l.sources?.cdkNag?.issues??[]];if(f.length===0)continue;let m=rU(l,f);p.resources.push(m);for(let g of m.findings)iU(g,p.severityCounts,p.wafPillarCounts)}let s=[],n=Qy(),r=Xy(),i=0,o=0,a=0;for(let u of e.values()){s.push(u),i+=u.totalResources,a+=u.resources.length;for(let l of Object.keys(u.severityCounts))n[l]=(n[l]??0)+u.severityCounts[l],o+=u.severityCounts[l];for(let l of Object.keys(u.wafPillarCounts))r[l]=(r[l]??0)+u.wafPillarCounts[l]}let c={totalResources:i,totalFindings:o,resourcesWithFindings:a,severityCounts:n,wafPillarCounts:r};return{schemaVersion:xu,scanId:t.scanId,cliVersion:t.cliVersion,scanStartedAt:t.scanStartedAt.toISOString(),scanCompletedAt:t.scanCompletedAt.toISOString(),aiAnalysis:t.aiAnalysis,stacks:s,totals:c}};var Kp=require("node:crypto");var{version:oU}=mu(),aU=1e4,cU=t=>(0,Kp.createHash)("sha256").update(t).digest("hex").slice(0,32),qp=t=>({skipped:!0,reason:t}),S_=async t=>{if(!t.enabled)return qp("disabled");if(!t.licenseKey)return qp("no-license-key");if(!t.authToken)return qp("no-auth-token");let e=yn();if(!e)return qp("no-api-base");let s={schemaVersion:xu,scanId:t.report.scanId,hashedLicenseId:cU(t.licenseKey),tier:t.tier??"free",cliVersion:oU,platform:process.platform,scanStartedAt:t.report.scanStartedAt,scanCompletedAt:t.report.scanCompletedAt,report:t.report};try{let n=await yt.post(`${e}/v1/scans`,s,{timeout:aU,headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.authToken}`,"x-cdk-insights-client":"cli"},validateStatus:r=>r>=200&&r<300});return{skipped:!1,success:!0,scanId:n.data.scanId??s.scanId,viewUrl:n.data.viewUrl,retentionDays:n.data.retentionDays}}catch(n){let r=n;if(r.code==="ECONNABORTED"||r.code==="ETIMEDOUT")return{skipped:!1,success:!1,reason:"timeout"};if(!r.response)return{skipped:!1,success:!1,reason:"network"};let i=r.response.status,o=r.response.data?.message;return i>=400&&i<500?{skipped:!1,success:!1,reason:"rejected",serverMessage:o}:{skipped:!1,success:!1,reason:"server-error",serverMessage:o}}},v_=()=>(0,Kp.randomUUID)();var C_=require("node:crypto");var{version:uU}=mu(),lU=1500,dU=t=>(0,C_.createHash)("sha256").update(t).digest("hex").slice(0,32),Su=async({enabled:t,licenseKey:e,authToken:s,tier:n,event:r})=>{if(!t||!e)return;let i=yn();if(!i)return;let o={hashedLicenseId:dU(e),tier:n??"free",cliVersion:uU,platform:process.platform,emittedAt:new Date().toISOString(),event:r};try{await yt.post(`${i}/v1/telemetry/events`,o,{timeout:lU,headers:{"Content-Type":"application/json",...s?{Authorization:`Bearer ${s}`}:{},"x-cdk-insights-client":"cli"}})}catch{}},ex=t=>{let e={CRITICAL:0,HIGH:0,MEDIUM:0,LOW:0};for(let s of t){let n=(s.severity??"").toUpperCase();(n==="CRITICAL"||n==="HIGH"||n==="MEDIUM"||n==="LOW")&&(e[n]+=1)}return e};var D_={free:0,trial:0,pro:1,team:2},vu={"nova-lite":{alias:"nova-lite",bedrockModelId:"amazon.nova-lite-v1:0",displayName:"Amazon Nova Lite",minTier:"free",quotaMultiplier:.5,description:"Fastest and cheapest option, good for simple checks"},"mistral-14b":{alias:"mistral-14b",bedrockModelId:"mistral.ministral-3-14b-instruct",displayName:"Mistral Ministral 14B",minTier:"pro",quotaMultiplier:1,description:"Balanced quality and cost \u2014 current default for Pro"},"llama-3-3-70b":{alias:"llama-3-3-70b",bedrockModelId:"us.meta.llama3-3-70b-instruct-v1:0",displayName:"Llama 3.3 70B",minTier:"pro",quotaMultiplier:2,description:"Stronger reasoning + code understanding than Mistral 14B"},"haiku-4-5":{alias:"haiku-4-5",bedrockModelId:"us.anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5",minTier:"pro",quotaMultiplier:4,description:"High-quality findings for security-critical infra"},"sonnet-4-6":{alias:"sonnet-4-6",bedrockModelId:"us.anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6",minTier:"pro",quotaMultiplier:16,description:"Top-tier reasoning for complex architectures"}},w_={free:"nova-lite",trial:"nova-lite",pro:"mistral-14b",team:"mistral-14b"},pU=t=>typeof t=="string"&&t in vu,fU=(t,e)=>{if(!e)return!0;let s=vu[t].minTier;return D_[e]>=D_[s]},A_=t=>{let{flag:e,cdkContext:s,userConfig:n,tier:r}=t,i=[{value:e,source:"flag"},{value:s,source:"cdkContext"},{value:n,source:"userConfig"}];for(let{value:a,source:c}of i){if(!a||!pU(a))continue;if(fU(a,r))return{alias:a,bedrockModelId:vu[a].bedrockModelId,source:c,downgradedFromTierGate:!1};let u=r?w_[r]:"mistral-14b";return{alias:u,bedrockModelId:vu[u].bedrockModelId,source:"tierDefault",downgradedFromTierGate:!0,requestedAlias:a}}let o=r?w_[r]:"mistral-14b";return{alias:o,bedrockModelId:vu[o].bedrockModelId,source:"tierDefault",downgradedFromTierGate:!1}};var Bt={stackName:"",services:[],redact:!1,summaryOnly:!1,synth:!1,ruleFilter:[],failOnCritical:!0,ci:!1,all:!1,yes:!1,reset:!1,github:!1,noCache:!1,allowOveruse:!1,cache:{enabled:!0,ttl:6*60*60*1e3,maxSize:1e3}},mU=t=>["json","table","markdown","summary","sarif","github-actions"].includes(t)?t:(console.warn(`\u26A0\uFE0F Invalid output format "${t}", defaulting to "table"`),"table"),E_=t=>Array.isArray(t)?t.filter(e=>typeof e=="string"):typeof t=="string"?t.split(",").map(e=>e.trim()).filter(Boolean):[],hU=t=>E_(t).map(s=>s.trim()).filter(Boolean).map(s=>s.toLowerCase()==="all"?"All services":s).filter(s=>oa(s)),gU=t=>{if(!t||typeof t!="object"||Array.isArray(t))return Bt.cache;let e=t,s={enabled:Bt.cache.enabled,ttl:Bt.cache.ttl,maxSize:Bt.cache.maxSize};return typeof e.enabled=="boolean"&&(s.enabled=e.enabled),typeof e.ttl=="number"&&e.ttl>0?s.ttl=e.ttl:e.ttl&&console.warn(`\u26A0\uFE0F Invalid cache TTL "${e.ttl}", using default ${Bt.cache.ttl}ms`),typeof e.maxSize=="number"&&e.maxSize>0?s.maxSize=e.maxSize:e.maxSize&&console.warn(`\u26A0\uFE0F Invalid cache maxSize "${e.maxSize}", using default ${Bt.cache.maxSize}`),s},Cu=(t,e)=>{if(typeof t=="boolean")return t;if(typeof t=="string"){let s=t.toLowerCase();if(s==="true"||s==="1"||s==="yes")return!0;if(s==="false"||s==="0"||s==="no")return!1}return e},I_=(t,e)=>{let s=e.output||e.format||t.output,n=s?mU(s):void 0,r=e.withIssue??t.withIssue;return n!=="markdown"&&r&&(console.warn("\u26A0\uFE0F GitHub issues are only supported with markdown output. Disabling withIssue."),r=!1),{stackName:e.stackName??t.stackName??Bt.stackName,output:n,format:n,services:hU(e.services??t.services??Bt.services),withIssue:r,redact:Cu(e.redact??t.redact,Bt.redact),summaryOnly:Cu(e.summaryOnly??t.summaryOnly,Bt.summaryOnly),synth:Cu(e.synth??t.synth,Bt.synth),ruleFilter:E_(e.ruleFilter??t.ruleFilter??Bt.ruleFilter),ignoreRules:t.ignoreRules??[],ignorePaths:t.ignorePaths??[],failOnCritical:Cu(e.failOnCritical??t.failOnCritical,Bt.failOnCritical),ci:e.ci??Bt.ci,all:e.all??Bt.all,yes:e.yes??Bt.yes,reset:e.reset??Bt.reset,github:e.github??Bt.github,noCache:e.noCache??Bt.noCache,allowOveruse:Cu(e.allowOveruse??t.allowOveruse,Bt.allowOveruse),cache:gU(e.cache??t.cache??Bt.cache),local:e.local??!1,prComment:e.prComment??!1,warnSensitive:e.warnSensitive??!1,diff:e.diff??!1,writeBaseline:e.writeBaseline??!1,baseline:e.baseline,ai:t.ai}};var pr=te(require("node:fs")),k_=te(require("node:path"));var Du=k_.join(process.cwd(),".cdk-insights.json"),yU=/^[a-zA-Z0-9_-]+$/,xU=/^[a-zA-Z0-9_. -]+$/,bU=new Set(["__proto__","constructor","prototype"]);function wu(t){if(!t||typeof t!="object"||Array.isArray(t))return t;let e={};for(let[s,n]of Object.entries(t))bU.has(s)||(n&&typeof n=="object"&&!Array.isArray(n)?e[s]=wu(n):Array.isArray(n)?e[s]=n.map(r=>r&&typeof r=="object"&&!Array.isArray(r)?wu(r):r):e[s]=n);return e}var R_={enabled:!0,warnOnly:!1,allowPatterns:[],ignoreProperties:[],strictMode:!1},ho={services:[],redact:!1,summaryOnly:!1,synth:!1,ruleFilter:[],feedback:!0,failOnCritical:!0,noCache:!1,allowOveruse:!1,sensitiveDataDetection:R_,cache:{enabled:!0,ttl:6*60*60*1e3,maxSize:1e3}},F_=t=>{if(!t||typeof t!="object"||Array.isArray(t))return Q.warn("\u274C Invalid configuration format, using defaults"),ho;let e={...ho},s=t;if(typeof s.stackName=="string"&&s.stackName.length>0&&(yU.test(s.stackName)?e.stackName=s.stackName:Q.warn(`\u26A0\uFE0F Ignoring unsafe stackName "${s.stackName}" \u2014 only alphanumeric, hyphens, and underscores are allowed`)),typeof s.output=="string"&&["json","table","markdown","summary","sarif","github-actions"].includes(s.output)?e.output=s.output:s.output&&Q.warn(`\u26A0\uFE0F Invalid output format "${s.output}", skipping output setting`),Array.isArray(s.services)&&(e.services=s.services.filter(n=>typeof n=="string").map(n=>n.toLowerCase()==="all"?"All services":n).filter(n=>oa(n))),typeof s.withIssue=="boolean"&&(e.withIssue=s.withIssue),typeof s.redact=="boolean"&&(e.redact=s.redact),typeof s.summaryOnly=="boolean"&&(e.summaryOnly=s.summaryOnly),typeof s.synth=="boolean"&&(e.synth=s.synth),Array.isArray(s.ruleFilter)&&(e.ruleFilter=s.ruleFilter.filter(n=>typeof n=="string"&&n.length>0&&n.length<=100&&xU.test(n))),typeof s.feedback=="boolean"&&(e.feedback=s.feedback),typeof s.failOnCritical=="boolean"&&(e.failOnCritical=s.failOnCritical),typeof s.noCache=="boolean"&&(e.noCache=s.noCache),typeof s.allowOveruse=="boolean"&&(e.allowOveruse=s.allowOveruse),s.ai&&typeof s.ai=="object"&&!Array.isArray(s.ai)){let n=s.ai,r={};typeof n.model=="string"&&n.model.length>0&&(r.model=n.model),typeof n.batchSize=="number"&&Number.isFinite(n.batchSize)&&n.batchSize>0?r.batchSize=Math.floor(n.batchSize):n.batchSize!==void 0&&Q.warn(`\u26A0\uFE0F Ignoring invalid ai.batchSize "${n.batchSize}" \u2014 must be a positive number.`),(r.model||r.batchSize!==void 0)&&(e.ai=r)}if(s.telemetry&&typeof s.telemetry=="object"&&!Array.isArray(s.telemetry)){let n=s.telemetry;typeof n.enabled=="boolean"&&(e.telemetry={enabled:n.enabled})}if(s.scanHistory&&typeof s.scanHistory=="object"&&!Array.isArray(s.scanHistory)){let n=s.scanHistory;typeof n.enabled=="boolean"&&(e.scanHistory={enabled:n.enabled})}if(s.cache&&typeof s.cache=="object"&&!Array.isArray(s.cache)){let n=s.cache;e.cache={...ho.cache},typeof n.enabled=="boolean"&&(e.cache.enabled=n.enabled),typeof n.ttl=="number"&&n.ttl>0?e.cache.ttl=n.ttl:n.ttl&&Q.warn(`\u26A0\uFE0F Invalid cache TTL "${n.ttl}", using default ${ho.cache?.ttl}ms`),typeof n.maxSize=="number"&&n.maxSize>0?e.cache.maxSize=n.maxSize:n.maxSize&&Q.warn(`\u26A0\uFE0F Invalid cache maxSize "${n.maxSize}", using default ${ho.cache?.maxSize}`)}if(s.sensitiveDataDetection&&typeof s.sensitiveDataDetection=="object"&&!Array.isArray(s.sensitiveDataDetection)){let n=s.sensitiveDataDetection;e.sensitiveDataDetection={...R_},typeof n.enabled=="boolean"&&(e.sensitiveDataDetection.enabled=n.enabled),typeof n.warnOnly=="boolean"&&(e.sensitiveDataDetection.warnOnly=n.warnOnly),typeof n.strictMode=="boolean"&&(e.sensitiveDataDetection.strictMode=n.strictMode),Array.isArray(n.allowPatterns)&&(e.sensitiveDataDetection.allowPatterns=n.allowPatterns.filter(r=>typeof r=="string")),Array.isArray(n.ignoreProperties)&&(e.sensitiveDataDetection.ignoreProperties=n.ignoreProperties.filter(r=>typeof r=="string"))}return Array.isArray(s.ignoreRules)&&(e.ignoreRules=s.ignoreRules.filter(n=>typeof n=="string"&&n.length>0)),Array.isArray(s.ignorePaths)&&(e.ignorePaths=s.ignorePaths.filter(n=>typeof n=="string"&&n.length>0)),e},Dn=()=>{if(!pr.existsSync(Du))return ho;try{let t=pr.readFileSync(Du,"utf-8"),e=wu(JSON.parse(t));return F_(e)}catch(t){let e=t;return Q.error(`\u274C Error loading configuration: ${e.message}`),Q.info("\u{1F4DD} Using default configuration"),ho}},Au=t=>{try{let e=F_(t);pr.writeFileSync(Du,JSON.stringify(e,null,2),"utf-8"),Q.info("\u{1F4BE} Configuration saved successfully")}catch(e){let s=e;Q.error(`\u274C Error saving configuration: ${s.message}`)}},Zp=()=>{try{pr.existsSync(Du)&&(pr.unlinkSync(Du),Q.info("\u{1F5D1}\uFE0F Configuration file removed"))}catch(t){let e=t;Q.error(`\u274C Error removing configuration: ${e.message}`)}};var SU=()=>{let t=T_.resolve(process.cwd(),"cdk.out");return __.existsSync(t)},P_=t=>t.summaryOnly?"summary":t.format==="json"||t.output==="json"?"json":t.format==="markdown"||t.output==="markdown"?"markdown":t.format==="summary"||t.output==="summary"?"summary":t.format==="sarif"||t.output==="sarif"?"sarif":t.format==="github-actions"||t.output==="github-actions"?"github-actions":"table";async function vU(t,e){let s=t.all?"All stacks":t.stackName||"All stacks",n=await $r({message:"Which stack would you like to analyze?",default:s,choices:e.map(c=>({name:c,value:c}))}),r=t.output||t.format||"table",i=await $r({message:"Choose output format:",choices:[{name:"\u{1F4CA} Table (default) - Human-readable table with colors",value:"table"},{name:"\u{1F4C4} Markdown - GitHub-compatible markdown report",value:"markdown"},{name:"\u{1F527} JSON - Structured data for CI/CD integration",value:"json"},{name:"\u{1F4CB} Summary - Brief overview with counts",value:"summary"}],default:r}),o=t.services&&t.services.length>0?t.services:["All services"],a=await lg({message:"Which AWS services would you like to analyze? (Use <space> to toggle, <enter> to confirm)",choices:[{name:"\u{1F50D} All services (recommended)",value:"All services",checked:o.includes("All services")},{name:"\u{1F510} IAM - Identity and Access Management",value:"IAM",checked:o.includes("IAM")},{name:"\u{1F4E6} S3 - Simple Storage Service",value:"S3",checked:o.includes("S3")},{name:"\u26A1 Lambda - Serverless Functions",value:"Lambda",checked:o.includes("Lambda")},{name:"\u{1F5C4}\uFE0F DynamoDB - NoSQL Database",value:"DynamoDB",checked:o.includes("DynamoDB")},{name:"\u{1F5C4}\uFE0F RDS - Relational Database",value:"RDS",checked:o.includes("RDS")},{name:"\u{1F5A5}\uFE0F EC2 - Virtual Machines",value:"EC2",checked:o.includes("EC2")},{name:"\u{1F4E2} SNS - Simple Notification Service",value:"SNS",checked:o.includes("SNS")},{name:"\u{1F4E8} SQS - Simple Queue Service",value:"SQS",checked:o.includes("SQS")},{name:"\u{1F504} Step Functions - Workflow Orchestration",value:"StepFunctions",checked:o.includes("StepFunctions")},{name:"\u{1F4DD} CloudTrail - API Logging",value:"CloudTrail",checked:o.includes("CloudTrail")},{name:"\u{1F310} API Gateway - REST APIs",value:"ApiGateway",checked:o.includes("ApiGateway")},{name:"\u{1F511} Secrets Manager - Secret Management",value:"SecretsManager",checked:o.includes("SecretsManager")},{name:"\u{1F510} KMS - Key Management",value:"KMS",checked:o.includes("KMS")},{name:"\u{1F4E1} EventBridge - Event Routing",value:"EventBridge",checked:o.includes("EventBridge")},{name:"\u{1F310} CloudFront - Content Delivery Network",value:"CloudFront",checked:o.includes("CloudFront")},{name:"\u2696\uFE0F ELB - Elastic Load Balancing",value:"ELB",checked:o.includes("ELB")},{name:"\u{1F433} ECS - Elastic Container Service",value:"ECS",checked:o.includes("ECS")},{name:"\u{1F464} Cognito - User Authentication",value:"Cognito",checked:o.includes("Cognito")},{name:"\u{1F6E1}\uFE0F WAF - Web Application Firewall",value:"WAF",checked:o.includes("WAF")},{name:"\u{1F4CA} CloudWatch - Monitoring & Logging",value:"CloudWatch",checked:o.includes("CloudWatch")},{name:"\u{1F30D} Route53 - DNS Management",value:"Route53",checked:o.includes("Route53")},{name:"\u26A1 ElastiCache - In-Memory Caching",value:"ElastiCache",checked:o.includes("ElastiCache")},{name:"\u{1F4E6} ECR - Container Registry",value:"ECR",checked:o.includes("ECR")},{name:"\u{1F50E} OpenSearch - Search & Analytics",value:"OpenSearch",checked:o.includes("OpenSearch")},{name:"\u{1F50F} ACM - Certificate Manager",value:"ACM",checked:o.includes("ACM")},{name:"\u{1F4BE} Backup - Backup Management",value:"Backup",checked:o.includes("Backup")},{name:"\u{1F517} VPC - Virtual Private Cloud",value:"VPC",checked:o.includes("VPC")},{name:"\u{1F30A} Kinesis - Real-time Streaming",value:"Kinesis",checked:o.includes("Kinesis")},{name:"\u{1F4F1} AppSync - GraphQL APIs",value:"AppSync",checked:o.includes("AppSync")},{name:"\u2638\uFE0F EKS - Kubernetes Service",value:"EKS",checked:o.includes("EKS")},{name:"\u{1F4C8} Redshift - Data Warehouse",value:"Redshift",checked:o.includes("Redshift")},{name:"\u{1F4EC} MSK - Managed Kafka",value:"MSK",checked:o.includes("MSK")},{name:"\u{1F9EA} Glue - ETL & Data Catalog",value:"Glue",checked:o.includes("Glue")}]});return{stackName:n,output:i,services:a}}async function CU(t,e,s,n,r,i,o,a,c,u,l,d){let{stackName:p,output:f,services:m,withIssue:g,ruleFilter:h,failOnCritical:x}=t,y=p==="All stacks"?void 0:p,{stacks:b,inlineFindings:S,pathToLogicalId:C,recommendationMapPerStack:I,assetSourcePaths:E,acknowledgementsPerStack:w,cdkVersion:j,supportsBoxTraces:H,cdkContext:z,resourceIdMetadata:q}=dp(y),L=Object.keys(b).length;A.success(`Synthesis complete. Found ${L} stack${L===1?"":"s"} to analyze.`),j&&!H&&A.info(`Detected aws-cdk-lib ${j}. Upgrade to >= 2.252.0 for per-property source locations on deferred values.`);let G=Object.values(b).reduce((me,ue)=>{let xe=Object.entries(ue.Resources||{}).filter(([,Ae])=>!Ae.Type.startsWith("AWS::CDK::"));return me+xe.length},0);G>0?A.info(`\u{1F50D} Preparing to analyze ${G} total resources across ${L} stacks...`):A.warning("No user resources found in stacks. Make sure your CDK app is properly configured.");let k=null,U=!!s;if(a&&(U=!1,A.info("\u{1F3E0} Running in local mode - static analysis only")),o&&!a){A.info("\u{1F50D} Checking license quota...");let me=n.licenseType==="FREE"||n.status==="TRIAL",ue=n.totalResourcesAnalyzed||0,xe=n.trialUsageLimit||n.maxUsage||200,Ae=Number.isNaN(ue)?0:ue,Ge=Number.isNaN(xe)?200:xe;if(me&&Ae>=Ge)U=!1,k={canProceed:!0,canRunStaticAnalysis:!0,canRunAIAnalysis:!1,quota:{currentResourcesAnalyzed:Ae,maxResources:Ge,remainingResources:Math.max(0,Ge-Ae),isTrial:!0,trialExpired:!1},reason:`Trial AI credit allowance exceeded (${Ae}/${Ge} used)`,upgradePath:"https://cdkinsights.dev/pricing"},A.warning("\u26A0\uFE0F Trial AI credit allowance exceeded \u2014 falling back to static scans only"),A.comment(" Upgrade to Pro for 5,000 AI credits per month");else if(k=await y_({licenseKey:o,requestedResources:G,allowOveruse:t.allowOveruse,usageData:r,licenseInfo:n}),U=!!s&&(k?.canRunAIAnalysis??!0),k?.quota?.isTrial){let St=k.quota.currentResourcesAnalyzed,kt=k.quota.maxResources;St>=kt&&(k={...k,canProceed:!0,canRunStaticAnalysis:!0,canRunAIAnalysis:!1,reason:`Trial AI credit allowance exceeded (${St}/${kt} used) \u2014 falling back to static scans only`},U=!1)}k?.quota?.isTrial&&A.displayTrialStatus({currentResourcesAnalyzed:k.quota.currentResourcesAnalyzed,maxResources:k.quota.maxResources,remainingResources:k.quota.remainingResources,isTrial:k.quota.isTrial,trialExpired:k.quota.trialExpired,trialStart:n.trialStart,trialEnd:n.trialEnd,tier:n.tier}),!U&&k?.quota?A.displayQuotaWarning({currentResourcesAnalyzed:k.quota.currentResourcesAnalyzed,maxResources:k.quota.maxResources,requestedResources:G,remainingResources:k.quota.remainingResources,isTrial:k.quota.isTrial}):U&&o&&A.success("AI analysis enabled - you'll receive comprehensive recommendations")}let V=sd(t.services),se=V.services;V.removedAllServices?Q.debug(`Services normalization: removed "All services", using: ${se.join(", ")}`):V.defaultedToAll&&Q.debug('Services normalization: defaulting to "All services"');let Y=c||{},Z=t.warnSensitive||Y.warnOnly||!1,ee=(()=>{let me=z?.["cdkInsights:aiModel"];return typeof me=="string"?me:void 0})(),le=A_({flag:t.model,cdkContext:ee,userConfig:typeof t.ai?.model=="string"?t.ai?.model:void 0,tier:n?.tier});le.downgradedFromTierGate?A.warning(`\u26A0\uFE0F Requested AI model "${le.requestedAlias}" is not available on your tier \u2014 using "${le.alias}" instead.`):le.source!=="tierDefault"&&A.comment(`\u{1F916} AI model: ${le.alias} (from ${le.source})`);let Ce=t.ai?.batchSize,K=typeof Ce=="number"&&Number.isFinite(Ce)?Math.max(1,Math.floor(Ce)):void 0;K&&K>1&&A.comment(`\u{1F9FA} AI batching: ${K} resources per call`);let Re={stacks:b,inlineFindings:S,pathToLogicalId:C,recommendationMapPerStack:I,assetSourcePaths:E,acknowledgementsPerStack:w,output:P_(t),services:se,withIssue:t.withIssue,ruleFilter:t.ruleFilter||[],ignoreRules:t.ignoreRules||[],ignorePaths:t.ignorePaths||[],failOnCritical:t.failOnCritical,authToken:s,fingerprint:e,tier:n?.tier,quotaValidation:k||null,noCache:t.noCache||!1,cache:{enabled:t.cache?.enabled??!0,ttl:t.cache?.ttl??3e5,maxSize:t.cache?.maxSize??5e3},allowOveruse:t.allowOveruse||!1,warnSensitive:Z,sensitiveDataDetection:{disabled:Y.enabled===!1,ignoreProperties:Y.ignoreProperties||[],allowPatterns:Y.allowPatterns||[],strictMode:Y.strictMode||!1},cdkContext:z,resourceIdMetadata:q,aiModelId:le.bedrockModelId,aiBatchSize:K,forceLocal:a,baselineExclude:u,collectFingerprints:l,skipRendering:d};return{...await Hp(Re),totalResources:G}}var L_={command:"scan [stackName]",describe:"Scan CDK stacks for best practices and security issues",builder:t=>t.positional("stackName",{type:"string",describe:"Name of the stack to analyze"}).option("ci",{type:"boolean",default:!1}).option("withIssue",{type:"boolean",description:"Create GitHub issues from findings?"}).option("output",{alias:"o",type:"string",choices:["json","table","markdown","summary","sarif","github-actions"]}).option("all",{type:"boolean",description:"Analyze all CDK stacks,",default:!1}).option("services",{type:"array",string:!0,description:"Only run checks for these services (e.g. IAM, S3, Lambda)"}).option("format",{type:"string",choices:["json","table","markdown","summary","sarif","github-actions"],describe:"Alias for --output (preferred)"}).option("yes",{type:"boolean",description:"Skip prompts and use saved/default values,",default:!1,alias:"y"}).option("reset",{type:"boolean",description:"Clear saved config and start fresh"}).option("redact",{type:"boolean",description:"Redact sensitive resource names in output",default:!1}).option("summaryOnly",{type:"boolean",description:"Only show summary in console output",default:!1}).option("synth",{type:"boolean",description:"Run cdk synth before analysis",default:!1}).option("failOnCritical",{type:"boolean",description:"Exit with code 1 if critical issues are found (defaults to true)",default:!0}).option("ruleFilter",{type:"array",string:!0,describe:"Filter findings to only include matching rule IDs or categories (e.g. AwsSolutions-IAM4, Security)"}).option("github",{describe:"Create GitHub issues for findings,",type:"boolean",default:!1}).option("noCache",{describe:"Disable cache and force fresh analysis",type:"boolean",default:!1}).option("allowOveruse",{describe:"Allow AI analysis even when exceeding paid allowance (extra usage will be charged)",type:"boolean",default:!1}).option("local",{describe:"Run static analysis only (skip AI analysis even with a valid license)",type:"boolean",default:!1}).option("warnSensitive",{describe:"Treat sensitive data as warning instead of critical (will not fail CI)",type:"boolean",default:!1}).option("prComment",{describe:"Post analysis summary as a PR comment (GitHub Actions only)",type:"boolean",default:!1}).option("model",{describe:"AI model alias for analysis (e.g. nova-lite, mistral-14b, llama-3-3-70b). Overrides cdk.json and user config. Tier-gated.",type:"string"}).option("diff",{describe:"Only show findings new since the saved baseline (.cdk-insights-baseline.json). Existing findings still appear in summaries but never fail CI.",type:"boolean",default:!1}).option("writeBaseline",{describe:"Write the current findings to .cdk-insights-baseline.json (or --baseline path) and exit 0 regardless of severity. Skips findings rendering.",type:"boolean",default:!1}).option("baseline",{describe:"Path to the baseline file. Defaults to .cdk-insights-baseline.json in cwd. Used by both --diff and --writeBaseline.",type:"string"}),handler:async t=>{try{let e=t.output||t.format;if((e==="json"||e==="sarif")&&(process.env.CDK_INSIGHTS_QUIET_STDOUT="1"),t.reset){Zp(),Q.info("\u{1F5D1}\uFE0F Cleared saved CLI preferences.");return}let s=Hc(),n=s.fingerprint,r=s.project;(!n||n.length===0)&&(A.error("Failed to generate system fingerprint for authentication."),A.comment(" This may indicate a permissions issue with reading system information."),process.exit(1));let i=process.env.CDK_INSIGHTS_LICENSE_KEY,o,a,c;if(i){let L=await b2(i,n,r);L?(o=L.token,a=L.usageData,c=L.licenseInfo||await Vp(i,o),L.fingerprint?n=L.fingerprint:n=Hc(o).fingerprint):(A.warning("\u26A0\uFE0F License validation failed. Running in free tier mode."),A.comment(" Check your license key and internet connection."),c=await Vp(i,void 0))}else c=await Vp(void 0,void 0);let u=`${c?.tier??"free"} tier`;A.info(`\u{1F50D} CDK Insights (${u})`),c.tier==="free"&&!i&&(A.comment("\u{1F4A1} Upgrade to Pro for AI-powered recommendations and GitHub integration"),A.comment(" Visit: https://cdkinsights.dev"));let l=Dn(),d=I_(l,t),p=d.ci||Vn();if(p&&!d.ci){let L=ZD();A.info(`Detected CI environment${L?`: ${L}`:""}`)}let f=!p&&YD();p&&!d.stackName&&!d.all&&(d.all=!0),p&&!d.output&&(d.output="json"),SU()||(A.info("\u26A1 No cdk.out directory found. Running cdk synth..."),BI()||(A.error("Failed to synthesize CDK stacks."),A.comment(" Make sure your CDK app compiles correctly."),process.exit(1)));let m=ME();m.length===0&&(A.error("No CDK stacks found in cdk.out directory."),A.comment(' Make sure you have run "cdk synth" and that your CDK app defines at least one stack.'),A.comment(" If cdk.out exists, check that it contains valid CloudFormation templates."),process.exit(1));let g=["All stacks",...m],h=d;if((t.github||h.withIssue)&&(zn.isFeatureEnabled("githubIntegration",c.tier)?A.success("\u{1F517} GitHub integration enabled"):(A.error("GitHub integration is not available for your current tier"),A.comment(Il("githubIntegration",c.tier,"GitHub integration")),process.exit(1))),f&&!d.yes){let L=await vU(d,g);h={...d,...L}}h.all&&(h.stackName="All stacks"),h.stackName||(h.stackName="All stacks"),f&&h.output||(h.output=P_(h)),h.format=h.output,(h.output==="json"||h.output==="sarif")&&(process.env.CDK_INSIGHTS_QUIET_STDOUT="1"),f&&h.output==="markdown"&&h.withIssue===void 0?h.withIssue=await Aa({message:"Create GitHub issues from findings? (only available with markdown output)",default:!1}):h.withIssue===void 0&&(h.withIssue=!1),h.output==="table"&&(h.withIssue=!1);let x,y=0;if(h.diff)try{let L=P0(h.baseline);L?(x=new Set(L.fingerprints),y=L.fingerprints.length,A.info(`\u{1F4D0} Diff against baseline (${L.fingerprints.length} known findings; ${L.generatedAt}).`)):A.warning("No baseline file found. Run `cdk-insights scan --writeBaseline` to create one. Showing all findings.")}catch(L){A.error(L instanceof Error?L.message:"Failed to load baseline file."),process.exit(2)}let b=h.writeBaseline?new Set:void 0,S=h.writeBaseline===!0,C=v_(),I=new Date,E=await CU(h,n,o,c,a,r,i,h.local,l.sensitiveDataDetection,x,b,S),w=l.telemetry?.enabled===!0&&!!i;if(h.diff&&x){let L=0,G=[];for(let k of Object.values(E.recommendationMaps||{})){if(!k?.sources)continue;let U=[...k.sources.cdkInsights?.issues??[],...k.sources.cdkNag?.issues??[]];L+=U.length,G.push(...U)}if(A.info(`\u{1F4D0} Diff result: ${L} new finding${L===1?"":"s"} (${y} existing, suppressed).`),w){let k=(()=>{try{return P0(h.baseline)}catch{return null}})();Su({enabled:!0,licenseKey:i,authToken:o,tier:c?.tier,event:{type:"diff_run",newFindings:L,existingSuppressed:y,newSeverities:ex(G),baselineGeneratedAt:k?.generatedAt,failedOnCritical:!!E.hasCriticalIssues}})}}if(h.writeBaseline&&b){let L="1.27.0",{path:G,count:k}=LE([...b],{cliVersion:L,overridePath:h.baseline});if(A.success(`\u{1F4CC} Wrote baseline of ${k} finding${k===1?"":"s"} to ${G}.`),A.comment(" On the next run, pass --diff to see only new findings since this point."),w){let U=[],V={},se=new Set;for(let Y of Object.values(E.recommendationMaps||{})){if(!Y?.sources)continue;let Z=[...Y.sources.cdkInsights?.issues??[],...Y.sources.cdkNag?.issues??[]];U.push(...Z);for(let le of Z){let Ce=le.ruleId,K=/^([A-Za-z][A-Za-z0-9-]+):\s/.exec(le.issue??""),Re=Ce||K?.[1]||"unknown";V[Re]=(V[Re]??0)+1}let ee=Y.type;ee?.startsWith("AWS::")&&se.add(ee.split("::")[1])}Su({enabled:!0,licenseKey:i,authToken:o,tier:c?.tier,event:{type:"baseline_written",totalFindings:k,severityCounts:ex(U),ruleHistogram:V,uniqueServices:se.size}})}return}let j=[],H=E.recommendationMaps||{},z=new Set;for(let[L,G]of Object.entries(H)){let k=G,U=L.includes(":")?L.substring(L.indexOf(":")+1):L,V=L.includes(":")?L.substring(0,L.indexOf(":")):"";V&&z.add(V);let se=[...k.sources.cdkInsights?.issues??[],...k.sources.cdkNag?.issues??[]];for(let Y of se)j.push({resourceId:U,issue:Y.issue,recommendation:Y.recommendation,severity:Y.severity,wafPillar:Y.wafPillar||"Security",foundBy:Y.foundBy||"cdkInsights",constructPath:Y.constructPath,codeSnippet:Y.codeSnippet,sourceLocation:Y.sourceLocation,ruleId:Y.ruleId,context:Y.context,constructType:Y.constructType||k.constructType})}if(h.prComment)if(Qd()){A.info("Posting analysis summary to PR...");let L=[...z],G={stackNames:L.length>0?L:[h.stackName||"Unknown"],resourceCount:E.totalResources,issues:j,reportUrl:void 0,aiEnabled:!h.local&&!!i,tier:c?.tier||"free"},k=await M0({data:G,updateExisting:!0});k.success?A.success("PR comment posted successfully"):A.warning(`Failed to post PR comment: ${k.error}`)}else A.warning("PR comment requested but not in GitHub Actions PR context. Skipping."),A.comment(" PR comments require: GitHub Actions + pull_request event + GITHUB_TOKEN permissions");if(A.success(`Analysis complete! ${h.withIssue?"GitHub issues have been created for the findings.":"Review the findings above."}`),l.scanHistory?.enabled===!0&&i&&o&&!h.writeBaseline){let L="1.27.0",G=new Date,k=!h.local&&!!i,U=b_({scanId:C,cliVersion:L,recommendationMaps:E.recommendationMaps||{},scannedResourceIds:E.scannedResourceIds??new Set,scanStartedAt:I,scanCompletedAt:G,aiAnalysis:{ran:k}});A.info("\u{1F4E4} Uploading scan to CDK Insights...");let V=await S_({enabled:!0,licenseKey:i,authToken:o,tier:c?.tier,report:U});if(!V.skipped)if(V.success)A.success(`Uploaded as scan ${V.scanId}`),V.viewUrl&&A.comment(` View: ${V.viewUrl}`),V.retentionDays&&A.comment(` Retained for ${V.retentionDays} day${V.retentionDays===1?"":"s"} \u2014 adjust in scanHistory settings.`),A.comment(" You opted in via .cdk-insights.json. To opt out, set scanHistory.enabled = false.");else{let se=V.serverMessage??V.reason??"unknown";A.warning(`Could not upload scan to CDK Insights (${se}). Run continues normally.`)}}if(l.feedback!==!1&&f&&o&&j.length>0)try{let L=await $r({message:"Was this analysis helpful?",choices:[{name:"Yes, helpful!",value:"helpful"},{name:"Actionable - I'll fix these",value:"actionable"},{name:"Not helpful",value:"not_helpful"},{name:"Inaccurate findings",value:"inaccurate"},{name:"Skip",value:"skip"}],default:"skip"});if(L!=="skip"){let G=yn(),U=WI({apiClient:{post:async(se,Y)=>{let{data:Z}=await yt.post(`${G}${se}`,Y,{headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json","x-cdk-insights-fingerprint":n,"x-cdk-insights-client":"cli"},timeout:1e4});return Z}}}),V={};for(let[se,Y]of Object.entries(E.recommendationMaps||{})){let Z=Y,ee=se.includes(":")?se.substring(se.indexOf(":")+1):se;Z.type&&(V[ee]=Z.type)}if(L==="helpful")U.markReportAsHelpful(j,V).catch(()=>{}),A.comment(" Thanks for your feedback!");else{let se=j.map(Y=>({issue:Y,rating:L,resourceType:V[Y.resourceId]}));U.submitBatchFeedback(se).catch(()=>{}),A.comment(" Thanks for your feedback!")}}}catch{}else f||A.comment(" Have feedback? Let us know: https://cdkinsights.dev/feedback?source=cli");E.hasCriticalIssues&&(E.hasSensitiveData&&!h.warnSensitive?(A.error("Sensitive data detected. Exiting with code 1."),A.comment(" Use --warn-sensitive to continue without failing, or fix the issues.")):A.error("Critical issues found. Exiting with code 1."),await new Promise(L=>{process.stdout.write("")?L():process.stdout.once("drain",L)}),process.exit(1))}catch(e){let{message:s}=e;A.error(`An error occurred during analysis: ${s||e}`),process.exit(1)}}};var Jp=te(require("node:fs"));var Eu,O_=()=>{if(Eu!==void 0)return Eu;try{Eu=require("typescript")}catch{Eu=null}return Eu},go=t=>{let e=O_();if(!e)return{status:"error",reason:"typescript is not available in this project. Install it as a devDependency (`npm install --save-dev typescript`) so cdk-insights can parse your stack files."};let s=e.createSourceFile(t.filePath,t.source,e.ScriptTarget.Latest,!0,e.ScriptKind.TS),n=s.getLineStarts(),r=n[t.line-1]!==void 0?n[t.line-1]+Math.max(0,t.column-1):-1;if(r<0)return{status:"error",reason:`Source location ${t.line}:${t.column} is outside the file.`};let i=null,o=Number.POSITIVE_INFINITY,a=y=>{if(e.isNewExpression(y)){let b=y.expression.getText(s);if(t.expectedCalleePattern.test(b)){let S=y.getStart(s),C=y.getEnd(),I=C-S;S<=r&&r<=C&&I<o?(i=y,o=I):i||s.getLineAndCharacterOfPosition(S).line+1===t.line&&(i=y,o=I)}}e.forEachChild(y,a)};if(a(s),!i){if(process.env.CDK_INSIGHTS_FIX_DEBUG==="1"){let y=[],b=S=>{e.isNewExpression(S)&&y.push({callee:S.expression.getText(s),line:s.getLineAndCharacterOfPosition(S.getStart(s)).line+1,pos:S.getStart(s)}),e.forEachChild(S,b)};b(s),console.error(`[fix-debug] target=${t.line}:${t.column} pos=${r} pattern=${t.expectedCalleePattern.source}`),console.error("[fix-debug] all new exprs:",y)}return{status:"error",reason:`No \`new <Construct>()\` matching /${t.expectedCalleePattern.source}/ found near ${t.filePath}:${t.line}:${t.column}. The scanner's source location may have drifted from the actual construct.`}}let c=i.arguments;if(!c||c.length<3)return{status:"error",reason:"Construct invocation has no props argument. Add a `{}` props object as the third argument and re-run."};let u=c[2];if(!e.isObjectLiteralExpression(u))return{status:"error",reason:"Props are passed via a variable, spread, or function call \u2014 cdk-insights will not rewrite that automatically. Inline the props object or apply the fix manually."};for(let y of u.properties)if(e.isPropertyAssignment(y)&&e.isIdentifier(y.name)&&y.name.text===t.propertyName)return{status:"skipped",reason:`\`${t.propertyName}\` is already set on this construct (the rule may have other reasons it still fires).`};let l=s.getFullText(),d=u.getStart(s),p=n[s.getLineAndCharacterOfPosition(d).line],f=l.slice(p,d).match(/^[ \t]*/)?.[0]??" ",m=`${f} `,g=u.properties.length===0,h=`${t.propertyName}: ${t.propertyValueSource}`,x;if(g){let y=u.getStart(s),b=u.getEnd();x=`${l.slice(0,y)}{
519
+ `)},Zy=(t,e={})=>{let s=[],n=[],r=0;for(let[i,o]of Object.entries(t)){let a=a_(o,i,e);s.push(a),a.hasSensitiveData&&(n.push(i),r+=a.findings.length)}return{totalResourcesScanned:Object.keys(t).length,resourcesWithSensitiveData:n.length,totalFindings:r,hasSkippedResources:n.length>0,skippedResourceIds:n,detectionResults:s}};var $p=te(require("node:fs")),u_=te(require("node:path"));var Wp=".cdk-insights-rules.json",Nj=new Set(["CRITICAL","HIGH","MEDIUM","LOW"]),Wj=new Set(["Operational Excellence","Security","Cost Optimization","Reliability","Performance Efficiency","Sustainability"]),$j=new Set(["property_exists","property_equals","property_matches","property_gt","property_lt","and","or"]);function l_(t,e){if(!t||typeof t!="object")return qe.warn(`Custom rule '${e}': condition must be an object`),!1;let s=t;if(!s.type||!$j.has(s.type))return qe.warn(`Custom rule '${e}': invalid condition type '${s.type}'`),!1;if(s.type==="and"||s.type==="or")return!Array.isArray(s.conditions)||s.conditions.length===0?(qe.warn(`Custom rule '${e}': '${s.type}' condition requires non-empty conditions array`),!1):s.conditions.every(n=>l_(n,e));if(typeof s.path!="string"||s.path.length===0)return qe.warn(`Custom rule '${e}': condition requires a non-empty 'path'`),!1;if(s.type==="property_matches")try{new RegExp(s.pattern)}catch{return qe.warn(`Custom rule '${e}': invalid regex pattern '${s.pattern}'`),!1}return(s.type==="property_gt"||s.type==="property_lt")&&typeof s.value!="number"?(qe.warn(`Custom rule '${e}': '${s.type}' requires a numeric value`),!1):!0}function jj(t,e){if(!t||typeof t!="object")return qe.warn(`Custom rule at index ${e}: must be an object`),null;let s=t;return typeof s.ruleId!="string"||s.ruleId.length===0?(qe.warn(`Custom rule at index ${e}: ruleId is required`),null):typeof s.name!="string"||s.name.length===0?(qe.warn(`Custom rule '${s.ruleId}': name is required`),null):typeof s.description!="string"?(qe.warn(`Custom rule '${s.ruleId}': description is required`),null):Nj.has(s.severity)?Wj.has(s.wafPillar)?!Array.isArray(s.resourceTypes)||s.resourceTypes.length===0?(qe.warn(`Custom rule '${s.ruleId}': resourceTypes must be a non-empty array`),null):typeof s.recommendation!="string"?(qe.warn(`Custom rule '${s.ruleId}': recommendation is required`),null):l_(s.condition,s.ruleId)?s:null:(qe.warn(`Custom rule '${s.ruleId}': invalid wafPillar '${s.wafPillar}'`),null):(qe.warn(`Custom rule '${s.ruleId}': invalid severity '${s.severity}'`),null)}function d_(t=process.cwd()){let e=u_.join(t,Wp);if(!$p.existsSync(e))return[];try{let s=$p.readFileSync(e,"utf-8"),n=JSON.parse(s);if(!n.rules||!Array.isArray(n.rules))return qe.warn(`${Wp}: 'rules' must be an array`),[];let r=[];for(let i=0;i<n.rules.length;i++){let o=jj(n.rules[i],i);o&&r.push(o)}return r.length>0&&qe.info(`Loaded ${r.length} custom rule(s) from ${Wp}`),r}catch(s){return qe.warn(`Failed to load ${Wp}: ${s instanceof Error?s.message:String(s)}`),[]}}var Yy=require("aws-cdk-lib"),jp=require("cdk-nag");var p_="cdk-insights::",Uj=`${p_}nagFinding::`;var xu="1.0.0";var Gp=async(t,e)=>{try{return await t()}catch(s){return Q.warn(`\u26A0\uFE0F Error in ${e.operationName}:`,{error:s}),e.fallbackValue}},Gj=t=>!t||t.length===0||t.includes("All services"),Hj=(t,e)=>{if(Gj(e))return t;let s=new Set((e??[]).map(n=>`AWS::${n}::`));return Object.fromEntries(Object.entries(t).filter(([,n])=>{for(let r of s)if(n.Type.startsWith(r))return!0;return!1}))},zj=t=>Object.fromEntries(Object.entries(t).filter(([,e])=>!e.Type.startsWith("AWS::CDK::"))),Vj=t=>{let{stackName:e,pathToLogicalId:s}=t;return n=>({resourceId:n,friendlyName:s[n]??n,cdkPath:`${e}/${n}`,isGenerated:!1,sources:{cdkInsights:{issues:[]},cdkNag:{issues:[]}}})},Gr=(t,e,s)=>{let n=t[e];if(n)return n;let r=s(e);return t[e]=r,r},qj=t=>[...t.sources?.cdkInsights?.issues??[],...t.sources?.cdkNag?.issues??[]],f_=t=>{for(let e of Object.values(t)){for(let s of e.sources?.cdkInsights?.issues??[])if(s.severity==="CRITICAL")return!0;for(let s of e.sources?.cdkNag?.issues??[])if(s.severity==="CRITICAL")return!0}return!1},Kj=t=>{for(let[e,s]of Object.entries(t))(s.sources?.cdkInsights?.issues?.length??0)>0||(s.sources?.cdkNag?.issues?.length??0)>0||delete t[e];return t},Up=(t,e,s,n,r,i,o)=>({resourceId:t,issue:e,recommendation:s,severity:n,wafPillar:r,foundBy:o,constructPath:i}),Zj=t=>{let{recommendationMap:e,stackName:s,stackResources:n,manifest:r}=t;try{let i=new Map,o=a=>{let c=i.get(a);if(c)return c;let u=ap(r,a);return i.set(a,u),u};return Object.entries(e).reduce((a,[c,u])=>{let l=u.cdkPath||c,d=o(l),p=n[c]?.Type||"Unknown",f=m=>({...m,...d?.filePath&&{sourceLocation:{filePath:d.filePath,line:d.line||1,column:d.column||1,confidence:d.confidence||"low"}},stackName:s,constructType:p});return a[c]={...u,sources:{cdkInsights:{issues:(u.sources?.cdkInsights?.issues??[]).map(f)},cdkNag:{issues:(u.sources?.cdkNag?.issues??[]).map(f)}}},a},{})}catch(i){return Q.warn("\u26A0\uFE0F Could not enrich issues with source location:",{error:i}),e}},Yj=t=>{let{authToken:e,fingerprint:s,tier:n,quotaValidation:r}=t,i=!!(e&&s&&n),o=!r||r.canRunStaticAnalysis,a=!r||r.canRunAIAnalysis,c=!!(n&&zn.isFeatureEnabled("aiAnalysis",n));return{hasAuth:i,canRunStatic:o,canRunAI:i&&c&&a,isAiEnabledByTier:c,canRunAIByQuota:a}},Jj=async t=>{let{userResources:e,selectedServices:s,constructRegistry:n,canRunStatic:r,customRules:i=[],ruleContext:o}=t,a=Object.keys(e).length;return a===0?{}:r?(A.phase1(`Static analysis on ${a} resource${a===1?"":"s"}`),await Gp(()=>Promise.resolve(ly({Resources:e},Up,s||[],n,i,o)),{operationName:"static analysis",fallbackValue:{}})??{}):(A.warning("\u26A0\uFE0F Static analysis skipped due to license restrictions"),{})},Qj=async t=>{let{stackName:e,userResources:s,inlineFindings:n,pathToLogicalId:r,authToken:i,fingerprint:o,tier:a,noCache:c=!1,cache:u,capabilities:l,aiModelId:d,aiBatchSize:p}=t,f=Object.keys(s).length;if(f===0)return{results:{}};if(!l.hasAuth)return{results:{},skippedReason:"auth"};if(a&&!l.isAiEnabledByTier)return A.comment("\u{1F4A1} AI analysis is available with Pro tier - upgrade for deeper insights"),{results:{},skippedReason:"unavailable"};if(!l.canRunAIByQuota&&l.canRunStatic)return a==="pro"?A.comment("\u{1F4A1} AI analysis skipped \u2014 monthly AI credit allowance reached. Static scans continue; AI resumes next billing cycle."):A.comment("\u{1F4A1} AI analysis skipped \u2014 credit allowance reached. Upgrade to Pro for 5,000 AI credits/month."),{results:{},skippedReason:"cap-reached"};if(!l.canRunAI)return{results:{},skippedReason:"unavailable"};if(!i||!o)return Q.warn("AI analysis skipped: missing authToken or fingerprint"),{results:{},skippedReason:"auth"};A.phase2(`AI analysis on ${f} resource${f===1?"":"s"}`);let m=yn(),g=WF(yt,m),h=UF(yt,m),x=aF(e_),y=AF({analyzeResource:g,analyzeResourcesBatch:h,redactResources:x});return{results:await Gp(()=>y({stackName:e,resources:s,authToken:i,existingFindingsMap:n,pathToLogicalId:r,fingerprint:o,noCache:c,cacheConfig:u,aiModelId:d,aiBatchSize:p}),{operationName:"AI analysis",fallbackValue:{}})??{}}},m_=t=>{let{recommendationMap:e,ignoreRules:s=[],ignorePaths:n=[],acknowledgements:r=[],baselineExclude:i,stackName:o=""}=t;if(s.length===0&&n.length===0&&r.length===0&&(!i||i.size===0))return e;for(let[a,c]of Object.entries(e)){let u=[a,c.cdkPath,c.friendlyName,c.displayName].filter(p=>typeof p=="string"&&p.length>0);if(n.some(p=>u.some(f=>Op(f,p)))){delete e[a];continue}let d=[c.cdkPath].concat(u).filter(p=>typeof p=="string"&&p.length>0);for(let p of["cdkInsights","cdkNag"]){let f=c.sources?.[p];f&&(f.issues=f.issues.filter(m=>{let g=[m.constructPath,...d].filter(x=>typeof x=="string"&&x.length>0);if(Ny(m,g,{ignoreRules:s,acknowledgements:r}))return!1;if(i&&i.size>0){let x=Ly(o,c,m);if(i.has(x))return!1}return!0}))}}return e},Xj=t=>{let{recommendationMap:e,ruleFilter:s}=t;if(s.length===0)return e;for(let[n,r]of Object.entries(e)){let i=qj(r),o=Oy(i,s);if(o.length===0){delete e[n];continue}r.sources||(r.sources={cdkInsights:{issues:[]},cdkNag:{issues:[]}}),r.sources.cdkInsights||(r.sources.cdkInsights={issues:[]}),r.sources.cdkNag||(r.sources.cdkNag={issues:[]}),r.sources.cdkInsights.issues=o.filter(a=>a.foundBy==="cdkInsights"),r.sources.cdkNag.issues=o.filter(a=>a.foundBy==="cdkNag")}return e},eU=async t=>{let{stackName:e,recommendationMap:s,summary:n,tier:r}=t;if(!r||!zn.isFeatureEnabled("githubIntegration",r)){A.warning("GitHub integration is not available for your current tier"),A.comment(Il("githubIntegration",r??"free","GitHub integration"));return}let i=MF(),o=!!process.env.GITHUB_TOKEN;if(!i&&!o){A.warning("GitHub CLI not found and GITHUB_TOKEN not set. Skipping issue creation."),A.comment("Install GitHub CLI (gh) or set GITHUB_TOKEN environment variable to enable issue creation.");return}A.section("Creating GitHub Issue","\u{1F419}");let a=Na(e,s,n);await Gp(()=>LF({stackName:e,issueTitle:`CDK Insights Analysis for ${e}`,issueBody:a,ghCli:i,recommendations:s,summary:n}),{operationName:"creating GitHub issue"})},h_=async({stackName:t,stack:e,selectedServices:s,inlineFindings:n,recommendationMapPerStack:r,pathToLogicalId:i,constructRegistry:o,ruleFilter:a,ignoreRules:c,ignorePaths:u,acknowledgements:l=[],authToken:d,fingerprint:p,output:f,withIssue:m,tier:g,noCache:h=!1,warnSensitive:x=!1,sensitiveDataDetection:y={},cache:b,quotaValidation:S,manifest:C,customRules:I=[],cdkContext:E,resourceIdMetadata:w,aiModelId:j,aiBatchSize:H,forceLocal:z=!1,baselineExclude:q,collectFingerprints:L,skipRendering:G=!1})=>{let k=e.Resources??{},U=Hj(k,s),V=zj(U),se=new Set(Object.keys(V)),Y=se.size,Z=Yj({authToken:d,fingerprint:p,tier:g,quotaValidation:S}),ee=Vj({stackName:t,pathToLogicalId:i}),le=r[t]||{},Ce=ie=>{let He=ee(ie),at=le[ie];return at?{...He,...at,sources:He.sources}:He},K=Z.canRunAI?Object.fromEntries(Object.keys(V).map(ie=>[ie,Ce(ie)])):{};for(let[ie,He]of Object.entries(le)){let at=He.sources?.cdkNag?.issues??[];if(at.length===0)continue;Gr(K,ie,Ce).sources.cdkNag.issues.push(...at)}for(let ie of n)Gr(K,ie.resourceId,Ce).sources.cdkNag.issues.push(ie);let Re=E||w?{cdkContext:E,resourceIdMetadata:w}:void 0,ne=await Jj({userResources:V,selectedServices:s,constructRegistry:o,canRunStatic:Z.canRunStatic,customRules:I,ruleContext:Re});for(let[ie,He]of Object.entries(ne)){let at=Gr(K,ie,Ce),ku=He.issues??[];at.sources.cdkInsights.issues.push(...ku)}let me=dy(e,Up,a);for(let[ie,He]of Object.entries(me))Gr(K,ie,Ce).sources.cdkInsights.issues.push(...He.issues);let ue=mp(e,Up);for(let[ie,He]of Object.entries(ue))Gr(K,ie,Ce).sources.cdkInsights.issues.push(...He.issues);let xe=fp(e,Up);for(let[ie,He]of Object.entries(xe))Gr(K,ie,Ce).sources.cdkInsights.issues.push(...He.issues);let Ae=Zy(V,{disabled:y.disabled,ignoreProperties:y.ignoreProperties,allowPatterns:y.allowPatterns,strictMode:y.strictMode}),Ge=V;if(Ae.hasSkippedResources){let ie=Ae.resourcesWithSensitiveData;A.warning(`\u{1F512} Sensitive data detected in ${ie} resource${ie===1?"":"s"} - NOT sent to CDK Insights servers`),Ge=Object.fromEntries(Object.entries(V).filter(([He])=>!Ae.skippedResourceIds.includes(He)));for(let He of Ae.detectionResults)if(He.hasSensitiveData){let at=Gr(K,He.resourceId,Ce),ku=Ky(He,t);at.sources.cdkInsights.issues.push(ku)}}let St=new Set(Object.entries(K).filter(([,ie])=>ie.sources.cdkInsights.issues.length>0||ie.sources.cdkNag.issues.length>0).map(([ie])=>ie)),kt=Object.fromEntries(Object.entries(Ge).filter(([ie])=>St.has(ie))),rs=Object.keys(Ge).length-Object.keys(kt).length;rs>0&&Z.canRunAI&&A.comment(`\u{1F3AF} Skipping AI analysis on ${rs} resource${rs===1?"":"s"} with no static findings`);let R=await Qj({stackName:t,userResources:kt,inlineFindings:n,pathToLogicalId:i,authToken:d,fingerprint:p,tier:g,noCache:h,cache:b,capabilities:Z,aiModelId:j,aiBatchSize:H}),W=R.results,ae=z?"local-mode":R.skippedReason;d&&p&&Object.keys(W).length>0&&A.phase3("Processing results...");let J=s_({staticRecommendations:{},aiRecommendations:W,recommendationMap:K,ruleFilter:a,filterIssuesByRule:Oy});for(let[ie,He]of Object.entries(J.updatedMap)){let at=Gr(K,ie,Ce);at.sources.cdkInsights.issues.push(...mo({existing:at.sources.cdkInsights.issues,incoming:He.sources.cdkInsights.issues}))}if(Xj({recommendationMap:K,ruleFilter:a}),m_({recommendationMap:K,ignoreRules:c,ignorePaths:u,acknowledgements:l}),L)for(let{fingerprint:ie}of HF(t,K))L.add(ie);q&&q.size>0&&m_({recommendationMap:K,baselineExclude:q,stackName:t}),Kj(K);let N=Zj({recommendationMap:K,stackName:t,stackResources:V,manifest:C}),be=Lp(N,Y,se,ae),he=Object.keys(N).length>0;return r[t]=N,!G&&f&&f!=="table"&&QF(f,t,N,!0,be),m&&he&&await eU({stackName:t,recommendationMap:N,summary:be,tier:g}),{recommendationMap:N,summary:be,hasIssues:he,scannedResourceCount:Y,scannedResourceIds:se,stackName:t,sensitiveDataSummary:Ae,hasSensitiveData:Ae.hasSkippedResources}},Hp=async({stacks:t,inlineFindings:e,pathToLogicalId:s,output:n,recommendationMapPerStack:r,withIssue:i,services:o,ruleFilter:a=[],ignoreRules:c=[],ignorePaths:u=[],acknowledgementsPerStack:l={},authToken:d,fingerprint:p,failOnCritical:f,tier:m,noCache:g=!1,allowOveruse:h=!1,warnSensitive:x=!1,sensitiveDataDetection:y={},cache:b,quotaValidation:S,cdkContext:C,resourceIdMetadata:I,aiModelId:E,aiBatchSize:w,forceLocal:j=!1,baselineExclude:H,collectFingerprints:z,skipRendering:q=!1})=>{if(Q.info("\u{1F680} Starting CDK Insights analysis",{stackCount:Object.keys(t).length,stackNames:Object.keys(t),hasAuthToken:!!d,hasFingerprint:!!p,tier:m||"unknown",quotaValidation:S?{canRunStaticAnalysis:S.canRunStaticAnalysis,canRunAIAnalysis:S.canRunAIAnalysis,isTrial:S.quota?.isTrial}:null,services:o||["All services"],output:n||"table"}),S&&!S.quota.isTrial&&S.canRunAIAnalysis&&h){let Re=S.quota.currentResourcesAnalyzed>=S.quota.maxResources,ne=S.quota.wouldExceed;Re?(A.warning(`\u26A0\uFE0F You have used ${S.quota.currentResourcesAnalyzed}/${S.quota.maxResources} AI credits this billing period.`),A.warning(" Proceeding with AI analysis as --allow-overuse is enabled.")):ne&&(A.warning(`\u26A0\uFE0F This analysis will exceed your AI credit allowance (${S.quota.currentResourcesAnalyzed}/${S.quota.maxResources}).`),A.warning(" Proceeding with AI analysis as --allow-overuse is enabled."))}let L=d_(),G=Pa("cdk.out"),k=await Gp(()=>m1(p1()),{operationName:"loading construct metadata",fallbackValue:{}})??{},U={},V=!1,se=!1,Y=0,Z=new Set,ee=Object.keys(t),le=ee.length,Ce=Re=>{let{stackName:ne,map:me}=Re;for(let[ue,xe]of Object.entries(me))U[`${ne}:${ue}`]=xe};if(le>1)await Ep.runAnalysis({title:`Deep Analysis of ${le} CDK Stacks`,steps:ee.map((Re,ne)=>({title:`Analyzing stack ${ne+1}/${le}: ${Re}`,task:async()=>{let me=t[Re],ue=await h_({stackName:Re,stack:me,selectedServices:o,inlineFindings:e,recommendationMapPerStack:r,pathToLogicalId:s,constructRegistry:k,ruleFilter:a,ignoreRules:c,ignorePaths:u,acknowledgements:l[Re]??[],authToken:d,fingerprint:p,output:n,withIssue:i,tier:m,noCache:g,warnSensitive:x,sensitiveDataDetection:y,cache:b,quotaValidation:S,manifest:G,customRules:L,cdkContext:C,resourceIdMetadata:I,aiModelId:E,aiBatchSize:w,forceLocal:j,baselineExclude:H,collectFingerprints:z,skipRendering:q});Ce({stackName:ue.stackName,map:ue.recommendationMap}),Y+=ue.scannedResourceCount;for(let xe of ue.scannedResourceIds)Z.add(`${ue.stackName}:${xe}`);return!V&&ue.hasIssues&&(V=f_(ue.recommendationMap)),ue.hasSensitiveData&&(se=!0),!q&&(n==="summary"||n==="table")&&A.summary(ue.summary),ue}})),showSummary:!0});else{let[Re,ne]=Object.entries(t)[0]??[];if(!Re||!ne)return{recommendationMaps:{},hasCriticalIssues:!1,scannedResourceIds:new Set};let me=Object.entries(ne.Resources||{}).filter(([,xe])=>!xe.Type.startsWith("AWS::CDK::")).length;A.analysisStart(Re,me);let ue=await h_({stackName:Re,stack:ne,selectedServices:o,inlineFindings:e,recommendationMapPerStack:r,pathToLogicalId:s,constructRegistry:k,ruleFilter:a,ignoreRules:c,ignorePaths:u,acknowledgements:l[Re]??[],authToken:d,fingerprint:p,output:n,withIssue:i,tier:m,noCache:g,warnSensitive:x,sensitiveDataDetection:y,cache:b,quotaValidation:S,manifest:G,customRules:L,cdkContext:C,resourceIdMetadata:I,aiModelId:E,aiBatchSize:w,forceLocal:j,baselineExclude:H,collectFingerprints:z,skipRendering:q});Ce({stackName:ue.stackName,map:ue.recommendationMap}),Y+=ue.scannedResourceCount;for(let xe of ue.scannedResourceIds)Z.add(`${ue.stackName}:${xe}`);ue.hasIssues&&(V=f_(ue.recommendationMap)),ue.hasSensitiveData&&(se=!0),!q&&(n==="summary"||n==="table")&&A.summary(ue.summary)}if(q)return{recommendationMaps:U,hasCriticalIssues:!1,hasSensitiveData:se,scannedResourceIds:Z};if(Object.keys(U).length>0&&le>1){let Re=Lp(U,Y,Z);if(n==="table"||n==="summary")A.section("Overall Analysis Summary","\u{1F4CA}"),A.summary(Re),n==="table"&&(fu(U),A.section("Overall Analysis Summary (continued)","\u{1F4CA}"),A.summary(Re));else if(n==="sarif"){let ne=Pp("consolidated",U),me="consolidated_analysis_report.sarif";g_.writeFileSync(me,JSON.stringify(ne,null,2)),A.info(`\u{1F4C4} Consolidated SARIF report written to: ${me}`)}else n==="github-actions"&&_p("consolidated",U,Re.severityCounts,Y)}else if(n==="table"||n==="summary")if(Object.keys(U).length>0){let Re=Lp(U,Y,Z);A.section("Overall Analysis Summary","\u{1F4CA}"),A.summary(Re),n==="table"&&(fu(U),A.section("Overall Analysis Summary (continued)","\u{1F4CA}"),A.summary(Re))}else A.success("No issues found across all stacks!");return{recommendationMaps:U,hasCriticalIssues:!!f&&V||se&&!x,hasSensitiveData:se,scannedResourceIds:Z}};var zp={staticAnalysis:!0,basicServiceChecks:!0,localAnalysis:!0,jsonOutput:!0,tableOutput:!0,aiRecommendations:!1,githubIntegration:!1,teamCollaboration:!1,advancedOutputFormats:!1,customRules:!1,prioritySupport:!1,ciCdIntegration:!1},Jy={staticAnalysis:!0,basicServiceChecks:!0,localAnalysis:!0,jsonOutput:!0,tableOutput:!0,aiRecommendations:!0,githubIntegration:!0,teamCollaboration:!0,advancedOutputFormats:!0,customRules:!0,prioritySupport:!0,ciCdIntegration:!0};var bu=new Map,tU=new Set(["free","pro","enterprise","trial"]),sU=t=>{try{let e=t.split(".");if(e.length!==3)return;let s=JSON.parse(Buffer.from(e[1],"base64").toString());return s.tier&&tU.has(s.tier)?s.tier:void 0}catch{return}},Vp=async(t,e)=>{if(!t)return{isValid:!0,tier:"free",features:zp};if(bu.has(t)){let s=bu.get(t);if(s.expiresAt&&s.expiresAt>new Date)return s;bu.delete(t)}if(e){Zl.info("\u2705 License validated via JWT token from login");let n=sU(e)??"free",r=n==="pro"||n==="trial"||n==="enterprise"?Jy:zp,i={isValid:!0,tier:n,expiresAt:new Date(Date.now()+3600*1e3),features:r};return bu.set(t,i),i}if(process.env.NODE_ENV==="development"&&process.env.CDK_INSIGHTS_DEV_MODE==="true"){Zl.warn("\u26A0\uFE0F Development mode enabled - Pro features available for testing only");let s={isValid:!0,tier:"pro",expiresAt:new Date(Date.now()+24*60*60*1e3),features:Jy};return bu.set(t,s),s}return Zl.warn("\u26A0\uFE0F License key provided but no valid authentication token"),{isValid:!1,tier:"free",features:zp}};var y_=async t=>{let s={requestId:`enhanced-quota-${Date.now()}`,functionName:"validateEnhancedLicenseQuota"};Q.info("\u{1F50D} Starting enhanced license quota validation",s,{requestedResources:t.requestedResources,hasLicenseKey:!!t.licenseKey,hasUsageData:!!t.usageData});try{if(t.licenseInfo||t.usageData){let l=0;t.licenseInfo&&t.licenseInfo.currentPeriodUsage!==void 0&&t.licenseInfo.currentPeriodUsage!==null?(l=Number(t.licenseInfo.currentPeriodUsage),Q.info("\u{1F4CA} Using currentPeriodUsage from license (per-cycle source of truth)",s,{currentPeriodUsage:l})):t.usageData&&t.usageData.totalResourcesAnalyzed>0&&(l=t.usageData.totalResourcesAnalyzed,Q.info("\u{1F4CA} Using usage data from login (fallback \u2014 no currentPeriodUsage in license info)",s,{totalResourcesAnalyzed:t.usageData.totalResourcesAnalyzed,totalTokens:t.usageData.totalTokens,usageCount:t.usageData.usageCount}));let d=200,p=!0,f=!1;if(t.licenseInfo){let E=t.licenseInfo.licenseType||t.licenseInfo.tier;if(t.licenseInfo.status==="TRIAL"||t.licenseInfo.tier==="trial"){p=!0,d=t.licenseInfo.trialUsageLimit||t.licenseInfo.maxUsage||200;let w=t.licenseInfo.trialEnd||t.licenseInfo.expiresAt;w&&(f=Math.floor(Date.now()/1e3)>w)}else p=!1,E==="ENTERPRISE"?d=iu.DEFAULT_TEAM_AI_INSIGHTS_PER_SEAT*10:E==="TEAM"?d=iu.DEFAULT_TEAM_AI_INSIGHTS_PER_SEAT:E==="FREE"?d=Number(t.licenseInfo.maxUsage)||iu.DEFAULT_FREE_AI_INSIGHTS:d=iu.DEFAULT_PRO_AI_INSIGHTS}let m=Math.max(0,d-l),g=l+t.requestedResources>d,h=Math.floor(d*.8),x=Math.floor(d*.9),y=!0,b=!0,S=!0,C,I;if(f)y=!1,b=!1,S=!1,C="Trial license has expired",I="https://cdkinsights.dev/pricing";else if(g&&p){y=!1,b=!0,S=!1;let E=t.allowOveruse?" Note: --allow-overuse does not apply to trial licenses which have a hard usage limit.":"";C=`AI analysis would exceed your Free account allowance. You have used ${l}/${d} AI credits and are requesting ${t.requestedResources} more.${E}`,I="https://cdkinsights.dev/pricing"}else g&&!p?t.allowOveruse?(y=!0,b=!0,S=!0,C=`You have used ${l}/${d} AI credits this billing period. Proceeding with AI analysis as --allow-overuse is enabled.`):(y=!0,b=!0,S=!1,C=`AI analysis would exceed your monthly AI credit allowance (${l}/${d} used). AI is paused until your next billing cycle \u2014 static scans continue to work. Use --allow-overuse to proceed anyway.`):p&&l>=x&&t.requestedResources>10&&(y=!1,b=!0,S=!1,C=`Large AI analysis requests are blocked when approaching your Free account allowance. You have used ${l}/${d} AI credits.`,I="https://cdkinsights.dev/pricing");return p&&l>=h&&l<d&&Q.info("Trial usage approaching limit - will be displayed in enhanced UI",s,{currentResources:l,maxResources:d,warningThreshold:h}),Q.info("\u2705 Enhanced license quota validation completed successfully",s,{canProceed:y,canRunStaticAnalysis:b,canRunAIAnalysis:S,currentResources:l,maxResources:d,remainingResources:m,isTrial:p,trialExpired:f}),{canProceed:y,canRunStaticAnalysis:b,canRunAIAnalysis:S,quota:{currentResourcesAnalyzed:l,maxResources:d,remainingResources:m,isTrial:p,trialExpired:f,wouldExceed:g,warningThreshold:h,hardStopThreshold:x,currentTokens:t.usageData?t.usageData.totalTokens:t.licenseInfo?Number(t.licenseInfo.totalResourcesAnalyzed||0):0,maxTokens:1e6,remainingTokens:t.usageData?Math.max(0,1e6-t.usageData.totalTokens):1e6},reason:C,upgradePath:I,usageData:t.usageData}}Q.warn("\u274C No usage data available, using fallback validation",s);let n;if(t.licenseInfo){let l=Number(t.licenseInfo.currentPeriodUsage||0),d=Number(t.licenseInfo.totalResourcesAnalyzed||0),p=d>0?d:l;p>0&&(n={totalTokens:p,totalResourcesAnalyzed:p,totalCost:0,usageCount:1,successfulUsageCount:1,failedUsageCount:0,firstUsageAt:Number(t.licenseInfo.createdAt),lastUsageAt:Number(t.licenseInfo.lastUsageAt||t.licenseInfo.updatedAt)},Q.info("\u{1F4CA} Using usage data from license info",s,{totalResourcesAnalyzed:n.totalResourcesAnalyzed,totalTokens:n.totalTokens}))}let r=200,i=!0,o=!1;if(t.licenseInfo){let l=t.licenseInfo.licenseType||t.licenseInfo.tier;if(t.licenseInfo.status==="TRIAL"||t.licenseInfo.tier==="trial"){i=!0,r=t.licenseInfo.maxUsage?Number(t.licenseInfo.maxUsage):200;let d=t.licenseInfo.trialEnd||t.licenseInfo.expiresAt;d&&(o=Math.floor(Date.now()/1e3)>d)}else i=!1,l==="ENTERPRISE"?r=1e5:r=1e4}let a=n?n.totalResourcesAnalyzed:0,c=Math.max(0,r-a),u=a+t.requestedResources>r;return{canProceed:!0,canRunStaticAnalysis:!0,canRunAIAnalysis:!0,quota:{currentResourcesAnalyzed:a,maxResources:r,remainingResources:c,isTrial:i,trialExpired:o,wouldExceed:u,warningThreshold:Math.floor(r*.8),hardStopThreshold:Math.floor(r*.9),currentTokens:n?n.totalTokens:0,maxTokens:1e6,remainingTokens:1e6},reason:n?"Using usage data from license info":"No usage data available - proceeding with analysis",usageData:n||void 0}}catch(n){return Q.error("Enhanced license quota validation failed",s,n instanceof Error?n:new Error(String(n))),{canProceed:!0,canRunStaticAnalysis:!0,canRunAIAnalysis:!1,quota:{currentResourcesAnalyzed:0,maxResources:t.licenseInfo&&t.licenseInfo.maxUsage||200,remainingResources:t.licenseInfo&&t.licenseInfo.maxUsage||200,isTrial:t.licenseInfo?t.licenseInfo.status==="TRIAL"||t.licenseInfo.tier==="trial":!0,trialExpired:!1,wouldExceed:!1,warningThreshold:Math.floor((t.licenseInfo&&t.licenseInfo.maxUsage||200)*.8),hardStopThreshold:Math.floor((t.licenseInfo&&t.licenseInfo.maxUsage||200)*.9),currentTokens:0,maxTokens:1e6,remainingTokens:1e6},reason:"Enhanced quota validation failed - proceeding with analysis"}}};var Qy=()=>({CRITICAL:0,HIGH:0,MEDIUM:0,LOW:0}),Xy=()=>({"Operational Excellence":0,Security:0,"Cost Optimization":0,Reliability:0,"Performance Efficiency":0,Sustainability:0}),x_=t=>{let e=t.indexOf(":");return e===-1?{stackName:"",resourceId:t}:{stackName:t.slice(0,e),resourceId:t.slice(e+1)}},nU=t=>({issue:t.issue,recommendation:t.recommendation,severity:t.severity,wafPillar:t.wafPillar||"Security",foundBy:t.foundBy||"cdkInsights",ruleId:t.ruleId,codeSnippet:t.codeSnippet,constructPath:t.constructPath,constructType:t.constructType,sourceLocation:t.sourceLocation?{filePath:t.sourceLocation.filePath,line:t.sourceLocation.line,column:t.sourceLocation.column,confidence:t.sourceLocation.confidence}:void 0,aiConfidence:t.aiConfidence}),rU=(t,e)=>({resourceId:t.resourceId,logicalId:t.logicalId,cdkPath:t.cdkPath,friendlyName:t.friendlyName,resourceName:t.resourceName,constructType:t.constructType,serviceCategory:t.serviceCategory,tags:t.tags,sourceLocation:t.sourceLocation?{filePath:t.sourceLocation.filePath,line:t.sourceLocation.line,column:t.sourceLocation.column,confidence:t.sourceLocation.confidence??"medium"}:void 0,findings:e.map(nU)}),iU=(t,e,s)=>{e[t.severity]=(e[t.severity]??0)+1,s[t.wafPillar]=(s[t.wafPillar]??0)+1},b_=t=>{let e=new Map;for(let u of t.scannedResourceIds){let{stackName:l,resourceId:d}=x_(u);if(!l)continue;let p=e.get(l);p||(p={stackName:l,totalResources:0,scannedResourceIds:[],severityCounts:Qy(),wafPillarCounts:Xy(),resources:[]},e.set(l,p)),p.scannedResourceIds.push(d),p.totalResources+=1}for(let[u,l]of Object.entries(t.recommendationMaps)){let{stackName:d}=x_(u);if(!d)continue;let p=e.get(d);p||(p={stackName:d,totalResources:0,scannedResourceIds:[],severityCounts:Qy(),wafPillarCounts:Xy(),resources:[]},e.set(d,p));let f=[...l.sources?.cdkInsights?.issues??[],...l.sources?.cdkNag?.issues??[]];if(f.length===0)continue;let m=rU(l,f);p.resources.push(m);for(let g of m.findings)iU(g,p.severityCounts,p.wafPillarCounts)}let s=[],n=Qy(),r=Xy(),i=0,o=0,a=0;for(let u of e.values()){s.push(u),i+=u.totalResources,a+=u.resources.length;for(let l of Object.keys(u.severityCounts))n[l]=(n[l]??0)+u.severityCounts[l],o+=u.severityCounts[l];for(let l of Object.keys(u.wafPillarCounts))r[l]=(r[l]??0)+u.wafPillarCounts[l]}let c={totalResources:i,totalFindings:o,resourcesWithFindings:a,severityCounts:n,wafPillarCounts:r};return{schemaVersion:xu,scanId:t.scanId,cliVersion:t.cliVersion,scanStartedAt:t.scanStartedAt.toISOString(),scanCompletedAt:t.scanCompletedAt.toISOString(),aiAnalysis:t.aiAnalysis,stacks:s,totals:c}};var Kp=require("node:crypto");var{version:oU}=mu(),aU=1e4,cU=t=>(0,Kp.createHash)("sha256").update(t).digest("hex").slice(0,32),qp=t=>({skipped:!0,reason:t}),S_=async t=>{if(!t.enabled)return qp("disabled");if(!t.licenseKey)return qp("no-license-key");if(!t.authToken)return qp("no-auth-token");let e=yn();if(!e)return qp("no-api-base");let s={schemaVersion:xu,scanId:t.report.scanId,hashedLicenseId:cU(t.licenseKey),tier:t.tier??"free",cliVersion:oU,platform:process.platform,scanStartedAt:t.report.scanStartedAt,scanCompletedAt:t.report.scanCompletedAt,report:t.report};try{let n=await yt.post(`${e}/v1/scans`,s,{timeout:aU,headers:{"Content-Type":"application/json",Authorization:`Bearer ${t.authToken}`,"x-cdk-insights-client":"cli"},validateStatus:r=>r>=200&&r<300});return{skipped:!1,success:!0,scanId:n.data.scanId??s.scanId,viewUrl:n.data.viewUrl,retentionDays:n.data.retentionDays}}catch(n){let r=n;if(r.code==="ECONNABORTED"||r.code==="ETIMEDOUT")return{skipped:!1,success:!1,reason:"timeout"};if(!r.response)return{skipped:!1,success:!1,reason:"network"};let i=r.response.status,o=r.response.data?.message;return i>=400&&i<500?{skipped:!1,success:!1,reason:"rejected",serverMessage:o}:{skipped:!1,success:!1,reason:"server-error",serverMessage:o}}},v_=()=>(0,Kp.randomUUID)();var C_=require("node:crypto");var{version:uU}=mu(),lU=1500,dU=t=>(0,C_.createHash)("sha256").update(t).digest("hex").slice(0,32),Su=async({enabled:t,licenseKey:e,authToken:s,tier:n,event:r})=>{if(!t||!e)return;let i=yn();if(!i)return;let o={hashedLicenseId:dU(e),tier:n??"free",cliVersion:uU,platform:process.platform,emittedAt:new Date().toISOString(),event:r};try{await yt.post(`${i}/v1/telemetry/events`,o,{timeout:lU,headers:{"Content-Type":"application/json",...s?{Authorization:`Bearer ${s}`}:{},"x-cdk-insights-client":"cli"}})}catch{}},ex=t=>{let e={CRITICAL:0,HIGH:0,MEDIUM:0,LOW:0};for(let s of t){let n=(s.severity??"").toUpperCase();(n==="CRITICAL"||n==="HIGH"||n==="MEDIUM"||n==="LOW")&&(e[n]+=1)}return e};var D_={free:0,trial:0,pro:1,team:2},vu={"nova-lite":{alias:"nova-lite",bedrockModelId:"amazon.nova-lite-v1:0",displayName:"Amazon Nova Lite",minTier:"free",quotaMultiplier:.5,description:"Fastest and cheapest option, good for simple checks"},"mistral-14b":{alias:"mistral-14b",bedrockModelId:"mistral.ministral-3-14b-instruct",displayName:"Mistral Ministral 14B",minTier:"pro",quotaMultiplier:1,description:"Balanced quality and cost \u2014 current default for Pro"},"llama-3-3-70b":{alias:"llama-3-3-70b",bedrockModelId:"us.meta.llama3-3-70b-instruct-v1:0",displayName:"Llama 3.3 70B",minTier:"pro",quotaMultiplier:2,description:"Stronger reasoning + code understanding than Mistral 14B"},"haiku-4-5":{alias:"haiku-4-5",bedrockModelId:"us.anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5",minTier:"pro",quotaMultiplier:4,description:"High-quality findings for security-critical infra"},"sonnet-4-6":{alias:"sonnet-4-6",bedrockModelId:"us.anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6",minTier:"pro",quotaMultiplier:16,description:"Top-tier reasoning for complex architectures"}},w_={free:"nova-lite",trial:"nova-lite",pro:"mistral-14b",team:"mistral-14b"},pU=t=>typeof t=="string"&&t in vu,fU=(t,e)=>{if(!e)return!0;let s=vu[t].minTier;return D_[e]>=D_[s]},A_=t=>{let{flag:e,cdkContext:s,userConfig:n,tier:r}=t,i=[{value:e,source:"flag"},{value:s,source:"cdkContext"},{value:n,source:"userConfig"}];for(let{value:a,source:c}of i){if(!a||!pU(a))continue;if(fU(a,r))return{alias:a,bedrockModelId:vu[a].bedrockModelId,source:c,downgradedFromTierGate:!1};let u=r?w_[r]:"mistral-14b";return{alias:u,bedrockModelId:vu[u].bedrockModelId,source:"tierDefault",downgradedFromTierGate:!0,requestedAlias:a}}let o=r?w_[r]:"mistral-14b";return{alias:o,bedrockModelId:vu[o].bedrockModelId,source:"tierDefault",downgradedFromTierGate:!1}};var Bt={stackName:"",services:[],redact:!1,summaryOnly:!1,synth:!1,ruleFilter:[],failOnCritical:!0,ci:!1,all:!1,yes:!1,reset:!1,github:!1,noCache:!1,allowOveruse:!1,cache:{enabled:!0,ttl:6*60*60*1e3,maxSize:1e3}},mU=t=>["json","table","markdown","summary","sarif","github-actions"].includes(t)?t:(console.warn(`\u26A0\uFE0F Invalid output format "${t}", defaulting to "table"`),"table"),E_=t=>Array.isArray(t)?t.filter(e=>typeof e=="string"):typeof t=="string"?t.split(",").map(e=>e.trim()).filter(Boolean):[],hU=t=>E_(t).map(s=>s.trim()).filter(Boolean).map(s=>s.toLowerCase()==="all"?"All services":s).filter(s=>oa(s)),gU=t=>{if(!t||typeof t!="object"||Array.isArray(t))return Bt.cache;let e=t,s={enabled:Bt.cache.enabled,ttl:Bt.cache.ttl,maxSize:Bt.cache.maxSize};return typeof e.enabled=="boolean"&&(s.enabled=e.enabled),typeof e.ttl=="number"&&e.ttl>0?s.ttl=e.ttl:e.ttl&&console.warn(`\u26A0\uFE0F Invalid cache TTL "${e.ttl}", using default ${Bt.cache.ttl}ms`),typeof e.maxSize=="number"&&e.maxSize>0?s.maxSize=e.maxSize:e.maxSize&&console.warn(`\u26A0\uFE0F Invalid cache maxSize "${e.maxSize}", using default ${Bt.cache.maxSize}`),s},Cu=(t,e)=>{if(typeof t=="boolean")return t;if(typeof t=="string"){let s=t.toLowerCase();if(s==="true"||s==="1"||s==="yes")return!0;if(s==="false"||s==="0"||s==="no")return!1}return e},I_=(t,e)=>{let s=e.output||e.format||t.output,n=s?mU(s):void 0,r=e.withIssue??t.withIssue;return n!=="markdown"&&r&&(console.warn("\u26A0\uFE0F GitHub issues are only supported with markdown output. Disabling withIssue."),r=!1),{stackName:e.stackName??t.stackName??Bt.stackName,output:n,format:n,services:hU(e.services??t.services??Bt.services),withIssue:r,redact:Cu(e.redact??t.redact,Bt.redact),summaryOnly:Cu(e.summaryOnly??t.summaryOnly,Bt.summaryOnly),synth:Cu(e.synth??t.synth,Bt.synth),ruleFilter:E_(e.ruleFilter??t.ruleFilter??Bt.ruleFilter),ignoreRules:t.ignoreRules??[],ignorePaths:t.ignorePaths??[],failOnCritical:Cu(e.failOnCritical??t.failOnCritical,Bt.failOnCritical),ci:e.ci??Bt.ci,all:e.all??Bt.all,yes:e.yes??Bt.yes,reset:e.reset??Bt.reset,github:e.github??Bt.github,noCache:e.noCache??Bt.noCache,allowOveruse:Cu(e.allowOveruse??t.allowOveruse,Bt.allowOveruse),cache:gU(e.cache??t.cache??Bt.cache),local:e.local??!1,prComment:e.prComment??!1,warnSensitive:e.warnSensitive??!1,diff:e.diff??!1,writeBaseline:e.writeBaseline??!1,baseline:e.baseline,ai:t.ai}};var pr=te(require("node:fs")),k_=te(require("node:path"));var Du=k_.join(process.cwd(),".cdk-insights.json"),yU=/^[a-zA-Z0-9_-]+$/,xU=/^[a-zA-Z0-9_. -]+$/,bU=new Set(["__proto__","constructor","prototype"]);function wu(t){if(!t||typeof t!="object"||Array.isArray(t))return t;let e={};for(let[s,n]of Object.entries(t))bU.has(s)||(n&&typeof n=="object"&&!Array.isArray(n)?e[s]=wu(n):Array.isArray(n)?e[s]=n.map(r=>r&&typeof r=="object"&&!Array.isArray(r)?wu(r):r):e[s]=n);return e}var R_={enabled:!0,warnOnly:!1,allowPatterns:[],ignoreProperties:[],strictMode:!1},ho={services:[],redact:!1,summaryOnly:!1,synth:!1,ruleFilter:[],feedback:!0,failOnCritical:!0,noCache:!1,allowOveruse:!1,sensitiveDataDetection:R_,cache:{enabled:!0,ttl:6*60*60*1e3,maxSize:1e3}},F_=t=>{if(!t||typeof t!="object"||Array.isArray(t))return Q.warn("\u274C Invalid configuration format, using defaults"),ho;let e={...ho},s=t;if(typeof s.stackName=="string"&&s.stackName.length>0&&(yU.test(s.stackName)?e.stackName=s.stackName:Q.warn(`\u26A0\uFE0F Ignoring unsafe stackName "${s.stackName}" \u2014 only alphanumeric, hyphens, and underscores are allowed`)),typeof s.output=="string"&&["json","table","markdown","summary","sarif","github-actions"].includes(s.output)?e.output=s.output:s.output&&Q.warn(`\u26A0\uFE0F Invalid output format "${s.output}", skipping output setting`),Array.isArray(s.services)&&(e.services=s.services.filter(n=>typeof n=="string").map(n=>n.toLowerCase()==="all"?"All services":n).filter(n=>oa(n))),typeof s.withIssue=="boolean"&&(e.withIssue=s.withIssue),typeof s.redact=="boolean"&&(e.redact=s.redact),typeof s.summaryOnly=="boolean"&&(e.summaryOnly=s.summaryOnly),typeof s.synth=="boolean"&&(e.synth=s.synth),Array.isArray(s.ruleFilter)&&(e.ruleFilter=s.ruleFilter.filter(n=>typeof n=="string"&&n.length>0&&n.length<=100&&xU.test(n))),typeof s.feedback=="boolean"&&(e.feedback=s.feedback),typeof s.failOnCritical=="boolean"&&(e.failOnCritical=s.failOnCritical),typeof s.noCache=="boolean"&&(e.noCache=s.noCache),typeof s.allowOveruse=="boolean"&&(e.allowOveruse=s.allowOveruse),s.ai&&typeof s.ai=="object"&&!Array.isArray(s.ai)){let n=s.ai,r={};typeof n.model=="string"&&n.model.length>0&&(r.model=n.model),typeof n.batchSize=="number"&&Number.isFinite(n.batchSize)&&n.batchSize>0?r.batchSize=Math.floor(n.batchSize):n.batchSize!==void 0&&Q.warn(`\u26A0\uFE0F Ignoring invalid ai.batchSize "${n.batchSize}" \u2014 must be a positive number.`),(r.model||r.batchSize!==void 0)&&(e.ai=r)}if(s.telemetry&&typeof s.telemetry=="object"&&!Array.isArray(s.telemetry)){let n=s.telemetry;typeof n.enabled=="boolean"&&(e.telemetry={enabled:n.enabled})}if(s.scanHistory&&typeof s.scanHistory=="object"&&!Array.isArray(s.scanHistory)){let n=s.scanHistory;typeof n.enabled=="boolean"&&(e.scanHistory={enabled:n.enabled})}if(s.cache&&typeof s.cache=="object"&&!Array.isArray(s.cache)){let n=s.cache;e.cache={...ho.cache},typeof n.enabled=="boolean"&&(e.cache.enabled=n.enabled),typeof n.ttl=="number"&&n.ttl>0?e.cache.ttl=n.ttl:n.ttl&&Q.warn(`\u26A0\uFE0F Invalid cache TTL "${n.ttl}", using default ${ho.cache?.ttl}ms`),typeof n.maxSize=="number"&&n.maxSize>0?e.cache.maxSize=n.maxSize:n.maxSize&&Q.warn(`\u26A0\uFE0F Invalid cache maxSize "${n.maxSize}", using default ${ho.cache?.maxSize}`)}if(s.sensitiveDataDetection&&typeof s.sensitiveDataDetection=="object"&&!Array.isArray(s.sensitiveDataDetection)){let n=s.sensitiveDataDetection;e.sensitiveDataDetection={...R_},typeof n.enabled=="boolean"&&(e.sensitiveDataDetection.enabled=n.enabled),typeof n.warnOnly=="boolean"&&(e.sensitiveDataDetection.warnOnly=n.warnOnly),typeof n.strictMode=="boolean"&&(e.sensitiveDataDetection.strictMode=n.strictMode),Array.isArray(n.allowPatterns)&&(e.sensitiveDataDetection.allowPatterns=n.allowPatterns.filter(r=>typeof r=="string")),Array.isArray(n.ignoreProperties)&&(e.sensitiveDataDetection.ignoreProperties=n.ignoreProperties.filter(r=>typeof r=="string"))}return Array.isArray(s.ignoreRules)&&(e.ignoreRules=s.ignoreRules.filter(n=>typeof n=="string"&&n.length>0)),Array.isArray(s.ignorePaths)&&(e.ignorePaths=s.ignorePaths.filter(n=>typeof n=="string"&&n.length>0)),e},Dn=()=>{if(!pr.existsSync(Du))return ho;try{let t=pr.readFileSync(Du,"utf-8"),e=wu(JSON.parse(t));return F_(e)}catch(t){let e=t;return Q.error(`\u274C Error loading configuration: ${e.message}`),Q.info("\u{1F4DD} Using default configuration"),ho}},Au=t=>{try{let e=F_(t);pr.writeFileSync(Du,JSON.stringify(e,null,2),"utf-8"),Q.info("\u{1F4BE} Configuration saved successfully")}catch(e){let s=e;Q.error(`\u274C Error saving configuration: ${s.message}`)}},Zp=()=>{try{pr.existsSync(Du)&&(pr.unlinkSync(Du),Q.info("\u{1F5D1}\uFE0F Configuration file removed"))}catch(t){let e=t;Q.error(`\u274C Error removing configuration: ${e.message}`)}};var SU=()=>{let t=T_.resolve(process.cwd(),"cdk.out");return __.existsSync(t)},P_=t=>t.summaryOnly?"summary":t.format==="json"||t.output==="json"?"json":t.format==="markdown"||t.output==="markdown"?"markdown":t.format==="summary"||t.output==="summary"?"summary":t.format==="sarif"||t.output==="sarif"?"sarif":t.format==="github-actions"||t.output==="github-actions"?"github-actions":"table";async function vU(t,e){let s=t.all?"All stacks":t.stackName||"All stacks",n=await $r({message:"Which stack would you like to analyze?",default:s,choices:e.map(c=>({name:c,value:c}))}),r=t.output||t.format||"table",i=await $r({message:"Choose output format:",choices:[{name:"\u{1F4CA} Table (default) - Human-readable table with colors",value:"table"},{name:"\u{1F4C4} Markdown - GitHub-compatible markdown report",value:"markdown"},{name:"\u{1F527} JSON - Structured data for CI/CD integration",value:"json"},{name:"\u{1F4CB} Summary - Brief overview with counts",value:"summary"}],default:r}),o=t.services&&t.services.length>0?t.services:["All services"],a=await lg({message:"Which AWS services would you like to analyze? (Use <space> to toggle, <enter> to confirm)",choices:[{name:"\u{1F50D} All services (recommended)",value:"All services",checked:o.includes("All services")},{name:"\u{1F510} IAM - Identity and Access Management",value:"IAM",checked:o.includes("IAM")},{name:"\u{1F4E6} S3 - Simple Storage Service",value:"S3",checked:o.includes("S3")},{name:"\u26A1 Lambda - Serverless Functions",value:"Lambda",checked:o.includes("Lambda")},{name:"\u{1F5C4}\uFE0F DynamoDB - NoSQL Database",value:"DynamoDB",checked:o.includes("DynamoDB")},{name:"\u{1F5C4}\uFE0F RDS - Relational Database",value:"RDS",checked:o.includes("RDS")},{name:"\u{1F5A5}\uFE0F EC2 - Virtual Machines",value:"EC2",checked:o.includes("EC2")},{name:"\u{1F4E2} SNS - Simple Notification Service",value:"SNS",checked:o.includes("SNS")},{name:"\u{1F4E8} SQS - Simple Queue Service",value:"SQS",checked:o.includes("SQS")},{name:"\u{1F504} Step Functions - Workflow Orchestration",value:"StepFunctions",checked:o.includes("StepFunctions")},{name:"\u{1F4DD} CloudTrail - API Logging",value:"CloudTrail",checked:o.includes("CloudTrail")},{name:"\u{1F310} API Gateway - REST APIs",value:"ApiGateway",checked:o.includes("ApiGateway")},{name:"\u{1F511} Secrets Manager - Secret Management",value:"SecretsManager",checked:o.includes("SecretsManager")},{name:"\u{1F510} KMS - Key Management",value:"KMS",checked:o.includes("KMS")},{name:"\u{1F4E1} EventBridge - Event Routing",value:"EventBridge",checked:o.includes("EventBridge")},{name:"\u{1F310} CloudFront - Content Delivery Network",value:"CloudFront",checked:o.includes("CloudFront")},{name:"\u2696\uFE0F ELB - Elastic Load Balancing",value:"ELB",checked:o.includes("ELB")},{name:"\u{1F433} ECS - Elastic Container Service",value:"ECS",checked:o.includes("ECS")},{name:"\u{1F464} Cognito - User Authentication",value:"Cognito",checked:o.includes("Cognito")},{name:"\u{1F6E1}\uFE0F WAF - Web Application Firewall",value:"WAF",checked:o.includes("WAF")},{name:"\u{1F4CA} CloudWatch - Monitoring & Logging",value:"CloudWatch",checked:o.includes("CloudWatch")},{name:"\u{1F30D} Route53 - DNS Management",value:"Route53",checked:o.includes("Route53")},{name:"\u26A1 ElastiCache - In-Memory Caching",value:"ElastiCache",checked:o.includes("ElastiCache")},{name:"\u{1F4E6} ECR - Container Registry",value:"ECR",checked:o.includes("ECR")},{name:"\u{1F50E} OpenSearch - Search & Analytics",value:"OpenSearch",checked:o.includes("OpenSearch")},{name:"\u{1F50F} ACM - Certificate Manager",value:"ACM",checked:o.includes("ACM")},{name:"\u{1F4BE} Backup - Backup Management",value:"Backup",checked:o.includes("Backup")},{name:"\u{1F517} VPC - Virtual Private Cloud",value:"VPC",checked:o.includes("VPC")},{name:"\u{1F30A} Kinesis - Real-time Streaming",value:"Kinesis",checked:o.includes("Kinesis")},{name:"\u{1F4F1} AppSync - GraphQL APIs",value:"AppSync",checked:o.includes("AppSync")},{name:"\u2638\uFE0F EKS - Kubernetes Service",value:"EKS",checked:o.includes("EKS")},{name:"\u{1F4C8} Redshift - Data Warehouse",value:"Redshift",checked:o.includes("Redshift")},{name:"\u{1F4EC} MSK - Managed Kafka",value:"MSK",checked:o.includes("MSK")},{name:"\u{1F9EA} Glue - ETL & Data Catalog",value:"Glue",checked:o.includes("Glue")}]});return{stackName:n,output:i,services:a}}async function CU(t,e,s,n,r,i,o,a,c,u,l,d){let{stackName:p,output:f,services:m,withIssue:g,ruleFilter:h,failOnCritical:x}=t,y=p==="All stacks"?void 0:p,{stacks:b,inlineFindings:S,pathToLogicalId:C,recommendationMapPerStack:I,assetSourcePaths:E,acknowledgementsPerStack:w,cdkVersion:j,supportsBoxTraces:H,cdkContext:z,resourceIdMetadata:q}=dp(y),L=Object.keys(b).length;A.success(`Synthesis complete. Found ${L} stack${L===1?"":"s"} to analyze.`),j&&!H&&A.info(`Detected aws-cdk-lib ${j}. Upgrade to >= 2.252.0 for per-property source locations on deferred values.`);let G=Object.values(b).reduce((me,ue)=>{let xe=Object.entries(ue.Resources||{}).filter(([,Ae])=>!Ae.Type.startsWith("AWS::CDK::"));return me+xe.length},0);G>0?A.info(`\u{1F50D} Preparing to analyze ${G} total resources across ${L} stacks...`):A.warning("No user resources found in stacks. Make sure your CDK app is properly configured.");let k=null,U=!!s;if(a&&(U=!1,A.info("\u{1F3E0} Running in local mode - static analysis only")),o&&!a){A.info("\u{1F50D} Checking license quota...");let me=n.licenseType==="FREE"||n.status==="TRIAL",ue=n.totalResourcesAnalyzed||0,xe=n.trialUsageLimit||n.maxUsage||200,Ae=Number.isNaN(ue)?0:ue,Ge=Number.isNaN(xe)?200:xe;if(me&&Ae>=Ge)U=!1,k={canProceed:!0,canRunStaticAnalysis:!0,canRunAIAnalysis:!1,quota:{currentResourcesAnalyzed:Ae,maxResources:Ge,remainingResources:Math.max(0,Ge-Ae),isTrial:!0,trialExpired:!1},reason:`Trial AI credit allowance exceeded (${Ae}/${Ge} used)`,upgradePath:"https://cdkinsights.dev/pricing"},A.warning("\u26A0\uFE0F Trial AI credit allowance exceeded \u2014 falling back to static scans only"),A.comment(" Upgrade to Pro for 5,000 AI credits per month");else if(k=await y_({licenseKey:o,requestedResources:G,allowOveruse:t.allowOveruse,usageData:r,licenseInfo:n}),U=!!s&&(k?.canRunAIAnalysis??!0),k?.quota?.isTrial){let St=k.quota.currentResourcesAnalyzed,kt=k.quota.maxResources;St>=kt&&(k={...k,canProceed:!0,canRunStaticAnalysis:!0,canRunAIAnalysis:!1,reason:`Trial AI credit allowance exceeded (${St}/${kt} used) \u2014 falling back to static scans only`},U=!1)}k?.quota?.isTrial&&A.displayTrialStatus({currentResourcesAnalyzed:k.quota.currentResourcesAnalyzed,maxResources:k.quota.maxResources,remainingResources:k.quota.remainingResources,isTrial:k.quota.isTrial,trialExpired:k.quota.trialExpired,trialStart:n.trialStart,trialEnd:n.trialEnd,tier:n.tier}),!U&&k?.quota?A.displayQuotaWarning({currentResourcesAnalyzed:k.quota.currentResourcesAnalyzed,maxResources:k.quota.maxResources,requestedResources:G,remainingResources:k.quota.remainingResources,isTrial:k.quota.isTrial}):U&&o&&A.success("AI analysis enabled - you'll receive comprehensive recommendations")}let V=sd(t.services),se=V.services;V.removedAllServices?Q.debug(`Services normalization: removed "All services", using: ${se.join(", ")}`):V.defaultedToAll&&Q.debug('Services normalization: defaulting to "All services"');let Y=c||{},Z=t.warnSensitive||Y.warnOnly||!1,ee=(()=>{let me=z?.["cdkInsights:aiModel"];return typeof me=="string"?me:void 0})(),le=A_({flag:t.model,cdkContext:ee,userConfig:typeof t.ai?.model=="string"?t.ai?.model:void 0,tier:n?.tier});le.downgradedFromTierGate?A.warning(`\u26A0\uFE0F Requested AI model "${le.requestedAlias}" is not available on your tier \u2014 using "${le.alias}" instead.`):le.source!=="tierDefault"&&A.comment(`\u{1F916} AI model: ${le.alias} (from ${le.source})`);let Ce=t.ai?.batchSize,K=typeof Ce=="number"&&Number.isFinite(Ce)?Math.max(1,Math.floor(Ce)):void 0;K&&K>1&&A.comment(`\u{1F9FA} AI batching: ${K} resources per call`);let Re={stacks:b,inlineFindings:S,pathToLogicalId:C,recommendationMapPerStack:I,assetSourcePaths:E,acknowledgementsPerStack:w,output:P_(t),services:se,withIssue:t.withIssue,ruleFilter:t.ruleFilter||[],ignoreRules:t.ignoreRules||[],ignorePaths:t.ignorePaths||[],failOnCritical:t.failOnCritical,authToken:s,fingerprint:e,tier:n?.tier,quotaValidation:k||null,noCache:t.noCache||!1,cache:{enabled:t.cache?.enabled??!0,ttl:t.cache?.ttl??3e5,maxSize:t.cache?.maxSize??5e3},allowOveruse:t.allowOveruse||!1,warnSensitive:Z,sensitiveDataDetection:{disabled:Y.enabled===!1,ignoreProperties:Y.ignoreProperties||[],allowPatterns:Y.allowPatterns||[],strictMode:Y.strictMode||!1},cdkContext:z,resourceIdMetadata:q,aiModelId:le.bedrockModelId,aiBatchSize:K,forceLocal:a,baselineExclude:u,collectFingerprints:l,skipRendering:d};return{...await Hp(Re),totalResources:G}}var L_={command:"scan [stackName]",describe:"Scan CDK stacks for best practices and security issues",builder:t=>t.positional("stackName",{type:"string",describe:"Name of the stack to analyze"}).option("ci",{type:"boolean",default:!1}).option("withIssue",{type:"boolean",description:"Create GitHub issues from findings?"}).option("output",{alias:"o",type:"string",choices:["json","table","markdown","summary","sarif","github-actions"]}).option("all",{type:"boolean",description:"Analyze all CDK stacks,",default:!1}).option("services",{type:"array",string:!0,description:"Only run checks for these services (e.g. IAM, S3, Lambda)"}).option("format",{type:"string",choices:["json","table","markdown","summary","sarif","github-actions"],describe:"Alias for --output (preferred)"}).option("yes",{type:"boolean",description:"Skip prompts and use saved/default values,",default:!1,alias:"y"}).option("reset",{type:"boolean",description:"Clear saved config and start fresh"}).option("redact",{type:"boolean",description:"Redact sensitive resource names in output",default:!1}).option("summaryOnly",{type:"boolean",description:"Only show summary in console output",default:!1}).option("synth",{type:"boolean",description:"Run cdk synth before analysis",default:!1}).option("failOnCritical",{type:"boolean",description:"Exit with code 1 if critical issues are found (defaults to true)",default:!0}).option("ruleFilter",{type:"array",string:!0,describe:"Filter findings to only include matching rule IDs or categories (e.g. AwsSolutions-IAM4, Security)"}).option("github",{describe:"Create GitHub issues for findings,",type:"boolean",default:!1}).option("noCache",{describe:"Disable cache and force fresh analysis",type:"boolean",default:!1}).option("allowOveruse",{describe:"Allow AI analysis even when exceeding paid allowance (extra usage will be charged)",type:"boolean",default:!1}).option("local",{describe:"Run static analysis only (skip AI analysis even with a valid license)",type:"boolean",default:!1}).option("warnSensitive",{describe:"Treat sensitive data as warning instead of critical (will not fail CI)",type:"boolean",default:!1}).option("prComment",{describe:"Post analysis summary as a PR comment (GitHub Actions only)",type:"boolean",default:!1}).option("model",{describe:"AI model alias for analysis (e.g. nova-lite, mistral-14b, llama-3-3-70b). Overrides cdk.json and user config. Tier-gated.",type:"string"}).option("diff",{describe:"Only show findings new since the saved baseline (.cdk-insights-baseline.json). Existing findings still appear in summaries but never fail CI.",type:"boolean",default:!1}).option("writeBaseline",{describe:"Write the current findings to .cdk-insights-baseline.json (or --baseline path) and exit 0 regardless of severity. Skips findings rendering.",type:"boolean",default:!1}).option("baseline",{describe:"Path to the baseline file. Defaults to .cdk-insights-baseline.json in cwd. Used by both --diff and --writeBaseline.",type:"string"}),handler:async t=>{try{let e=t.output||t.format;if((e==="json"||e==="sarif")&&(process.env.CDK_INSIGHTS_QUIET_STDOUT="1"),t.reset){Zp(),Q.info("\u{1F5D1}\uFE0F Cleared saved CLI preferences.");return}let s=Hc(),n=s.fingerprint,r=s.project;(!n||n.length===0)&&(A.error("Failed to generate system fingerprint for authentication."),A.comment(" This may indicate a permissions issue with reading system information."),process.exit(1));let i=process.env.CDK_INSIGHTS_LICENSE_KEY,o,a,c;if(i){let L=await b2(i,n,r);L?(o=L.token,a=L.usageData,c=L.licenseInfo||await Vp(i,o),L.fingerprint?n=L.fingerprint:n=Hc(o).fingerprint):(A.warning("\u26A0\uFE0F License validation failed. Running in free tier mode."),A.comment(" Check your license key and internet connection."),c=await Vp(i,void 0))}else c=await Vp(void 0,void 0);let u=`${c?.tier??"free"} tier`;A.info(`\u{1F50D} CDK Insights (${u})`),c.tier==="free"&&!i&&(A.comment("\u{1F4A1} Upgrade to Pro for AI-powered recommendations and GitHub integration"),A.comment(" Visit: https://cdkinsights.dev"));let l=Dn(),d=I_(l,t),p=d.ci||Vn();if(p&&!d.ci){let L=ZD();A.info(`Detected CI environment${L?`: ${L}`:""}`)}let f=!p&&YD();p&&!d.stackName&&!d.all&&(d.all=!0),p&&!d.output&&(d.output="json"),SU()||(A.info("\u26A1 No cdk.out directory found. Running cdk synth..."),BI()||(A.error("Failed to synthesize CDK stacks."),A.comment(" Make sure your CDK app compiles correctly."),process.exit(1)));let m=ME();m.length===0&&(A.error("No CDK stacks found in cdk.out directory."),A.comment(' Make sure you have run "cdk synth" and that your CDK app defines at least one stack.'),A.comment(" If cdk.out exists, check that it contains valid CloudFormation templates."),process.exit(1));let g=["All stacks",...m],h=d;if((t.github||h.withIssue)&&(zn.isFeatureEnabled("githubIntegration",c.tier)?A.success("\u{1F517} GitHub integration enabled"):(A.error("GitHub integration is not available for your current tier"),A.comment(Il("githubIntegration",c.tier,"GitHub integration")),process.exit(1))),f&&!d.yes){let L=await vU(d,g);h={...d,...L}}h.all&&(h.stackName="All stacks"),h.stackName||(h.stackName="All stacks"),f&&h.output||(h.output=P_(h)),h.format=h.output,(h.output==="json"||h.output==="sarif")&&(process.env.CDK_INSIGHTS_QUIET_STDOUT="1"),f&&h.output==="markdown"&&h.withIssue===void 0?h.withIssue=await Aa({message:"Create GitHub issues from findings? (only available with markdown output)",default:!1}):h.withIssue===void 0&&(h.withIssue=!1),h.output==="table"&&(h.withIssue=!1);let x,y=0;if(h.diff)try{let L=P0(h.baseline);L?(x=new Set(L.fingerprints),y=L.fingerprints.length,A.info(`\u{1F4D0} Diff against baseline (${L.fingerprints.length} known findings; ${L.generatedAt}).`)):A.warning("No baseline file found. Run `cdk-insights scan --writeBaseline` to create one. Showing all findings.")}catch(L){A.error(L instanceof Error?L.message:"Failed to load baseline file."),process.exit(2)}let b=h.writeBaseline?new Set:void 0,S=h.writeBaseline===!0,C=v_(),I=new Date,E=await CU(h,n,o,c,a,r,i,h.local,l.sensitiveDataDetection,x,b,S),w=l.telemetry?.enabled===!0&&!!i;if(h.diff&&x){let L=0,G=[];for(let k of Object.values(E.recommendationMaps||{})){if(!k?.sources)continue;let U=[...k.sources.cdkInsights?.issues??[],...k.sources.cdkNag?.issues??[]];L+=U.length,G.push(...U)}if(A.info(`\u{1F4D0} Diff result: ${L} new finding${L===1?"":"s"} (${y} existing, suppressed).`),w){let k=(()=>{try{return P0(h.baseline)}catch{return null}})();Su({enabled:!0,licenseKey:i,authToken:o,tier:c?.tier,event:{type:"diff_run",newFindings:L,existingSuppressed:y,newSeverities:ex(G),baselineGeneratedAt:k?.generatedAt,failedOnCritical:!!E.hasCriticalIssues}})}}if(h.writeBaseline&&b){let L="1.27.1",{path:G,count:k}=LE([...b],{cliVersion:L,overridePath:h.baseline});if(A.success(`\u{1F4CC} Wrote baseline of ${k} finding${k===1?"":"s"} to ${G}.`),A.comment(" On the next run, pass --diff to see only new findings since this point."),w){let U=[],V={},se=new Set;for(let Y of Object.values(E.recommendationMaps||{})){if(!Y?.sources)continue;let Z=[...Y.sources.cdkInsights?.issues??[],...Y.sources.cdkNag?.issues??[]];U.push(...Z);for(let le of Z){let Ce=le.ruleId,K=/^([A-Za-z][A-Za-z0-9-]+):\s/.exec(le.issue??""),Re=Ce||K?.[1]||"unknown";V[Re]=(V[Re]??0)+1}let ee=Y.type;ee?.startsWith("AWS::")&&se.add(ee.split("::")[1])}Su({enabled:!0,licenseKey:i,authToken:o,tier:c?.tier,event:{type:"baseline_written",totalFindings:k,severityCounts:ex(U),ruleHistogram:V,uniqueServices:se.size}})}return}let j=[],H=E.recommendationMaps||{},z=new Set;for(let[L,G]of Object.entries(H)){let k=G,U=L.includes(":")?L.substring(L.indexOf(":")+1):L,V=L.includes(":")?L.substring(0,L.indexOf(":")):"";V&&z.add(V);let se=[...k.sources.cdkInsights?.issues??[],...k.sources.cdkNag?.issues??[]];for(let Y of se)j.push({resourceId:U,issue:Y.issue,recommendation:Y.recommendation,severity:Y.severity,wafPillar:Y.wafPillar||"Security",foundBy:Y.foundBy||"cdkInsights",constructPath:Y.constructPath,codeSnippet:Y.codeSnippet,sourceLocation:Y.sourceLocation,ruleId:Y.ruleId,context:Y.context,constructType:Y.constructType||k.constructType})}if(h.prComment)if(Qd()){A.info("Posting analysis summary to PR...");let L=[...z],G={stackNames:L.length>0?L:[h.stackName||"Unknown"],resourceCount:E.totalResources,issues:j,reportUrl:void 0,aiEnabled:!h.local&&!!i,tier:c?.tier||"free"},k=await M0({data:G,updateExisting:!0});k.success?A.success("PR comment posted successfully"):A.warning(`Failed to post PR comment: ${k.error}`)}else A.warning("PR comment requested but not in GitHub Actions PR context. Skipping."),A.comment(" PR comments require: GitHub Actions + pull_request event + GITHUB_TOKEN permissions");if(A.success(`Analysis complete! ${h.withIssue?"GitHub issues have been created for the findings.":"Review the findings above."}`),l.scanHistory?.enabled===!0&&i&&o&&!h.writeBaseline){let L="1.27.1",G=new Date,k=!h.local&&!!i,U=b_({scanId:C,cliVersion:L,recommendationMaps:E.recommendationMaps||{},scannedResourceIds:E.scannedResourceIds??new Set,scanStartedAt:I,scanCompletedAt:G,aiAnalysis:{ran:k}});A.info("\u{1F4E4} Uploading scan to CDK Insights...");let V=await S_({enabled:!0,licenseKey:i,authToken:o,tier:c?.tier,report:U});if(!V.skipped)if(V.success)A.success(`Uploaded as scan ${V.scanId}`),V.viewUrl&&A.comment(` View: ${V.viewUrl}`),V.retentionDays&&A.comment(` Retained for ${V.retentionDays} day${V.retentionDays===1?"":"s"} \u2014 adjust in scanHistory settings.`),A.comment(" You opted in via .cdk-insights.json. To opt out, set scanHistory.enabled = false.");else{let se=V.serverMessage??V.reason??"unknown";A.warning(`Could not upload scan to CDK Insights (${se}). Run continues normally.`)}}if(l.feedback!==!1&&f&&o&&j.length>0)try{let L=await $r({message:"Was this analysis helpful?",choices:[{name:"Yes, helpful!",value:"helpful"},{name:"Actionable - I'll fix these",value:"actionable"},{name:"Not helpful",value:"not_helpful"},{name:"Inaccurate findings",value:"inaccurate"},{name:"Skip",value:"skip"}],default:"skip"});if(L!=="skip"){let G=yn(),U=WI({apiClient:{post:async(se,Y)=>{let{data:Z}=await yt.post(`${G}${se}`,Y,{headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json","x-cdk-insights-fingerprint":n,"x-cdk-insights-client":"cli"},timeout:1e4});return Z}}}),V={};for(let[se,Y]of Object.entries(E.recommendationMaps||{})){let Z=Y,ee=se.includes(":")?se.substring(se.indexOf(":")+1):se;Z.type&&(V[ee]=Z.type)}if(L==="helpful")U.markReportAsHelpful(j,V).catch(()=>{}),A.comment(" Thanks for your feedback!");else{let se=j.map(Y=>({issue:Y,rating:L,resourceType:V[Y.resourceId]}));U.submitBatchFeedback(se).catch(()=>{}),A.comment(" Thanks for your feedback!")}}}catch{}else f||A.comment(" Have feedback? Let us know: https://cdkinsights.dev/feedback?source=cli");E.hasCriticalIssues&&(E.hasSensitiveData&&!h.warnSensitive?(A.error("Sensitive data detected. Exiting with code 1."),A.comment(" Use --warn-sensitive to continue without failing, or fix the issues.")):A.error("Critical issues found. Exiting with code 1."),await new Promise(L=>{process.stdout.write("")?L():process.stdout.once("drain",L)}),process.exit(1))}catch(e){let{message:s}=e;A.error(`An error occurred during analysis: ${s||e}`),process.exit(1)}}};var Jp=te(require("node:fs"));var Eu,O_=()=>{if(Eu!==void 0)return Eu;try{Eu=require("typescript")}catch{Eu=null}return Eu},go=t=>{let e=O_();if(!e)return{status:"error",reason:"typescript is not available in this project. Install it as a devDependency (`npm install --save-dev typescript`) so cdk-insights can parse your stack files."};let s=e.createSourceFile(t.filePath,t.source,e.ScriptTarget.Latest,!0,e.ScriptKind.TS),n=s.getLineStarts(),r=n[t.line-1]!==void 0?n[t.line-1]+Math.max(0,t.column-1):-1;if(r<0)return{status:"error",reason:`Source location ${t.line}:${t.column} is outside the file.`};let i=null,o=Number.POSITIVE_INFINITY,a=y=>{if(e.isNewExpression(y)){let b=y.expression.getText(s);if(t.expectedCalleePattern.test(b)){let S=y.getStart(s),C=y.getEnd(),I=C-S;S<=r&&r<=C&&I<o?(i=y,o=I):i||s.getLineAndCharacterOfPosition(S).line+1===t.line&&(i=y,o=I)}}e.forEachChild(y,a)};if(a(s),!i){if(process.env.CDK_INSIGHTS_FIX_DEBUG==="1"){let y=[],b=S=>{e.isNewExpression(S)&&y.push({callee:S.expression.getText(s),line:s.getLineAndCharacterOfPosition(S.getStart(s)).line+1,pos:S.getStart(s)}),e.forEachChild(S,b)};b(s),console.error(`[fix-debug] target=${t.line}:${t.column} pos=${r} pattern=${t.expectedCalleePattern.source}`),console.error("[fix-debug] all new exprs:",y)}return{status:"error",reason:`No \`new <Construct>()\` matching /${t.expectedCalleePattern.source}/ found near ${t.filePath}:${t.line}:${t.column}. The scanner's source location may have drifted from the actual construct.`}}let c=i.arguments;if(!c||c.length<3)return{status:"error",reason:"Construct invocation has no props argument. Add a `{}` props object as the third argument and re-run."};let u=c[2];if(!e.isObjectLiteralExpression(u))return{status:"error",reason:"Props are passed via a variable, spread, or function call \u2014 cdk-insights will not rewrite that automatically. Inline the props object or apply the fix manually."};for(let y of u.properties)if(e.isPropertyAssignment(y)&&e.isIdentifier(y.name)&&y.name.text===t.propertyName)return{status:"skipped",reason:`\`${t.propertyName}\` is already set on this construct (the rule may have other reasons it still fires).`};let l=s.getFullText(),d=u.getStart(s),p=n[s.getLineAndCharacterOfPosition(d).line],f=l.slice(p,d).match(/^[ \t]*/)?.[0]??" ",m=`${f} `,g=u.properties.length===0,h=`${t.propertyName}: ${t.propertyValueSource}`,x;if(g){let y=u.getStart(s),b=u.getEnd();x=`${l.slice(0,y)}{
520
520
  ${m}${h},
521
521
  ${f}}${l.slice(b)}`}else{let b=u.properties[u.properties.length-1].getEnd(),S,C;l[b]===","?(S=b+1,C=""):(S=b,C=","),x=`${l.slice(0,S)}${C}
522
- ${m}${h},${l.slice(S)}`}return{status:"applied",updatedSource:x,summary:`Added \`${t.propertyName}: ${t.propertyValueSource}\` to construct at ${t.filePath}:${t.line}.`}},tx=t=>{let e=O_();if(!e)return{status:"error",reason:"typescript is not available in this project. Install it as a devDependency (`npm install --save-dev typescript`) so cdk-insights can parse your stack files."};let s=e.createSourceFile(t.filePath,t.source,e.ScriptTarget.Latest,!0,e.ScriptKind.TS),n=s.getLineStarts(),r=n[t.line-1]!==void 0?n[t.line-1]+Math.max(0,t.column-1):-1;if(r<0)return{status:"error",reason:`Source location ${t.line}:${t.column} is outside the file.`};let i=null,o=Number.POSITIVE_INFINITY,a=h=>{if(e.isNewExpression(h)){let x=h.expression.getText(s);if(t.expectedCalleePattern.test(x)){let y=h.getStart(s),b=h.getEnd(),S=b-y;y<=r&&r<=b&&S<o?(i=h,o=S):i||s.getLineAndCharacterOfPosition(y).line+1===t.line&&(i=h,o=S)}}e.forEachChild(h,a)};if(a(s),!i)return{status:"error",reason:`No \`new <Construct>()\` matching /${t.expectedCalleePattern.source}/ found near ${t.filePath}:${t.line}:${t.column}.`};let c=i.arguments;if(!c||c.length<3||!e.isObjectLiteralExpression(c[2]))return{status:"error",reason:"Construct props are not an inline object literal \u2014 cannot replace properties safely."};let l=c[2].properties.find(h=>e.isPropertyAssignment(h)&&e.isIdentifier(h.name)&&h.name.text===t.propertyName);if(!l)return{status:"skipped",reason:`\`${t.propertyName}\` is not set on this construct \u2014 nothing to replace.`};let d=s.getFullText(),p=l.initializer.getStart(s),f=l.initializer.getEnd(),m=d.slice(p,f);return t.onlyIfValueMatches&&!t.onlyIfValueMatches.test(m)?{status:"skipped",reason:`\`${t.propertyName}\` is currently \`${m}\`, which doesn't match the upgrade pattern \u2014 leaving as-is.`}:m===t.newPropertyValueSource?{status:"skipped",reason:`\`${t.propertyName}\` is already \`${t.newPropertyValueSource}\`.`}:{status:"applied",updatedSource:d.slice(0,p)+t.newPropertyValueSource+d.slice(f),summary:`Replaced \`${t.propertyName}: ${m}\` with \`${t.propertyName}: ${t.newPropertyValueSource}\` at ${t.filePath}:${t.line}.`}};var Hr=(t,e)=>e.status==="applied"?{content:e.updatedSource,summary:e.summary,changed:e.updatedSource!==t.fileContent}:{content:t.fileContent,summary:e.status==="skipped"?`skipped: ${e.reason}`:`error: ${e.reason}`,changed:!1},DU=t=>Hr(t,go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Bucket$/,propertyName:"enforceSSL",propertyValueSource:"true"})),wU=t=>Hr(t,go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Table$/,propertyName:"pointInTimeRecovery",propertyValueSource:"true"})),AU=t=>Hr(t,go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Bucket$/,propertyName:"versioned",propertyValueSource:"true"})),EU=t=>Hr(t,go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Bucket$/,propertyName:"encryption",propertyValueSource:"s3.BucketEncryption.S3_MANAGED"})),IU=t=>{let e=Hr(t,tx({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Table$/,propertyName:"encryption",onlyIfValueMatches:/TableEncryption\.(DEFAULT|AWS_OWNED)/,newPropertyValueSource:"dynamodb.TableEncryption.AWS_MANAGED"}));return e.changed?e:Hr(t,go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Table$/,propertyName:"encryption",propertyValueSource:"dynamodb.TableEncryption.AWS_MANAGED"}))},kU=t=>Hr(t,go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Function$/,propertyName:"tracing",propertyValueSource:"lambda.Tracing.ACTIVE"})),RU=t=>Hr(t,tx({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Function$/,propertyName:"runtime",onlyIfValueMatches:/NODEJS_(?:12|14|16|18|20)_X|nodejs(?:12|14|16|18|20)\.x|PYTHON_3_(?:7|8|9)|python3\.(?:7|8|9)/i,newPropertyValueSource:"lambda.Runtime.NODEJS_22_X"})),Yp={"AwsSolutions-S10":DU,"AwsSolutions-S2":AU,"AwsSolutions-DDB3":wU,"AwsSolutions-L1":RU,"CDKI-S3-ENCRYPTION":EU,"CDKI-DDB-KMS":IU,"CDKI-LAMBDA-TRACING":kU},sx=t=>!!t&&t in Yp;var FU=[[/S3 Bucket lacks encryption/i,"CDKI-S3-ENCRYPTION"],[/DynamoDB Table is not configured with KMS encryption/i,"CDKI-DDB-KMS"],[/Lambda function has no X-Ray tracing/i,"CDKI-LAMBDA-TRACING"]],_U=t=>{let e=/^(AwsSolutions-[A-Za-z0-9-]+):\s/.exec(t.issue);if(e)return e[1];for(let[s,n]of FU)if(s.test(t.issue))return n;return t.ruleId},TU=(t,e)=>{let s=new Map;for(let n of Object.values(t)){if(!n?.sources)continue;let r=[...n.sources.cdkInsights?.issues??[],...n.sources.cdkNag?.issues??[]];for(let i of r){let o=_U(i);if(!sx(o)||e&&o!==e)continue;let a=i.sourceLocation?.filePath||n.sourceLocation?.filePath;a&&(s.has(a)||s.set(a,[]),s.get(a)?.push({issue:i,group:n,ruleId:o}))}}return s},M_={command:"fix",describe:"Apply mechanical fixes for findings whose remediation is unambiguous (e.g. enforceSSL, pointInTimeRecovery). Defaults to dry-run; pass --apply to write changes.",builder:t=>t.option("rule",{type:"string",describe:"Only fix findings for this rule ID (e.g. AwsSolutions-S10). Without this flag, fixes every supported rule."}).option("dry-run",{type:"boolean",default:!0,describe:"Preview changes without writing files. Default behaviour; pass --apply to disable."}).option("apply",{type:"boolean",default:!1,describe:"Write fixes to disk. Implies --dry-run=false."}).option("all",{type:"boolean",default:!0,describe:"Analyse all stacks before applying fixes (default)."}),handler:async t=>{let e=!!t.apply,s=!e;t.rule&&!sx(t.rule)&&(A.error(`Rule \`${t.rule}\` has no registered fixer. Supported rules: ${Object.keys(Yp).join(", ")}`),process.exit(1)),A.info(`${s?"\u{1F50E} Dry-run":"\u270F\uFE0F Applying fixes"} for ${t.rule??"all supported rules"}.`),process.env.CDK_INSIGHTS_QUIET_STDOUT="1";let{fingerprint:n}=Hc(),r=dp(void 0),i=new Set,o=await Hp({stacks:r.stacks,inlineFindings:r.inlineFindings,pathToLogicalId:r.pathToLogicalId,output:"table",recommendationMapPerStack:r.recommendationMapPerStack,fingerprint:n,collectFingerprints:i,skipRendering:!0,cdkContext:r.cdkContext,resourceIdMetadata:r.resourceIdMetadata});delete process.env.CDK_INSIGHTS_QUIET_STDOUT;let a=TU(o.recommendationMaps||{},t.rule);if(a.size===0){A.success(t.rule?`No fixable findings for rule \`${t.rule}\`.`:"No fixable findings detected.");return}let c=[],u=0;for(let[g,h]of a){let x;try{x=Jp.readFileSync(g,"utf-8")}catch(S){c.push({status:"error",ruleId:h[0]?.issue.ruleId??"unknown",filePath:g,reason:`Could not read source file: ${S instanceof Error?S.message:String(S)}`});continue}let y=[...h].sort((S,C)=>{let I=S.issue.sourceLocation?.line??S.group.sourceLocation?.line??0;return(C.issue.sourceLocation?.line??C.group.sourceLocation?.line??0)-I}),b=x;for(let{issue:S,group:C,ruleId:I}of y){let E=Yp[I];if(!E)continue;let w=S.sourceLocation??C.sourceLocation??null;if(!w){c.push({status:"error",ruleId:I,filePath:g,reason:"No source location available for this finding. Re-run with the cdk-insights aspect installed (see docs/advanced/cdk-aspect)."});continue}let j=E({filePath:g,fileContent:x,line:w.line||1,column:w.column||1,issue:S,group:C});j.changed?(x=j.content,c.push({status:"applied",ruleId:I,filePath:g,summary:j.summary})):c.push({status:j.summary.startsWith("error:")?"error":"skipped",ruleId:I,filePath:g,reason:j.summary})}e&&x!==b&&(Jp.writeFileSync(g,x,"utf-8"),u+=1)}let l=c.filter(g=>g.status==="applied"),d=c.filter(g=>g.status==="skipped"),p=c.filter(g=>g.status==="error");A.section(e?"Applied fixes":"Dry-run preview",e?"\u270F\uFE0F ":"\u{1F50E}");for(let g of l)A.success(`${g.ruleId}: ${g.summary}`);for(let g of d)A.comment(`${g.ruleId}: ${g.status==="skipped"?g.reason:"skipped"}`);for(let g of p)A.warning(`${g.ruleId}: ${g.status==="error"?g.reason:"error"} (${g.filePath??"unknown"})`);A.info(`
522
+ ${m}${h},${l.slice(S)}`}return{status:"applied",updatedSource:x,summary:`Added \`${t.propertyName}: ${t.propertyValueSource}\` to construct at ${t.filePath}:${t.line}.`}},tx=t=>{let e=O_();if(!e)return{status:"error",reason:"typescript is not available in this project. Install it as a devDependency (`npm install --save-dev typescript`) so cdk-insights can parse your stack files."};let s=e.createSourceFile(t.filePath,t.source,e.ScriptTarget.Latest,!0,e.ScriptKind.TS),n=s.getLineStarts(),r=n[t.line-1]!==void 0?n[t.line-1]+Math.max(0,t.column-1):-1;if(r<0)return{status:"error",reason:`Source location ${t.line}:${t.column} is outside the file.`};let i=null,o=Number.POSITIVE_INFINITY,a=h=>{if(e.isNewExpression(h)){let x=h.expression.getText(s);if(t.expectedCalleePattern.test(x)){let y=h.getStart(s),b=h.getEnd(),S=b-y;y<=r&&r<=b&&S<o?(i=h,o=S):i||s.getLineAndCharacterOfPosition(y).line+1===t.line&&(i=h,o=S)}}e.forEachChild(h,a)};if(a(s),!i)return{status:"error",reason:`No \`new <Construct>()\` matching /${t.expectedCalleePattern.source}/ found near ${t.filePath}:${t.line}:${t.column}.`};let c=i.arguments;if(!c||c.length<3||!e.isObjectLiteralExpression(c[2]))return{status:"error",reason:"Construct props are not an inline object literal \u2014 cannot replace properties safely."};let l=c[2].properties.find(h=>e.isPropertyAssignment(h)&&e.isIdentifier(h.name)&&h.name.text===t.propertyName);if(!l)return{status:"skipped",reason:`\`${t.propertyName}\` is not set on this construct \u2014 nothing to replace.`};let d=s.getFullText(),p=l.initializer.getStart(s),f=l.initializer.getEnd(),m=d.slice(p,f);return t.onlyIfValueMatches&&!t.onlyIfValueMatches.test(m)?{status:"skipped",reason:`\`${t.propertyName}\` is currently \`${m}\`, which doesn't match the upgrade pattern \u2014 leaving as-is.`}:m===t.newPropertyValueSource?{status:"skipped",reason:`\`${t.propertyName}\` is already \`${t.newPropertyValueSource}\`.`}:{status:"applied",updatedSource:d.slice(0,p)+t.newPropertyValueSource+d.slice(f),summary:`Replaced \`${t.propertyName}: ${m}\` with \`${t.propertyName}: ${t.newPropertyValueSource}\` at ${t.filePath}:${t.line}.`}};var Hr=(t,e)=>e.status==="applied"?{content:e.updatedSource,summary:e.summary,changed:e.updatedSource!==t.fileContent}:{content:t.fileContent,summary:e.status==="skipped"?`skipped: ${e.reason}`:`error: ${e.reason}`,changed:!1},DU=t=>Hr(t,go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Bucket$/,propertyName:"enforceSSL",propertyValueSource:"true"})),wU=t=>{let e=go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Table$/,propertyName:"pointInTimeRecoverySpecification",propertyValueSource:"{ pointInTimeRecoveryEnabled: true }"});return Hr(t,e)},AU=t=>Hr(t,go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Bucket$/,propertyName:"versioned",propertyValueSource:"true"})),EU=t=>Hr(t,go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Bucket$/,propertyName:"encryption",propertyValueSource:"s3.BucketEncryption.S3_MANAGED"})),IU=t=>{let e=Hr(t,tx({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Table$/,propertyName:"encryption",onlyIfValueMatches:/TableEncryption\.(DEFAULT|AWS_OWNED)/,newPropertyValueSource:"dynamodb.TableEncryption.AWS_MANAGED"}));return e.changed?e:Hr(t,go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Table$/,propertyName:"encryption",propertyValueSource:"dynamodb.TableEncryption.AWS_MANAGED"}))},kU=t=>Hr(t,go({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Function$/,propertyName:"tracing",propertyValueSource:"lambda.Tracing.ACTIVE"})),RU=t=>Hr(t,tx({source:t.fileContent,filePath:t.filePath,line:t.line,column:t.column,expectedCalleePattern:/(?:^|\.)Function$/,propertyName:"runtime",onlyIfValueMatches:/NODEJS_(?:12|14|16|18|20)_X|nodejs(?:12|14|16|18|20)\.x|PYTHON_3_(?:7|8|9)|python3\.(?:7|8|9)/i,newPropertyValueSource:"lambda.Runtime.NODEJS_22_X"})),Yp={"AwsSolutions-S10":DU,"AwsSolutions-S2":AU,"AwsSolutions-DDB3":wU,"AwsSolutions-L1":RU,"CDKI-S3-ENCRYPTION":EU,"CDKI-DDB-KMS":IU,"CDKI-LAMBDA-TRACING":kU},sx=t=>!!t&&t in Yp;var FU=[[/S3 Bucket lacks encryption/i,"CDKI-S3-ENCRYPTION"],[/DynamoDB Table is not configured with KMS encryption/i,"CDKI-DDB-KMS"],[/Lambda function has no X-Ray tracing/i,"CDKI-LAMBDA-TRACING"]],_U=t=>{let e=/^(AwsSolutions-[A-Za-z0-9-]+):\s/.exec(t.issue);if(e)return e[1];for(let[s,n]of FU)if(s.test(t.issue))return n;return t.ruleId},TU=(t,e)=>{let s=new Map;for(let n of Object.values(t)){if(!n?.sources)continue;let r=[...n.sources.cdkInsights?.issues??[],...n.sources.cdkNag?.issues??[]];for(let i of r){let o=_U(i);if(!sx(o)||e&&o!==e)continue;let a=i.sourceLocation?.filePath||n.sourceLocation?.filePath;a&&(s.has(a)||s.set(a,[]),s.get(a)?.push({issue:i,group:n,ruleId:o}))}}return s},M_={command:"fix",describe:"Apply mechanical fixes for findings whose remediation is unambiguous (e.g. enforceSSL, pointInTimeRecovery). Defaults to dry-run; pass --apply to write changes.",builder:t=>t.option("rule",{type:"string",describe:"Only fix findings for this rule ID (e.g. AwsSolutions-S10). Without this flag, fixes every supported rule."}).option("dry-run",{type:"boolean",default:!0,describe:"Preview changes without writing files. Default behaviour; pass --apply to disable."}).option("apply",{type:"boolean",default:!1,describe:"Write fixes to disk. Implies --dry-run=false."}).option("all",{type:"boolean",default:!0,describe:"Analyse all stacks before applying fixes (default)."}),handler:async t=>{let e=!!t.apply,s=!e;t.rule&&!sx(t.rule)&&(A.error(`Rule \`${t.rule}\` has no registered fixer. Supported rules: ${Object.keys(Yp).join(", ")}`),process.exit(1)),A.info(`${s?"\u{1F50E} Dry-run":"\u270F\uFE0F Applying fixes"} for ${t.rule??"all supported rules"}.`),process.env.CDK_INSIGHTS_QUIET_STDOUT="1";let{fingerprint:n}=Hc(),r=dp(void 0),i=new Set,o=await Hp({stacks:r.stacks,inlineFindings:r.inlineFindings,pathToLogicalId:r.pathToLogicalId,output:"table",recommendationMapPerStack:r.recommendationMapPerStack,fingerprint:n,collectFingerprints:i,skipRendering:!0,cdkContext:r.cdkContext,resourceIdMetadata:r.resourceIdMetadata});delete process.env.CDK_INSIGHTS_QUIET_STDOUT;let a=TU(o.recommendationMaps||{},t.rule);if(a.size===0){A.success(t.rule?`No fixable findings for rule \`${t.rule}\`.`:"No fixable findings detected.");return}let c=[],u=0;for(let[g,h]of a){let x;try{x=Jp.readFileSync(g,"utf-8")}catch(S){c.push({status:"error",ruleId:h[0]?.issue.ruleId??"unknown",filePath:g,reason:`Could not read source file: ${S instanceof Error?S.message:String(S)}`});continue}let y=[...h].sort((S,C)=>{let I=S.issue.sourceLocation?.line??S.group.sourceLocation?.line??0;return(C.issue.sourceLocation?.line??C.group.sourceLocation?.line??0)-I}),b=x;for(let{issue:S,group:C,ruleId:I}of y){let E=Yp[I];if(!E)continue;let w=S.sourceLocation??C.sourceLocation??null;if(!w){c.push({status:"error",ruleId:I,filePath:g,reason:"No source location available for this finding. Re-run with the cdk-insights aspect installed (see docs/advanced/cdk-aspect)."});continue}let j=E({filePath:g,fileContent:x,line:w.line||1,column:w.column||1,issue:S,group:C});j.changed?(x=j.content,c.push({status:"applied",ruleId:I,filePath:g,summary:j.summary})):c.push({status:j.summary.startsWith("error:")?"error":"skipped",ruleId:I,filePath:g,reason:j.summary})}e&&x!==b&&(Jp.writeFileSync(g,x,"utf-8"),u+=1)}let l=c.filter(g=>g.status==="applied"),d=c.filter(g=>g.status==="skipped"),p=c.filter(g=>g.status==="error");A.section(e?"Applied fixes":"Dry-run preview",e?"\u270F\uFE0F ":"\u{1F50E}");for(let g of l)A.success(`${g.ruleId}: ${g.summary}`);for(let g of d)A.comment(`${g.ruleId}: ${g.status==="skipped"?g.reason:"skipped"}`);for(let g of p)A.warning(`${g.ruleId}: ${g.status==="error"?g.reason:"error"} (${g.filePath??"unknown"})`);A.info(`
523
523
  ${e?`Wrote ${u} file${u===1?"":"s"}.`:"Dry-run only \u2014 pass --apply to write."} ${l.length} applied, ${d.length} skipped, ${p.length} errored.`);let f=Dn(),m=process.env.CDK_INSIGHTS_LICENSE_KEY;if(f.telemetry?.enabled===!0&&m){let g={};for(let h of l)h.status==="applied"&&(g[h.ruleId]=(g[h.ruleId]??0)+1);Su({enabled:!0,licenseKey:m,event:{type:"fix_run",mode:e?"apply":"dry-run",applied:l.length,skipped:d.length,errored:p.length,rulesFixed:g,ruleFilter:t.rule}})}}};var Qp=te(require("node:fs")),Xp=te(require("node:path"));var B_=()=>{let t=Xp.resolve(".git/hooks"),e=Xp.join(t,"pre-commit"),s=`#!/bin/sh
524
524
  echo "\u{1F50D} Running CDK Insights pre-commit check..."
525
525
  npx cdk-insights scan --summary-only --output json > /dev/null
@@ -571,7 +571,7 @@ ${t.body.join(`
571
571
  \u2705 Configuration saved successfully!`),console.log(`
572
572
  \u{1F4CB} Your current configuration:`),console.log(JSON.stringify(t,null,2))}finally{s.close()}},HU=()=>{let t=Dn();console.log("\u{1F4CB} Current Configuration:"),console.log(JSON.stringify(t,null,2))},zU=t=>{let{key:e,value:s}=t;if(t.help){Iu(e);return}s||(console.log(`
573
573
  \u274C No value provided for ${e}`),Iu(e),process.exit(1));let n=Dn(),r;try{e==="services"||e==="ruleFilter"?r=s.split(",").map(o=>o.trim()):e==="cache"?r=JSON.parse(s):s.toLowerCase()==="true"||s.toLowerCase()==="false"?r=s.toLowerCase()==="true":Number.isNaN(Number(s))?r=s:r=Number(s)}catch{Q.error(`\u274C Invalid value for ${e}: ${s}`),Iu(e),process.exit(1)}let i=nx[e];i&&(i.type==="boolean"&&typeof r!="boolean"&&(Q.error(`\u274C ${e} must be a boolean (true/false)`),Iu(e),process.exit(1)),i.type==="array"&&!Array.isArray(r)&&(Q.error(`\u274C ${e} must be a comma-separated list`),Iu(e),process.exit(1))),n[e]=r,Au(n),Q.info(`\u2714\uFE0F ${e} = ${JSON.stringify(r)}`)},VU=t=>{let{key:e}=t,s=Dn();if(s[e]===void 0){Q.warn(`\u26A0\uFE0F ${e} not set`);return}delete s[e],Au(s),Q.info(`\u2714\uFE0F Removed ${e}`)},oT=new Set(["vi","vim","nvim","nano","emacs","code","subl","atom","gedit","kate","notepad","notepad++","micro","helix","pico"]),qU=t=>{let e=t.split("/").pop()||t;return oT.has(e.toLowerCase())},KU=()=>{let t=cd.get("EDITOR")||"vi";qU(t)||(Q.error(`\u274C Unsupported editor: ${t}. Allowed editors: ${Array.from(oT).join(", ")}`),process.exit(1));let e=(0,sf.spawnSync)(t,[UU],{stdio:"inherit"});e.error&&(Q.error("\u274C Editor error",{error:e.error.message}),process.exit(1)),Q.info("\u2714\uFE0F Config saved")},rx=t=>t.teamId||process.env.CDK_INSIGHTS_TEAM_ID||void 0,ix=()=>{let t=cd.get("CDK_INSIGHTS_LICENSE_KEY");if(!t)throw new Error("CDK_INSIGHTS_LICENSE_KEY environment variable is required for team config operations");return{"Content-Type":"application/json","x-api-key":t}},ox=()=>cd.get("CDK_INSIGHTS_API_URL")||"https://api.cdkinsights.dev",ZU=async t=>{let e=rx(t);e||(console.error("\u274C Team ID required. Use --team-id or set CDK_INSIGHTS_TEAM_ID env var."),process.exit(1));try{console.log("\u{1F4E5} Fetching team configurations...");let n=(await yt.get(`${ox()}/v1/teams/${e}/configs`,{headers:ix()})).data;n.success||(console.error(`\u274C ${n.error||n.message}`),process.exit(1));let i=n.configurations?.find(u=>u.isDefault);if(!i){console.log('\u2139\uFE0F No default team configuration found. Use "config team-configs" to list available configs.');return}let o=wu(i.configData),c={...Dn(),...o};Au(c),console.log(`\u2705 Pulled team config "${i.configName}" (v${i.version}) to .cdk-insights.json`)}catch(s){console.error(`\u274C Failed to pull config: ${s instanceof Error?s.message:String(s)}`),process.exit(1)}},YU=async t=>{let e=rx(t);e||(console.error("\u274C Team ID required. Use --team-id or set CDK_INSIGHTS_TEAM_ID env var."),process.exit(1));try{let s=Dn(),n=t.name||"CLI Config",r=t.description||"";console.log(`\u{1F4E4} Pushing local config as "${n}"...`);let o=(await yt.post(`${ox()}/v1/teams/${e}/configs`,{configName:n,configDescription:r,configData:s},{headers:ix()})).data;o.success||(console.error(`\u274C ${o.error||o.message}`),process.exit(1));let a=o.configuration;console.log(`\u2705 Config pushed as "${a?.configName}" (v${a?.version})`)}catch(s){console.error(`\u274C Failed to push config: ${s instanceof Error?s.message:String(s)}`),process.exit(1)}},JU=async t=>{let e=rx(t);e||(console.error("\u274C Team ID required. Use --team-id or set CDK_INSIGHTS_TEAM_ID env var."),process.exit(1));try{console.log(`\u{1F4CB} Listing team configurations...
574
- `);let n=(await yt.get(`${ox()}/v1/teams/${e}/configs`,{headers:ix()})).data;n.success||(console.error(`\u274C ${n.error||n.message}`),process.exit(1));let r=n.configurations;if(!r||r.length===0){console.log(' No configurations found. Use "config push" to share your config with the team.');return}for(let i of r){let o=i.updatedAt?new Date(i.updatedAt*1e3).toISOString().replace("T"," ").split(".")[0]:"-",a=i.isDefault?" [DEFAULT]":"";console.log(` ${i.configName||"Unnamed"}${a} (v${i.version||1})`),i.configDescription&&console.log(` ${i.configDescription}`),console.log(` Updated: ${o}`),console.log("")}}catch(s){console.error(`\u274C Failed to list configs: ${s instanceof Error?s.message:String(s)}`),process.exit(1)}},QU=async t=>{let{path:e}=t,s=(0,rT.promisify)(sf.exec),n=e||process.cwd();Q.info(`\u{1F6E0}\uFE0F Running 'cdk synth' in ${n}...`);try{let{stderr:r}=await s("cdk synth",{cwd:n,env:{...process.env,CDK_DEBUG:"true"}});r&&Q.error(r)}catch(r){Q.error("\u274C Failed to synthesize stacks",{error:r instanceof Error?r.message:String(r)}),process.exit(1)}},XU=()=>{Q.info("\u{1F5D1}\uFE0F Clearing caches..."),u2(),S2();let t=Ph();Q.info(`\u{1F4C1} Cache directory: ${t.cacheDir}`),Q.info(`\u{1F4CA} Cache status: ${t.cacheFileExists?"Files found":"No persistent cache files"}`)},eG=()=>{Q.info("\u{1F4CA} Cache Status:");let t=Ph();if(Q.info(`\u{1F4C1} Cache directory: ${t.cacheDir}`),Q.info(`\u{1F4C2} Directory exists: ${t.cacheDirExists?"Yes":"No"}`),Q.info(`\u{1F4C4} Cache file exists: ${t.cacheFileExists?"Yes":"No"}`),t.cacheSize!==void 0){let e=(t.cacheSize/1024).toFixed(2);Q.info(`\u{1F4CF} Cache file size: ${e} KB`)}Q.info(`\u2699\uFE0F Cache enabled: ${l2()?"Yes":"No"}`),Q.info("\u2139\uFE0F Note: Current cache is in-memory and clears on process restart")},tG=()=>{let t=new iT.default({head:["Command/Option","Description"],colWidths:[30,80]});return t.push(["COMMANDS",""],["scan [stackName]","Scan CDK stacks for best practices and security issues"],["fix","Apply mechanical fixes for findings whose remediation is unambiguous (defaults to dry-run; pass --apply)"],["init","Add cdk-insights npm scripts to your package.json"],["config <action>","Manage project-level configuration"],["synth","Run `cdk synth` automatically before analysis"],["hook","Install Git pre-commit hook for CDK Insights"],["reset","Clear saved prompt answers and CLI preferences"],["clear-cache","Clear the analysis cache"],["cache-status","Show cache status and statistics"],["setup","Interactive setup: install the CDK Insights aspect, Validations plugin, or AwsSolutionsChecks"],["",""]),t.push(["SCAN OPTIONS",""],["--output, -o","Output format: json, table, markdown, summary, sarif, github-actions"],["--format","Alias for --output"],["--all, -a","Analyze all available stacks"],["--services","Comma-separated list of AWS services to analyze"],["--with-issue","Create GitHub issues for findings (markdown output only)"],["--github","Alias for --with-issue"],["--redact","Redact sensitive resource names in output"],["--summaryOnly","Only show summary in console"],["--synth","Run `cdk synth` before analysis"],["--ci","Run in CI mode (no prompts)"],["--yes, -y","Skip prompts and use saved/default values"],["--reset","Clear saved config and start fresh"],["--failOnCritical","Exit with code 1 if critical issues found"],["--ruleFilter","Filter findings by rule IDs or categories"],["--noCache","Disable cache and force fresh analysis"],["--allow-overuse","Allow AI analysis even when exceeding paid allowance (extra usage charged)"],["--local","Run static analysis only (skip AI even with valid license)"],["--warn-sensitive","Treat sensitive data as warning (does not fail CI)"],["--prComment","Post analysis summary as a PR comment (GitHub Actions only)"],["--model","AI model alias (e.g. nova-lite, mistral-14b, llama-3-3-70b). Tier-gated."],["--diff","Filter findings to only those new since the saved baseline (.cdk-insights-baseline.json)"],["--writeBaseline","Save current findings as the baseline; suppresses fail-on-critical and skips rendering"],["--baseline","Override path to the baseline file"],["",""]),t.push(["FIX OPTIONS",""],["--rule","Only fix findings for this rule ID (e.g. AwsSolutions-S10). Without this flag, fixes every supported rule."],["--dry-run","Preview changes without writing files. Default behaviour; pass --apply to disable."],["--apply","Write fixes to disk. Implies --dry-run=false."],["",""]),t.push(["CONFIG SUBCOMMANDS",""],["config list","Show current configuration"],["config set <key> <value>","Set a configuration key"],["config unset <key>","Remove a configuration key"],["config edit","Open config file in your editor"],["config setup","Interactive setup to configure CDK Insights"],["",""]),t.push(["GLOBAL OPTIONS",""],["--help, -h","Show help information"],["--version, -v","Show version information"]),t.toString()},sG={command:"config <action> [key] [value]",describe:"Manage project-level configuration",builder:t=>t.command({command:"list",describe:"Show current configuration",handler:HU}).command({command:"set <key> <value>",describe:"Set a configuration key",builder:e=>e.positional("key",{type:"string",choices:["stackName","output","services","redact","withIssue","summaryOnly","synth","ruleFilter","failOnCritical","noCache","allowOveruse","local","cache","sensitiveDataDetection"],describe:"Configuration field to set"}).positional("value",{type:"string",describe:"Value to set (use --help for field-specific help)"}).option("help",{type:"boolean",describe:"Show detailed help for the specified field"}),handler:zU}).command({command:"unset <key>",describe:"Remove a configuration key",builder:e=>e.positional("key",{type:"string",choices:["stackName","output","services","redact","withIssue","summaryOnly","synth","ruleFilter","failOnCritical","noCache","allowOveruse","local","cache","sensitiveDataDetection"],describe:"Configuration field to remove"}),handler:VU}).command({command:"edit",describe:"Open config file in your editor",handler:KU}).command({command:"setup",describe:"Interactive setup to configure CDK Insights",handler:GU}).command({command:"pull",describe:"Pull the team default configuration to local .cdk-insights.json",builder:e=>e.option("team-id",{type:"string",describe:"Team/subscription ID (uses CDK_INSIGHTS_TEAM_ID env var if not set)"}),handler:ZU}).command({command:"push",describe:"Push local .cdk-insights.json as a team configuration",builder:e=>e.option("team-id",{type:"string",describe:"Team/subscription ID (uses CDK_INSIGHTS_TEAM_ID env var if not set)"}).option("name",{type:"string",describe:"Configuration name",default:"CLI Config"}).option("description",{type:"string",describe:"Configuration description",default:""}),handler:YU}).command({command:"team-configs",describe:"List available team configurations",builder:e=>e.option("team-id",{type:"string",describe:"Team/subscription ID (uses CDK_INSIGHTS_TEAM_ID env var if not set)"}),handler:JU}).demandCommand(1).help(),handler:()=>{}},nG=()=>{KD(jm(process.argv)).scriptName("cdk-insights").version("1.27.0").usage("Usage: $0 <command> [options]").command(L_).command(M_).command(G_).command(H_).command(eT).command(tT).command(sG).command("hook","Install Git pre-commit hook for CDK Insights",()=>{},()=>B_()).command("synth","Run `cdk synth` automatically before analysis",t=>t.option("path",{type:"string",describe:"Path to the CDK project (defaults to current directory)"}),QU).command("clear-cache","Clear the analysis cache",()=>{},XU).command("cache-status","Show the current cache status",()=>{},eG).demandCommand(1,"Please specify a command.").strict().help().wrap(null).epilog(tG()).parse()};nG();
574
+ `);let n=(await yt.get(`${ox()}/v1/teams/${e}/configs`,{headers:ix()})).data;n.success||(console.error(`\u274C ${n.error||n.message}`),process.exit(1));let r=n.configurations;if(!r||r.length===0){console.log(' No configurations found. Use "config push" to share your config with the team.');return}for(let i of r){let o=i.updatedAt?new Date(i.updatedAt*1e3).toISOString().replace("T"," ").split(".")[0]:"-",a=i.isDefault?" [DEFAULT]":"";console.log(` ${i.configName||"Unnamed"}${a} (v${i.version||1})`),i.configDescription&&console.log(` ${i.configDescription}`),console.log(` Updated: ${o}`),console.log("")}}catch(s){console.error(`\u274C Failed to list configs: ${s instanceof Error?s.message:String(s)}`),process.exit(1)}},QU=async t=>{let{path:e}=t,s=(0,rT.promisify)(sf.exec),n=e||process.cwd();Q.info(`\u{1F6E0}\uFE0F Running 'cdk synth' in ${n}...`);try{let{stderr:r}=await s("cdk synth",{cwd:n,env:{...process.env,CDK_DEBUG:"true"}});r&&Q.error(r)}catch(r){Q.error("\u274C Failed to synthesize stacks",{error:r instanceof Error?r.message:String(r)}),process.exit(1)}},XU=()=>{Q.info("\u{1F5D1}\uFE0F Clearing caches..."),u2(),S2();let t=Ph();Q.info(`\u{1F4C1} Cache directory: ${t.cacheDir}`),Q.info(`\u{1F4CA} Cache status: ${t.cacheFileExists?"Files found":"No persistent cache files"}`)},eG=()=>{Q.info("\u{1F4CA} Cache Status:");let t=Ph();if(Q.info(`\u{1F4C1} Cache directory: ${t.cacheDir}`),Q.info(`\u{1F4C2} Directory exists: ${t.cacheDirExists?"Yes":"No"}`),Q.info(`\u{1F4C4} Cache file exists: ${t.cacheFileExists?"Yes":"No"}`),t.cacheSize!==void 0){let e=(t.cacheSize/1024).toFixed(2);Q.info(`\u{1F4CF} Cache file size: ${e} KB`)}Q.info(`\u2699\uFE0F Cache enabled: ${l2()?"Yes":"No"}`),Q.info("\u2139\uFE0F Note: Current cache is in-memory and clears on process restart")},tG=()=>{let t=new iT.default({head:["Command/Option","Description"],colWidths:[30,80]});return t.push(["COMMANDS",""],["scan [stackName]","Scan CDK stacks for best practices and security issues"],["fix","Apply mechanical fixes for findings whose remediation is unambiguous (defaults to dry-run; pass --apply)"],["init","Add cdk-insights npm scripts to your package.json"],["config <action>","Manage project-level configuration"],["synth","Run `cdk synth` automatically before analysis"],["hook","Install Git pre-commit hook for CDK Insights"],["reset","Clear saved prompt answers and CLI preferences"],["clear-cache","Clear the analysis cache"],["cache-status","Show cache status and statistics"],["setup","Interactive setup: install the CDK Insights aspect, Validations plugin, or AwsSolutionsChecks"],["",""]),t.push(["SCAN OPTIONS",""],["--output, -o","Output format: json, table, markdown, summary, sarif, github-actions"],["--format","Alias for --output"],["--all, -a","Analyze all available stacks"],["--services","Comma-separated list of AWS services to analyze"],["--with-issue","Create GitHub issues for findings (markdown output only)"],["--github","Alias for --with-issue"],["--redact","Redact sensitive resource names in output"],["--summaryOnly","Only show summary in console"],["--synth","Run `cdk synth` before analysis"],["--ci","Run in CI mode (no prompts)"],["--yes, -y","Skip prompts and use saved/default values"],["--reset","Clear saved config and start fresh"],["--failOnCritical","Exit with code 1 if critical issues found"],["--ruleFilter","Filter findings by rule IDs or categories"],["--noCache","Disable cache and force fresh analysis"],["--allow-overuse","Allow AI analysis even when exceeding paid allowance (extra usage charged)"],["--local","Run static analysis only (skip AI even with valid license)"],["--warn-sensitive","Treat sensitive data as warning (does not fail CI)"],["--prComment","Post analysis summary as a PR comment (GitHub Actions only)"],["--model","AI model alias (e.g. nova-lite, mistral-14b, llama-3-3-70b). Tier-gated."],["--diff","Filter findings to only those new since the saved baseline (.cdk-insights-baseline.json)"],["--writeBaseline","Save current findings as the baseline; suppresses fail-on-critical and skips rendering"],["--baseline","Override path to the baseline file"],["",""]),t.push(["FIX OPTIONS",""],["--rule","Only fix findings for this rule ID (e.g. AwsSolutions-S10). Without this flag, fixes every supported rule."],["--dry-run","Preview changes without writing files. Default behaviour; pass --apply to disable."],["--apply","Write fixes to disk. Implies --dry-run=false."],["",""]),t.push(["CONFIG SUBCOMMANDS",""],["config list","Show current configuration"],["config set <key> <value>","Set a configuration key"],["config unset <key>","Remove a configuration key"],["config edit","Open config file in your editor"],["config setup","Interactive setup to configure CDK Insights"],["",""]),t.push(["GLOBAL OPTIONS",""],["--help, -h","Show help information"],["--version, -v","Show version information"]),t.toString()},sG={command:"config <action> [key] [value]",describe:"Manage project-level configuration",builder:t=>t.command({command:"list",describe:"Show current configuration",handler:HU}).command({command:"set <key> <value>",describe:"Set a configuration key",builder:e=>e.positional("key",{type:"string",choices:["stackName","output","services","redact","withIssue","summaryOnly","synth","ruleFilter","failOnCritical","noCache","allowOveruse","local","cache","sensitiveDataDetection"],describe:"Configuration field to set"}).positional("value",{type:"string",describe:"Value to set (use --help for field-specific help)"}).option("help",{type:"boolean",describe:"Show detailed help for the specified field"}),handler:zU}).command({command:"unset <key>",describe:"Remove a configuration key",builder:e=>e.positional("key",{type:"string",choices:["stackName","output","services","redact","withIssue","summaryOnly","synth","ruleFilter","failOnCritical","noCache","allowOveruse","local","cache","sensitiveDataDetection"],describe:"Configuration field to remove"}),handler:VU}).command({command:"edit",describe:"Open config file in your editor",handler:KU}).command({command:"setup",describe:"Interactive setup to configure CDK Insights",handler:GU}).command({command:"pull",describe:"Pull the team default configuration to local .cdk-insights.json",builder:e=>e.option("team-id",{type:"string",describe:"Team/subscription ID (uses CDK_INSIGHTS_TEAM_ID env var if not set)"}),handler:ZU}).command({command:"push",describe:"Push local .cdk-insights.json as a team configuration",builder:e=>e.option("team-id",{type:"string",describe:"Team/subscription ID (uses CDK_INSIGHTS_TEAM_ID env var if not set)"}).option("name",{type:"string",describe:"Configuration name",default:"CLI Config"}).option("description",{type:"string",describe:"Configuration description",default:""}),handler:YU}).command({command:"team-configs",describe:"List available team configurations",builder:e=>e.option("team-id",{type:"string",describe:"Team/subscription ID (uses CDK_INSIGHTS_TEAM_ID env var if not set)"}),handler:JU}).demandCommand(1).help(),handler:()=>{}},nG=()=>{KD(jm(process.argv)).scriptName("cdk-insights").version("1.27.1").usage("Usage: $0 <command> [options]").command(L_).command(M_).command(G_).command(H_).command(eT).command(tT).command(sG).command("hook","Install Git pre-commit hook for CDK Insights",()=>{},()=>B_()).command("synth","Run `cdk synth` automatically before analysis",t=>t.option("path",{type:"string",describe:"Path to the CDK project (defaults to current directory)"}),QU).command("clear-cache","Clear the analysis cache",()=>{},XU).command("cache-status","Show the current cache status",()=>{},eG).demandCommand(1,"Please specify a command.").strict().help().wrap(null).epilog(tG()).parse()};nG();
575
575
  /*! Bundled license information:
576
576
 
577
577
  mime-db/index.js: