1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
/** * SPDX-FileCopyrightText: (C) 2005 Dominik Seichter * SPDX-FileCopyrightText: (C) 2020 Francesco Pretto * SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef PDF_PARSER_H #define PDF_PARSER_H #include "PdfDeclarations.h" #include "PdfParserObject.h" #include "PdfXRefEntry.h" #include "PdfIndirectObjectList.h" #include "PdfTokenizer.h" namespace PoDoFo { class PdfEncrypt; class PdfString; class PdfParserObject; /** * PdfParser reads a PDF file into memory. * The file can be modified in memory and written back using * the PdfWriter class. * Most PDF features are supported */ class PODOFO_API PdfParser { PODOFO_UNIT_TEST(PdfParserTest); friend class PdfDocument; friend class PdfWriter; public: /** Create a new PdfParser object * You have to open a PDF file using ParseFile later. * \param objects vector to write the parsed PdfObjects to * * \see ParseFile */ PdfParser(PdfIndirectObjectList& objects); /** Delete the PdfParser and all PdfObjects */ ~PdfParser(); /** Open a PDF file and parse it. * * \param device the input device to read from * \param loadOnDemand If true all objects will be read from the file at * the time they are accessed first. * If false all objects will be read immediately. * This is faster if you do not need the complete PDF * file in memory. * * * This might throw a PdfError( PdfErrorCode::InvalidPassword ) exception * if a password is required to read this PDF. * Call SetPassword() with the correct password in this case. * * \see SetPassword */ void Parse(InputStreamDevice& device, bool loadOnDemand = true); /** * \returns true if this PdfWriter creates an encrypted PDF file */ bool IsEncrypted() const; const PdfObject& GetTrailer() const; public: static unsigned GetMaxObjectCount(); static void SetMaxObjectCount(unsigned maxObjectCount); public: /** If you try to open an encrypted PDF file, which requires * a password to open, PoDoFo will throw a PdfError( PdfErrorCode::InvalidPassword ) * exception. * * If you got such an exception, you have to set a password * which should be used for opening the PDF. * * The usual way will be to ask the user for the password * and set the password using this method. * * PdfParser will immediately continue to read the PDF file. * * \param password a user or owner password which can be used to open an encrypted PDF file * If the password is invalid, a PdfError( PdfErrorCode::InvalidPassword ) exception is thrown! */ inline void SetPassword(const std::string_view& password) { m_Password = password; } inline const std::string& GetPassword() { return m_Password; } /** * Retrieve the number of incremental updates that * have been applied to the last parsed PDF file. * * 0 means no update has been applied. * * \returns the number of incremental updates to the parsed PDF. */ inline int GetNumberOfIncrementalUpdates() const { return m_IncrementalUpdateCount; } /** Get a reference to the sorted internal objects vector. * \returns the internal objects vector. */ inline const PdfIndirectObjectList* GetObjects() const { return m_Objects; } /** Get the file format version of the pdf * \returns the file format version as enum */ inline PdfVersion GetPdfVersion() const { return m_PdfVersion; } /** \returns true if this PdfParser loads all objects on demand at * the time they are accessed first. * The default is to load all object immediately. * In this case false is returned. */ inline bool GetLoadOnDemand() const { return m_LoadOnDemand; } /** \returns the length of the file */ inline size_t GetFileSize() const { return m_FileSize; } /** * \returns the parsers encryption object or nullptr if the read PDF file was not encrypted */ inline const PdfEncrypt* GetEncrypt() const { return m_Encrypt.get(); } /** * \returns true if strict parsing mode is enabled * * \see SetStringParsing */ inline bool IsStrictParsing() const { return m_StrictParsing; } /** * Enable/disable strict parsing mode. * Strict parsing is by default disabled. * * If you enable strict parsing, PoDoFo will fail * on a few more common PDF failures. Please note * that PoDoFo's parser is by default very strict * already and does not recover from e.g. wrong XREF * tables. * * \param strict new setting for strict parsing mode. */ inline void SetStrictParsing(bool strict) { m_StrictParsing = strict; } /** * \return if broken objects are ignored while parsing */ inline bool GetIgnoreBrokenObjects() const { return m_IgnoreBrokenObjects; } /** * Specify if the parser should ignore broken * objects, i.e. XRef entries that do not point * to valid objects. * * Default is to ignore broken objects and * to not throw an exception if one is found. * * \param bBroken if true broken objects will be ignored */ inline void SetIgnoreBrokenObjects(bool broken) { m_IgnoreBrokenObjects = broken; } inline size_t GetXRefOffset() const { return m_XRefOffset; } inline bool HasXRefStream() const { return m_HasXRefStream; } inline std::shared_ptr GetEncrypt() { return m_Encrypt; } private: /** Reads the xref sections and the trailers of the file * in the correct order in the memory */ void ReadDocumentStructure(InputStreamDevice& device); /** Reads the xref table from a pdf file. * If there is no xref table, ReadXRefStreamContents() is called. * \param offset read the table from this offset * \param positionAtEnd if true the xref table is not read, but the * file stream is positioned directly * after the table, which allows reading * a following trailer dictionary. */ void ReadXRefContents(InputStreamDevice& device, size_t offset, bool positionAtEnd = false); /** Read a xref subsection * * Throws PdfErrorCode::NoXref if the number of objects read was not * the number specified by the subsection header (as passed in * 'objectCount'). * * \param firstObject object number of the first object * \param objectCount how many objects should be read from this section */ void ReadXRefSubsection(InputStreamDevice& device, int64_t& firstObject, int64_t& objectCount); /** Reads an XRef stream contents object * \param offset read the stream from this offset * \param readOnlyTrailer only the trailer is skipped over, the contents * of the xref stream are not parsed */ void ReadXRefStreamContents(InputStreamDevice& device, size_t offset, bool readOnlyTrailer); /** Reads all objects from the pdf into memory * from the previously read entries * * If required an encryption object is setup first. * * The actual reading happens in ReadObjectsInternal() * either if no encryption is required or a correct * encryption object was initialized from SetPassword. */ void ReadObjects(InputStreamDevice& device); /** Checks the magic number at the start of the pdf file * and sets the m_PdfVersion member to the correct version * of the pdf file. * * \returns true if this is a pdf file, otherwise false */ bool IsPdfFile(InputStreamDevice& device); private: /** Searches backwards from the specified position of the file * and tries to find a token. * The current file is positioned right after the token. * * \param token a token to find * \param range range in bytes in which to search * beginning at the specified position of the file * \param searchEnd specifies position */ void findTokenBackward(InputStreamDevice& device, const char* token, size_t range, size_t searchEnd); /** Merge the information of this trailer object * in the parsers main trailer object. * \param trailer take the keys to merge from this dictionary. */ void mergeTrailer(const PdfObject& trailer); /** Looks for a startxref entry at the current file position * and saves its byteoffset to pXRefOffset. * \param xRefOffset store the byte offset of the xref section into this variable. */ void findXRef(InputStreamDevice& device, size_t* xRefOffset); /** Reads all objects from the pdf into memory * from the previously read entries * * Requires a correctly setup PdfEncrypt object * with correct password. * * This method is called from ReadObjects * or SetPassword. * * \see ReadObjects * \see SetPassword */ void readObjectsInternal(InputStreamDevice& device); /** Read the object with index from the object stream nObjNo * and push it on the objects vector * * All objects are read from this stream and the stream object * is free'd from memory. Further calls who try to read from the * same stream simply do nothing. * * \param objNo object number of the stream object * \param index index of the object which should be parsed * */ void readCompressedObjectFromStream(uint32_t objNo, const cspan& objectList); void readNextTrailer(InputStreamDevice& device); /** Checks for the existence of the %%EOF marker at the end of the file. * When strict mode is off it will also attempt to setup the parser to ignore * any garbage after the last %%EOF marker. * Simply raises an error if there is a problem with the marker. * */ void checkEOFMarker(InputStreamDevice& device); /** Initializes all private members * with their initial values. */ void reset(); /** Small helper method to retrieve the document id from the trailer * * \returns the document id of this PDF document */ const PdfString& getDocumentId(); /** Determines the correct version of the PDF * from the document catalog (if available), * as PDF > 1.4 allows updating the version. * * If no catalog dictionary is present or no /Version * key is available, the version from the file header will * be used. */ void updateDocumentVersion(); private: std::shared_ptr m_buffer; PdfTokenizer m_tokenizer; PdfVersion m_PdfVersion; bool m_LoadOnDemand; size_t m_magicOffset; bool m_HasXRefStream; size_t m_XRefOffset; size_t m_FileSize; size_t m_lastEOFOffset; PdfXRefEntries m_entries; PdfIndirectObjectList* m_Objects; std::unique_ptr m_Trailer; std::shared_ptr m_Encrypt; std::string m_Password; bool m_StrictParsing; bool m_IgnoreBrokenObjects; unsigned m_IncrementalUpdateCount; std::set m_visitedXRefOffsets; }; }; #endif // PDF_PARSER_H