{"version":3,"file":"menu.mjs","names":["writeFuzzy","Patch","PatchMenu","_replace_","check","rep","count","find","replace","_spec","found","i","d","_findFuzzyCode","push","length","patch","f"],"sources":["../../../../src/util/internal/linux/menu.ts"],"sourcesContent":["import {writeFuzzy} from '../patch.ts';\n\nimport {Elf32, Elf64} from './elf.ts';\nimport {Patch} from './patch.ts';\n\n/**\n * Patch menu spec.\n */\nexport interface IPatchMenuSpec {\n\t/**\n\t * Expected number of replacements.\n\t */\n\tcount: number;\n\n\t/**\n\t * Fuzzy find.\n\t */\n\tfind: number[];\n\n\t/**\n\t * Fuzzy replace.\n\t */\n\treplace: number[];\n}\n\n/**\n * PatchMenu object.\n */\nexport abstract class PatchMenu<T extends Elf32 | Elf64> extends Patch<T> {\n\t/**\n\t * Patch spec.\n\t */\n\tprotected abstract _spec: IPatchMenuSpec[];\n\n\tprivate _replace_ = [] as [Uint8Array, number, number[]][];\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic check() {\n\t\tthis._replace_ = [];\n\t\tconst rep = [] as [Uint8Array, number, number[]][];\n\t\tfor (const {count, find, replace} of this._spec) {\n\t\t\tlet found = 0;\n\t\t\tfor (const [, i, d] of this._findFuzzyCode(find)) {\n\t\t\t\tfound++;\n\t\t\t\trep.push([d, i, replace]);\n\t\t\t\tif (found > count) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (found !== count) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tthis._replace_ = rep;\n\t\treturn !!rep.length;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic patch() {\n\t\tfor (const [d, i, f] of this._replace_) {\n\t\t\twriteFuzzy(d, i, f);\n\t\t}\n\t}\n}\n"],"mappings":"AAAA,SAAQA,UAAU,QAAO,cAAa;AAGtC,SAAQC,KAAK,QAAO,aAAY;;AAEhC;AACA;AACA;;AAkBA;AACA;AACA;AACA,OAAO,MAAeC,SAAS,SAAkCD,KAAK,CAAI;EACzE;AACD;AACA;;EAGSE,SAAS,GAAG,EAAE;;EAEtB;AACD;AACA;EACQC,KAAKA,CAAA,EAAG;IACd,IAAI,CAACD,SAAS,GAAG,EAAE;IACnB,MAAME,GAAG,GAAG,EAAsC;IAClD,KAAK,MAAM;MAACC,KAAK;MAAEC,IAAI;MAAEC;IAAO,CAAC,IAAI,IAAI,CAACC,KAAK,EAAE;MAChD,IAAIC,KAAK,GAAG,CAAC;MACb,KAAK,MAAM,GAAGC,CAAC,EAAEC,CAAC,CAAC,IAAI,IAAI,CAACC,cAAc,CAACN,IAAI,CAAC,EAAE;QACjDG,KAAK,EAAE;QACPL,GAAG,CAACS,IAAI,CAAC,CAACF,CAAC,EAAED,CAAC,EAAEH,OAAO,CAAC,CAAC;QACzB,IAAIE,KAAK,GAAGJ,KAAK,EAAE;UAClB,OAAO,KAAK;QACb;MACD;MACA,IAAII,KAAK,KAAKJ,KAAK,EAAE;QACpB,OAAO,KAAK;MACb;IACD;IACA,IAAI,CAACH,SAAS,GAAGE,GAAG;IACpB,OAAO,CAAC,CAACA,GAAG,CAACU,MAAM;EACpB;;EAEA;AACD;AACA;EACQC,KAAKA,CAAA,EAAG;IACd,KAAK,MAAM,CAACJ,CAAC,EAAED,CAAC,EAAEM,CAAC,CAAC,IAAI,IAAI,CAACd,SAAS,EAAE;MACvCH,UAAU,CAACY,CAAC,EAAED,CAAC,EAAEM,CAAC,CAAC;IACpB;EACD;AACD","ignoreList":[]}