@fluidframework/merge-tree 0.51.0 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/collections.d.ts +41 -92
  2. package/dist/collections.d.ts.map +1 -1
  3. package/dist/collections.js +4 -334
  4. package/dist/collections.js.map +1 -1
  5. package/dist/index.d.ts +10 -11
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +11 -12
  8. package/dist/index.js.map +1 -1
  9. package/dist/localReference.d.ts +2 -2
  10. package/dist/localReference.d.ts.map +1 -1
  11. package/dist/localReference.js +0 -1
  12. package/dist/localReference.js.map +1 -1
  13. package/dist/snapshotV1.d.ts +1 -1
  14. package/dist/snapshotV1.d.ts.map +1 -1
  15. package/dist/snapshotV1.js.map +1 -1
  16. package/dist/snapshotlegacy.d.ts +7 -28
  17. package/dist/snapshotlegacy.d.ts.map +1 -1
  18. package/dist/snapshotlegacy.js.map +1 -1
  19. package/lib/collections.d.ts +41 -92
  20. package/lib/collections.d.ts.map +1 -1
  21. package/lib/collections.js +5 -326
  22. package/lib/collections.js.map +1 -1
  23. package/lib/index.d.ts +10 -11
  24. package/lib/index.d.ts.map +1 -1
  25. package/lib/index.js +10 -11
  26. package/lib/index.js.map +1 -1
  27. package/lib/localReference.d.ts +2 -2
  28. package/lib/localReference.d.ts.map +1 -1
  29. package/lib/localReference.js +0 -1
  30. package/lib/localReference.js.map +1 -1
  31. package/lib/snapshotV1.d.ts +1 -1
  32. package/lib/snapshotV1.d.ts.map +1 -1
  33. package/lib/snapshotV1.js.map +1 -1
  34. package/lib/snapshotlegacy.d.ts +7 -28
  35. package/lib/snapshotlegacy.d.ts.map +1 -1
  36. package/lib/snapshotlegacy.js.map +1 -1
  37. package/package.json +9 -8
  38. package/src/collections.ts +109 -470
  39. package/src/index.ts +10 -11
  40. package/src/localReference.ts +3 -4
  41. package/src/snapshotV1.ts +1 -1
  42. package/src/snapshotlegacy.ts +9 -22
@@ -1 +1 @@
1
- {"version":3,"file":"collections.js","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4FAA4F;AAC5F,+BAA+B;AAE/B,4CAA4C;AAE5C,+DAAqD;AASrD,2CAA6C;AAE7C,MAAa,KAAK;IAAlB;QACI,UAAK,GAAQ,EAAE,CAAC;IAgBpB,CAAC;IAfG,IAAI,CAAC,GAAM;QACP,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,GAAG;QACC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG;QACC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAC5B,CAAC;CACJ;AAjBD,sBAiBC;AAED,SAAgB,eAAe,CAAI,KAAc;IAC7C,IAAI,KAAK,KAAK,SAAS,EAAE;QACrB,OAAO,SAAS,CAAC;KACpB;SACI,IAAI,KAAK,CAAC,MAAM,EAAE;QACnB,OAAO,SAAS,CAAC;KACpB;SACI;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;KAChC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAZD,0CAYC;AAED,SAAgB,aAAa,CAAI,IAAO;IACpC,OAAO,IAAI,IAAI,CAAI,KAAK,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAFD,sCAEC;AAED,SAAgB,YAAY;IACxB,OAAO,IAAI,IAAI,CAAI,IAAI,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC;AAFD,oCAEC;AAED,MAAa,IAAI;IAIb,YAAmB,MAAe,EAAS,IAAmB;QAA3C,WAAM,GAAN,MAAM,CAAS;QAAS,SAAI,GAAJ,IAAI,CAAe;QAC1D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;IACL,CAAC;IAED,GAAG,CAAC,IAAO;QACP,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAED,OAAO;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;YACf,oEAAoE;YACpE,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC;YACjD,OAAO,YAAY,CAAC,IAAI,CAAC;SAC5B;IACL,CAAC;IAED,OAAO,CAAC,IAAO;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,EAAiC;QAClC,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE;YAC7D,oEAAoE;YACpE,EAAE,CAAC,KAAK,CAAC,IAAK,EAAE,KAAK,CAAC,CAAC;SAC1B;IACL,CAAC;IAED,IAAI,CAAC,EAAoC,EAAE,GAAa;QACpD,MAAM,GAAG,GAAQ,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1C,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAC5E,oEAAoE;YACpE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAK,CAAC;YACzB,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;gBACjB,IAAI,GAAG,EAAE;oBACL,sCAAsC;oBACtC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBACrB;qBAAM;oBACH,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAClB;aACJ;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,KAAK;QACD,IAAI,KAAc,CAAC;QACnB,IAAI,CAAS,CAAC;QAEd,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QAClB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9B,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;SACtB;QACD,OAAO,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IAED,KAAK;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;YACf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC3B;IACL,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;YACf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC3B;IACL,CAAC;IAED,KAAK;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,CAAC,KAAc;QACpB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QACrB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,IAAO;QACR,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QACrB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,IAAa;QAClB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAClB,OAAO,SAAS,CAAC;SACpB;aACI;YACD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrC;IACL,CAAC;IAED,WAAW,CAAC,KAAc;QACtB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,IAAO;QACf,MAAM,KAAK,GAAY,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAED,YAAY,CAAC,IAAO;QAChB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,iBAAiB,CAAC,KAAc;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;CACJ;AAlJD,oBAkJC;AAOY,QAAA,cAAc,GAAqB;IAC5C,GAAG,EAAE,MAAM,CAAC,SAAS;IACrB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC;CAC3B,CAAC;AAEF,MAAa,IAAI;IAKb,YAAY,CAAM,EAAS,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QACxC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAClB;IACL,CAAC;IARD,KAAK;QACD,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7B,CAAC;IAOD,IAAI;QACA,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,GAAG;QACC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,CAAC;IACb,CAAC;IAED,GAAG,CAAC,CAAI;QACJ,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,CAAS;QACnB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;YACnE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;YACjB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SAChB;IACL,CAAC;IAEO,OAAO,CAAC,CAAS;QACrB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE;YAChC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAChB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;gBACzE,CAAC,EAAE,CAAC;aACP;YACD,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC/C,MAAM;aACT;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAChB,EAAE,GAAG,CAAC,CAAC;SACV;IACL,CAAC;CACJ;AAtDD,oBAsDC;AAED,cAAc;AACd,SAAgB,gBAAgB,CAAc,WAA8B;IACxE,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,MAAM,YAAY,GAAG,CAAC,CAAwB,EAAE,CAAwB,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACvG,SAAS,IAAI;QACT,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,SAAS,QAAQ,CAAS,MAAmC,EAAE,KAAc,EAAE,KAAY,EAAE,GAAU;QACnG,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,IAAI,GAAG,GAAG,CAAC;QAEf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAAE,OAAO;SAAE;QAEnC,IAAI,MAAM,KAAK,SAAS,EAAE;YACtB,oEAAoE;YACpE,MAAM,GAAG,GAAG,EAAG,CAAC,GAAG,CAAC;SACvB;QACD,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,oEAAoE;YACpE,IAAI,GAAG,GAAG,EAAG,CAAC,GAAG,CAAC;SACrB;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC9C,IAAI,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACxC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7C,IAAI,IAAI,GAAG,CAAC,EAAE;oBACV,MAAM;iBACT;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;oBAC1B,MAAM;iBACT;aACJ;SACJ;IACL,CAAC;IAED,SAAS,GAAG,CAAS,MAAmC,EAAE,KAAc;QACpE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,SAAS,GAAG;QACR,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;SACnB;IACL,CAAC;IACD,SAAS,GAAG;QACR,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAClC;IACL,CAAC;IAED,SAAS,GAAG,CAAC,GAAS;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC9C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE;gBACrB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;aACnB;SACJ;IACL,CAAC;IAED,SAAS,GAAG,CAAC,GAAS,EAAE,IAAW;QAC/B,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,IAAI,IAAI,KAAK,SAAS,EAAE;gBACpB,MAAM,CAAC,GAAG,CAAC,CAAC;aACf;iBACI;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,mCAAmC;aAChE;SACJ;IACL,CAAC;IACD,SAAS,MAAM,CAAC,GAAS;QACrB,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC9C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE;oBACrB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBAC1B,KAAK,CAAC,MAAM,EAAE,CAAC;oBACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACzB,MAAM;iBACT;aACJ;SACJ;IACL,CAAC;IACD,OAAO;QACH,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;KACb,CAAC;AACN,CAAC;AAzFD,4CAyFC;AAED,IAAkB,OAGjB;AAHD,WAAkB,OAAO;IACrB,mCAAG,CAAA;IACH,uCAAK,CAAA;AACT,CAAC,EAHiB,OAAO,GAAP,eAAO,KAAP,eAAO,QAGxB;AA2BD,MAAa,YAAY;IAErB,YAAmB,WAA8B,EAAS,GAAkC;QAAzE,gBAAW,GAAX,WAAW,CAAmB;QAAS,QAAG,GAAH,GAAG,CAA+B;IAE5F,CAAC;IAED,QAAQ,CAAC,GAAS,EAAE,IAAW,EAAE,KAAc,EAAE,IAAY;QACzD,OAA4B,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,IAAqC;QACvC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,eAAe,CAAC,CAAC;IACjD,CAAC;IAED,QAAQ,CAAC,IAAqC;QAC1C,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,IAAI;QACA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,OAAO;QACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IACtB,CAAC;IACD,GAAG,CAAC,GAAS;QACT,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACvC;IACL,CAAC;IACD,OAAO,CAAC,IAAqC,EAAE,GAAS;QACpD,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,OAAO,KAAK,EAAE;YACV,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,GAAG,GAAG,CAAC,EAAE;gBACT,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;aACtB;iBACI,IAAI,GAAG,GAAG,CAAC,EAAE;gBACd,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;aACvB;iBACI;gBACD,OAAO,KAAK,CAAC;aAChB;SACJ;IACL,CAAC;IACD,QAAQ,CAAC,GAAS;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,GAAS,EAAE,OAAgC;QAC9C,MAAM,OAAO,GAAG,EAA2B,CAAC;QAC5C,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;SACrD;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,UAAU,CACN,IAAqC,EACrC,OAA8B,EAC9B,GAAS,EACT,OAAgC;QAChC,IAAI,IAAI,EAAE;YACN,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;aACrD;YACD,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtB;YACD,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;gBAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;aACtD;SACJ;IACL,CAAC;IAED,uBAAuB,CACnB,SAAgD,EAChD,QAA6C,EAC7C,cAA2C,EAC3C,eAA4C;QAC5C,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;IACtG,CAAC;IAED,2BAA2B,CACvB,IAAqC,EACrC,SAAgD,EAChD,QAA6C,EAC7C,cAA2C,EAC3C,eAA4C;QAC5C,IAAI,CAAC,IAAI,EAAE;YACP,OAAO;SACV;QACD,MAAM,MAAM,GAAW,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE;YACxB,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;SACrG;QACD,IAAI,MAAM,KAAK,CAAC,EAAE;YACd,QAAQ,CAAC,IAAI,CAAC,CAAC;SAClB;QACD,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE;YACzB,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;SACtG;IACL,CAAC;IAED,wBAAwB,CACpB,SAAgD,EAChD,QAA6C,EAC7C,cAA2C,EAC3C,eAA4C;QAC5C,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;IACvG,CAAC;IAED,4BAA4B,CACxB,IAAqC,EACrC,SAAgD,EAChD,QAA6C,EAC7C,cAAwC,EACxC,eAAyC;QACzC,IAAI,CAAC,IAAI,EAAE;YACP,OAAO;SACV;QACD,MAAM,MAAM,GAAW,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE;YACzB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;SACvG;QACD,IAAI,MAAM,KAAK,CAAC,EAAE;YACd,QAAQ,CAAC,IAAI,CAAC,CAAC;SAClB;QACD,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE;YACxB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;SACtG;IACL,CAAC;IAED,GAAG,CAAC,GAAS,EAAE,IAAW,EAAE,QAAsC;QAC9D,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,IAAI,IAAI,KAAK,SAAS,EAAE;gBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACpB;iBACI;gBACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACzD,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB,CAAC;aACnC;SACJ;IACL,CAAC;IAED,OAAO,CACH,IAAqC,EACrC,GAAS,EAAE,IAAW,EACtB,QAAsC;QAEtC,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,CAAC,CAAC;SACnD;aACI;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,GAAG,GAAG,CAAC,EAAE;gBACT,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;aAC9D;iBACI,IAAI,GAAG,GAAG,CAAC,EAAE;gBACd,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;aAChE;iBACI;gBACD,IAAI,QAAQ,EAAE;oBACV,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBACtD,IAAI,EAAE,CAAC,GAAG,EAAE;wBACR,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;qBACtB;oBACD,IAAI,EAAE,CAAC,IAAI,EAAE;wBACT,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;qBACxB;yBAAM;wBACH,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;qBACrB;iBACJ;qBACI;oBACD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;iBACrB;aACJ;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;gBACtD,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAClC;YACD,oEAAoE;YACpE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAK,CAAC,IAAI,CAAC,EAAE;gBACxD,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aACnC;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACnD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAC1B;YACD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxE,IAAI,IAAI,CAAC,GAAG,EAAE;gBACV,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC3B;YACD,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED,WAAW,CAAC,IAAyB;QACjC,IAAI,IAAI,CAAC,GAAG,EAAE;YACV,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACvB,oEAAoE;gBACpE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;aAC/B;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACxB,oEAAoE;gBACpE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC;aAChC;YACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACzB;IACL,CAAC;IAED,SAAS;QACL,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACjE,IAAI,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC;aACjC;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB,CAAC;aACnC;SACJ;QACD,uBAAuB;IAC3B,CAAC;IACD,aAAa,CAAC,IAAyB;QACnC,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,KAAK,CAAC,IAAI,EAAE;YACZ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;gBAC7D,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aACnC;YAED,oEAAoE;YACpE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC9B;IACL,CAAC;IAED,SAAS;QACL,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACjE,IAAI,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC;aACjC;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB,CAAC;aACnC;SACJ;QACD,uBAAuB;IAC3B,CAAC;IAED,aAAa,CAAC,IAAyB;QACnC,IAAI,KAAK,GAAG,IAAI,CAAC;QAEjB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACxB,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACnC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YACd,OAAO,SAAS,CAAC;SACpB;QAED,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;YAC/D,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SACpC;QAED,oEAAoE;QACpE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAM,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,GAAS;QACZ,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACrB,OAAO;aACV;YAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAC5B;QACD,+BAA+B;IACnC,CAAC;IAED,cAAc,CAAC,GAAS;QACpB,oEAAoE;QACpE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,CAAC,EAAE;YACnE,oEAAoE;YACpE,IAAI,CAAC,IAAK,CAAC,KAAK,cAAc,CAAC;SAClC;QAED,oEAAoE;QACpE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAK,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,UAAU,CAAC,IAAyB,EAAE,GAAS;QAC3C,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACtC,oEAAoE;YACpE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAK,CAAC,IAAI,CAAC,CAAC,EAAE;gBAC9D,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aACnC;YACD,oEAAoE;YACpE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAK,EAAE,GAAG,CAAC,CAAC;SAClD;aACI;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBACxB,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aACnC;YACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC3D,OAAO,SAAS,CAAC;aACpB;YACD,oEAAoE;YACpE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAM,CAAC,IAAI,CAAC,CAAC,EAAE;gBAChE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;aACpC;YACD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACvC,oEAAoE;gBACpE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAM,CAAC,CAAC;gBAC9C,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;gBAC3B,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;gBAC7B,oEAAoE;gBACpE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAM,CAAC,CAAC;aAClD;iBACI;gBACD,oEAAoE;gBACpE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAM,EAAE,GAAG,CAAC,CAAC;aACpD;SACJ;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,UAAU,CAAC,IAAqC;QAC5C,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,OAAO,CAAC,CAAC,CAAC;SACb;aACI;YACD,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAChF;IACL,CAAC;IAED,KAAK,CAAC,GAAS;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACjB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACzC;IACL,CAAC;IAED,SAAS,CAAC,IAAqC,EAAE,GAAS;QACtD,IAAI,IAAI,EAAE;YACN,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,GAAG,IAAI,CAAC,EAAE;gBACV,OAAO,IAAI,CAAC;aACf;iBACI,IAAI,GAAG,GAAG,CAAC,EAAE;gBACd,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACzC;iBACI;gBACD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACnD,IAAI,UAAU,EAAE;oBACZ,OAAO,UAAU,CAAC;iBACrB;qBACI;oBACD,OAAO,IAAI,CAAC;iBACf;aACJ;SACJ;IACL,CAAC;IAED,IAAI,CAAC,GAAS;QACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACxC;IACL,CAAC;IAED,QAAQ,CAAC,IAAqC,EAAE,GAAS;QACrD,IAAI,IAAI,EAAE;YACN,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,GAAG,IAAI,CAAC,EAAE;gBACV,OAAO,IAAI,CAAC;aACf;iBACI,IAAI,GAAG,GAAG,CAAC,EAAE;gBACd,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;aACzC;iBACI;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC/C,IAAI,QAAQ,EAAE;oBACV,OAAO,QAAQ,CAAC;iBACnB;qBACI;oBACD,OAAO,IAAI,CAAC;iBACf;aACJ;SACJ;IACL,CAAC;IAED,GAAG;QACC,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClC;IACL,CAAC;IAED,OAAO,CAAC,IAAyB;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,OAAO,IAAI,CAAC;SACf;aACI;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClC;IACL,CAAC;IAED,GAAG;QACC,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClC;IACL,CAAC;IAED,OAAO,CAAC,IAAyB;QAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb,OAAO,IAAI,CAAC;SACf;aACI;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACnC;IACL,CAAC;IAED,WAAW,CAAC,IAAyB;QACjC,oEAAoE;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAK,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;QAC5B,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;QACvB,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;QACxC,SAAS,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC;QACpC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrE,IAAI,IAAI,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;SAC/B;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,UAAU,CAAC,IAAyB;QAChC,oEAAoE;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAM,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QACzC,UAAU,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC;QACpC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrE,IAAI,IAAI,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SAChC;QACD,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,aAAa,CAAC,CAAU;QACpB,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC;IAC9D,CAAC;IAED,UAAU,CAAC,IAAyB;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,oEAAoE;QACpE,IAAI,CAAC,IAAK,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,CAAC;QACxD,oEAAoE;QACpE,IAAI,CAAC,KAAM,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAM,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,WAAW,CAAC,IAAyB;QACjC,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,oEAAoE;QACpE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAM,CAAC,IAAI,CAAC,EAAE;YAC/B,oEAAoE;YACpE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAM,CAAC,CAAC;YAC7C,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SAC1B;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,YAAY,CAAC,IAAyB;QAClC,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,oEAAoE;QACpE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAK,CAAC,IAAI,CAAC,EAAE;YAC9B,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SAC1B;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,KAA0B;QAC9B,IAAI,IAAI,GAAoC,KAAK,CAAC;QAClD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACxB,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAChC;QACD,oEAAoE;QACpE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAK,CAAC,IAAI,CAAC,EAAE;YACtD,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACjC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;YACnD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACzB;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrE,IAAI,IAAI,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACzB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,QAAQ,CAAS,MAAmC,EAAE,KAAc,EAAE,KAAY,EAAE,GAAU;QAC1F,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,GAAG,CAAS,MAAmC,EAAE,KAAc;QAC3D,sCAAsC;QACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI;QACA,MAAM,OAAO,GAAW,EAAE,CAAC;QAC3B,MAAM,OAAO,GAA+B;YACxC,aAAa,EAAE,IAAI;YACnB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;gBACZ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO,IAAI,CAAC;YAChB,CAAC;SACJ,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,OAAmC;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,YAAY,CAAC,OAAmC;QAC5C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,QAAQ,CAAC,IAAqC,EAAE,OAAmC;QAC/E,IAAI,EAAE,GAAG,IAAI,CAAC;QACd,IAAI,IAAI,EAAE;YACN,IAAI,OAAO,CAAC,GAAG,EAAE;gBACb,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,EAAE;oBACzD,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBAC1B;aACJ;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aAC1C;YACD,IAAI,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE;gBACrB,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,EAAE;oBACzD,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;iBAC5B;aACJ;YACD,IAAI,EAAE,EAAE;gBACJ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aAC3C;YACD,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE;gBACpB,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,EAAE;oBACzD,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC3B;aACJ;SACJ;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,IAAqC,EAAE,OAAmC;QACvF,IAAI,EAAE,GAAG,IAAI,CAAC;QACd,IAAI,IAAI,EAAE;YACN,IAAI,OAAO,CAAC,GAAG,EAAE;gBACb,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,EAAE;oBACzD,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBAC1B;aACJ;YACD,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aACnD;YACD,IAAI,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE;gBACrB,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,EAAE;oBACzD,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;iBAC5B;aACJ;YACD,IAAI,EAAE,EAAE;gBACJ,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aAClD;YACD,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE;gBACpB,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,EAAE;oBACzD,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC3B;aACJ;SACJ;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,CACH,IAAqC,EACrC,MAAmC,EACnC,KAAc,EACd,KAAY,EACZ,GAAU;QAEV,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,IAAI,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,IAAI,CAAC;SACf;QACD,IAAI,MAAM,KAAK,SAAS,EAAE;YACtB,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;SACnC;QACD,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;SACjC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,EAAE,GAAG,IAAI,CAAC;QACd,IAAI,QAAQ,GAAG,CAAC,EAAE;YACd,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;SAC7D;QACD,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE;YACxC,mCAAmC;YACnC,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC5B;QACD,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YACpB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;SAC9D;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI;QACA,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;CACJ;AA7nBD,oCA6nBC;AASD;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,CAAgB,EAAE,CAAgB;IAChE,OAAsB;QAClB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;QACjC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;KAC9B,CAAC;AACN,CAAC;AALD,8CAKC;AAED,SAAgB,oBAAoB,CAAC,CAAgB,EAAE,CAAgB;IACnE,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAFD,oDAEC;AAED,SAAgB,oBAAoB,CAAC,CAAgB,EAAE,CAAgB;IACnE,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE;QACrB,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;KACxB;SAAM;QACH,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;KAC5B;AACL,CAAC;AAND,oDAMC;AAEM,MAAM,gBAAgB,GAAG,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAe,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAA,CAAC;AAAvF,QAAA,gBAAgB,oBAAuE;AAE7F,MAAM,oBAAoB,GAAG,CAAC,KAAoB,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC;AAAjF,QAAA,oBAAoB,wBAA6D;AAI9F,8BAA8B;AAE9B,MAAa,gBAAgB;IAA7B;QAEI,WAAM,GAAG,IAAI,YAAY,CAAqC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QAC1F,SAAI,GAAG,KAAK,CAAC;IA2EjB,CAAC;IAzEG,MAAM,CAAC,CAAgB;QACnB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,CAAgB;QAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,wBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,YAAY,CAAC,IAAkC;QAC3C,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG;YACZ,GAAG,EAAE,CAAC,CAAmB,EAAE,EAAE;gBACzB,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,CAAC,KAAK,gBAAgB,EAAE;oBACzB,GAAG,GAAG,IAAI,CAAC;iBACd;gBACD,GAAG,IAAI,0BAAc,CAAC,SAAS,CAAC,CAAC;gBACjC,GAAG,IAAI,GAAG,GAAG,QAAQ,4BAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,4BAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACpG,SAAS,IAAI,CAAC,CAAC;gBACf,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,IAAI,EAAE,CAAC,CAAmB,EAAE,EAAE;gBAC1B,SAAS,IAAI,CAAC,CAAC;gBACf,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,aAAa,EAAE,IAAI;SACtB,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,CAAgB;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,SAAS,CAAC,IAAkC,EAAE,GAAkB;QAC5D,OAAO,CAAC,CAAC,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,eAAe,CAAC,IAAkC,EAAE,GAAkB;QAClE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;YACtB,IAAI,IAAI,EAAE;gBACN,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,IAAI,QAAQ,4BAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACtF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;aACxC;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,IAAsB;QACzB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,EACzC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SACzE;aAAM;YACH,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACzE;iBAAM,IAAI,IAAI,CAAC,KAAK,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC1E;iBAAM;gBACH,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,wBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACjD;SACJ;IACL,CAAC;CACJ;AA9ED,4CA8EC;AAYM,MAAM,gBAAgB,GAAG,CAAC,CAAY,EAAE,CAAY,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAAhE,QAAA,gBAAgB,oBAAgD;AAI7E,MAAa,YAAY;IAAzB;QAEI,cAAS,GAAG,IAAI,YAAY,CAA2B,wBAAgB,EAAE,IAAI,CAAC,CAAC;QAC/E,SAAI,GAAG,KAAK,CAAC;QACb,YAAO,GAAG,KAAK,CAAC;QAChB,YAAO,GAAG,CAAC,CAAC;QACZ,aAAQ,GAAG,CAAC,CAAC;IAoGjB,CAAC;IAlGG,WAAW;QACP,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,CAAC,CAAI;QACP,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,CAAI;QACf,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,CAAI,EAAE,QAAsC;QAC5C,IAAI,UAAgE,CAAC;QACrE,IAAI,QAAQ,EAAE;YACV,UAAU,GAAG,CAAC,GAAM,EAAE,UAAa,EAAE,EAAE;gBACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBACvC,OAAO;oBACH,GAAG,EAAE,IAAI;iBACZ,CAAC;YACN,CAAC,CAAC;SACL;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,MAAM,KAAK,GAAG,oBAAK,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;SACnB;aAAM;YACH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;SAC5D;IACL,CAAC;IAED,GAAG,CAAC,EAAkB;QAClB,MAAM,OAAO,GAA4C;YACrD,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;gBACZ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACb,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,aAAa,EAAE,IAAI;SACtB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,EAAqB;QAC1B,MAAM,OAAO,GAA4C;YACrD,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;gBACZ,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;YACD,aAAa,EAAE,IAAI;SACtB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,EAAkB;QAC1B,MAAM,OAAO,GAA4C;YACrD,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;gBACZ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACb,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,aAAa,EAAE,IAAI;SACtB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAEF,mBAAmB;IAClB,KAAK,CAAC,CAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,SAAS,CAAC,IAAiC,EAAE,GAAM;QAC/C,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,eAAe,CAAC,IAAiC,EAAE,GAAM;QACrD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;YACtB,IAAI,IAAI,EAAE;gBACN,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC3E,wCAAwC;aAC3C;SACJ;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,IAAqB;QACxB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SAC5D;aAAM;YACH,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC5D;iBAAM,IAAI,IAAI,CAAC,KAAK,EAAE;gBACnB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC7D;iBAAM;gBACH,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;aACvC;SACJ;IACL,CAAC;CACJ;AA1GD,oCA0GC;AAyBD,MAAa,GAAG;IAIZ;QAHQ,MAAC,GAAG,CAAC,CAAC;IAKd,CAAC;IAED,IAAI;QACA,OAAO,IAAI,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,GAAW;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,SAAS,EAAE;YACjB,OAAO,SAAS,CAAC;SACpB;QACD,OAAO,CAAC,CAAC,GAAG,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,CAAyB,EAAE,GAAW,EAAE,CAAS;QACrD,IAAI,CAAC,KAAK,SAAS,EAAE;YACjB,OAAO,SAAS,CAAC;SACpB;QACD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACT,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;SACvC;aACI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACd,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;SACxC;aACI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1C;aACI;YAAE,OAAO,CAAC,CAAC;SAAE;IACtB,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,GAAM;QACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACrB,IAAI,CAAC,CAAC,EAAE,CAAC;SACZ;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACjD,6BAA6B;IACjC,CAAC;IAED,OAAO,CAAC,CAAyB,EAAE,GAAW,EAAE,GAAM,EAAE,CAAS;QAC7D,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,KAAK,SAAS,EAAE;YAClB,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;SACd;QACD,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;YACV,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;SAChD;aACI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;YACf,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;SAClD;aACI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YAC3B,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAClD;aACI;YACD,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;SAChB;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,QAAQ,GAAG,CAAC;QAChC,IAAI,CAAC,GAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,CAAC;IACb,CAAC;IAED,cAAc,CAAC,IAAY;QACvB,MAAM,CAAC,GAAa,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,SAAS,EAAE;YACjB,OAAO,CAAC,CAAC;SACZ;QACD,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;YACrB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAChB;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,CAAC;IACb,CAAC;IAED,OAAO,CAAC,CAAyB,EAAE,MAAiB,EAAE,CAAW;QAC7D,IAAI,CAAC,KAAK,SAAS,EAAE;YACjB,OAAO;SACV;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;YACrB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7B;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,CAAyB,EAAE,MAAiB,EAAE,EAAiC;QACnF,IAAI,CAAC,KAAK,SAAS,EAAE;YACjB,OAAO;SACV;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,GAAG,EAAE;YACP,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SAClB;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,GAAG,CAAC,EAAiC;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,eAAe,CAAC,IAAY;QACxB,MAAM,CAAC,GAAmB,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,SAAS,EAAE;YACjB,OAAO,CAAC,CAAC;SACZ;QACD,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;YACrB,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;SACrC;QACD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC;IACb,CAAC;IAED,YAAY,CAAC,CAAyB,EAAE,MAAiB,EAAE,CAAiB;QACxE,IAAI,CAAC,KAAK,SAAS,EAAE;YACjB,OAAO;SACV;QACD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;YACrB,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;SAClD;QACD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,CAAyB,EAAE,MAAiB,EAAE,CAAS,EAAE,OAAe,EAAE,CAAW;QAChG,IAAI,CAAC,KAAK,SAAS,EAAE;YACjB,OAAO;SACV;QACD,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;SACtD;aACI,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YACjC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE;gBACvD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7B;iBACI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;gBAC/B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAClD,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;aAC1B;SACJ;QACD,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;SACvD;IACL,CAAC;IAED,aAAa,CACT,CAAyB,EACzB,MAAiB,EACjB,CAAS,EACT,OAAe,EACf,QAAgB,EAChB,CAAkB;QAClB,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE;YACrC,OAAO;SACV;QACD,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;SAC/D;QACD,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;YACrB,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC7C,IAAI,IAAI,IAAI,CAAC,EAAE;gBACX,IAAI,IAAI,GAAG,QAAQ,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBACX,IAAI,EAAE,CAAC;iBACV;gBACD,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;aACtE;SACJ;QACD,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACX,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;SACxF;aACI;YACD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;SAC5F;QACD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;SAChE;IACL,CAAC;IAED,KAAK,CAAC,OAAe;QACjB,MAAM,CAAC,GAAa,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,CAAC;IACb,CAAC;CACJ;AA/MD,kBA+MC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/consistent-type-assertions, eqeqeq, object-shorthand */\n/* eslint-disable no-bitwise */\n\n/* Remove once strictNullCheck is enabled */\n\nimport { Trace } from \"@fluidframework/common-utils\";\nimport {\n ConflictAction,\n IIntegerRange,\n KeyComparer,\n Property,\n PropertyAction,\n SortedDictionary,\n} from \"./base\";\nimport { internedSpaces } from \"./mergeTree\";\n\nexport class Stack<T> {\n items: T[] = [];\n push(val: T) {\n this.items.push(val);\n }\n\n empty() {\n return this.items.length === 0;\n }\n\n top(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n pop(): T | undefined {\n return this.items.pop();\n }\n}\n\nexport function ListRemoveEntry<U>(entry: List<U>): List<U> | undefined {\n if (entry === undefined) {\n return undefined;\n }\n else if (entry.isHead) {\n return undefined;\n }\n else {\n entry.next.prev = entry.prev;\n entry.prev.next = entry.next;\n }\n return (entry);\n}\n\nexport function ListMakeEntry<U>(data: U): List<U> {\n return new List<U>(false, data);\n}\n\nexport function ListMakeHead<U>(): List<U> {\n return new List<U>(true, undefined);\n}\n\nexport class List<T> {\n next: List<T>;\n prev: List<T>;\n\n constructor(public isHead: boolean, public data: T | undefined) {\n this.prev = this;\n this.next = this;\n }\n\n clear(): void {\n if (this.isHead) {\n this.prev = this;\n this.next = this;\n }\n }\n\n add(data: T): List<T> {\n const entry = ListMakeEntry(data);\n this.prev.next = entry;\n entry.next = this;\n entry.prev = this.prev;\n this.prev = entry;\n return (entry);\n }\n\n dequeue(): T | undefined {\n if (!this.empty()) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const removedEntry = ListRemoveEntry(this.next)!;\n return removedEntry.data;\n }\n }\n\n enqueue(data: T): List<T> {\n return this.add(data);\n }\n\n walk(fn: (data: T, l: List<T>) => void): void {\n for (let entry = this.next; !(entry.isHead); entry = entry.next) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n fn(entry.data!, entry);\n }\n }\n\n some(fn: (data: T, l: List<T>) => boolean, rev?: boolean): T[] {\n const rtn: T[] = [];\n const start = rev ? this.prev : this.next;\n for (let entry = start; !(entry.isHead); entry = rev ? entry.prev : entry.next) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const data = entry.data!;\n if (fn(data, entry)) {\n if (rev) {\n // preserve list order when in reverse\n rtn.unshift(data);\n } else {\n rtn.push(data);\n }\n }\n }\n return rtn;\n }\n\n count(): number {\n let entry: List<T>;\n let i: number;\n\n entry = this.next;\n for (i = 0; !(entry.isHead); i++) {\n entry = entry.next;\n }\n return (i);\n }\n\n first(): T | undefined {\n if (!this.empty()) {\n return (this.next.data);\n }\n }\n\n last(): T | undefined {\n if (!this.empty()) {\n return (this.prev.data);\n }\n }\n\n empty(): boolean {\n return (this.next === this);\n }\n\n pushEntry(entry: List<T>): void {\n entry.isHead = false;\n entry.next = this.next;\n entry.prev = this;\n this.next = entry;\n entry.next.prev = entry;\n }\n\n push(data: T): void {\n const entry = ListMakeEntry(data);\n entry.data = data;\n entry.isHead = false;\n entry.next = this.next;\n entry.prev = this;\n this.next = entry;\n entry.next.prev = entry;\n }\n\n popEntry(head: List<T>): List<T> | undefined {\n if (this.next.isHead) {\n return undefined;\n }\n else {\n return ListRemoveEntry(this.next);\n }\n }\n\n insertEntry(entry: List<T>): List<T> {\n entry.isHead = false;\n this.prev.next = entry;\n entry.next = this;\n entry.prev = this.prev;\n this.prev = entry;\n return entry;\n }\n\n insertAfter(data: T): List<T> {\n const entry: List<T> = ListMakeEntry(data);\n entry.next = this.next;\n entry.prev = this;\n this.next = entry;\n entry.next.prev = entry;\n return (entry);\n }\n\n insertBefore(data: T): List<T> {\n const entry = ListMakeEntry(data);\n return this.insertEntryBefore(entry);\n }\n\n insertEntryBefore(entry: List<T>): List<T> {\n this.prev.next = entry;\n entry.next = this;\n entry.prev = this.prev;\n this.prev = entry;\n return (entry);\n }\n}\n\nexport interface Comparer<T> {\n compare(a: T, b: T): number;\n min: T;\n}\n\nexport const numberComparer: Comparer<number> = {\n min: Number.MIN_VALUE,\n compare: (a, b) => a - b,\n};\n\nexport class Heap<T> {\n L: T[];\n count() {\n return this.L.length - 1;\n }\n constructor(a: T[], public comp: Comparer<T>) {\n this.L = [comp.min];\n for (let i = 0, len = a.length; i < len; i++) {\n this.add(a[i]);\n }\n }\n peek() {\n return this.L[1];\n }\n\n get() {\n const x = this.L[1];\n this.L[1] = this.L[this.count()];\n this.L.pop();\n this.fixdown(1);\n return x;\n }\n\n add(x: T) {\n this.L.push(x);\n this.fixup(this.count());\n }\n\n private fixup(k: number) {\n let _k = k;\n while (_k > 1 && (this.comp.compare(this.L[_k >> 1], this.L[_k]) > 0)) {\n const tmp = this.L[_k >> 1];\n this.L[_k >> 1] = this.L[_k];\n this.L[_k] = tmp;\n _k = _k >> 1;\n }\n }\n\n private fixdown(k: number) {\n let _k = k;\n while ((_k << 1) <= (this.count())) {\n let j = _k << 1;\n if ((j < this.count()) && (this.comp.compare(this.L[j], this.L[j + 1]) > 0)) {\n j++;\n }\n if (this.comp.compare(this.L[_k], this.L[j]) <= 0) {\n break;\n }\n const tmp = this.L[_k];\n this.L[_k] = this.L[j];\n this.L[j] = tmp;\n _k = j;\n }\n }\n}\n\n// For testing\nexport function LinearDictionary<TKey, TData>(compareKeys: KeyComparer<TKey>): SortedDictionary<TKey, TData> {\n const props: Property<TKey, TData>[] = [];\n const compareProps = (a: Property<TKey, TData>, b: Property<TKey, TData>) => compareKeys(a.key, b.key);\n function diag() {\n console.log(`size is ${props.length}`);\n }\n function mapRange<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum, start?: TKey, end?: TKey) {\n let _start = start;\n let _end = end;\n\n if (props.length !== 0) { return; }\n\n if (_start === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _start = min()!.key;\n }\n if (_end === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _end = max()!.key;\n }\n for (let i = 0, len = props.length; i < len; i++) {\n if (compareKeys(_start, props[i].key) <= 0) {\n const ecmp = compareKeys(_end, props[i].key);\n if (ecmp < 0) {\n break;\n }\n if (!action(props[i], accum)) {\n break;\n }\n }\n }\n }\n\n function map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum) {\n mapRange(action, accum);\n }\n\n function min() {\n if (props.length > 0) {\n return props[0];\n }\n }\n function max() {\n if (props.length > 0) {\n return props[props.length - 1];\n }\n }\n\n function get(key: TKey) {\n for (let i = 0, len = props.length; i < len; i++) {\n if (props[i].key == key) {\n return props[i];\n }\n }\n }\n\n function put(key: TKey, data: TData) {\n if (key !== undefined) {\n if (data === undefined) {\n remove(key);\n }\n else {\n props.push({ key, data });\n props.sort(compareProps); // Go to insertion sort if too slow\n }\n }\n }\n function remove(key: TKey) {\n if (key !== undefined) {\n for (let i = 0, len = props.length; i < len; i++) {\n if (props[i].key == key) {\n props[i] = props[len - 1];\n props.length--;\n props.sort(compareProps);\n break;\n }\n }\n }\n }\n return {\n min: min,\n max: max,\n map: map,\n mapRange: mapRange,\n remove: remove,\n get: get,\n put: put,\n diag: diag,\n };\n}\n\nexport const enum RBColor {\n RED,\n BLACK,\n}\n\nexport interface RBNode<TKey, TData> {\n key: TKey;\n data: TData;\n left: RBNode<TKey, TData> | undefined;\n right: RBNode<TKey, TData> | undefined;\n color: RBColor;\n size: number;\n}\n\nexport interface IRBAugmentation<TKey, TData> {\n update(node: RBNode<TKey, TData>): void;\n}\n\nexport interface IRBMatcher<TKey, TData> {\n continueSubtree(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n matchNode(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n}\n\nexport interface RBNodeActions<TKey, TData> {\n infix?(node: RBNode<TKey, TData>): boolean;\n pre?(node: RBNode<TKey, TData>): boolean;\n post?(node: RBNode<TKey, TData>): boolean;\n showStructure?: boolean;\n}\n\nexport class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData> {\n root: RBNode<TKey, TData> | undefined;\n constructor(public compareKeys: KeyComparer<TKey>, public aug?: IRBAugmentation<TKey, TData>) {\n\n }\n\n makeNode(key: TKey, data: TData, color: RBColor, size: number) {\n return <RBNode<TKey, TData>>{ key, data, color, size };\n }\n\n isRed(node: RBNode<TKey, TData> | undefined) {\n return !!node && (node.color == RBColor.RED);\n }\n\n nodeSize(node: RBNode<TKey, TData> | undefined) {\n return node ? node.size : 0;\n }\n size() {\n return this.nodeSize(this.root);\n }\n isEmpty() {\n return !this.root;\n }\n get(key: TKey) {\n if (key !== undefined) {\n return this.nodeGet(this.root, key);\n }\n }\n nodeGet(node: RBNode<TKey, TData> | undefined, key: TKey) {\n let _node = node;\n while (_node) {\n const cmp = this.compareKeys(key, _node.key);\n if (cmp < 0) {\n _node = _node.left;\n }\n else if (cmp > 0) {\n _node = _node.right;\n }\n else {\n return _node;\n }\n }\n }\n contains(key: TKey) {\n return this.get(key);\n }\n\n gather(key: TKey, matcher: IRBMatcher<TKey, TData>) {\n const results = [] as RBNode<TKey, TData>[];\n if (key !== undefined) {\n this.nodeGather(this.root, results, key, matcher);\n }\n return results;\n }\n\n nodeGather(\n node: RBNode<TKey, TData> | undefined,\n results: RBNode<TKey, TData>[],\n key: TKey,\n matcher: IRBMatcher<TKey, TData>) {\n if (node) {\n if (matcher.continueSubtree(node.left, key)) {\n this.nodeGather(node.left, results, key, matcher);\n }\n if (matcher.matchNode(node, key)) {\n results.push(node);\n }\n if (matcher.continueSubtree(node.right, key)) {\n this.nodeGather(node.right, results, key, matcher);\n }\n }\n }\n\n walkExactMatchesForward(\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n this.nodeWalkExactMatchesForward(this.root, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n\n nodeWalkExactMatchesForward(\n node: RBNode<TKey, TData> | undefined,\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n if (!node) {\n return;\n }\n const result: number = compareFn(node);\n if (continueLeftFn(result)) {\n this.nodeWalkExactMatchesForward(node.left, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n if (result === 0) {\n actionFn(node);\n }\n if (continueRightFn(result)) {\n this.nodeWalkExactMatchesForward(node.right, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n }\n\n walkExactMatchesBackward(\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n this.nodeWalkExactMatchesBackward(this.root, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n\n nodeWalkExactMatchesBackward(\n node: RBNode<TKey, TData> | undefined,\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (cmp: number) => boolean,\n continueRightFn: (cmp: number) => boolean) {\n if (!node) {\n return;\n }\n const result: number = compareFn(node);\n if (continueRightFn(result)) {\n this.nodeWalkExactMatchesBackward(node.right, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n if (result === 0) {\n actionFn(node);\n }\n if (continueLeftFn(result)) {\n this.nodeWalkExactMatchesBackward(node.left, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n }\n\n put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>) {\n if (key !== undefined) {\n if (data === undefined) {\n this.remove(key);\n }\n else {\n this.root = this.nodePut(this.root, key, data, conflict);\n this.root.color = RBColor.BLACK;\n }\n }\n }\n\n nodePut(\n node: RBNode<TKey, TData> | undefined,\n key: TKey, data: TData,\n conflict?: ConflictAction<TKey, TData>,\n ) {\n let _node = node;\n if (!_node) {\n return this.makeNode(key, data, RBColor.RED, 1);\n }\n else {\n const cmp = this.compareKeys(key, _node.key);\n if (cmp < 0) {\n _node.left = this.nodePut(_node.left, key, data, conflict);\n }\n else if (cmp > 0) {\n _node.right = this.nodePut(_node.right, key, data, conflict);\n }\n else {\n if (conflict) {\n const kd = conflict(key, _node.key, data, _node.data);\n if (kd.key) {\n _node.key = kd.key;\n }\n if (kd.data) {\n _node.data = kd.data;\n } else {\n _node.data = data;\n }\n }\n else {\n _node.data = data;\n }\n }\n if (this.isRed(_node.right) && (!this.isRed(_node.left))) {\n _node = this.rotateLeft(_node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.left) && this.isRed(_node.left!.left)) {\n _node = this.rotateRight(_node);\n }\n if (this.isRed(_node.left) && this.isRed(_node.right)) {\n this.flipColors(_node);\n }\n _node.size = this.nodeSize(_node.left) + this.nodeSize(_node.right) + 1;\n if (this.aug) {\n this.updateLocal(_node);\n }\n return _node;\n }\n }\n\n updateLocal(node: RBNode<TKey, TData>) {\n if (this.aug) {\n if (this.isRed(node.left)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.aug.update(node.left!);\n }\n if (this.isRed(node.right)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.aug.update(node.right!);\n }\n this.aug.update(node);\n }\n }\n\n removeMin() {\n if (this.root) {\n if ((!this.isRed(this.root.left)) && (!this.isRed(this.root.right))) {\n this.root.color = RBColor.RED;\n }\n\n this.root = this.nodeRemoveMin(this.root);\n if (this.root) {\n this.root.color = RBColor.BLACK;\n }\n }\n // TODO: error on empty\n }\n nodeRemoveMin(node: RBNode<TKey, TData>) {\n let _node = node;\n if (_node.left) {\n if ((!this.isRed(_node.left)) && (!this.isRed(_node.left.left))) {\n _node = this.moveRedLeft(_node);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.left = this.nodeRemoveMin(_node.left!);\n return this.balance(_node);\n }\n }\n\n removeMax() {\n if (this.root) {\n if ((!this.isRed(this.root.left)) && (!this.isRed(this.root.right))) {\n this.root.color = RBColor.RED;\n }\n\n this.root = this.nodeRemoveMax(this.root);\n if (this.root) {\n this.root.color = RBColor.BLACK;\n }\n }\n // TODO: error on empty\n }\n\n nodeRemoveMax(node: RBNode<TKey, TData>) {\n let _node = node;\n\n if (this.isRed(_node.left)) {\n _node = this.rotateRight(_node);\n }\n\n if (!_node.right) {\n return undefined;\n }\n\n if ((!this.isRed(_node.right)) && (!this.isRed(_node.right.left))) {\n _node = this.moveRedRight(_node);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.nodeRemoveMax(_node.right!);\n\n return this.balance(_node);\n }\n\n remove(key: TKey) {\n if (key !== undefined) {\n if (!this.contains(key)) {\n return;\n }\n\n this.removeExisting(key);\n }\n // TODO: error on undefined key\n }\n\n removeExisting(key: TKey) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(this.root!.left)) && (!this.isRed(this.root!.right))) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.root!.color = RBColor.RED;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.root = this.nodeRemove(this.root!, key);\n }\n\n nodeRemove(node: RBNode<TKey, TData>, key: TKey) {\n let _node = node;\n if (this.compareKeys(key, _node.key) < 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(_node.left)) && (!this.isRed(_node.left!.left))) {\n _node = this.moveRedLeft(_node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.left = this.nodeRemove(_node.left!, key);\n }\n else {\n if (this.isRed(_node.left)) {\n _node = this.rotateRight(_node);\n }\n if ((this.compareKeys(key, _node.key) == 0) && (!_node.right)) {\n return undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(_node.right)) && (!this.isRed(_node.right!.left))) {\n _node = this.moveRedRight(_node);\n }\n if (this.compareKeys(key, _node.key) == 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const subtreeMin = this.nodeMin(_node.right!);\n _node.key = subtreeMin.key;\n _node.data = subtreeMin.data;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.nodeRemoveMin(_node.right!);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.nodeRemove(_node.right!, key);\n }\n }\n return this.balance(_node);\n }\n height() {\n return this.nodeHeight(this.root);\n }\n nodeHeight(node: RBNode<TKey, TData> | undefined): number {\n if (node === undefined) {\n return -1;\n }\n else {\n return 1 + Math.max(this.nodeHeight(node.left), this.nodeHeight(node.right));\n }\n }\n\n floor(key: TKey) {\n if (!this.isEmpty()) {\n return this.nodeFloor(this.root, key);\n }\n }\n\n nodeFloor(node: RBNode<TKey, TData> | undefined, key: TKey): RBNode<TKey, TData> | undefined {\n if (node) {\n const cmp = this.compareKeys(key, node.key);\n if (cmp == 0) {\n return node;\n }\n else if (cmp < 0) {\n return this.nodeFloor(node.left, key);\n }\n else {\n const rightFloor = this.nodeFloor(node.right, key);\n if (rightFloor) {\n return rightFloor;\n }\n else {\n return node;\n }\n }\n }\n }\n\n ceil(key: TKey) {\n if (!this.isEmpty()) {\n return this.nodeCeil(this.root, key);\n }\n }\n\n nodeCeil(node: RBNode<TKey, TData> | undefined, key: TKey): RBNode<TKey, TData> | undefined {\n if (node) {\n const cmp = this.compareKeys(key, node.key);\n if (cmp == 0) {\n return node;\n }\n else if (cmp > 0) {\n return this.nodeCeil(node.right, key);\n }\n else {\n const leftCeil = this.nodeCeil(node.left, key);\n if (leftCeil) {\n return leftCeil;\n }\n else {\n return node;\n }\n }\n }\n }\n\n min() {\n if (this.root) {\n return this.nodeMin(this.root);\n }\n }\n\n nodeMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n if (!node.left) {\n return node;\n }\n else {\n return this.nodeMin(node.left);\n }\n }\n\n max() {\n if (this.root) {\n return this.nodeMax(this.root);\n }\n }\n\n nodeMax(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n if (!node.right) {\n return node;\n }\n else {\n return this.nodeMax(node.right);\n }\n }\n\n rotateRight(node: RBNode<TKey, TData>) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const leftChild = node.left!;\n node.left = leftChild.right;\n leftChild.right = node;\n leftChild.color = leftChild.right.color;\n leftChild.right.color = RBColor.RED;\n leftChild.size = node.size;\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.updateLocal(node);\n this.updateLocal(leftChild);\n }\n return leftChild;\n }\n\n rotateLeft(node: RBNode<TKey, TData>) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const rightChild = node.right!;\n node.right = rightChild.left;\n rightChild.left = node;\n rightChild.color = rightChild.left.color;\n rightChild.left.color = RBColor.RED;\n rightChild.size = node.size;\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.updateLocal(node);\n this.updateLocal(rightChild);\n }\n return rightChild;\n }\n\n oppositeColor(c: RBColor) {\n return (c == RBColor.BLACK) ? RBColor.RED : RBColor.BLACK;\n }\n\n flipColors(node: RBNode<TKey, TData>) {\n node.color = this.oppositeColor(node.color);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n node.left!.color = this.oppositeColor(node.left!.color);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n node.right!.color = this.oppositeColor(node.right!.color);\n }\n\n moveRedLeft(node: RBNode<TKey, TData>) {\n let _node = node;\n this.flipColors(_node);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.right!.left)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.rotateRight(_node.right!);\n _node = this.rotateLeft(_node);\n this.flipColors(_node);\n }\n return _node;\n }\n\n moveRedRight(node: RBNode<TKey, TData>) {\n let _node = node;\n this.flipColors(_node);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.left!.left)) {\n _node = this.rotateRight(_node);\n this.flipColors(_node);\n }\n return _node;\n }\n\n balance(input: RBNode<TKey, TData>) {\n let node: RBNode<TKey, TData> | undefined = input;\n if (this.isRed(node.right)) {\n node = this.rotateLeft(node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(node.left) && this.isRed(node.left!.left)) {\n node = this.rotateRight(node);\n }\n if (this.isRed(node.left) && (this.isRed(node.right))) {\n this.flipColors(node);\n }\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.aug.update(node);\n }\n return node;\n }\n\n mapRange<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum, start?: TKey, end?: TKey) {\n this.nodeMap(this.root, action, start, end);\n }\n\n map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum) {\n // TODO: optimize to avoid comparisons\n this.nodeMap(this.root, action, accum);\n }\n\n keys() {\n const keyList = <TKey[]>[];\n const actions = <RBNodeActions<TKey, TData>>{\n showStructure: true,\n infix: (node) => {\n keyList.push(node.key);\n return true;\n },\n };\n this.walk(actions);\n return keyList;\n }\n\n /**\n * Depth-first traversal with custom action; if action returns\n * false, traversal is halted.\n * @param action - action to apply to each node\n */\n walk(actions: RBNodeActions<TKey, TData>) {\n this.nodeWalk(this.root, actions);\n }\n\n walkBackward(actions: RBNodeActions<TKey, TData>) {\n this.nodeWalkBackward(this.root, actions);\n }\n\n nodeWalk(node: RBNode<TKey, TData> | undefined, actions: RBNodeActions<TKey, TData>): boolean {\n let go = true;\n if (node) {\n if (actions.pre) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.pre(node);\n }\n }\n if (node.left) {\n go = this.nodeWalk(node.left, actions);\n }\n if (go && actions.infix) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.infix(node);\n }\n }\n if (go) {\n go = this.nodeWalk(node.right, actions);\n }\n if (go && actions.post) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.post(node);\n }\n }\n }\n return go;\n }\n\n nodeWalkBackward(node: RBNode<TKey, TData> | undefined, actions: RBNodeActions<TKey, TData>): boolean {\n let go = true;\n if (node) {\n if (actions.pre) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.pre(node);\n }\n }\n if (node.right) {\n go = this.nodeWalkBackward(node.right, actions);\n }\n if (go && actions.infix) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.infix(node);\n }\n }\n if (go) {\n go = this.nodeWalkBackward(node.left, actions);\n }\n if (go && actions.post) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.post(node);\n }\n }\n }\n return go;\n }\n\n nodeMap<TAccum>(\n node: RBNode<TKey, TData> | undefined,\n action: PropertyAction<TKey, TData>,\n accum?: TAccum,\n start?: TKey,\n end?: TKey,\n ): boolean {\n let _start = start;\n let _end = end;\n if (!node) {\n return true;\n }\n if (_start === undefined) {\n _start = this.nodeMin(node).key;\n }\n if (_end === undefined) {\n _end = this.nodeMax(node).key;\n }\n const cmpStart = this.compareKeys(_start, node.key);\n const cmpEnd = this.compareKeys(_end, node.key);\n let go = true;\n if (cmpStart < 0) {\n go = this.nodeMap(node.left, action, accum, _start, _end);\n }\n if (go && (cmpStart <= 0) && (cmpEnd >= 0)) {\n // REVIEW: test for black node here\n go = action(node, accum);\n }\n if (go && (cmpEnd > 0)) {\n go = this.nodeMap(node.right, action, accum, _start, _end);\n }\n return go;\n }\n diag() {\n console.log(`Height is ${this.height()}`);\n }\n}\n\nexport interface AugIntegerRangeNode {\n minmax: IIntegerRange;\n}\n\nexport interface AugmentedIntervalNode {\n minmax: IInterval;\n}\n/**\n * Union of two ranges; assumes for both ranges start \\<= end.\n * @param a - A range\n * @param b - A range\n */\nexport function integerRangeUnion(a: IIntegerRange, b: IIntegerRange) {\n return <IIntegerRange>{\n start: Math.min(a.start, b.start),\n end: Math.max(a.end, b.end),\n };\n}\n\nexport function integerRangeOverlaps(a: IIntegerRange, b: IIntegerRange) {\n return (a.start < b.end) && (a.end > b.start);\n}\n\nexport function integerRangeComparer(a: IIntegerRange, b: IIntegerRange) {\n if (a.start === b.start) {\n return a.end - b.end;\n } else {\n return a.start - b.start;\n }\n}\n\nexport const integerRangeCopy = (r: IIntegerRange) => <IIntegerRange>{ start: r.start, end: r.end };\n\nexport const integerRangeToString = (range: IIntegerRange) => `[${range.start},${range.end})`;\n\nexport type IntegerRangeNode = RBNode<IIntegerRange, AugIntegerRangeNode>;\n\n// TODO: handle duplicate keys\n\nexport class IntegerRangeTree implements IRBAugmentation<IIntegerRange, AugIntegerRangeNode>,\n IRBMatcher<IIntegerRange, AugIntegerRangeNode> {\n ranges = new RedBlackTree<IIntegerRange, AugIntegerRangeNode>(integerRangeComparer, this);\n diag = false;\n\n remove(r: IIntegerRange) {\n this.ranges.remove(r);\n }\n\n put(r: IIntegerRange) {\n this.ranges.put(r, { minmax: integerRangeCopy(r) });\n }\n\n toString() {\n return this.nodeToString(this.ranges.root);\n }\n\n nodeToString(node: IntegerRangeNode | undefined) {\n let buf = \"\";\n let indentAmt = 0;\n const actions = {\n pre: (n: IntegerRangeNode) => {\n let red = \"\";\n if (n.color === RBColor.RED) {\n red = \"R \";\n }\n buf += internedSpaces(indentAmt);\n buf += `${red}key: ${integerRangeToString(n.key)} minmax: ${integerRangeToString(n.data.minmax)}\\n`;\n indentAmt += 2;\n return true;\n },\n post: (n: IntegerRangeNode) => {\n indentAmt -= 2;\n return true;\n },\n showStructure: true,\n };\n this.ranges.nodeWalk(node, actions);\n return buf;\n }\n\n matchPos(pos: number) {\n return this.match({ start: pos, end: pos + 1 });\n }\n\n match(r: IIntegerRange) {\n return this.ranges.gather(r, this);\n }\n\n matchNode(node: IntegerRangeNode | undefined, key: IIntegerRange) {\n return !!node && integerRangeOverlaps(node.key, key);\n }\n\n continueSubtree(node: IntegerRangeNode | undefined, key: IIntegerRange) {\n const cont = !!node && integerRangeOverlaps(node.data.minmax, key);\n if (this.diag && (!cont)) {\n if (node) {\n console.log(`skipping subtree of size ${node.size} key ${integerRangeToString(key)}`);\n console.log(this.nodeToString(node));\n }\n }\n return cont;\n }\n\n update(node: IntegerRangeNode) {\n if (node.left && node.right) {\n node.data.minmax = integerRangeUnion(node.key,\n integerRangeUnion(node.left.data.minmax, node.right.data.minmax));\n } else {\n if (node.left) {\n node.data.minmax = integerRangeUnion(node.key, node.left.data.minmax);\n } else if (node.right) {\n node.data.minmax = integerRangeUnion(node.key, node.right.data.minmax);\n } else {\n node.data.minmax = integerRangeCopy(node.key);\n }\n }\n }\n}\n\nexport interface IInterval {\n clone(): IInterval;\n compare(b: IInterval): number;\n compareStart(b: IInterval): number;\n compareEnd(b: IInterval): number;\n modify(label: string, start: number, end: number): IInterval | undefined;\n overlaps(b: IInterval): boolean;\n union(b: IInterval): IInterval;\n}\n\nexport const intervalComparer = (a: IInterval, b: IInterval) => a.compare(b);\nexport type IntervalNode<T extends IInterval> = RBNode<T, AugmentedIntervalNode>;\nexport type IntervalConflictResolver<TInterval> = (a: TInterval, b: TInterval) => TInterval;\n\nexport class IntervalTree<T extends IInterval> implements IRBAugmentation<T, AugmentedIntervalNode>,\n IRBMatcher<T, AugmentedIntervalNode> {\n intervals = new RedBlackTree<T, AugmentedIntervalNode>(intervalComparer, this);\n diag = false;\n timePut = false;\n putTime = 0;\n putCount = 0;\n\n printTiming() {\n console.log(`put total = ${this.putTime} avg=${(this.putTime / this.putCount).toFixed(2)}`);\n }\n\n remove(x: T) {\n this.intervals.remove(x);\n }\n\n removeExisting(x: T) {\n this.intervals.removeExisting(x);\n }\n\n put(x: T, conflict?: IntervalConflictResolver<T>) {\n let rbConflict: ConflictAction<T, AugmentedIntervalNode> | undefined;\n if (conflict) {\n rbConflict = (key: T, currentKey: T) => {\n const ival = conflict(key, currentKey);\n return {\n key: ival,\n };\n };\n }\n if (this.timePut) {\n const trace = Trace.start();\n this.intervals.put(x, { minmax: x.clone() }, rbConflict);\n this.putTime += trace.trace().duration * 1000;\n this.putCount++;\n } else {\n this.intervals.put(x, { minmax: x.clone() }, rbConflict);\n }\n }\n\n map(fn: (x: T) => void) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n fn(node.key);\n return true;\n },\n showStructure: true,\n };\n this.intervals.walk(actions);\n }\n\n mapUntil(fn: (X: T) => boolean) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n return fn(node.key);\n },\n showStructure: true,\n };\n this.intervals.walk(actions);\n }\n\n mapBackward(fn: (x: T) => void) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n fn(node.key);\n return true;\n },\n showStructure: true,\n };\n this.intervals.walkBackward(actions);\n }\n\n // TODO: toString()\n match(x: T) {\n return this.intervals.gather(x, this);\n }\n\n matchNode(node: IntervalNode<T> | undefined, key: T) {\n return !!node && node.key.overlaps(key);\n }\n\n continueSubtree(node: IntervalNode<T> | undefined, key: T) {\n const cont = !!node && node.data.minmax.overlaps(key);\n if (this.diag && (!cont)) {\n if (node) {\n console.log(`skipping subtree of size ${node.size} key ${key.toString()}`);\n // console.log(this.nodeToString(node));\n }\n }\n return cont;\n }\n\n update(node: IntervalNode<T>) {\n if (node.left && node.right) {\n node.data.minmax = node.key.union(\n node.left.data.minmax.union(node.right.data.minmax));\n } else {\n if (node.left) {\n node.data.minmax = node.key.union(node.left.data.minmax);\n } else if (node.right) {\n node.data.minmax = node.key.union(node.right.data.minmax);\n } else {\n node.data.minmax = node.key.clone();\n }\n }\n }\n}\n\nexport interface TSTResult<T> {\n key: string;\n val: T;\n}\n\nexport interface TSTNode<T> {\n c: string;\n left?: TSTNode<T>;\n mid?: TSTNode<T>;\n right?: TSTNode<T>;\n val?: T;\n}\n\nexport interface TSTPrefix {\n text: string;\n}\n\nexport interface ProxString<T> {\n text: string;\n invDistance: number;\n val: T;\n}\n\nexport class TST<T> {\n private n = 0;\n private root: TSTNode<T> | undefined;\n\n constructor() {\n\n }\n\n size() {\n return this.n;\n }\n\n contains(key: string) {\n return this.get(key);\n }\n\n get(key: string) {\n const x = this.nodeGet(this.root, key, 0);\n if (x === undefined) {\n return undefined;\n }\n return x.val;\n }\n\n nodeGet(x: TSTNode<T> | undefined, key: string, d: number): TSTNode<T> | undefined {\n if (x === undefined) {\n return undefined;\n }\n const c = key.charAt(d);\n if (c < x.c) {\n return this.nodeGet(x.left, key, d);\n }\n else if (c > x.c) {\n return this.nodeGet(x.right, key, d);\n }\n else if (d < (key.length - 1)) {\n return this.nodeGet(x.mid, key, d + 1);\n }\n else { return x; }\n }\n\n put(key: string, val: T) {\n if (!this.contains(key)) {\n this.n++;\n }\n this.root = this.nodePut(this.root, key, val, 0);\n // console.log(`put ${key}`);\n }\n\n nodePut(x: TSTNode<T> | undefined, key: string, val: T, d: number) {\n let _x = x;\n const c = key.charAt(d);\n if (_x === undefined) {\n _x = { c };\n }\n if (c < _x.c) {\n _x.left = this.nodePut(_x.left, key, val, d);\n }\n else if (c > _x.c) {\n _x.right = this.nodePut(_x.right, key, val, d);\n }\n else if (d < (key.length - 1)) {\n _x.mid = this.nodePut(_x.mid, key, val, d + 1);\n }\n else {\n _x.val = val;\n }\n return _x;\n }\n\n neighbors(text: string, distance = 2) {\n let q = <ProxString<T>[]>[];\n this.nodeProximity(this.root, { text: \"\" }, 0, text, distance, q);\n q = q.filter((value) => (value.text.length > 0));\n return q;\n }\n\n keysWithPrefix(text: string) {\n const q = <string[]>[];\n const x = this.nodeGet(this.root, text, 0);\n if (x === undefined) {\n return q;\n }\n if (x.val !== undefined) {\n q.push(text);\n }\n this.collect(x.mid, { text }, q);\n return q;\n }\n\n collect(x: TSTNode<T> | undefined, prefix: TSTPrefix, q: string[]) {\n if (x === undefined) {\n return;\n }\n this.collect(x.left, prefix, q);\n if (x.val !== undefined) {\n q.push(prefix.text + x.c);\n }\n this.collect(x.mid, { text: prefix.text + x.c }, q);\n this.collect(x.right, prefix, q);\n }\n\n mapNode(x: TSTNode<T> | undefined, prefix: TSTPrefix, fn: (key: string, val: T) => void) {\n if (x === undefined) {\n return;\n }\n const key = prefix.text + x.c;\n this.mapNode(x.left, prefix, fn);\n if (x.val) {\n fn(key, x.val);\n }\n this.mapNode(x.mid, { text: key }, fn);\n this.mapNode(x.right, prefix, fn);\n }\n\n map(fn: (key: string, val: T) => void) {\n this.mapNode(this.root, { text: \"\" }, fn);\n }\n\n pairsWithPrefix(text: string) {\n const q = <TSTResult<T>[]>[];\n const x = this.nodeGet(this.root, text, 0);\n if (x === undefined) {\n return q;\n }\n if (x.val !== undefined) {\n q.push({ key: text, val: x.val });\n }\n this.collectPairs(x.mid, { text }, q);\n return q;\n }\n\n collectPairs(x: TSTNode<T> | undefined, prefix: TSTPrefix, q: TSTResult<T>[]) {\n if (x === undefined) {\n return;\n }\n this.collectPairs(x.left, prefix, q);\n if (x.val !== undefined) {\n q.push({ key: prefix.text + x.c, val: x.val });\n }\n this.collectPairs(x.mid, { text: prefix.text + x.c }, q);\n this.collectPairs(x.right, prefix, q);\n }\n\n patternCollect(x: TSTNode<T> | undefined, prefix: TSTPrefix, d: number, pattern: string, q: string[]) {\n if (x === undefined) {\n return;\n }\n const c = pattern.charAt(d);\n if ((c === \".\") || (c < x.c)) {\n this.patternCollect(x.left, prefix, d, pattern, q);\n }\n else if ((c === \".\") || (c === x.c)) {\n if ((d === (pattern.length - 1)) && (x.val !== undefined)) {\n q.push(prefix.text + x.c);\n }\n else if (d < (pattern.length - 1)) {\n this.patternCollect(x.mid, { text: prefix.text + x.c },\n d + 1, pattern, q);\n }\n }\n if ((c === \".\") || (c > x.c)) {\n this.patternCollect(x.right, prefix, d, pattern, q);\n }\n }\n\n nodeProximity(\n x: TSTNode<T> | undefined,\n prefix: TSTPrefix,\n d: number,\n pattern: string,\n distance: number,\n q: ProxString<T>[]) {\n if ((x === undefined) || (distance < 0)) {\n return;\n }\n const c = pattern.charAt(d);\n if ((distance > 0) || (c < x.c)) {\n this.nodeProximity(x.left, prefix, d, pattern, distance, q);\n }\n if (x.val !== undefined) {\n const remD = distance - (pattern.length - d);\n if (remD >= 0) {\n let invD = distance;\n if (c !== x.c) {\n invD--;\n }\n q.push({ text: prefix.text + x.c, val: x.val, invDistance: invD });\n }\n }\n const recurD = (d < (pattern.length - 1)) ? d + 1 : d;\n if (c === x.c) {\n this.nodeProximity(x.mid, { text: prefix.text + x.c }, recurD, pattern, distance, q);\n }\n else {\n this.nodeProximity(x.mid, { text: prefix.text + x.c }, recurD, pattern, distance - 1, q);\n }\n if ((distance > 0) || (c > x.c)) {\n this.nodeProximity(x.right, prefix, d, pattern, distance, q);\n }\n }\n\n match(pattern: string) {\n const q = <string[]>[];\n this.patternCollect(this.root, { text: \"\" }, 0, pattern, q);\n return q;\n }\n}\n"]}
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/consistent-type-assertions, eqeqeq */\n/* eslint-disable no-bitwise */\n\n/* Remove once strictNullCheck is enabled */\n\nimport {\n ConflictAction,\n IIntegerRange,\n KeyComparer,\n PropertyAction,\n SortedDictionary,\n} from \"./base\";\n\nexport class Stack<T> {\n public items: T[] = [];\n public push(val: T) {\n this.items.push(val);\n }\n\n public empty() {\n return this.items.length === 0;\n }\n\n public top(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n public pop(): T | undefined {\n return this.items.pop();\n }\n}\n\nfunction ListRemoveEntry<U>(entry: List<U>): List<U> | undefined {\n if (entry === undefined) {\n return undefined;\n }\n else if (entry.isHead) {\n return undefined;\n }\n else {\n entry.next.prev = entry.prev;\n entry.prev.next = entry.next;\n }\n return (entry);\n}\n\nfunction ListMakeEntry<U>(data: U): List<U> {\n return new List<U>(false, data);\n}\n\nexport function ListMakeHead<U>(): List<U> {\n return new List<U>(true, undefined);\n}\n\nexport class List<T> {\n public next: List<T>;\n public prev: List<T>;\n\n constructor(public isHead: boolean, private data: T | undefined) {\n this.prev = this;\n this.next = this;\n }\n\n public clear(): void {\n if (this.isHead) {\n this.prev = this;\n this.next = this;\n }\n }\n\n private add(data: T): List<T> {\n const entry = ListMakeEntry(data);\n this.prev.next = entry;\n entry.next = this;\n entry.prev = this.prev;\n this.prev = entry;\n return (entry);\n }\n\n public dequeue(): T | undefined {\n if (!this.empty()) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const removedEntry = ListRemoveEntry(this.next)!;\n return removedEntry.data;\n }\n }\n\n public enqueue(data: T): List<T> {\n return this.add(data);\n }\n\n public walk(fn: (data: T, l: List<T>) => void): void {\n for (let entry = this.next; !(entry.isHead); entry = entry.next) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n fn(entry.data!, entry);\n }\n }\n\n public some(fn: (data: T, l: List<T>) => boolean, rev?: boolean): T[] {\n const rtn: T[] = [];\n const start = rev ? this.prev : this.next;\n for (let entry = start; !(entry.isHead); entry = rev ? entry.prev : entry.next) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const data = entry.data!;\n if (fn(data, entry)) {\n if (rev) {\n // preserve list order when in reverse\n rtn.unshift(data);\n } else {\n rtn.push(data);\n }\n }\n }\n return rtn;\n }\n\n public count(): number {\n let entry: List<T>;\n let i: number;\n\n entry = this.next;\n for (i = 0; !(entry.isHead); i++) {\n entry = entry.next;\n }\n return (i);\n }\n\n public first(): T | undefined {\n if (!this.empty()) {\n return (this.next.data);\n }\n }\n\n public last(): T | undefined {\n if (!this.empty()) {\n return (this.prev.data);\n }\n }\n\n public empty(): boolean {\n return (this.next === this);\n }\n\n public push(data: T): void {\n const entry = ListMakeEntry(data);\n entry.data = data;\n entry.isHead = false;\n entry.next = this.next;\n entry.prev = this;\n this.next = entry;\n entry.next.prev = entry;\n }\n}\n\nexport interface Comparer<T> {\n compare(a: T, b: T): number;\n min: T;\n}\n\nexport class Heap<T> {\n private L: T[];\n public count() {\n return this.L.length - 1;\n }\n constructor(a: T[], public comp: Comparer<T>) {\n this.L = [comp.min];\n for (let i = 0, len = a.length; i < len; i++) {\n this.add(a[i]);\n }\n }\n public peek() {\n return this.L[1];\n }\n\n public get() {\n const x = this.L[1];\n this.L[1] = this.L[this.count()];\n this.L.pop();\n this.fixdown(1);\n return x;\n }\n\n public add(x: T) {\n this.L.push(x);\n this.fixup(this.count());\n }\n\n private fixup(k: number) {\n let _k = k;\n while (_k > 1 && (this.comp.compare(this.L[_k >> 1], this.L[_k]) > 0)) {\n const tmp = this.L[_k >> 1];\n this.L[_k >> 1] = this.L[_k];\n this.L[_k] = tmp;\n _k = _k >> 1;\n }\n }\n\n private fixdown(k: number) {\n let _k = k;\n while ((_k << 1) <= (this.count())) {\n let j = _k << 1;\n if ((j < this.count()) && (this.comp.compare(this.L[j], this.L[j + 1]) > 0)) {\n j++;\n }\n if (this.comp.compare(this.L[_k], this.L[j]) <= 0) {\n break;\n }\n const tmp = this.L[_k];\n this.L[_k] = this.L[j];\n this.L[j] = tmp;\n _k = j;\n }\n }\n}\n\nexport const enum RBColor {\n RED,\n BLACK,\n}\n\nexport interface RBNode<TKey, TData> {\n key: TKey;\n data: TData;\n left: RBNode<TKey, TData> | undefined;\n right: RBNode<TKey, TData> | undefined;\n color: RBColor;\n size: number;\n}\n\nexport interface IRBAugmentation<TKey, TData> {\n update(node: RBNode<TKey, TData>): void;\n}\n\nexport interface IRBMatcher<TKey, TData> {\n continueSubtree(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n matchNode(node: RBNode<TKey, TData> | undefined, key: TKey): boolean;\n}\n\nexport interface RBNodeActions<TKey, TData> {\n infix?(node: RBNode<TKey, TData>): boolean;\n pre?(node: RBNode<TKey, TData>): boolean;\n post?(node: RBNode<TKey, TData>): boolean;\n showStructure?: boolean;\n}\n\nexport class RedBlackTree<TKey, TData> implements SortedDictionary<TKey, TData> {\n private root: RBNode<TKey, TData> | undefined;\n\n constructor(\n private readonly compareKeys: KeyComparer<TKey>,\n private readonly aug?: IRBAugmentation<TKey, TData>,\n ) { }\n\n private makeNode(key: TKey, data: TData, color: RBColor, size: number) {\n return <RBNode<TKey, TData>>{ key, data, color, size };\n }\n\n private isRed(node: RBNode<TKey, TData> | undefined) {\n return !!node && (node.color == RBColor.RED);\n }\n\n private nodeSize(node: RBNode<TKey, TData> | undefined) {\n return node ? node.size : 0;\n }\n public size() {\n return this.nodeSize(this.root);\n }\n public isEmpty() {\n return !this.root;\n }\n public get(key: TKey) {\n if (key !== undefined) {\n return this.nodeGet(this.root, key);\n }\n }\n private nodeGet(node: RBNode<TKey, TData> | undefined, key: TKey) {\n let _node = node;\n while (_node) {\n const cmp = this.compareKeys(key, _node.key);\n if (cmp < 0) {\n _node = _node.left;\n }\n else if (cmp > 0) {\n _node = _node.right;\n }\n else {\n return _node;\n }\n }\n }\n private contains(key: TKey) {\n return this.get(key);\n }\n\n public gather(key: TKey, matcher: IRBMatcher<TKey, TData>) {\n const results = [] as RBNode<TKey, TData>[];\n if (key !== undefined) {\n this.nodeGather(this.root, results, key, matcher);\n }\n return results;\n }\n\n private nodeGather(\n node: RBNode<TKey, TData> | undefined,\n results: RBNode<TKey, TData>[],\n key: TKey,\n matcher: IRBMatcher<TKey, TData>) {\n if (node) {\n if (matcher.continueSubtree(node.left, key)) {\n this.nodeGather(node.left, results, key, matcher);\n }\n if (matcher.matchNode(node, key)) {\n results.push(node);\n }\n if (matcher.continueSubtree(node.right, key)) {\n this.nodeGather(node.right, results, key, matcher);\n }\n }\n }\n\n public walkExactMatchesForward(\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n this.nodeWalkExactMatchesForward(this.root, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n\n private nodeWalkExactMatchesForward(\n node: RBNode<TKey, TData> | undefined,\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n if (!node) {\n return;\n }\n const result: number = compareFn(node);\n if (continueLeftFn(result)) {\n this.nodeWalkExactMatchesForward(node.left, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n if (result === 0) {\n actionFn(node);\n }\n if (continueRightFn(result)) {\n this.nodeWalkExactMatchesForward(node.right, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n }\n\n public walkExactMatchesBackward(\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (number: number) => boolean,\n continueRightFn: (number: number) => boolean) {\n this.nodeWalkExactMatchesBackward(this.root, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n\n private nodeWalkExactMatchesBackward(\n node: RBNode<TKey, TData> | undefined,\n compareFn: (node: RBNode<TKey, TData>) => number,\n actionFn: (node: RBNode<TKey, TData>) => void,\n continueLeftFn: (cmp: number) => boolean,\n continueRightFn: (cmp: number) => boolean) {\n if (!node) {\n return;\n }\n const result: number = compareFn(node);\n if (continueRightFn(result)) {\n this.nodeWalkExactMatchesBackward(node.right, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n if (result === 0) {\n actionFn(node);\n }\n if (continueLeftFn(result)) {\n this.nodeWalkExactMatchesBackward(node.left, compareFn, actionFn, continueLeftFn, continueRightFn);\n }\n }\n\n public put(key: TKey, data: TData, conflict?: ConflictAction<TKey, TData>) {\n if (key !== undefined) {\n if (data === undefined) {\n this.remove(key);\n }\n else {\n this.root = this.nodePut(this.root, key, data, conflict);\n this.root.color = RBColor.BLACK;\n }\n }\n }\n\n private nodePut(\n node: RBNode<TKey, TData> | undefined,\n key: TKey, data: TData,\n conflict?: ConflictAction<TKey, TData>,\n ) {\n let _node = node;\n if (!_node) {\n return this.makeNode(key, data, RBColor.RED, 1);\n }\n else {\n const cmp = this.compareKeys(key, _node.key);\n if (cmp < 0) {\n _node.left = this.nodePut(_node.left, key, data, conflict);\n }\n else if (cmp > 0) {\n _node.right = this.nodePut(_node.right, key, data, conflict);\n }\n else {\n if (conflict) {\n const kd = conflict(key, _node.key, data, _node.data);\n if (kd.key) {\n _node.key = kd.key;\n }\n if (kd.data) {\n _node.data = kd.data;\n } else {\n _node.data = data;\n }\n }\n else {\n _node.data = data;\n }\n }\n if (this.isRed(_node.right) && (!this.isRed(_node.left))) {\n _node = this.rotateLeft(_node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.left) && this.isRed(_node.left!.left)) {\n _node = this.rotateRight(_node);\n }\n if (this.isRed(_node.left) && this.isRed(_node.right)) {\n this.flipColors(_node);\n }\n _node.size = this.nodeSize(_node.left) + this.nodeSize(_node.right) + 1;\n if (this.aug) {\n this.updateLocal(_node);\n }\n return _node;\n }\n }\n\n private updateLocal(node: RBNode<TKey, TData>) {\n if (this.aug) {\n if (this.isRed(node.left)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.aug.update(node.left!);\n }\n if (this.isRed(node.right)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.aug.update(node.right!);\n }\n this.aug.update(node);\n }\n }\n\n private nodeRemoveMin(node: RBNode<TKey, TData>) {\n let _node = node;\n if (_node.left) {\n if ((!this.isRed(_node.left)) && (!this.isRed(_node.left.left))) {\n _node = this.moveRedLeft(_node);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.left = this.nodeRemoveMin(_node.left!);\n return this.balance(_node);\n }\n }\n\n public remove(key: TKey) {\n if (key !== undefined) {\n if (!this.contains(key)) {\n return;\n }\n\n this.removeExisting(key);\n }\n // TODO: error on undefined key\n }\n\n public removeExisting(key: TKey) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(this.root!.left)) && (!this.isRed(this.root!.right))) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.root!.color = RBColor.RED;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.root = this.nodeRemove(this.root!, key);\n }\n\n private nodeRemove(node: RBNode<TKey, TData>, key: TKey) {\n let _node = node;\n if (this.compareKeys(key, _node.key) < 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(_node.left)) && (!this.isRed(_node.left!.left))) {\n _node = this.moveRedLeft(_node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.left = this.nodeRemove(_node.left!, key);\n }\n else {\n if (this.isRed(_node.left)) {\n _node = this.rotateRight(_node);\n }\n if ((this.compareKeys(key, _node.key) == 0) && (!_node.right)) {\n return undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if ((!this.isRed(_node.right)) && (!this.isRed(_node.right!.left))) {\n _node = this.moveRedRight(_node);\n }\n if (this.compareKeys(key, _node.key) == 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const subtreeMin = this.nodeMin(_node.right!);\n _node.key = subtreeMin.key;\n _node.data = subtreeMin.data;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.nodeRemoveMin(_node.right!);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.nodeRemove(_node.right!, key);\n }\n }\n return this.balance(_node);\n }\n private height() {\n return this.nodeHeight(this.root);\n }\n private nodeHeight(node: RBNode<TKey, TData> | undefined): number {\n if (node === undefined) {\n return -1;\n }\n else {\n return 1 + Math.max(this.nodeHeight(node.left), this.nodeHeight(node.right));\n }\n }\n\n public floor(key: TKey) {\n if (!this.isEmpty()) {\n return this.nodeFloor(this.root, key);\n }\n }\n\n private nodeFloor(node: RBNode<TKey, TData> | undefined, key: TKey): RBNode<TKey, TData> | undefined {\n if (node) {\n const cmp = this.compareKeys(key, node.key);\n if (cmp == 0) {\n return node;\n }\n else if (cmp < 0) {\n return this.nodeFloor(node.left, key);\n }\n else {\n const rightFloor = this.nodeFloor(node.right, key);\n if (rightFloor) {\n return rightFloor;\n }\n else {\n return node;\n }\n }\n }\n }\n\n public ceil(key: TKey) {\n if (!this.isEmpty()) {\n return this.nodeCeil(this.root, key);\n }\n }\n\n private nodeCeil(node: RBNode<TKey, TData> | undefined, key: TKey): RBNode<TKey, TData> | undefined {\n if (node) {\n const cmp = this.compareKeys(key, node.key);\n if (cmp == 0) {\n return node;\n }\n else if (cmp > 0) {\n return this.nodeCeil(node.right, key);\n }\n else {\n const leftCeil = this.nodeCeil(node.left, key);\n if (leftCeil) {\n return leftCeil;\n }\n else {\n return node;\n }\n }\n }\n }\n\n public min() {\n if (this.root) {\n return this.nodeMin(this.root);\n }\n }\n\n private nodeMin(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n if (!node.left) {\n return node;\n }\n else {\n return this.nodeMin(node.left);\n }\n }\n\n public max() {\n if (this.root) {\n return this.nodeMax(this.root);\n }\n }\n\n private nodeMax(node: RBNode<TKey, TData>): RBNode<TKey, TData> {\n if (!node.right) {\n return node;\n }\n else {\n return this.nodeMax(node.right);\n }\n }\n\n private rotateRight(node: RBNode<TKey, TData>) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const leftChild = node.left!;\n node.left = leftChild.right;\n leftChild.right = node;\n leftChild.color = leftChild.right.color;\n leftChild.right.color = RBColor.RED;\n leftChild.size = node.size;\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.updateLocal(node);\n this.updateLocal(leftChild);\n }\n return leftChild;\n }\n\n private rotateLeft(node: RBNode<TKey, TData>) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const rightChild = node.right!;\n node.right = rightChild.left;\n rightChild.left = node;\n rightChild.color = rightChild.left.color;\n rightChild.left.color = RBColor.RED;\n rightChild.size = node.size;\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.updateLocal(node);\n this.updateLocal(rightChild);\n }\n return rightChild;\n }\n\n private oppositeColor(c: RBColor) {\n return (c == RBColor.BLACK) ? RBColor.RED : RBColor.BLACK;\n }\n\n private flipColors(node: RBNode<TKey, TData>) {\n node.color = this.oppositeColor(node.color);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n node.left!.color = this.oppositeColor(node.left!.color);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n node.right!.color = this.oppositeColor(node.right!.color);\n }\n\n private moveRedLeft(node: RBNode<TKey, TData>) {\n let _node = node;\n this.flipColors(_node);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.right!.left)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _node.right = this.rotateRight(_node.right!);\n _node = this.rotateLeft(_node);\n this.flipColors(_node);\n }\n return _node;\n }\n\n private moveRedRight(node: RBNode<TKey, TData>) {\n let _node = node;\n this.flipColors(_node);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(_node.left!.left)) {\n _node = this.rotateRight(_node);\n this.flipColors(_node);\n }\n return _node;\n }\n\n private balance(input: RBNode<TKey, TData>) {\n let node: RBNode<TKey, TData> | undefined = input;\n if (this.isRed(node.right)) {\n node = this.rotateLeft(node);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.isRed(node.left) && this.isRed(node.left!.left)) {\n node = this.rotateRight(node);\n }\n if (this.isRed(node.left) && (this.isRed(node.right))) {\n this.flipColors(node);\n }\n node.size = this.nodeSize(node.left) + this.nodeSize(node.right) + 1;\n if (this.aug) {\n this.aug.update(node);\n }\n return node;\n }\n\n public mapRange<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum, start?: TKey, end?: TKey) {\n this.nodeMap(this.root, action, start, end);\n }\n\n public map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum) {\n // TODO: optimize to avoid comparisons\n this.nodeMap(this.root, action, accum);\n }\n\n public keys() {\n const keyList = <TKey[]>[];\n const actions = <RBNodeActions<TKey, TData>>{\n showStructure: true,\n infix: (node) => {\n keyList.push(node.key);\n return true;\n },\n };\n this.walk(actions);\n return keyList;\n }\n\n /**\n * Depth-first traversal with custom action; if action returns\n * false, traversal is halted.\n * @param action - action to apply to each node\n */\n public walk(actions: RBNodeActions<TKey, TData>) {\n this.nodeWalk(this.root, actions);\n }\n\n public walkBackward(actions: RBNodeActions<TKey, TData>) {\n this.nodeWalkBackward(this.root, actions);\n }\n\n private nodeWalk(node: RBNode<TKey, TData> | undefined, actions: RBNodeActions<TKey, TData>): boolean {\n let go = true;\n if (node) {\n if (actions.pre) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.pre(node);\n }\n }\n if (node.left) {\n go = this.nodeWalk(node.left, actions);\n }\n if (go && actions.infix) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.infix(node);\n }\n }\n if (go) {\n go = this.nodeWalk(node.right, actions);\n }\n if (go && actions.post) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.post(node);\n }\n }\n }\n return go;\n }\n\n private nodeWalkBackward(node: RBNode<TKey, TData> | undefined, actions: RBNodeActions<TKey, TData>): boolean {\n let go = true;\n if (node) {\n if (actions.pre) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.pre(node);\n }\n }\n if (node.right) {\n go = this.nodeWalkBackward(node.right, actions);\n }\n if (go && actions.infix) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.infix(node);\n }\n }\n if (go) {\n go = this.nodeWalkBackward(node.left, actions);\n }\n if (go && actions.post) {\n if (actions.showStructure || (node.color === RBColor.BLACK)) {\n go = actions.post(node);\n }\n }\n }\n return go;\n }\n\n private nodeMap<TAccum>(\n node: RBNode<TKey, TData> | undefined,\n action: PropertyAction<TKey, TData>,\n accum?: TAccum,\n start?: TKey,\n end?: TKey,\n ): boolean {\n let _start = start;\n let _end = end;\n if (!node) {\n return true;\n }\n if (_start === undefined) {\n _start = this.nodeMin(node).key;\n }\n if (_end === undefined) {\n _end = this.nodeMax(node).key;\n }\n const cmpStart = this.compareKeys(_start, node.key);\n const cmpEnd = this.compareKeys(_end, node.key);\n let go = true;\n if (cmpStart < 0) {\n go = this.nodeMap(node.left, action, accum, _start, _end);\n }\n if (go && (cmpStart <= 0) && (cmpEnd >= 0)) {\n // REVIEW: test for black node here\n go = action(node, accum);\n }\n if (go && (cmpEnd > 0)) {\n go = this.nodeMap(node.right, action, accum, _start, _end);\n }\n return go;\n }\n public diag() {\n console.log(`Height is ${this.height()}`);\n }\n}\n\nexport interface AugmentedIntervalNode {\n minmax: IInterval;\n}\n\nexport const integerRangeToString = (range: IIntegerRange) => `[${range.start},${range.end})`;\n\nexport interface IInterval {\n clone(): IInterval;\n compare(b: IInterval): number;\n compareStart(b: IInterval): number;\n compareEnd(b: IInterval): number;\n modify(label: string, start: number, end: number): IInterval | undefined;\n overlaps(b: IInterval): boolean;\n union(b: IInterval): IInterval;\n}\n\nconst intervalComparer = (a: IInterval, b: IInterval) => a.compare(b);\nexport type IntervalNode<T extends IInterval> = RBNode<T, AugmentedIntervalNode>;\nexport type IntervalConflictResolver<TInterval> = (a: TInterval, b: TInterval) => TInterval;\n\nexport class IntervalTree<T extends IInterval> implements IRBAugmentation<T, AugmentedIntervalNode>,\n IRBMatcher<T, AugmentedIntervalNode> {\n public intervals = new RedBlackTree<T, AugmentedIntervalNode>(intervalComparer, this);\n\n public remove(x: T) {\n this.intervals.remove(x);\n }\n\n public removeExisting(x: T) {\n this.intervals.removeExisting(x);\n }\n\n public put(x: T, conflict?: IntervalConflictResolver<T>) {\n let rbConflict: ConflictAction<T, AugmentedIntervalNode> | undefined;\n if (conflict) {\n rbConflict = (key: T, currentKey: T) => {\n const ival = conflict(key, currentKey);\n return {\n key: ival,\n };\n };\n }\n this.intervals.put(x, { minmax: x.clone() }, rbConflict);\n }\n\n public map(fn: (x: T) => void) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n fn(node.key);\n return true;\n },\n showStructure: true,\n };\n this.intervals.walk(actions);\n }\n\n public mapUntil(fn: (X: T) => boolean) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n return fn(node.key);\n },\n showStructure: true,\n };\n this.intervals.walk(actions);\n }\n\n public mapBackward(fn: (x: T) => void) {\n const actions = <RBNodeActions<T, AugmentedIntervalNode>>{\n infix: (node) => {\n fn(node.key);\n return true;\n },\n showStructure: true,\n };\n this.intervals.walkBackward(actions);\n }\n\n // TODO: toString()\n public match(x: T) {\n return this.intervals.gather(x, this);\n }\n\n public matchNode(node: IntervalNode<T> | undefined, key: T) {\n return !!node && node.key.overlaps(key);\n }\n\n public continueSubtree(node: IntervalNode<T> | undefined, key: T) {\n return !!node && node.data.minmax.overlaps(key);\n }\n\n public update(node: IntervalNode<T>) {\n if (node.left && node.right) {\n node.data.minmax = node.key.union(\n node.left.data.minmax.union(node.right.data.minmax));\n } else {\n if (node.left) {\n node.data.minmax = node.key.union(node.left.data.minmax);\n } else if (node.right) {\n node.data.minmax = node.key.union(node.right.data.minmax);\n } else {\n node.data.minmax = node.key.clone();\n }\n }\n }\n}\n\nexport interface TSTResult<T> {\n key: string;\n val: T;\n}\n\nexport interface TSTNode<T> {\n c: string;\n left?: TSTNode<T>;\n mid?: TSTNode<T>;\n right?: TSTNode<T>;\n val?: T;\n}\n\ninterface TSTPrefix {\n text: string;\n}\n\nexport interface ProxString<T> {\n text: string;\n invDistance: number;\n val: T;\n}\n\nexport class TST<T> {\n private n = 0;\n private root: TSTNode<T> | undefined;\n\n public size() {\n return this.n;\n }\n\n private contains(key: string) {\n return this.get(key);\n }\n\n public get(key: string) {\n const x = this.nodeGet(this.root, key, 0);\n if (x === undefined) {\n return undefined;\n }\n return x.val;\n }\n\n private nodeGet(x: TSTNode<T> | undefined, key: string, d: number): TSTNode<T> | undefined {\n if (x === undefined) {\n return undefined;\n }\n const c = key.charAt(d);\n if (c < x.c) {\n return this.nodeGet(x.left, key, d);\n }\n else if (c > x.c) {\n return this.nodeGet(x.right, key, d);\n }\n else if (d < (key.length - 1)) {\n return this.nodeGet(x.mid, key, d + 1);\n }\n else { return x; }\n }\n\n public put(key: string, val: T) {\n if (!this.contains(key)) {\n this.n++;\n }\n this.root = this.nodePut(this.root, key, val, 0);\n // console.log(`put ${key}`);\n }\n\n private nodePut(x: TSTNode<T> | undefined, key: string, val: T, d: number) {\n let _x = x;\n const c = key.charAt(d);\n if (_x === undefined) {\n _x = { c };\n }\n if (c < _x.c) {\n _x.left = this.nodePut(_x.left, key, val, d);\n }\n else if (c > _x.c) {\n _x.right = this.nodePut(_x.right, key, val, d);\n }\n else if (d < (key.length - 1)) {\n _x.mid = this.nodePut(_x.mid, key, val, d + 1);\n }\n else {\n _x.val = val;\n }\n return _x;\n }\n\n public neighbors(text: string, distance = 2) {\n let q = <ProxString<T>[]>[];\n this.nodeProximity(this.root, { text: \"\" }, 0, text, distance, q);\n q = q.filter((value) => (value.text.length > 0));\n return q;\n }\n\n public keysWithPrefix(text: string) {\n const q = <string[]>[];\n const x = this.nodeGet(this.root, text, 0);\n if (x === undefined) {\n return q;\n }\n if (x.val !== undefined) {\n q.push(text);\n }\n this.collect(x.mid, { text }, q);\n return q;\n }\n\n private collect(x: TSTNode<T> | undefined, prefix: TSTPrefix, q: string[]) {\n if (x === undefined) {\n return;\n }\n this.collect(x.left, prefix, q);\n if (x.val !== undefined) {\n q.push(prefix.text + x.c);\n }\n this.collect(x.mid, { text: prefix.text + x.c }, q);\n this.collect(x.right, prefix, q);\n }\n\n private mapNode(x: TSTNode<T> | undefined, prefix: TSTPrefix, fn: (key: string, val: T) => void) {\n if (x === undefined) {\n return;\n }\n const key = prefix.text + x.c;\n this.mapNode(x.left, prefix, fn);\n if (x.val) {\n fn(key, x.val);\n }\n this.mapNode(x.mid, { text: key }, fn);\n this.mapNode(x.right, prefix, fn);\n }\n\n public map(fn: (key: string, val: T) => void) {\n this.mapNode(this.root, { text: \"\" }, fn);\n }\n\n public pairsWithPrefix(text: string) {\n const q = <TSTResult<T>[]>[];\n const x = this.nodeGet(this.root, text, 0);\n if (x === undefined) {\n return q;\n }\n if (x.val !== undefined) {\n q.push({ key: text, val: x.val });\n }\n this.collectPairs(x.mid, { text }, q);\n return q;\n }\n\n private collectPairs(x: TSTNode<T> | undefined, prefix: TSTPrefix, q: TSTResult<T>[]) {\n if (x === undefined) {\n return;\n }\n this.collectPairs(x.left, prefix, q);\n if (x.val !== undefined) {\n q.push({ key: prefix.text + x.c, val: x.val });\n }\n this.collectPairs(x.mid, { text: prefix.text + x.c }, q);\n this.collectPairs(x.right, prefix, q);\n }\n\n private nodeProximity(\n x: TSTNode<T> | undefined,\n prefix: TSTPrefix,\n d: number,\n pattern: string,\n distance: number,\n q: ProxString<T>[]) {\n if ((x === undefined) || (distance < 0)) {\n return;\n }\n const c = pattern.charAt(d);\n if ((distance > 0) || (c < x.c)) {\n this.nodeProximity(x.left, prefix, d, pattern, distance, q);\n }\n if (x.val !== undefined) {\n const remD = distance - (pattern.length - d);\n if (remD >= 0) {\n let invD = distance;\n if (c !== x.c) {\n invD--;\n }\n q.push({ text: prefix.text + x.c, val: x.val, invDistance: invD });\n }\n }\n const recurD = (d < (pattern.length - 1)) ? d + 1 : d;\n if (c === x.c) {\n this.nodeProximity(x.mid, { text: prefix.text + x.c }, recurD, pattern, distance, q);\n }\n else {\n this.nodeProximity(x.mid, { text: prefix.text + x.c }, recurD, pattern, distance - 1, q);\n }\n if ((distance > 0) || (c > x.c)) {\n this.nodeProximity(x.right, prefix, d, pattern, distance, q);\n }\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -2,22 +2,21 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- export * from "./mergeTree";
6
- export * from "./ops";
7
- export * from "./properties";
8
- export * from "./snapshotlegacy";
9
- export * from "./collections";
10
5
  export * from "./base";
11
- export { loadSegments } from "./text";
12
6
  export * from "./client";
13
- export * from "./segmentGroupCollection";
7
+ export * from "./collections";
8
+ export * from "./constants";
9
+ export * from "./localReference";
10
+ export * from "./mergeTree";
14
11
  export * from "./mergeTreeDeltaCallback";
15
- export * from "./opBuilder";
16
12
  export * from "./mergeTreeTracking";
13
+ export * from "./opBuilder";
14
+ export * from "./ops";
15
+ export * from "./properties";
16
+ export * from "./segmentGroupCollection";
17
17
  export * from "./segmentPropertiesManager";
18
+ export * from "./snapshotlegacy";
18
19
  export * from "./sortedSegmentSet";
20
+ export { loadSegments } from "./text";
19
21
  export * from "./textSegment";
20
- export * from "./localReference";
21
- export * from "./snapshotLoader";
22
- export * from "./constants";
23
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,cAAc,UAAU,CAAC;AACzB,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -15,23 +15,22 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.loadSegments = void 0;
18
- __exportStar(require("./mergeTree"), exports);
19
- __exportStar(require("./ops"), exports);
20
- __exportStar(require("./properties"), exports);
21
- __exportStar(require("./snapshotlegacy"), exports);
22
- __exportStar(require("./collections"), exports);
23
18
  __exportStar(require("./base"), exports);
24
- var text_1 = require("./text");
25
- Object.defineProperty(exports, "loadSegments", { enumerable: true, get: function () { return text_1.loadSegments; } });
26
19
  __exportStar(require("./client"), exports);
27
- __exportStar(require("./segmentGroupCollection"), exports);
20
+ __exportStar(require("./collections"), exports);
21
+ __exportStar(require("./constants"), exports);
22
+ __exportStar(require("./localReference"), exports);
23
+ __exportStar(require("./mergeTree"), exports);
28
24
  __exportStar(require("./mergeTreeDeltaCallback"), exports);
29
- __exportStar(require("./opBuilder"), exports);
30
25
  __exportStar(require("./mergeTreeTracking"), exports);
26
+ __exportStar(require("./opBuilder"), exports);
27
+ __exportStar(require("./ops"), exports);
28
+ __exportStar(require("./properties"), exports);
29
+ __exportStar(require("./segmentGroupCollection"), exports);
31
30
  __exportStar(require("./segmentPropertiesManager"), exports);
31
+ __exportStar(require("./snapshotlegacy"), exports);
32
32
  __exportStar(require("./sortedSegmentSet"), exports);
33
+ var text_1 = require("./text");
34
+ Object.defineProperty(exports, "loadSegments", { enumerable: true, get: function () { return text_1.loadSegments; } });
33
35
  __exportStar(require("./textSegment"), exports);
34
- __exportStar(require("./localReference"), exports);
35
- __exportStar(require("./snapshotLoader"), exports);
36
- __exportStar(require("./constants"), exports);
37
36
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;AAEH,8CAA4B;AAC5B,wCAAsB;AACtB,+CAA6B;AAC7B,mDAAiC;AACjC,gDAA8B;AAC9B,yCAAuB;AACvB,+BAAsC;AAA7B,oGAAA,YAAY,OAAA;AACrB,2CAAyB;AACzB,2DAAyC;AACzC,2DAAyC;AACzC,8CAA4B;AAC5B,sDAAoC;AACpC,6DAA2C;AAC3C,qDAAmC;AACnC,gDAA8B;AAC9B,mDAAiC;AACjC,mDAAiC;AACjC,8CAA4B","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport * from \"./mergeTree\";\nexport * from \"./ops\";\nexport * from \"./properties\";\nexport * from \"./snapshotlegacy\";\nexport * from \"./collections\";\nexport * from \"./base\";\nexport { loadSegments } from \"./text\";\nexport * from \"./client\";\nexport * from \"./segmentGroupCollection\";\nexport * from \"./mergeTreeDeltaCallback\";\nexport * from \"./opBuilder\";\nexport * from \"./mergeTreeTracking\";\nexport * from \"./segmentPropertiesManager\";\nexport * from \"./sortedSegmentSet\";\nexport * from \"./textSegment\";\nexport * from \"./localReference\";\nexport * from \"./snapshotLoader\";\nexport * from \"./constants\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;AAEH,yCAAuB;AACvB,2CAAyB;AACzB,gDAA8B;AAC9B,8CAA4B;AAC5B,mDAAiC;AACjC,8CAA4B;AAC5B,2DAAyC;AACzC,sDAAoC;AACpC,8CAA4B;AAC5B,wCAAsB;AACtB,+CAA6B;AAC7B,2DAAyC;AACzC,6DAA2C;AAC3C,mDAAiC;AACjC,qDAAmC;AACnC,+BAAsC;AAA7B,oGAAA,YAAY,OAAA;AACrB,gDAA8B","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport * from \"./base\";\nexport * from \"./client\";\nexport * from \"./collections\";\nexport * from \"./constants\";\nexport * from \"./localReference\";\nexport * from \"./mergeTree\";\nexport * from \"./mergeTreeDeltaCallback\";\nexport * from \"./mergeTreeTracking\";\nexport * from \"./opBuilder\";\nexport * from \"./ops\";\nexport * from \"./properties\";\nexport * from \"./segmentGroupCollection\";\nexport * from \"./segmentPropertiesManager\";\nexport * from \"./snapshotlegacy\";\nexport * from \"./sortedSegmentSet\";\nexport { loadSegments } from \"./text\";\nexport * from \"./textSegment\";\n"]}
@@ -32,7 +32,7 @@ export declare class LocalReference implements ReferencePosition {
32
32
  getOffset(): number;
33
33
  getProperties(): PropertySet | undefined;
34
34
  }
35
- interface IRefsAtOffest {
35
+ interface IRefsAtOffset {
36
36
  before?: LocalReference[];
37
37
  at?: LocalReference[];
38
38
  after?: LocalReference[];
@@ -43,7 +43,7 @@ export declare class LocalReferenceCollection {
43
43
  hierRefCount: number;
44
44
  private readonly refsByOffset;
45
45
  private refCount;
46
- constructor(segment: ISegment, initialRefsByfOffset?: (IRefsAtOffest | undefined)[]);
46
+ constructor(segment: ISegment, initialRefsByfOffset?: (IRefsAtOffset | undefined)[]);
47
47
  [Symbol.iterator](): {
48
48
  next(): IteratorResult<LocalReference>;
49
49
  [Symbol.iterator](): any;
@@ -1 +1 @@
1
- {"version":3,"file":"localReference.d.ts","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EACH,QAAQ,EACR,iBAAiB,EAKpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAiB,WAAW,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,cAAe,YAAW,iBAAiB;IAQhD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEhB,MAAM;IACN,OAAO;IAVlB,gBAAuB,gBAAgB,EAAE,MAAM,CAAM;IAE9C,UAAU,EAAE,WAAW,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC;gBAGhB,MAAM,EAAE,MAAM,EAC/B,WAAW,EAAE,QAAQ,EACd,MAAM,SAAI,EACV,OAAO,gBAAuB;IAKlC,GAAG,CAAC,CAAC,EAAE,cAAc;IAQrB,GAAG,CAAC,CAAC,EAAE,cAAc;IAQrB,OAAO,CAAC,CAAC,EAAE,cAAc;IAczB,UAAU;IAQV,aAAa;IAIb,cAAc;IAId,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIpC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIrC,aAAa,IAAI,MAAM,EAAE,GAAG,SAAS;IAIrC,cAAc,IAAI,MAAM,EAAE,GAAG,SAAS;IAItC,MAAM;IAIN,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,YAAY;IAItD,SAAS;IAIT,UAAU;IAIV,SAAS;IAQT,aAAa;CAGvB;AAED,UAAU,aAAa;IACnB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,qBAAa,wBAAwB;IAe7B,OAAO,CAAC,QAAQ,CAAC,OAAO;WAdd,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ;IAS5C,YAAY,EAAE,MAAM,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAa;gBAGR,OAAO,EAAE,QAAQ,EAClC,oBAAoB,gCAA6D;IAO9E,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAiBR,eAAe,cAAc,CAAC;;;IAmBvC,KAAK;IAuBZ,IAAW,KAAK,YAEf;IAEM,WAAW,CAAC,IAAI,EAAE,cAAc;IAiBhC,cAAc,CAAC,IAAI,EAAE,cAAc;IAiC1C;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,EAAE,wBAAwB;IAetC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAqBxC,mBAAmB,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE;IA8BvD,kBAAkB,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE;CA8BhE"}
1
+ {"version":3,"file":"localReference.d.ts","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EACH,QAAQ,EACR,iBAAiB,EAKpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAiB,WAAW,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,cAAe,YAAW,iBAAiB;IAQhD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEhB,MAAM;IACN,OAAO;IAVlB,gBAAuB,gBAAgB,EAAE,MAAM,CAAM;IAE9C,UAAU,EAAE,WAAW,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC;gBAGhB,MAAM,EAAE,MAAM,EAC/B,WAAW,EAAE,QAAQ,EACd,MAAM,SAAI,EACV,OAAO,gBAAuB;IAKlC,GAAG,CAAC,CAAC,EAAE,cAAc;IAQrB,GAAG,CAAC,CAAC,EAAE,cAAc;IAQrB,OAAO,CAAC,CAAC,EAAE,cAAc;IAczB,UAAU;IAQV,aAAa;IAIb,cAAc;IAId,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIpC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIrC,aAAa,IAAI,MAAM,EAAE,GAAG,SAAS;IAIrC,cAAc,IAAI,MAAM,EAAE,GAAG,SAAS;IAItC,MAAM;IAIN,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,YAAY;IAItD,SAAS;IAIT,UAAU;IAIV,SAAS;IAOT,aAAa;CAGvB;AAED,UAAU,aAAa;IACnB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,qBAAa,wBAAwB;IAe7B,OAAO,CAAC,QAAQ,CAAC,OAAO;WAdd,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ;IAS5C,YAAY,EAAE,MAAM,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAa;gBAGR,OAAO,EAAE,QAAQ,EAClC,oBAAoB,gCAA6D;IAO9E,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAiBR,eAAe,cAAc,CAAC;;;IAmBvC,KAAK;IAuBZ,IAAW,KAAK,YAEf;IAEM,WAAW,CAAC,IAAI,EAAE,cAAc;IAiBhC,cAAc,CAAC,IAAI,EAAE,cAAc;IAiC1C;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,EAAE,wBAAwB;IAetC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAqBxC,mBAAmB,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE;IA8BvD,kBAAkB,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE;CA8BhE"}
@@ -86,7 +86,6 @@ class LocalReference {
86
86
  }
87
87
  getOffset() {
88
88
  var _a;
89
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
90
89
  if ((_a = this.segment) === null || _a === void 0 ? void 0 : _a.removedSeq) {
91
90
  return 0;
92
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"localReference.js","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Client } from \"./client\";\nimport {\n ISegment,\n ReferencePosition,\n refGetRangeLabels,\n refGetTileLabels,\n refHasRangeLabel,\n refHasTileLabel,\n} from \"./mergeTree\";\nimport { ICombiningOp, ReferenceType } from \"./ops\";\nimport { addProperties, PropertySet } from \"./properties\";\n\nexport class LocalReference implements ReferencePosition {\n public static readonly DetachedPosition: number = -1;\n\n public properties: PropertySet | undefined;\n public pairedRef?: LocalReference;\n public segment: ISegment | undefined;\n\n constructor(\n private readonly client: Client,\n initSegment: ISegment,\n public offset = 0,\n public refType = ReferenceType.Simple,\n ) {\n this.segment = initSegment;\n }\n\n public min(b: LocalReference) {\n if (this.compare(b) < 0) {\n return this;\n } else {\n return b;\n }\n }\n\n public max(b: LocalReference) {\n if (this.compare(b) > 0) {\n return this;\n } else {\n return b;\n }\n }\n\n public compare(b: LocalReference) {\n if (this.segment === b.segment) {\n return this.offset - b.offset;\n } else {\n if (this.segment === undefined\n || (b.segment !== undefined &&\n this.segment.ordinal < b.segment.ordinal)) {\n return -1;\n } else {\n return 1;\n }\n }\n }\n\n public toPosition() {\n if (this.segment && this.segment.parent) {\n return this.getOffset() + this.client.getPosition(this.segment);\n } else {\n return LocalReference.DetachedPosition;\n }\n }\n\n public hasTileLabels() {\n return !!this.getTileLabels();\n }\n\n public hasRangeLabels() {\n return !!this.getRangeLabels();\n }\n\n public hasTileLabel(label: string): boolean {\n return refHasTileLabel(this, label);\n }\n\n public hasRangeLabel(label: string): boolean {\n return refHasRangeLabel(this, label);\n }\n\n public getTileLabels(): string[] | undefined {\n return refGetTileLabels(this);\n }\n\n public getRangeLabels(): string[] | undefined {\n return refGetRangeLabels(this);\n }\n\n public isLeaf() {\n return false;\n }\n\n public addProperties(newProps: PropertySet, op?: ICombiningOp) {\n this.properties = addProperties(this.properties, newProps, op);\n }\n\n public getClient() {\n return this.client;\n }\n\n public getSegment() {\n return this.segment;\n }\n\n public getOffset() {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (this.segment?.removedSeq) {\n return 0;\n }\n return this.offset;\n }\n\n public getProperties() {\n return this.properties;\n }\n}\n\ninterface IRefsAtOffest {\n before?: LocalReference[];\n at?: LocalReference[];\n after?: LocalReference[];\n}\n\nexport class LocalReferenceCollection {\n public static append(seg1: ISegment, seg2: ISegment) {\n if (seg2.localRefs && !seg2.localRefs.empty) {\n if (!seg1.localRefs) {\n seg1.localRefs = new LocalReferenceCollection(seg1);\n }\n seg1.localRefs.append(seg2.localRefs);\n }\n }\n\n public hierRefCount: number = 0;\n private readonly refsByOffset: (IRefsAtOffest | undefined)[];\n private refCount: number = 0;\n\n constructor(\n private readonly segment: ISegment,\n initialRefsByfOffset = new Array<IRefsAtOffest | undefined>(segment.cachedLength)) {\n // Since javascript arrays are sparse the above won't populate any of the\n // indicies, but it will ensure the length property of the array matches\n // the length of the segment.\n this.refsByOffset = initialRefsByfOffset;\n }\n\n public [Symbol.iterator]() {\n const subiterators: IterableIterator<LocalReference>[] = [];\n for (const refs of this.refsByOffset) {\n if (refs) {\n if (refs.before) {\n subiterators.push(refs.before[Symbol.iterator]());\n }\n if (refs.at) {\n subiterators.push(refs.at[Symbol.iterator]());\n }\n if (refs.after) {\n subiterators.push(refs.after[Symbol.iterator]());\n }\n }\n }\n\n const iterator = {\n next(): IteratorResult<LocalReference> {\n while (subiterators.length > 0) {\n const next = subiterators[0].next();\n if (next.done === true) {\n subiterators.shift();\n } else {\n return next;\n }\n }\n\n return { value: undefined, done: true };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n }\n\n public clear() {\n this.refCount = 0;\n this.hierRefCount = 0;\n const detachSegments = (refs: LocalReference[] | undefined) => {\n if (refs) {\n refs.forEach((r) => {\n if (r.segment === this.segment) {\n r.segment = undefined;\n }\n });\n }\n };\n for (let i = 0; i < this.refsByOffset.length; i++) {\n const refsAtOffset = this.refsByOffset[i];\n if (refsAtOffset) {\n detachSegments(refsAtOffset.before);\n detachSegments(refsAtOffset.at);\n detachSegments(refsAtOffset.before);\n this.refsByOffset[i] = undefined;\n }\n }\n }\n\n public get empty() {\n return this.refCount === 0;\n }\n\n public addLocalRef(lref: LocalReference) {\n const refsAtOffset = this.refsByOffset[lref.offset];\n if (refsAtOffset === undefined) {\n this.refsByOffset[lref.offset] = {\n at: [lref],\n };\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n refsAtOffset.at!.push(lref);\n }\n\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n }\n\n public removeLocalRef(lref: LocalReference) {\n const tryRemoveRef = (refs: LocalReference[] | undefined) => {\n if (refs) {\n const index = refs.indexOf(lref);\n if (index >= 0) {\n refs.splice(index, 1);\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount--;\n }\n this.refCount--;\n return lref;\n }\n }\n };\n const refAtOffset = this.refsByOffset[lref.offset];\n if (refAtOffset !== undefined) {\n let ref = tryRemoveRef(refAtOffset.before);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.at);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.after);\n if (ref) {\n return ref;\n }\n }\n }\n\n /**\n * Called by 'append()' implementations to append local refs from the given 'other' segment to the\n * end of 'this' segment.\n *\n * Note: This method should be invoked after the caller has ensured that segments can be merged,\n * but before 'this' segment's cachedLength has changed, or the adjustment to the local refs\n * will be incorrect.\n */\n public append(other: LocalReferenceCollection) {\n if (!other || other.empty) {\n return;\n }\n this.hierRefCount += other.hierRefCount;\n this.refCount += other.refCount;\n other.hierRefCount = 0;\n for (const lref of other) {\n lref.segment = this.segment;\n lref.offset += this.refsByOffset.length;\n }\n\n this.refsByOffset.push(...other.refsByOffset);\n }\n\n public split(offset: number, splitSeg: ISegment) {\n if (!this.empty) {\n const localRefs =\n new LocalReferenceCollection(\n splitSeg,\n this.refsByOffset.splice(offset, this.refsByOffset.length - offset));\n\n splitSeg.localRefs = localRefs;\n for (const lref of localRefs) {\n lref.segment = splitSeg;\n lref.offset -= offset;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount--;\n localRefs.hierRefCount++;\n }\n this.refCount--;\n localRefs.refCount++;\n }\n }\n }\n\n public addBeforeTombstones(...refs: Iterable<LocalReference>[]) {\n const beforeRefs: LocalReference[] = [];\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n // eslint-disable-next-line no-bitwise\n if (lref.refType & ReferenceType.SlideOnRemove) {\n beforeRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = 0;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (beforeRefs.length > 0) {\n if (this.refsByOffset[0] === undefined) {\n this.refsByOffset[0] = { before: beforeRefs };\n } else if (this.refsByOffset[0].before === undefined) {\n this.refsByOffset[0].before = beforeRefs;\n } else {\n this.refsByOffset[0].before.unshift(...beforeRefs);\n }\n }\n }\n\n public addAfterTombstones(...refs: Iterable<LocalReference>[]) {\n const afterRefs: LocalReference[] = [];\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n // eslint-disable-next-line no-bitwise\n if (lref.refType & ReferenceType.SlideOnRemove) {\n afterRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = this.segment.cachedLength - 1;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (afterRefs.length > 0) {\n const refsAtOffset = this.refsByOffset[this.segment.cachedLength - 1];\n if (refsAtOffset === undefined) {\n this.refsByOffset[this.segment.cachedLength - 1] = { after: afterRefs };\n } else if (refsAtOffset.after === undefined) {\n refsAtOffset.after = afterRefs;\n } else {\n refsAtOffset.after.push(...afterRefs);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"localReference.js","sourceRoot":"","sources":["../src/localReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Client } from \"./client\";\nimport {\n ISegment,\n ReferencePosition,\n refGetRangeLabels,\n refGetTileLabels,\n refHasRangeLabel,\n refHasTileLabel,\n} from \"./mergeTree\";\nimport { ICombiningOp, ReferenceType } from \"./ops\";\nimport { addProperties, PropertySet } from \"./properties\";\n\nexport class LocalReference implements ReferencePosition {\n public static readonly DetachedPosition: number = -1;\n\n public properties: PropertySet | undefined;\n public pairedRef?: LocalReference;\n public segment: ISegment | undefined;\n\n constructor(\n private readonly client: Client,\n initSegment: ISegment,\n public offset = 0,\n public refType = ReferenceType.Simple,\n ) {\n this.segment = initSegment;\n }\n\n public min(b: LocalReference) {\n if (this.compare(b) < 0) {\n return this;\n } else {\n return b;\n }\n }\n\n public max(b: LocalReference) {\n if (this.compare(b) > 0) {\n return this;\n } else {\n return b;\n }\n }\n\n public compare(b: LocalReference) {\n if (this.segment === b.segment) {\n return this.offset - b.offset;\n } else {\n if (this.segment === undefined\n || (b.segment !== undefined &&\n this.segment.ordinal < b.segment.ordinal)) {\n return -1;\n } else {\n return 1;\n }\n }\n }\n\n public toPosition() {\n if (this.segment && this.segment.parent) {\n return this.getOffset() + this.client.getPosition(this.segment);\n } else {\n return LocalReference.DetachedPosition;\n }\n }\n\n public hasTileLabels() {\n return !!this.getTileLabels();\n }\n\n public hasRangeLabels() {\n return !!this.getRangeLabels();\n }\n\n public hasTileLabel(label: string): boolean {\n return refHasTileLabel(this, label);\n }\n\n public hasRangeLabel(label: string): boolean {\n return refHasRangeLabel(this, label);\n }\n\n public getTileLabels(): string[] | undefined {\n return refGetTileLabels(this);\n }\n\n public getRangeLabels(): string[] | undefined {\n return refGetRangeLabels(this);\n }\n\n public isLeaf() {\n return false;\n }\n\n public addProperties(newProps: PropertySet, op?: ICombiningOp) {\n this.properties = addProperties(this.properties, newProps, op);\n }\n\n public getClient() {\n return this.client;\n }\n\n public getSegment() {\n return this.segment;\n }\n\n public getOffset() {\n if (this.segment?.removedSeq) {\n return 0;\n }\n return this.offset;\n }\n\n public getProperties() {\n return this.properties;\n }\n}\n\ninterface IRefsAtOffset {\n before?: LocalReference[];\n at?: LocalReference[];\n after?: LocalReference[];\n}\n\nexport class LocalReferenceCollection {\n public static append(seg1: ISegment, seg2: ISegment) {\n if (seg2.localRefs && !seg2.localRefs.empty) {\n if (!seg1.localRefs) {\n seg1.localRefs = new LocalReferenceCollection(seg1);\n }\n seg1.localRefs.append(seg2.localRefs);\n }\n }\n\n public hierRefCount: number = 0;\n private readonly refsByOffset: (IRefsAtOffset | undefined)[];\n private refCount: number = 0;\n\n constructor(\n private readonly segment: ISegment,\n initialRefsByfOffset = new Array<IRefsAtOffset | undefined>(segment.cachedLength)) {\n // Since javascript arrays are sparse the above won't populate any of the\n // indicies, but it will ensure the length property of the array matches\n // the length of the segment.\n this.refsByOffset = initialRefsByfOffset;\n }\n\n public [Symbol.iterator]() {\n const subiterators: IterableIterator<LocalReference>[] = [];\n for (const refs of this.refsByOffset) {\n if (refs) {\n if (refs.before) {\n subiterators.push(refs.before[Symbol.iterator]());\n }\n if (refs.at) {\n subiterators.push(refs.at[Symbol.iterator]());\n }\n if (refs.after) {\n subiterators.push(refs.after[Symbol.iterator]());\n }\n }\n }\n\n const iterator = {\n next(): IteratorResult<LocalReference> {\n while (subiterators.length > 0) {\n const next = subiterators[0].next();\n if (next.done === true) {\n subiterators.shift();\n } else {\n return next;\n }\n }\n\n return { value: undefined, done: true };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n }\n\n public clear() {\n this.refCount = 0;\n this.hierRefCount = 0;\n const detachSegments = (refs: LocalReference[] | undefined) => {\n if (refs) {\n refs.forEach((r) => {\n if (r.segment === this.segment) {\n r.segment = undefined;\n }\n });\n }\n };\n for (let i = 0; i < this.refsByOffset.length; i++) {\n const refsAtOffset = this.refsByOffset[i];\n if (refsAtOffset) {\n detachSegments(refsAtOffset.before);\n detachSegments(refsAtOffset.at);\n detachSegments(refsAtOffset.before);\n this.refsByOffset[i] = undefined;\n }\n }\n }\n\n public get empty() {\n return this.refCount === 0;\n }\n\n public addLocalRef(lref: LocalReference) {\n const refsAtOffset = this.refsByOffset[lref.offset];\n if (refsAtOffset === undefined) {\n this.refsByOffset[lref.offset] = {\n at: [lref],\n };\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n refsAtOffset.at!.push(lref);\n }\n\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n }\n\n public removeLocalRef(lref: LocalReference) {\n const tryRemoveRef = (refs: LocalReference[] | undefined) => {\n if (refs) {\n const index = refs.indexOf(lref);\n if (index >= 0) {\n refs.splice(index, 1);\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount--;\n }\n this.refCount--;\n return lref;\n }\n }\n };\n const refAtOffset = this.refsByOffset[lref.offset];\n if (refAtOffset !== undefined) {\n let ref = tryRemoveRef(refAtOffset.before);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.at);\n if (ref) {\n return ref;\n }\n\n ref = tryRemoveRef(refAtOffset.after);\n if (ref) {\n return ref;\n }\n }\n }\n\n /**\n * Called by 'append()' implementations to append local refs from the given 'other' segment to the\n * end of 'this' segment.\n *\n * Note: This method should be invoked after the caller has ensured that segments can be merged,\n * but before 'this' segment's cachedLength has changed, or the adjustment to the local refs\n * will be incorrect.\n */\n public append(other: LocalReferenceCollection) {\n if (!other || other.empty) {\n return;\n }\n this.hierRefCount += other.hierRefCount;\n this.refCount += other.refCount;\n other.hierRefCount = 0;\n for (const lref of other) {\n lref.segment = this.segment;\n lref.offset += this.refsByOffset.length;\n }\n\n this.refsByOffset.push(...other.refsByOffset);\n }\n\n public split(offset: number, splitSeg: ISegment) {\n if (!this.empty) {\n const localRefs =\n new LocalReferenceCollection(\n splitSeg,\n this.refsByOffset.splice(offset, this.refsByOffset.length - offset));\n\n splitSeg.localRefs = localRefs;\n for (const lref of localRefs) {\n lref.segment = splitSeg;\n lref.offset -= offset;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount--;\n localRefs.hierRefCount++;\n }\n this.refCount--;\n localRefs.refCount++;\n }\n }\n }\n\n public addBeforeTombstones(...refs: Iterable<LocalReference>[]) {\n const beforeRefs: LocalReference[] = [];\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n // eslint-disable-next-line no-bitwise\n if (lref.refType & ReferenceType.SlideOnRemove) {\n beforeRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = 0;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (beforeRefs.length > 0) {\n if (this.refsByOffset[0] === undefined) {\n this.refsByOffset[0] = { before: beforeRefs };\n } else if (this.refsByOffset[0].before === undefined) {\n this.refsByOffset[0].before = beforeRefs;\n } else {\n this.refsByOffset[0].before.unshift(...beforeRefs);\n }\n }\n }\n\n public addAfterTombstones(...refs: Iterable<LocalReference>[]) {\n const afterRefs: LocalReference[] = [];\n\n for (const iterable of refs) {\n for (const lref of iterable) {\n // eslint-disable-next-line no-bitwise\n if (lref.refType & ReferenceType.SlideOnRemove) {\n afterRefs.push(lref);\n lref.segment = this.segment;\n lref.offset = this.segment.cachedLength - 1;\n if (lref.hasRangeLabels() || lref.hasTileLabels()) {\n this.hierRefCount++;\n }\n this.refCount++;\n } else {\n lref.segment = undefined;\n }\n }\n }\n if (afterRefs.length > 0) {\n const refsAtOffset = this.refsByOffset[this.segment.cachedLength - 1];\n if (refsAtOffset === undefined) {\n this.refsByOffset[this.segment.cachedLength - 1] = { after: afterRefs };\n } else if (refsAtOffset.after === undefined) {\n refsAtOffset.after = afterRefs;\n } else {\n refsAtOffset.after.push(...afterRefs);\n }\n }\n }\n}\n"]}