From ef3b8a096202b4e345c802242dfdb7228f9621eb Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Fri, 16 Aug 2024 13:48:37 +0300 Subject: [PATCH 01/97] added en-GB --- common/loginpage/locale/en-GB.js | 115 ++ macos/Localization/en-GB.xliff | 1444 +++++++++++++++++ .../en-GB.lproj/Localizable.strings | 96 ++ .../online-installer/res/langs/langs.iss | 14 + .../extras/update-daemon/res/langs/langs.iss | 18 + win-linux/langs/en_GB.ts | 1002 ++++++++++++ win-linux/package/windows/associate_page.iss | 42 + win-linux/package/windows/common.iss | 12 + win-linux/package/windows/uninstall_page.iss | 2 + 9 files changed, 2745 insertions(+) create mode 100644 common/loginpage/locale/en-GB.js create mode 100644 macos/Localization/en-GB.xliff create mode 100644 macos/ONLYOFFICE/en-GB.lproj/Localizable.strings create mode 100644 win-linux/langs/en_GB.ts diff --git a/common/loginpage/locale/en-GB.js b/common/loginpage/locale/en-GB.js new file mode 100644 index 000000000..1316588a8 --- /dev/null +++ b/common/loginpage/locale/en-GB.js @@ -0,0 +1,115 @@ +l10n.en_GB = { + welWelcome: 'Welcome to ONLYOFFICE Desktop Editors!', + welDescr: 'Work on documents offline or connect the suite to your cloud: ONLYOFFICE, ownCloud, Nextcloud.', + btnConnect: 'Connect now', + textHavePortal: 'Already use a cloud?', + btnCreatePortal: 'Create an ONLYOFFICE cloud', + btnAddPortal: 'Add сloud', + btnLogin: 'Login', + btnBrowse: 'Browse', + btnNext: 'Next', + portalEmptyTitle: 'Connect to your cloud', + portalEmptyDescr: 'Store your documents in the cloud and access them any time, from anywhere. Share and collaborate on them. Chat in your doc, add comments or share it for review.', + portalEmptyAdv1: 'Don\'t have a cloud account yet? Go online with ONLYOFFICE Cloud Service and
try collaborative capabilities for free.', + portalListTitle: 'Connected clouds', + textNoFiles: 'There are no files', + listRecoveryTitle:'Recover files', + listRecentFileTitle:'Recent files', + listRecentDirTitle:'Recent folders', + menuFileOpen: 'Open', + menuFileExplore: 'Show in folder', + menuRemoveModel: 'Remove from list', + menuClear: 'Clear', + menuLogout: 'Logout', + textMyComputer: 'My Computer', + textThrough: 'through', + linkForgotPass: 'Forgot password?', + linkCreatePortal: 'Create an ONLYOFFICE cloud', + linkResend: 'Send the code again', + linkChangePhone: 'Change phone number', + loginTitleStart: 'Connect to cloud office', + loginTitleConnectTo: 'Login to $1', + loginTitleAssignPhone: 'Enter mobile phone number', + loginTitleApplyCode: 'Confirm phone number', + errLogin: 'Wrong email or password', + errLoginPortal: 'Check the cloud office URL', + errLoginEmail: 'Check the email address', + errLoginServer: 'Incorrect server response during login', + errLoginAuth: 'Error on user information query', + errLoginPass: 'Check the password', + errLoginWrongPhone: 'Wrong phone number format', + pshPortal: 'Cloud office URL', + pshEmail: 'email', + pshPass: 'password', + pshPhone: 'phone number', + pshCode: 'code from text message', + loginNoteAssignPhone: 'The two-factor authentication is enabled to provide additional ONLYOFFICE cloud security. Enter your mobile phone number to continue work on the cloud office. Mobile phone number must be entered using an international format with country code.', + loginNoteApplyCode: 'The two-factor authentication is enabled. The code has been texted to $1 number.', + newDoc: 'Document', + newXlsx: 'Spreadsheet', + newPptx: 'Presentation', + newForm: 'PDF Form', + actCreateNew: 'Create new', + actRecentFiles: 'Recent files', + actOpenLocal: 'Open local file', + actConnectTo: 'Connect to cloud', + actActivate: 'Activate', + actAbout: 'About', + actSettings: 'Settings', + actTemplates: 'Templates', + licKeyHolder: 'input activation key', + btnActivate: 'Activate', + licGetLicense: 'Get license now', + licPanelTitle: 'Enter product key', + licPanelDescr: 'Your product key was sent to the email address specified during the purchase.', + checkUpdates: 'Check for updates', + strVersion: 'version', + emptySlide1Title: 'Share & collaborate', + emptySlide1Text: 'Choose between Fast or Strict real-time co-editing, chat in your doc, add comments or share it for review.', + emptySlide2Title: 'View or restore previous versions', + emptySlide2Text: 'Restore or just view previous versions of your document, track changes and their authors.', + emptySlide3Title: 'Store in the cloud', + emptySlide3Text: 'Store your documents in the ONLYOFFICE cloud and access them any time, from anywhere.', + settUserName: 'User Name', + settResetUserName: 'Reset to default', + settOpenMode: 'Open document in preview mode', + setBtnApply: 'Apply', + settLanguage: 'Interface language', + settAfterRestart: 'Option will be applied after the app restart', + settShowEncryptOpts: 'Test end-to-end encryption', + settCheckUpdates: 'Check for updates automatically', + settOptCheckNever: 'Never', + settOptCheckDay: 'Every day', + settOptCheckWeek: 'Every week', + settScaling: 'Interface scaling', + settOptScalingAuto: 'Auto', + aboutProFeaturesAvailable: 'With access to pro features', + settUITheme: 'Interface theme', + settOptThemeLight: 'Light', + settOptThemeClassicLight: 'Classic Light', + settOptThemeDark: 'Dark', + settOptLaunchMode: 'Open file', + settOptLaunchInTab: 'In its own tab', + settOptLaunchInWindow: 'In its own window', + settSpellcheckDetection: 'Spelling language detection', + settOptDisabled: 'Disabled', + settOptEnabled: 'Enabled', + aboutChangelog: 'Changelog', + updateNoUpdates: 'App is up to date', + updateAvialable: 'Version $1 is available. Click to download.', + settOptThemeSystem: 'Same as system', + settOptThemeAddLocal: 'Add local theme', + settOptThemeContrastDark: 'Contrast Dark', + settAUpdateMode: 'Updates', + settOptAUpdateSilent: 'Auto', + settOptAUpdateAsk: 'Notify', + settOptAUpdateDisabled: 'Manual', + updateDownloadFinished: 'Downloading finished. Click to install', + updateDownloadCanceled: 'Downloading canceled', + updateDownloadProgress: 'Downloading $1%. Click to stop', + settOptDescDisabled: "Auto checking updates will be disabled", + settOptDescAUpdateSilent: "Download and install update in background", + settOptDescAUpdateAsk: "You will be notified about all updates steps", + settRtlMode: "RTL Interface", + settGpuUseMode: "Use graphics acceleration when available", +} diff --git a/macos/Localization/en-GB.xliff b/macos/Localization/en-GB.xliff new file mode 100644 index 000000000..d11a0e9f7 --- /dev/null +++ b/macos/Localization/en-GB.xliff @@ -0,0 +1,1444 @@ + + + +
+ +
+ + + Enter the password for the digital signature. + Enter the password for the digital signature. + Class = "NSTextFieldCell"; title = "Enter the password for the digital signature."; ObjectID = "1Fy-mg-aq9"; + + + Enter the password for the private key. + Enter the password for the private key. + Class = "NSTextFieldCell"; title = "Enter the password for the private key."; ObjectID = "1dL-nN-bJI"; + + + Specify the digital signature file for the document. + Specify the digital signature file for the document. + Class = "NSTextFieldCell"; title = "Specify the digital signature file for the document."; ObjectID = "2Ck-6y-ygx"; + + + Enter Password + Enter Password + Class = "NSSecureTextFieldCell"; placeholderString = "Enter Password"; ObjectID = "4gA-s8-Lne"; + + + Cancel + Cancel + Class = "NSButtonCell"; title = "Cancel"; ObjectID = "GOU-av-TC1"; + + + Load a Private Key + Load a Private Key + Class = "NSButtonCell"; title = "Load a Private Key"; ObjectID = "P3k-kI-w22"; + + + Cancel + Cancel + Class = "NSButtonCell"; title = "Cancel"; ObjectID = "RbM-Dq-A3K"; + + + Specify a private key for the digital signature. + Specify a private key for the digital signature. + Class = "NSTextFieldCell"; title = "Specify a private key for the digital signature."; ObjectID = "Tfc-EF-VnS"; + + + Enter Password + Enter Password + Class = "NSSecureTextFieldCell"; placeholderString = "Enter Password"; ObjectID = "Zj5-0h-hpW"; + + + Cancel + Cancel + Class = "NSButtonCell"; title = "Cancel"; ObjectID = "jpH-3g-Gt5"; + + + Cancel + Cancel + Class = "NSButtonCell"; title = "Cancel"; ObjectID = "qZ4-0O-L0G"; + + + Load Signature + Load Signature + Class = "NSButtonCell"; title = "Load Signature"; ObjectID = "tTF-wa-eJp"; + + + Window + Window + Class = "NSWindow"; title = "Window"; ObjectID = "uKp-p4-6uB"; + + +
+ +
+ +
+ + + %@ Help + %@ Help + No comment provided by engineer. + + + About %@ + About %@ + No comment provided by engineer. + + + Acknowledgments + Acknowledgments + No comment provided by engineer. + + + Before signing the document, it must be saved. + Before signing the document, it must be saved. + No comment provided by engineer. + + + Cancel + Cancel + No comment provided by engineer. + + + Cannot open file of Digital Signature + Cannot open file of Digital Signature + No comment provided by engineer. + + + Cannot open file of Private Key + Cannot open file of Private Key + No comment provided by engineer. + + + Cannot open folder of the file location. + Cannot open folder of the file location. + No comment provided by engineer. + + + Comma-Separated Values + Comma Separated Values (*.csv) + No comment provided by engineer. + + + Create portal + Create portal + No comment provided by engineer. + + + Delete and Quit + Delete and Quit + No comment provided by engineer. + + + DjVu File + Digital Document (*.djvu) + No comment provided by engineer. + + + Do you want to save the changes made to the document "%@"? + Do you want to save the changes made to the document "%@"? + No comment provided by engineer. + + + Document %ld.docx + Document %ld.docx + No comment provided by engineer. + + + Document %ld.pdf + Document %ld.pdf + No comment provided by engineer. + + + Document template + Word Open XML Document Template (*.dotx) + No comment provided by engineer. + + + Don't Save + Don't Save + No comment provided by engineer. + + + Electronic Publication + Electronic Publication File (*.epub) + No comment provided by engineer. + + + Excel 97-2003 Spreadsheet + Excel 97-2003 Spreadsheet (*.xls) + No comment provided by engineer. + + + Excel 2007 Spreadsheet + Office Open XML Spreadsheet (*.xlsx) + No comment provided by engineer. + + + Macro-enabled spreadsheet template + Macro-enabled Spreadsheet template (*.xltm) + No comment provided by engineer. + + + FictionBook File + FictionBook 2 File (*.fb2) + No comment provided by engineer. + + + File "%@" can not be open or not exist. + File "%@" can not be open or not exist. + No comment provided by engineer. + + + File Format: + File Format: + No comment provided by engineer. + + + File can not be open. + File can not be open. + No comment provided by engineer. + + + HTML File + HyperText Markup Language File (*.html) + No comment provided by engineer. + + + Hide %@ + Hide %@ + No comment provided by engineer. + + + If you don't review your documents, all your changeses will be lost. + If you don't review your documents, all your changes will be lost. + No comment provided by engineer. + + + If you have already purchased %@, you should find your activation key in an email confirmation. + If you have already purchased %@, you should find your activation key in an email confirmation. + No comment provided by engineer. + + + License Agreement + License Agreement + No comment provided by engineer. + + + MHT File + Web Page Archive File (*.mht) + No comment provided by engineer. + + + Mobipocket e-book + Mobipocket File (*.mobi) + No comment provided by engineer. + + + No + No + No comment provided by engineer. + + + OK + OK + No comment provided by engineer. + + + ONLYOFFICE can not open the Digital Signature file. Try opening another file. + ONLYOFFICE can not open the Digital Signature file. Try opening another file. + No comment provided by engineer. + + + ONLYOFFICE can not open the Private Key. Try opening another file. + ONLYOFFICE can not open the Private Key. Try opening another file. + No comment provided by engineer. + + + OpenDocument Document Template + OpenDocument Document Template (*.ott) + No comment provided by engineer. + + + OpenDocument Presentation Template + OpenDocument Presentation Template (*.otp) + No comment provided by engineer. + + + OpenDocument Spreadsheet Template + OpenDocument Spreadsheet Template (*.ots) + No comment provided by engineer. + + + OpenOffice Document + OpenDocument Text File (*.odt) + No comment provided by engineer. + + + OpenOffice Presentation + OpenDocument Presentation (*.odp) + No comment provided by engineer. + + + OpenOffice Spreadsheet + OpenDocument Spreadsheet (*.ods) + No comment provided by engineer. + + + Opening + Opening + No comment provided by engineer. + + + PDF File + Portable Document (*.pdf) + No comment provided by engineer. + + + PDF/A File + Portable Document /A (*.pdf) + No comment provided by engineer. + + + Plain Text + Plain Text File (*.txt) + No comment provided by engineer. + + + PowerPoint 97-2003 Presentation + PowerPoint 97-2003 Presentation (*.ppt) + No comment provided by engineer. + + + PowerPoint 2007 Presentation + Office Open XML Presentation (*.pptx) + No comment provided by engineer. + + + Macro-enabled Presentation + Macro-enabled Presentation (*.pptm) + No comment provided by engineer. + + + PowerPoint Slide Show + Office Open XML Slide Show (*.ppsx) + No comment provided by engineer. + + + Preparing... + Preparing... + No comment provided by engineer. + + + Presentation %ld.pptx + Presentation %ld.pptx + No comment provided by engineer. + + + Presentation template + PowerPoint Open XML Presentation Template (*.potx) + No comment provided by engineer. + + + Presenter View + Presenter View + No comment provided by engineer. + + + Quit %@ + Quit %@ + No comment provided by engineer. + + + Review Changes... + Review Changes... + No comment provided by engineer. + + + Rich Text Document + Rich Text Format File (*.rtf) + No comment provided by engineer. + + + Save + Save + No comment provided by engineer. + + + Save the document? + Save the document? + No comment provided by engineer. + + + Signature Details + Signature Details + No comment provided by engineer. + + + Spreadsheet %ld.xlsx + Spreadsheet %ld.xlsx + No comment provided by engineer. + + + Spreadsheet template + Excel Open XML Spreadsheet Template (*.xltx) + No comment provided by engineer. + + + Thank you for evaluating %@! + Thank you for evaluating %@! + No comment provided by engineer. + + + The document "%@" must be built. Continue? + The document "%@" must be built. Continue? + No comment provided by engineer. + + + To open the file location, it must be saved. + To open the file location, it must be saved. + No comment provided by engineer. + + + Unconfirmed + Unconfirmed + No comment provided by engineer. + + + Untitled + Untitled + No comment provided by engineer. + + + Version %1$@ (%2$@) + Version %1$@ (%2$@) + No comment provided by engineer. + + + Web Page + Web Page + No comment provided by engineer. + + + With access to pro features + With access to pro features + No comment provided by engineer. + + + Word 97-2003 Document + Word 97-2003 Document (*.doc) + No comment provided by engineer. + + + Word 2007 Document + Office Open XML Document (*.docx) + No comment provided by engineer. + + + XML Paper Specification + OpenXPS Document (*.xps) + No comment provided by engineer. + + + Yes + Yes + No comment provided by engineer. + + + You have %1$ld %2$@ documents with unconfirmed changes. Do you want to review these changes before quitting? + You have %1$ld %2$@ documents with unconfirmed changes. Do you want to review these changes before quitting? + No comment provided by engineer. + + + You have successfully activated %@. + You have successfully activated %@. + No comment provided by engineer. + + + Your changes will be lost if you don’t save them. + Your changes will be lost if you don’t save them. + No comment provided by engineer. + + + Your subscription has expired. + +The program works in the non-activated mode. + +Now you can prolong or upgrade your subscription with a discount. + Your subscription has expired. + +The program works in the non-activated mode. + +Now you can prolong or upgrade your subscription with a discount. + No comment provided by engineer. + + + Your subscription is about to expire +(%d days left). + +We have a special offer for you. + Your subscription is about to expire +(%d days left). + +We have a special offer for you. + No comment provided by engineer. + + + New Document + New document + No comment provided by engineer. + + + New Presentation + New presentation + No comment provided by engineer. + + + New Spreadsheet + New spreadsheet + No comment provided by engineer. + + + New PDF Form + New PDF form + No comment provided by engineer. + + +
+ +
+ +
+ + + %#@days@ + %#@days@ + + + + %d day are left until the license expiration. + %d day are left until the license expiration. + + + + %d days are left until the license expiration. + %d days are left until the license expiration. + + + + %#@days@ + %#@days@ + + + + You are using a trial version of the application. +The trial period will end in %d day, after that you will not be able to create and edit documents. + You are using a trial version of the application. +The trial period will end in %d day, after that you will not be able to create and edit documents. + + + + You are using a trial version of the application. +The trial period will end in %d days, after that you will not be able to create and edit documents. + You are using a trial version of the application. +The trial period will end in %d days, after that you will not be able to create and edit documents. + + + + %#@documents@ + %#@documents@ + + + + You have %ld %@ document with unconfirmed changes. Do you want to review these changes before quitting? + You have %ld %@ document with unconfirmed changes. Do you want to review these changes before quitting? + + + + You have %ld %@ documents with unconfirmed changes. Do you want to review these changes before quitting? + You have %ld %@ documents with unconfirmed changes. Do you want to review these changes before quitting? + + + +
+ +
+ +
+ + + Customize Toolbar… + Customize Toolbar… + Class = "NSMenuItem"; title = "Customize Toolbar…"; ObjectID = "1UK-8n-QPP"; + + + ONLYOFFICE + ONLYOFFICE + Class = "NSMenuItem"; title = "ONLYOFFICE"; ObjectID = "1Xt-HY-uBw"; + + + Find + Find + Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; + + + Lower + Lower + Class = "NSMenuItem"; title = "Lower"; ObjectID = "1tx-W0-xDw"; + + + Raise + Raise + Class = "NSMenuItem"; title = "Raise"; ObjectID = "2h7-ER-AoG"; + + + Transformations + Transformations + Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; + + + Spelling + Spelling + Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; + + + Use Default + Use Default + Class = "NSMenuItem"; title = "Use Default"; ObjectID = "3Om-Ey-2VK"; + + + Speech + Speech + Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; + + + Find + Find + Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; + + + License Agreement + License Agreement + Class = "NSMenuItem"; title = "License Agreement"; ObjectID = "4et-TX-a4m"; + + + Quit ONLYOFFICE + Quit ONLYOFFICE + Class = "NSMenuItem"; title = "Quit ONLYOFFICE"; ObjectID = "4sb-4s-VLi"; + + + Edit + Edit + Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; + + + Copy Style + Copy Style + Class = "NSMenuItem"; title = "Copy Style"; ObjectID = "5Vv-lz-BsD"; + + + About ONLYOFFICE + About ONLYOFFICE + Class = "NSMenuItem"; title = "About ONLYOFFICE"; ObjectID = "5kV-Vb-QxS"; + + + Redo + Redo + Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; + + + License agreement + License agreement + Class = "NSButtonCell"; title = "License agreement"; ObjectID = "8Ga-Cu-VGe"; + + + Writing Direction + Writing Direction + Class = "NSMenu"; title = "Writing Direction"; ObjectID = "8mr-sm-Yjd"; + + + New + New + Class = "NSMenuItem"; title = "New"; ObjectID = "9aQ-wl-gjS"; + + + none + none + Class = "NSTextFieldCell"; title = "none"; ObjectID = "9i7-kj-42B"; + + + Substitutions + Substitutions + Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; + + + Smart Copy/Paste + Smart Copy/Paste + Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; + + + Tighten + Tighten + Class = "NSMenuItem"; title = "Tighten"; ObjectID = "46P-cB-AYj"; + + + Correct Spelling Automatically + Correct Spelling Automatically + Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; + + + Main Menu + Main Menu + Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; + + + Preferences… + Preferences… + Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; + + + Left to Right + Left to Right + Class = "NSMenuItem"; title = "\tLeft to Right"; ObjectID = "BgM-ve-c93"; + + + Save As… + Save As… + Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; + + + Acknowledgments + Acknowledgments + Class = "NSMenuItem"; title = "Acknowledgments"; ObjectID = "CJU-dx-a9l"; + + + Spreadsheet + Spreadsheet + Class = "NSMenuItem"; title = "Spreadsheet"; ObjectID = "DOj-j9-dza"; + + + Close + Close + Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; + + + Spelling and Grammar + Spelling and Grammar + Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; + + + Help + Help + Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; + + + Product Help + Product Help + Class = "NSMenuItem"; title = "Product Help"; ObjectID = "FKE-Sm-Kum"; + + + Text + Text + Class = "NSMenuItem"; title = "Text"; ObjectID = "Fal-I4-PZk"; + + + Substitutions + Substitutions + Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; + + + User Name + User Name + Class = "NSTextFieldCell"; title = "User Name"; ObjectID = "FoF-wl-Dxi"; + + + Bold + Bold + Class = "NSMenuItem"; title = "Bold"; ObjectID = "GB9-OM-e27"; + + + Format + Format + Class = "NSMenu"; title = "Format"; ObjectID = "GEO-Iw-cKr"; + + + Use Default + Use Default + Class = "NSMenuItem"; title = "Use Default"; ObjectID = "GUa-eO-cwY"; + + + Font + Font + Class = "NSMenuItem"; title = "Font"; ObjectID = "Gi5-1S-RQB"; + + + Writing Direction + Writing Direction + Class = "NSMenuItem"; title = "Writing Direction"; ObjectID = "H1b-Si-o9J"; + + + View + View + Class = "NSMenuItem"; title = "View"; ObjectID = "H8h-7b-M4v"; + + + Text Replacement + Text Replacement + Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; + + + Show Spelling and Grammar + Show Spelling and Grammar + Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; + + + View + View + Class = "NSMenu"; title = "View"; ObjectID = "HyV-fh-RgO"; + + + Subscript + Subscript + Class = "NSMenuItem"; title = "Subscript"; ObjectID = "I0S-gh-46l"; + + + Open… + Open… + Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; + + + ONLYOFFICE + ONLYOFFICE + Class = "NSWindow"; title = "ONLYOFFICE"; ObjectID = "IQv-IB-iLA"; + + + Justify + Justify + Class = "NSMenuItem"; title = "Justify"; ObjectID = "J5U-5w-g23"; + + + Use None + Use None + Class = "NSMenuItem"; title = "Use None"; ObjectID = "J7y-lM-qPV"; + + + Revert to Saved + Revert to Saved + Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; + + + Show All + Show All + Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; + + + Bring All to Front + Bring All to Front + Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; + + + Paste Ruler + Paste Ruler + Class = "NSMenuItem"; title = "Paste Ruler"; ObjectID = "LVM-kO-fVI"; + + + Left to Right + Left to Right + Class = "NSMenuItem"; title = "\tLeft to Right"; ObjectID = "Lbh-J2-qVU"; + + + Copy Ruler + Copy Ruler + Class = "NSMenuItem"; title = "Copy Ruler"; ObjectID = "MkV-Pr-PK5"; + + + Services + Services + Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; + + + Default + Default + Class = "NSMenuItem"; title = "\tDefault"; ObjectID = "Nop-cj-93Q"; + + + Minimize + Minimize + Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; + + + Baseline + Baseline + Class = "NSMenuItem"; title = "Baseline"; ObjectID = "OaQ-X3-Vso"; + + + Hide ONLYOFFICE + Hide ONLYOFFICE + Class = "NSMenuItem"; title = "Hide ONLYOFFICE"; ObjectID = "Olw-nP-bQN"; + + + Find Previous + Find Previous + Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; + + + Stop Speaking + Stop Speaking + Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; + + + Bigger + Bigger + Class = "NSMenuItem"; title = "Bigger"; ObjectID = "Ptp-SP-VEL"; + + + Show Fonts + Show Fonts + Class = "NSMenuItem"; title = "Show Fonts"; ObjectID = "Q5e-8K-NDq"; + + + Zoom + Zoom + Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; + + + Right to Left + Right to Left + Class = "NSMenuItem"; title = "\tRight to Left"; ObjectID = "RB4-Sm-HuC"; + + + Close + Close + Class = "NSButtonCell"; title = "Close"; ObjectID = "Riu-oE-8dj"; + + + none + none + Class = "NSTextFieldCell"; title = "none"; ObjectID = "Rkd-xb-FRJ"; + + + Logout + Logout + Class = "NSButtonCell"; title = "Logout"; ObjectID = "RmO-tv-UKh"; + + + Superscript + Superscript + Class = "NSMenuItem"; title = "Superscript"; ObjectID = "Rqc-34-cIF"; + + + Select All + Select All + Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; + + + Jump to Selection + Jump to Selection + Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; + + + Document + Document + Class = "NSMenuItem"; title = "Document"; ObjectID = "TEm-B8-gsH"; + + + Window + Window + Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; + + + Capitalize + Capitalize + Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; + + + Center + Center + Class = "NSMenuItem"; title = "Center"; ObjectID = "VIY-Ag-zcb"; + + + Hide Others + Hide Others + Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; + + + Italic + Italic + Class = "NSMenuItem"; title = "Italic"; ObjectID = "Vjx-xi-njq"; + + + Edit + Edit + Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; + + + Underline + Underline + Class = "NSMenuItem"; title = "Underline"; ObjectID = "WRG-CD-K1S"; + + + Paste and Match Style + Paste and Match Style + Class = "NSMenuItem"; title = "Paste and Match Style"; ObjectID = "WeT-3V-zwk"; + + + Find… + Find… + Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; + + + Find and Replace… + Find and Replace… + Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; + + + Default + Default + Class = "NSMenuItem"; title = "\tDefault"; ObjectID = "YGs-j5-SAR"; + + + Start Speaking + Start Speaking + Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; + + + Align Left + Align Left + Class = "NSMenuItem"; title = "Align Left"; ObjectID = "ZM1-6Q-yy1"; + + + Version + Version + Class = "NSTextFieldCell"; title = "Version"; ObjectID = "ZbA-hc-8PE"; + + + Email: + Email: + Class = "NSTextFieldCell"; title = "Email:"; ObjectID = "Zsi-3o-ASl"; + + + Paragraph + Paragraph + Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "ZvO-Gk-QUH"; + + + Print… + Print… + Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; + + + Window + Window + Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; + + + Font + Font + Class = "NSMenu"; title = "Font"; ObjectID = "aXa-aM-Jaq"; + + + Use Default + Use Default + Class = "NSMenuItem"; title = "Use Default"; ObjectID = "agt-UL-0e3"; + + + Show Colors + Show Colors + Class = "NSMenuItem"; title = "Show Colors"; ObjectID = "bgn-CT-cEk"; + + + File + File + Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; + + + Use Selection for Find + Use Selection for Find + Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; + + + Transformations + Transformations + Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; + + + Use None + Use None + Class = "NSMenuItem"; title = "Use None"; ObjectID = "cDB-IK-hbR"; + + + Selection + Selection + Class = "NSMenuItem"; title = "Selection"; ObjectID = "cqv-fj-IhA"; + + + Smart Links + Smart Links + Class = "NSMenuItem"; title = "Smart Links"; ObjectID = "cwL-P1-jid"; + + + Make Lower Case + Make Lower Case + Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; + + + Text + Text + Class = "NSMenu"; title = "Text"; ObjectID = "d9c-me-L2H"; + + + File + File + Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; + + + Undo + Undo + Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; + + + Paste + Paste + Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; + + + File Name + File Name + Class = "NSTextFieldCell"; title = "File Name"; ObjectID = "gm3-6i-EnL"; + + + New + New + Class = "NSMenu"; title = "New"; ObjectID = "hD5-Cz-ItX"; + + + Smart Quotes + Smart Quotes + Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; + + + Presentation + Presentation + Class = "NSMenuItem"; title = "Presentation"; ObjectID = "hkB-TU-Ps1"; + + + Check Document Now + Check Document Now + Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; + + + Services + Services + Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; + + + Smaller + Smaller + Class = "NSMenuItem"; title = "Smaller"; ObjectID = "i1d-Er-qST"; + + + Baseline + Baseline + Class = "NSMenu"; title = "Baseline"; ObjectID = "ijk-EB-dga"; + + + Kern + Kern + Class = "NSMenuItem"; title = "Kern"; ObjectID = "jBQ-r6-VK2"; + + + Right to Left + Right to Left + Class = "NSMenuItem"; title = "\tRight to Left"; ObjectID = "jFq-tB-4Kx"; + + + Format + Format + Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; + + + ONLYOFFICE + ONLYOFFICE + Class = "NSTabViewItem"; label = "ONLYOFFICE"; ObjectID = "kcg-El-49G"; + + + Cancel + Cancel + Class = "NSButtonCell"; title = "Cancel"; ObjectID = "m0C-e9-0oc"; + + + Check Grammar With Spelling + Check Grammar With Spelling + Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; + + + Ligatures + Ligatures + Class = "NSMenuItem"; title = "Ligatures"; ObjectID = "o6e-r0-MWq"; + + + Open Recent + Open Recent + Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; + + + Loosen + Loosen + Class = "NSMenuItem"; title = "Loosen"; ObjectID = "ogc-rX-tC1"; + + + Delete + Delete + Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; + + + Save + Save + Class = "NSMenuItem"; title = "Save"; ObjectID = "pxx-59-PXV"; + + + Find Next + Find Next + Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; + + + Page Setup… + Page Setup… + Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; + + + Check Spelling While Typing + Check Spelling While Typing + Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; + + + Smart Dashes + Smart Dashes + Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; + + + Copyright info + Copyright info + Class = "NSTextFieldCell"; title = "Copyright info"; ObjectID = "sGd-zc-V0B"; + + + Show Toolbar + Show Toolbar + Class = "NSMenuItem"; title = "Show Toolbar"; ObjectID = "snW-S8-Cw5"; + + + Data Detectors + Data Detectors + Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; + + + Open Recent + Open Recent + Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; + + + Kern + Kern + Class = "NSMenu"; title = "Kern"; ObjectID = "tlD-Oa-oAM"; + + + ONLYOFFICE + ONLYOFFICE + Class = "NSMenu"; title = "ONLYOFFICE"; ObjectID = "uQy-DD-JDr"; + + + Cut + Cut + Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; + + + Check for Updates… + Check for Updates… + Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "ud7-wC-A79"; + + + Paste Style + Paste Style + Class = "NSMenuItem"; title = "Paste Style"; ObjectID = "vKC-jM-MkH"; + + + Show Ruler + Show Ruler + Class = "NSMenuItem"; title = "Show Ruler"; ObjectID = "vLm-3I-IUL"; + + + Clear Menu + Clear Menu + Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; + + + Make Upper Case + Make Upper Case + Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; + + + Ligatures + Ligatures + Class = "NSMenu"; title = "Ligatures"; ObjectID = "w0m-vy-SC9"; + + + Align Right + Align Right + Class = "NSMenuItem"; title = "Align Right"; ObjectID = "wb2-vD-lq4"; + + + Text Cell + Text Cell + Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "wpe-8d-5DV"; + + + Help + Help + Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; + + + Copy + Copy + Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; + + + Product + Product + Class = "NSTextFieldCell"; title = "Product"; ObjectID = "xCO-ey-2lo"; + + + Use All + Use All + Class = "NSMenuItem"; title = "Use All"; ObjectID = "xQD-1f-W4t"; + + + Speech + Speech + Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; + + + Show Substitutions + Show Substitutions + Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; + + + Portal: + Portal: + Class = "NSTextFieldCell"; title = "Portal:"; ObjectID = "zwS-9G-S0N"; + + +
+ +
+ +
+ + + Could not move to Applications folder + Could not move to Applications folder + No comment provided by engineer. + + + Do Not Move + Do Not Move + No comment provided by engineer. + + + I can move myself to the Applications folder if you'd like. + I can move myself to the Applications folder if you'd like. + No comment provided by engineer. + + + Move to Applications Folder + Move to Applications Folder + No comment provided by engineer. + + + Move to Applications folder in your Home folder? + Move to Applications folder in your Home folder? + No comment provided by engineer. + + + Move to Applications folder? + Move to Applications folder? + No comment provided by engineer. + + + Note that this will require an administrator password. + Note that this will require an administrator password. + No comment provided by engineer. + + + This will keep your Downloads folder uncluttered. + This will keep your Downloads folder uncluttered. + No comment provided by engineer. + + +
+ +
+ +
+ + + Reporter Window + Reporter Window + Class = "NSWindow"; title = "Reporter Window"; ObjectID = "Ygx-5K-Hn8"; + + +
+ +
+ +
+ + + ONLYOFFICE + ONLYOFFICE + Bundle name + + + Copyright © 2024 Ascensio System SIA. All rights reserved. + Copyright © 2024 Ascensio System SIA. All rights reserved. + Copyright (human-readable) + + +
+ +
+ +
+ + + ONLYOFFICE + ONLYOFFICE + Bundle name + + + Copyright © 2024 Ascensio System SIA. All rights reserved. + Copyright © 2024 Ascensio System SIA. All rights reserved. + Copyright (human-readable) + + +
+ +
+ +
+ + + ONLYOFFICE + ONLYOFFICE + Bundle name + + + Copyright © 2024 Ascensio System SIA. All rights reserved. + Copyright © 2024 Ascensio System SIA. All rights reserved. + Copyright (human-readable) + + +
+
diff --git a/macos/ONLYOFFICE/en-GB.lproj/Localizable.strings b/macos/ONLYOFFICE/en-GB.lproj/Localizable.strings new file mode 100644 index 000000000..758946fd9 --- /dev/null +++ b/macos/ONLYOFFICE/en-GB.lproj/Localizable.strings @@ -0,0 +1,96 @@ +/* No comment provided by engineer. */ +"Comma-Separated Values" = "Comma Separated Values (*.csv)"; + +/* No comment provided by engineer. */ +"DjVu File" = "Digital Document (*.djvu)"; + +/* No comment provided by engineer. */ +"Document template" = "Word Open XML Document Template (*.dotx)"; + +/* No comment provided by engineer. */ +"Excel 97-2003 Spreadsheet" = "Excel 97-2003 Spreadsheet (*.xls)"; + +/* No comment provided by engineer. */ +"Excel 2007 Spreadsheet" = "Office Open XML Spreadsheet (*.xlsx)"; + +/* No comment provided by engineer. */ +"FictionBook File" = "FictionBook 2 File (*.fb2)"; + +/* No comment provided by engineer. */ +"If you don't review your documents, all your changeses will be lost." = "If you don't review your documents, all your changes will be lost."; + +/* No comment provided by engineer. */ +"Macro-enabled Presentation" = "Macro-enabled Presentation (*.pptm)"; + +/* No comment provided by engineer. */ +"Macro-enabled spreadsheet template" = "Macro-enabled Spreadsheet template (*.xltm)"; + +/* No comment provided by engineer. */ +"Mobipocket e-book" = "Mobipocket File (*.mobi)"; + +/* No comment provided by engineer. */ +"new-document" = "New document"; + +/* No comment provided by engineer. */ +"new-pdfform" = "New PDF form"; + +/* No comment provided by engineer. */ +"new-presentation" = "New presentation"; + +/* No comment provided by engineer. */ +"new-spreadsheet" = "New spreadsheet"; + +/* No comment provided by engineer. */ +"OpenDocument Document Template" = "OpenDocument Document Template (*.ott)"; + +/* No comment provided by engineer. */ +"OpenDocument Presentation Template" = "OpenDocument Presentation Template (*.otp)"; + +/* No comment provided by engineer. */ +"OpenDocument Spreadsheet Template" = "OpenDocument Spreadsheet Template (*.ots)"; + +/* No comment provided by engineer. */ +"OpenOffice Document" = "OpenDocument Text File (*.odt)"; + +/* No comment provided by engineer. */ +"OpenOffice Presentation" = "OpenDocument Presentation (*.odp)"; + +/* No comment provided by engineer. */ +"OpenOffice Spreadsheet" = "OpenDocument Spreadsheet (*.ods)"; + +/* No comment provided by engineer. */ +"PDF File" = "Portable Document (*.pdf)"; + +/* No comment provided by engineer. */ +"PDF/A File" = "Portable Document /A (*.pdf)"; + +/* No comment provided by engineer. */ +"Plain Text" = "Plain Text File (*.txt)"; + +/* No comment provided by engineer. */ +"PowerPoint 97-2003 Presentation" = "PowerPoint 97-2003 Presentation (*.ppt)"; + +/* No comment provided by engineer. */ +"PowerPoint 2007 Presentation" = "Office Open XML Presentation (*.pptx)"; + +/* No comment provided by engineer. */ +"PowerPoint Slide Show" = "Office Open XML Slide Show (*.ppsx)"; + +/* No comment provided by engineer. */ +"Presentation template" = "PowerPoint Open XML Presentation Template (*.potx)"; + +/* No comment provided by engineer. */ +"Rich Text Document" = "Rich Text Format File (*.rtf)"; + +/* No comment provided by engineer. */ +"Spreadsheet template" = "Excel Open XML Spreadsheet Template (*.xltx)"; + +/* No comment provided by engineer. */ +"Word 97-2003 Document" = "Word 97-2003 Document (*.doc)"; + +/* No comment provided by engineer. */ +"Word 2007 Document" = "Office Open XML Document (*.docx)"; + +/* No comment provided by engineer. */ +"XML Paper Specification" = "OpenXPS Document (*.xps)"; + diff --git a/win-linux/extras/online-installer/res/langs/langs.iss b/win-linux/extras/online-installer/res/langs/langs.iss index 15bf714bf..ac895208c 100644 --- a/win-linux/extras/online-installer/res/langs/langs.iss +++ b/win-linux/extras/online-installer/res/langs/langs.iss @@ -1,5 +1,6 @@ en.CAPTION_TEXT =ONLYOFFICE Online Installer +en-GB.CAPTION_TEXT =ONLYOFFICE Online Installer ru.CAPTION_TEXT =ONLYOFFICE Онлайн Установщик de.CAPTION_TEXT =ONLYOFFICE Online-Installationsprogramm fr.CAPTION_TEXT =Programme d'installation ONLYOFFICE en ligne @@ -41,6 +42,7 @@ sv.CAPTION_TEXT =ONLYOFFICE onlineinstallationsprogram sr-cyrl-RS.CAPTION_TEXT =ONLYOFFICE Онлајн Инсталатер en.MESSAGE_TEXT_ERR1 =The application cannot continue because this architecture is not supported. +en-GB.MESSAGE_TEXT_ERR1 =The application cannot continue because this architecture is not supported. ru.MESSAGE_TEXT_ERR1 =Приложение не может продолжить работу, так как эта архитектура не поддерживается. de.MESSAGE_TEXT_ERR1 =Die Anwendung kann nicht fortgesetzt werden, da diese Architektur nicht unterstützt wird. fr.MESSAGE_TEXT_ERR1 =L'application ne peut pas continuer car cette architecture n'est pas prise en charge. @@ -82,6 +84,7 @@ sv.MESSAGE_TEXT_ERR1 =Applikationen kan inte fortsätta eftersom denna arkitektu sr-cyrl-RS.MESSAGE_TEXT_ERR1 =Апликација не може наставити јер ова архитектура није подржана. en.MESSAGE_TEXT_ERR2 =The application is already running. +en-GB.MESSAGE_TEXT_ERR2 =The application is already running. ru.MESSAGE_TEXT_ERR2 =Приложение уже запущено. de.MESSAGE_TEXT_ERR2 =Die Anwendung läuft bereits. fr.MESSAGE_TEXT_ERR2 =Cette application est déjà en cours d'exécution. @@ -123,6 +126,7 @@ sv.MESSAGE_TEXT_ERR2 =Applikationen körs redan. sr-cyrl-RS.MESSAGE_TEXT_ERR2 =Апликација већ ради. en.LABEL_TITLE_TEXT =Preparing for installation +en-GB.LABEL_TITLE_TEXT =Preparing for installation ru.LABEL_TITLE_TEXT =Подготовка к установке de.LABEL_TITLE_TEXT =Vorbereitung der Installation fr.LABEL_TITLE_TEXT =Préparation à l'installation @@ -164,6 +168,7 @@ sv.LABEL_TITLE_TEXT =Förbereder för installation sr-cyrl-RS.LABEL_TITLE_TEXT =Припрема за инсталацију en.LABEL_MESSAGE_TEXT =Downloading a package +en-GB.LABEL_MESSAGE_TEXT =Downloading a package ru.LABEL_MESSAGE_TEXT =Загрузка пакета de.LABEL_MESSAGE_TEXT =Herunterladen eines Pakets fr.LABEL_MESSAGE_TEXT =Télécharger un paquet @@ -206,6 +211,7 @@ sv.LABEL_MESSAGE_TEXT =Laddar ner ett paket sr-cyrl-RS.LABEL_MESSAGE_TEXT =Преузимање пакета en.LABEL_MESSAGE_TEXT_ERR1 =An error occurred during initialization.\nPlease try restarting the app later. +en-GB.LABEL_MESSAGE_TEXT_ERR1 =An error occurred during initialization.\nPlease try restarting the app later. ru.LABEL_MESSAGE_TEXT_ERR1 =Произошла ошибка при инициализации.\nПопробуйте перезапустить приложение позже. de.LABEL_MESSAGE_TEXT_ERR1 =Während der Initialisierung ist ein Fehler aufgetreten.\nBitte versuchen Sie, die App später neu zu starten. fr.LABEL_MESSAGE_TEXT_ERR1 =Une erreur s'est produit lors de l'initialisation.\nVeuillez réessayer de redémarrer l'application plus tard. @@ -247,6 +253,7 @@ sv.LABEL_MESSAGE_TEXT_ERR1 =Ett fel inträffade under initiering.\nFörsök star sr-cyrl-RS.LABEL_MESSAGE_TEXT_ERR1 =Појавила се грешка приликом иницијализације.\nМолимо покушајте да рестартујете апликацију касније. en.LABEL_MESSAGE_TEXT_ERR2 =Package download failed: Not enough memory!\nPlease try restarting the app later. +en-GB.LABEL_MESSAGE_TEXT_ERR2 =Package download failed: Not enough memory!\nPlease try restarting the app later. ru.LABEL_MESSAGE_TEXT_ERR2 =Ошибка при загрузке пакета: Недостаточно памяти!\nПопробуйте перезапустить приложение позже. de.LABEL_MESSAGE_TEXT_ERR2 =Paket-Download fehlgeschlagen: Nicht genügend Speicherplatz!\nBitte versuchen Sie, die App später neu zu starten. fr.LABEL_MESSAGE_TEXT_ERR2 =Échec du téléchargement du paquet: Mémoire insuffisante!\nVeuillez réessayer de redémarrer l'application plus tard. @@ -288,6 +295,7 @@ sv.LABEL_MESSAGE_TEXT_ERR2 =Nedladdning av paketet misslyckades: Inte tillräckl sr-cyrl-RS.LABEL_MESSAGE_TEXT_ERR2 =Преузимање пакета неуспешно: Недовољно меморије!\nМолимо покушајте да рестартујете апликацију касније. en.LABEL_MESSAGE_TEXT_ERR3 =Package download failed: Server connection error!\nPlease try restarting the app later. +en-GB.LABEL_MESSAGE_TEXT_ERR3 =Package download failed: Server connection error!\nPlease try restarting the app later. ru.LABEL_MESSAGE_TEXT_ERR3 =Ошибка при загрузке пакета: Ошибка соединения!\nПопробуйте перезапустить приложение позже. de.LABEL_MESSAGE_TEXT_ERR3 =Paket-Download fehlgeschlagen: Serververbindungsfehler!\nBitte versuchen Sie, die App später neu zu starten. fr.LABEL_MESSAGE_TEXT_ERR3 =Échec du téléchargement du paquet: Problème de connexion au serveur!\nVeuillez réessayer de redémarrer l'application plus tard. @@ -329,6 +337,7 @@ sv.LABEL_MESSAGE_TEXT_ERR3 =Nedladdning av paketet misslyckades: Serveranslutnin sr-cyrl-RS.LABEL_MESSAGE_TEXT_ERR3 =Преузимање пакета неуспешно: Грешка у вези са повезивањем на сервер!\nМолимо покушајте да рестартујете апликацију касније. en.LABEL_MESSAGE_TEXT_ERR4 =Package download failed: Network error!\nPlease try restarting the app later. +en-GB.LABEL_MESSAGE_TEXT_ERR4 =Package download failed: Network error!\nPlease try restarting the app later. ru.LABEL_MESSAGE_TEXT_ERR4 =Ошибка при загрузке пакета: Ошибка сети!\nПопробуйте перезапустить приложение позже. de.LABEL_MESSAGE_TEXT_ERR4 =Paket-Download fehlgeschlagen: Netzwerkfehler!\nBitte versuchen Sie, die App später neu zu starten. fr.LABEL_MESSAGE_TEXT_ERR4 =Échec du téléchargement du paquet: Problème de réseau!\nVeuillez réessayer de redémarrer l'application plus tard. @@ -370,6 +379,7 @@ sv.LABEL_MESSAGE_TEXT_ERR4 =Nedladdning av paketet misslyckades: Nätverksfel!\n sr-cyrl-RS.LABEL_MESSAGE_TEXT_ERR4 =Преузимање пакета неуспешно: Грешка у мрежи!\nМолимо покушајте да рестартујете апликацију касније. en.LABEL_MESSAGE_TEXT_ERR5 =An error occurred while running the package.\nPlease try restarting the app later. +en-GB.LABEL_MESSAGE_TEXT_ERR5 =An error occurred while running the package.\nPlease try restarting the app later. ru.LABEL_MESSAGE_TEXT_ERR5 =Произошла ошибка при запуске установщика.\nПопробуйте перезапустить приложение позже. de.LABEL_MESSAGE_TEXT_ERR5 =Beim Ausführen des Pakets ist ein Fehler aufgetreten.\nBitte versuchen Sie, die App später neu zu starten. fr.LABEL_MESSAGE_TEXT_ERR5 =Une erreur s'est produit lors de l'exécution du paquet.\nVeuillez réessayer de redémarrer l'application plus tard. @@ -411,6 +421,7 @@ sv.LABEL_MESSAGE_TEXT_ERR5 =Ett fel inträffade vid körning av paketet.\nFörs sr-cyrl-RS.LABEL_MESSAGE_TEXT_ERR5 =Дошло је до грешке приликом покретања пакета.\nМолимо покушајте да рестартујете апликацију касније. en.LABEL_MESSAGE_TEXT_ERR6 =An error occurred during initialization: URL not set. +en-GB.LABEL_MESSAGE_TEXT_ERR6 =An error occurred during initialization: URL not set. ru.LABEL_MESSAGE_TEXT_ERR6 =Произошла ошибка при инициализации: Не задан URL. de.LABEL_MESSAGE_TEXT_ERR6 =Bei der Initialisierung ist ein Fehler aufgetreten: URL nicht gesetzt. fr.LABEL_MESSAGE_TEXT_ERR6 =Une erreur s'est produit lors de l'initialisation: Url non définie. @@ -452,6 +463,7 @@ sv.LABEL_MESSAGE_TEXT_ERR6 =Ett fel inträffade under initiering: URL inte angiv sr-cyrl-RS.LABEL_MESSAGE_TEXT_ERR6 =Дошло је до грешке приликом иницијализације: URL нике постављен. en.LABEL_MESSAGE_TEXT_ERR7 =An error occurred during initialization: File name not specified. +en-GB.LABEL_MESSAGE_TEXT_ERR7 =An error occurred during initialization: File name not specified. ru.LABEL_MESSAGE_TEXT_ERR7 =Произошла ошибка при инициализации: Не задано имя файла. de.LABEL_MESSAGE_TEXT_ERR7 =Bei der Initialisierung ist ein Fehler aufgetreten: Dateiname nicht angegeben. fr.LABEL_MESSAGE_TEXT_ERR7 =Une erreur s'est produit lors de l'initialisation: Le nom du fichier n'est pas spécifié. @@ -493,6 +505,7 @@ sv.LABEL_MESSAGE_TEXT_ERR7 =Ett fel inträffade under initiering: Filnamn inte a sr-cyrl-RS.LABEL_MESSAGE_TEXT_ERR7 =Дошло је до грешке приликом иницијализације: име датотеке није наведено. en.BUTTON_CANCEL_TEXT =Cancel +en-GB.BUTTON_CANCEL_TEXT =Cancel ru.BUTTON_CANCEL_TEXT =Отмена de.BUTTON_CANCEL_TEXT =Abbrechen fr.BUTTON_CANCEL_TEXT =Annuler @@ -534,6 +547,7 @@ sv.BUTTON_CANCEL_TEXT =Avbryt sr-cyrl-RS.BUTTON_CANCEL_TEXT =Откажи en.SILENT_CHECK_TEXT =Silent Installation +en-GB.SILENT_CHECK_TEXT =Silent Installation ru.SILENT_CHECK_TEXT =Тихая установка de.SILENT_CHECK_TEXT =Silent Installation fr.SILENT_CHECK_TEXT =Installation sans assistance diff --git a/win-linux/extras/update-daemon/res/langs/langs.iss b/win-linux/extras/update-daemon/res/langs/langs.iss index 5ce68439d..cb16d9ee8 100644 --- a/win-linux/extras/update-daemon/res/langs/langs.iss +++ b/win-linux/extras/update-daemon/res/langs/langs.iss @@ -1,5 +1,6 @@ en.CAPTION_TEXT =ONLYOFFICE Update Service +en_GB.CAPTION_TEXT =ONLYOFFICE Update Service ru.CAPTION_TEXT =Сервис обновлений ONLYOFFICE ar_SA.CAPTION_TEXT =خدمة تحديث ONLYOFFICE de.CAPTION_TEXT =Aktualisierungsdienst von ONLYOFFICE @@ -40,6 +41,7 @@ sv.CAPTION_TEXT =ONLYOFFICE uppdateringstjänst sr_Cyrl_RS.CAPTION_TEXT =ONLYOFFICE Сервис ажурирања en.MESSAGE_TEXT_ERR1 =An error occurred: +en_GB.MESSAGE_TEXT_ERR1 =An error occurred: ru.MESSAGE_TEXT_ERR1 =Произошла ошибка: ar_SA.MESSAGE_TEXT_ERR1 =حصل خطأ: de.MESSAGE_TEXT_ERR1 =Ein Fehler ist aufgetreten: @@ -80,6 +82,7 @@ sv.MESSAGE_TEXT_ERR1 =Ett fel inträffade: sr_Cyrl_RS.MESSAGE_TEXT_ERR1 =Грешка се појавила: en.MESSAGE_TEXT_ERR2 =An error occurred while deleting: +en_GB.MESSAGE_TEXT_ERR2 =An error occurred while deleting: ru.MESSAGE_TEXT_ERR2 =Произошла ошибка при удалении: ar_SA.MESSAGE_TEXT_ERR2 =حصل خطأ أثناء الحذف: de.MESSAGE_TEXT_ERR2 =Beim Löschvorgang ist ein Fehler aufgetreten: @@ -120,6 +123,7 @@ sv.MESSAGE_TEXT_ERR2 =Ett fel inträffade vid borttagning av: sr_Cyrl_RS.MESSAGE_TEXT_ERR2 =Грешка се појавила у току брисања: en.MESSAGE_TEXT_ERR3 =An error occurred while creating: +en_GB.MESSAGE_TEXT_ERR3 =An error occurred while creating: ru.MESSAGE_TEXT_ERR3 =Произошла ошибка при создании: ar_SA.MESSAGE_TEXT_ERR3 =حصل خطأ أثناء الإنشاء: de.MESSAGE_TEXT_ERR3 =Beim Erstellen ist ein Fehler aufgetreten: @@ -160,6 +164,7 @@ sv.MESSAGE_TEXT_ERR3 =Ett fel inträffade vid skapande av: sr_Cyrl_RS.MESSAGE_TEXT_ERR3 =Грешка се појавила у току креирања: en.MESSAGE_TEXT_ERR4 =An error occurred while restarting the service! +en_GB.MESSAGE_TEXT_ERR4 =An error occurred while restarting the service! ru.MESSAGE_TEXT_ERR4 =Произошла ошибка при перезапуске сервиса! ar_SA.MESSAGE_TEXT_ERR4 =حصل خطأ أثناء إعادة تشغيل الخدمة: de.MESSAGE_TEXT_ERR4 =Beim Neustart des Dienstes ist ein Fehler aufgetreten! @@ -200,6 +205,7 @@ sv.MESSAGE_TEXT_ERR4 =Ett fel inträffade vid omstart av tjänsten! sr_Cyrl_RS.MESSAGE_TEXT_ERR4 =Грешка се појавила у току рестартовања сервиса! en.MESSAGE_TEXT_ERR5 =Update cancelled. Can't find folder: +en_GB.MESSAGE_TEXT_ERR5 =Update cancelled. Can't find folder: ru.MESSAGE_TEXT_ERR5 =Обновление отменено. Не удалось найти папку: ar_SA.MESSAGE_TEXT_ERR5 =تم الغاء التحديث. غير قادر على العثور على المجلد: de.MESSAGE_TEXT_ERR5 =Update abgebrochen. Ordner kann nicht gefunden werden: @@ -240,6 +246,7 @@ sv.MESSAGE_TEXT_ERR5 =Uppdatering avbruten. Kan inte hitta mapp: sr_Cyrl_RS.MESSAGE_TEXT_ERR5 =Ажурирање отказано. Немогуће пронаћи фолдер: en.MESSAGE_TEXT_ERR6 =Update cancelled. The file signature is missing: +en_GB.MESSAGE_TEXT_ERR6 =Update cancelled. The file signature is missing: ru.MESSAGE_TEXT_ERR6 =Обновление отменено. Отсутствует подпись файла: ar_SA.MESSAGE_TEXT_ERR6 =تم الغاء التحديث. توقيع الملف مفقود: de.MESSAGE_TEXT_ERR6 =Update abgebrochen. Die Dateisignatur fehlt: @@ -280,6 +287,7 @@ sv.MESSAGE_TEXT_ERR6 =Uppdatering avbruten. Filsignaturen saknas: sr_Cyrl_RS.MESSAGE_TEXT_ERR6 =Ажурирање отказано. Потпис фајла недостаје: en.MESSAGE_TEXT_ERR7 =Update cancelled. Can't delete folder: +en_GB.MESSAGE_TEXT_ERR7 =Update cancelled. Can't delete folder: ru.MESSAGE_TEXT_ERR7 =Обновление отменено. Не удалось удалить папку: ar_SA.MESSAGE_TEXT_ERR7 =تم الغاء التحديث. غير قادر على حذف المجلد: de.MESSAGE_TEXT_ERR7 =Update abgebrochen. Ordner kann nicht gelöscht werden: @@ -320,6 +328,7 @@ sv.MESSAGE_TEXT_ERR7 =Uppdatering avbruten. Kan inte ta bort mapp: sr_Cyrl_RS.MESSAGE_TEXT_ERR7 =Ажурирање отказано. Немогуће избрисати фолдер: en.MESSAGE_TEXT_ERR8 =Update cancelled. The program is not closed: +en_GB.MESSAGE_TEXT_ERR8 =Update cancelled. The program is not closed: ru.MESSAGE_TEXT_ERR8 =Обновление отменено. Приложение не закрыто: ar_SA.MESSAGE_TEXT_ERR8 =تم الغاء التحديث. البرنامج ليس مغلق: de.MESSAGE_TEXT_ERR8 =Update abgebrochen. Die App ist nicht geschlossen: @@ -360,6 +369,7 @@ sv.MESSAGE_TEXT_ERR8 =Uppdatering avbruten. Programmet är inte stängt: sr_Cyrl_RS.MESSAGE_TEXT_ERR8 =Ажурирање отказано. Програм није затворен: en.MESSAGE_TEXT_ERR9 =Update cancelled. Can't create folder: +en_GB.MESSAGE_TEXT_ERR9 =Update cancelled. Can't create folder: ru.MESSAGE_TEXT_ERR9 =Обновление отменено. Не удалось создать папку: ar_SA.MESSAGE_TEXT_ERR9 =تم الغاء التحديث. غير قادر على إنشاء المجلد: de.MESSAGE_TEXT_ERR9 =Update abgebrochen. Ordner kann nicht erstellt werden: @@ -400,6 +410,7 @@ sv.MESSAGE_TEXT_ERR9 =Uppdatering avbruten. Kan inte skapa mapp: sr_Cyrl_RS.MESSAGE_TEXT_ERR9 =Ажурирање отказано. Немогуће креирати фолдер: en.MESSAGE_TEXT_ERR10 =Update cancelled. Can't replace files to backup: +en_GB.MESSAGE_TEXT_ERR10 =Update cancelled. Can't replace files to backup: ru.MESSAGE_TEXT_ERR10 =Обновление отменено. Не удалось переместить файлы в резервную копию: ar_SA.MESSAGE_TEXT_ERR10 =تم الغاء التحديث. غير قادر على استبدال الملفات إلى النسخة احتياطية: de.MESSAGE_TEXT_ERR10 =Update abgebrochen. Die zu sichernden Dateien können nicht ersetzt werden: @@ -440,6 +451,7 @@ sv.MESSAGE_TEXT_ERR10 =Uppdatering avbruten. Kan inte ersätta filer för säker sr_Cyrl_RS.MESSAGE_TEXT_ERR10 =Ажурирање отказано. Немогуће заменити фајлове за резервну копију: en.MESSAGE_TEXT_ERR11 =Can't restore files from backup! +en_GB.MESSAGE_TEXT_ERR11 =Can't restore files from backup! ru.MESSAGE_TEXT_ERR11 =Не удалось восстановить файлы из резервной копии! ar_SA.MESSAGE_TEXT_ERR11 =غير قادر على استرجاع الملفات من النسخة الاحتياطية! de.MESSAGE_TEXT_ERR11 =Dateien können nicht aus dem Backup wiederhergestellt werden! @@ -480,6 +492,7 @@ sv.MESSAGE_TEXT_ERR11 =Kan inte återställa filer från säkerhetskopia! sr_Cyrl_RS.MESSAGE_TEXT_ERR11 =Немогуће повратити фајлове из резервне копије! en.MESSAGE_TEXT_ERR12 =Update cancelled. Can't move updates to App path: +en_GB.MESSAGE_TEXT_ERR12 =Update cancelled. Can't move updates to App path: ru.MESSAGE_TEXT_ERR12 =Обновление отменено. Не удалось переместить обновления в папку приложения: ar_SA.MESSAGE_TEXT_ERR12 =تم الغاء التحديث. غير قادر على نقل التحديثات إلى مسار البرنامج: de.MESSAGE_TEXT_ERR12 =Update abgebrochen. Updates können nicht in den App-Pfad verschoben werden: @@ -520,6 +533,7 @@ sv.MESSAGE_TEXT_ERR12 =Uppdatering avbruten. Kan inte flytta uppdateringar till sr_Cyrl_RS.MESSAGE_TEXT_ERR12 =Ажурирање отказано. Немогуће померити ажурирања на путању апликације: en.MESSAGE_TEXT_ERR13 =An error occurred while remove App path: +en_GB.MESSAGE_TEXT_ERR13 =An error occurred while remove App path: ru.MESSAGE_TEXT_ERR13 =Произошла ошибка при удалении папки приложения: ar_SA.MESSAGE_TEXT_ERR13 =حصل خطأ أثاء إزالة مسار البرنامج: de.MESSAGE_TEXT_ERR13 =Beim Entfernen des App-Pfads ist ein Fehler aufgetreten: @@ -560,6 +574,7 @@ sv.MESSAGE_TEXT_ERR13 =Ett fel inträffade vid borttagning av applikationens sö sr_Cyrl_RS.MESSAGE_TEXT_ERR13 =Грешка се појавила у току одстрањивања путање апликације: en.MESSAGE_TEXT_ERR14 =An error occurred while restore files from backup: +en_GB.MESSAGE_TEXT_ERR14 =An error occurred while restore files from backup: ru.MESSAGE_TEXT_ERR14 =Произошла ошибка при восстановлении файлов из резервной копии: ar_SA.MESSAGE_TEXT_ERR14 =حصل خطأ أثناء استرجاع الملفات من النسخة الاحتياطية: de.MESSAGE_TEXT_ERR14 =Bei der Wiederherstellung von Dateien aus dem Backup ist ein Fehler aufgetreten: @@ -600,6 +615,7 @@ sv.MESSAGE_TEXT_ERR14 =Ett fel inträffade vid återställning av filer från s sr_Cyrl_RS.MESSAGE_TEXT_ERR14 =Грешка се појавила у току повратка фајлова из резервне копије: en.MESSAGE_TEXT_ERR15 =An error occurred while restarting the program! +en_GB.MESSAGE_TEXT_ERR15 =An error occurred while restarting the program! ru.MESSAGE_TEXT_ERR15 =Произошла ошибка при перезапуске приложения! ar_SA.MESSAGE_TEXT_ERR15 =حصل خطأ أثناء إعادة تشغيل البرنامج! de.MESSAGE_TEXT_ERR15 =Beim Neustart der App ist ein Fehler aufgetreten! @@ -640,6 +656,7 @@ sv.MESSAGE_TEXT_ERR15 =Ett fel inträffade vid omstart av programmet! sr_Cyrl_RS.MESSAGE_TEXT_ERR15 =Грешка се појавила у току рестартовања програма! en.MESSAGE_TEXT_ERR16 =SDL init error: +en_GB.MESSAGE_TEXT_ERR16 =SDL init error: ru.MESSAGE_TEXT_ERR16 =Ошибка инициализации SDL: ar_SA.MESSAGE_TEXT_ERR16 =خطأ من SDL init: de.MESSAGE_TEXT_ERR16 =Fehler bei der SDL-Initialisierung: @@ -680,6 +697,7 @@ sv.MESSAGE_TEXT_ERR16 =SDL-initieringsfel: sr_Cyrl_RS.MESSAGE_TEXT_ERR16 =SDL инит грешка: en.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher returned error: +en_GB.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher returned error: ru.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher вернул ошибку: ar_SA.MESSAGE_TEXT_ERR17 =خطأ من ServiceCtrlDispatcher: de.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher hat einen Fehler zurückgegeben: diff --git a/win-linux/langs/en_GB.ts b/win-linux/langs/en_GB.ts new file mode 100644 index 000000000..f128fa24a --- /dev/null +++ b/win-linux/langs/en_GB.ts @@ -0,0 +1,1002 @@ + + + + + CAscApplicationManagerWrapper + + + Presenter View + + + + Update is running. Break update and close the app? + Update is underway. Cancel the update and close the application? + + + Close all editors windows? + All the editor windows will be closed. Do you want to continue? + + + + You must restart the application for the settings to take effect. + You need to restart the application for the settings to take effect. Restart now? + + + + + Document%1.docx + + + + + Book%1.xlsx + + + + + Presentation%1.pptx + + + + + CAscTabWidget + + + + Document + Opening... + + + + CDialogCertificateInfo + + + Certificate Details + + + + + CDialogCertificateInfo::Intf + + + OK + + + + + CDialogOpenSsl + + + Select certificate + + + + + select certificate file... + + + + + Certificate password: + Certificate password: + + + + select key file... + + + + + Key password: + + + + + + + + Open Document + + + + + Enter certificate path + + + + + Certificate is not supported + + + + + Enter certificate password + + + + + Wrong certificate password.<br>Please enter again + Wrong certificate password.<br>Please enter once again + + + + Enter valid private key + + + + + Key is not supported + + + + + Enter key password + + + + + CDownloadWidget + + + Downloads + + + + + Clear + + + + + Cancel + + + + + + kBps + + + + + Canceled + + + + + Open + + + + + Show in folder + + + + + CEditorWindow + + + Open main window + + + + + Document must be saved to continue.<br>Save the document? + The document must be saved to continue.<br>Save the document? + + + + Print Document + Print document + + + + Document must be saved firstly. + The document must be saved first. + + + + %1 has been changed. Save changes? + %1 has been modified.<br>Do you want to save the changes? + + + + Some data will lost.<br>Continue? + If you continue saving in this format all features except the text will be lost.<br>Are you sure you want to continue? + + + + CEditorWindowPrivate + + + There are no printers available + + + + + There are no pages set to print. + + + + + CFileDialogWrapper + + + All files (*.*) + + + + DOCX Document (*.docx) + Office Open XML Document (*.docx) + + + Document template (*.dotx) + Word Open XML Document Template (*.dotx) + + + + DOC Document (*.doc) + Word 97-2003 Document (*.doc) + + + + ODT Document (*.odt) + OpenDocument Text File (*.odt) + + + OpenDocument Document template (*.ott) + OpenDocument Document Template (*.ott) + + + + RTF File (*.rtf) + Rich Text Format File (*.rtf) + + + + TXT File (*.txt) + Plain Text File (*.txt) + + + + HTML File (*.html) + HyperText Markup Language File (*.html) + + + + MHT File (*.mht) + Web Page Archive File (*.mht) + + + + EPUB File (*.epub) + Electronic Publication File (*.epub) + + + + FB2 File (*.fb2) + FictionBook 2 File (*.fb2) + + + + MOBI File (*.mobi) + Mobipocket File (*.mobi) + + + OFORM Document (*.oform) + ONLYOFFICE Fillable Online Form (*.oform) + + + + DOCXF Document (*.docxf) + ONLYOFFICE Form Template (*.docxf) + + + + PPTX File (*.pptx) + Office Open XML Presentation (*.pptx) + + + + PPT File (*.ppt) + PowerPoint 97-2003 Presentation (*.ppt) + + + Presentation template (*.potx) + PowerPoint Open XML Presentation Template (*.potx) + + + + ODP File (*.odp) + OpenDocument Presentation (*.odp) + + + + PPSX File (*.ppsx) + Office Open XML Slide Show (*.ppsx) + + + + Macro-enabled Presentation File (*.pptm) + Macro-enabled Presentation (*.pptm) + + + + XLSX File (*.xlsx) + Office Open XML Spreadsheet (*.xlsx) + + + Spreadsheet template (*.xltx) + Excel Open XML Spreadsheet Template (*.xltx) + + + Macro-enabled spreadsheet template (*.xltm) + Macro-enabled Spreadsheet Template (*.xltm) + + + + XLS File (*.xls) + Excel 97-2003 Spreadsheet (*.xls) + + + + ODS File (*.ods) + OpenDocument Spreadsheet (*.ods) + + + + DOCX Document + Office Open XML Document + + + + OpenDocument Document template + OpenDocument Document Template + + + + ONLYOFFICE Form Document (*.pdf) + PDF Form (*.pdf) + + + + OpenDocument Presentation Template + OpenDocument Presentation Template + + + + Macro-enabled spreadsheet template + Macro-enabled Spreadsheet Template + + + + XLSB File (*.xlsb) + Excel Binary File (*.xlsb) + + + + OpenDocument Spreadsheet Template + OpenDocument Spreadsheet Template + + + + CSV File (*.csv) + Comma Separated Values (*.csv) + + + + PDF File (*.pdf) + Portable Document (*.pdf) + + + + PDFA File (*.pdf) + Portable Document /A (*.pdf) + + + + DJVU File (*.djvu) + Digital Document (*.djvu) + + + + XPS File (*.xps) + OpenXPS Document (*.xps) + + + + SVG Image (*.svg) + + + + + JPG Image (*.jpg *.jpeg) + + + + + PNG Image (*.png) + + + + + Save As + + + + + %1 already exists.<br>Do you want to replace it? + + + + + Word Document + + + + + Excel Workbook + Excel Spreadsheet + + + + PowerPoint Presentation + + + + + %1 File (*.%2) + + + + + + + + Text documents + + + + + + + Spreadsheets + + + + + + + Presentations + + + + + Web Page + + + + + Text files + + + + + + + All supported files + + + + + + Spreadsheet template + Excel Open XML Spreadsheet Template + + + + + Presentation template + PowerPoint Open XML Presentation Template + + + + + Document template + Word Open XML Document Template + + + + Theme file + + + + + Open Document + + + + + + All Images + + + + + + Jpeg (*.jpeg *.jpg);;Png (*.png);;Gif (*.gif);;Bmp (*.bmp) + + + + + + Plugin file (*.plugin) + + + + + Video file + + + + + Audio file + + + + + Select Folder + + + + + CMainWindow + + + More than one document is open.<br>Close the window anyway? + + + + + Don't ask again. + + + + + + File format not supported. + File format is not supported + + + + %1 doesn't exists!<br>Remove file from the list? + %1 is not available. It might be renamed, moved or deleted.<br>Do you want to remove the file from the list? + + + + Document must be saved firstly. + The document must be saved first. + + + + Document must be saved to continue.<br>Save the document? + The document must be saved to continue.<br>Save the document? + + + + There are no printers available + + + + + Print Document + Print document + + + + There are no pages set to print. + + + + + Sign Up + Create portal + + + + %1 is modified.<br>Do you want to keep changes? + %1 has been modified.<br>Do you want to save the changes? + + + + CMainWindowImpl + + + Licensed under + + + + + CPrintProgress + + + Document is printing: page %1 of %2 + Printing document: page %1 of %2 + + + + Document is preparing + Preparing document + + + + &Cancel + + + + + Printing... + + + + + CUpdateManager + + + Check for updates + + + + + Unable to check update: URL not defined. + + + + + To finish updating, restart app + + + + + Restart + + + + + Checking for updates... + + + + + Updates are not allowed! + + + + + This folder configuration does not allow for updates! The folder name should be: + + + + + Downloading new version %1 (%2%) + + + + + Cancel + + + + + An error occurred while loading updates: package Url is empty! + An error occurred while loading updates: package URL is empty! + + + + Update package error: md5 sum does not match the original. + + + + + Preparing update... + + + + + Update is available (version %1) + + + + + Download update + + + + + Current version is up to date + + + + + An error occurred while unpacking the archive + An error occurred while unpacking the archive + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Preparing update (%1%) + + + + + An error occurred while check updates: the Update Service is not installed or is not running! + An error occurred while checking updates: the Update Service is not installed or is not running! + + + + An error occurred while loading updates: the Update Service is not installed or is not running! + + + + + An error occurred while unzip updates: the Update Service is not installed or is not running! + An error occurred while unzipping updates: the Update Service is not installed or is not running! + + + + Error opening JSON file. + + + + + The current version does not support installing this update directly. To install updates, you can download the required package from the official website. + + + + + Update is available + + + + + + Current version + + + + + + New version + + + + + To finish updating, restart the app + + + + + Would you like to download update now? + + + + + Update is ready to install + + + + + QObject + + + %1 doesn't exists!<br>Remove file from the list? + %1 is not available. It might be renamed, moved or deleted.<br>Do you want to remove the file from the list? + + + + File %1 cannot be opened or doesn't exists. + File %1 cannot be opened or doesn't exist. + + + + + All files (*.*) + + + + + XML File (*.xml) + + + + + + Access to file '%1' is denied! + + + + + Read only + + + + + + Skip this version + + + + + + Remind me later + + + + + + Install update + + + + + + Later + + + + + + Restart Now + + + + + + Save and Install Now + Install + + + + + Download update + + + + + + Release notes + + + + + An error occurred while start install updates! + An error occurred while start installing updates! + + + + An error occurred while start replacing files: Update Service not found! + + + + + Cancel + + + + + Yes + + + + + No + + + + + + OK + + + + + Skip + + + + + Buy Now + + + + + Activate + + + + + Continue + + + + + An error occurred while opening the portal:<br>%1 + + + + App can't working correctly under admin rights. + App can't work correctly under admin rights. + + + + File %1 is already loaded. Replace it? + + + + + B + + + + + kB + + + + + MB + + + + + The syntaxis for the page range is invalid.<br>Enter one or more page ranges, for example: 1-3,7,11. + + + + + + Specified range %1-%2 exceeds document limits: maximum number of pages is %3 + + + + + Unable to open print dialog:<br>%1 + + + + diff --git a/win-linux/package/windows/associate_page.iss b/win-linux/package/windows/associate_page.iss index 29ff6b077..db529ff10 100644 --- a/win-linux/package/windows/associate_page.iss +++ b/win-linux/package/windows/associate_page.iss @@ -6,6 +6,7 @@ ChangesAssociations=true [CustomMessages] en.AssociateDescription =Associate office document file types with {#ASSC_APP_NAME} +en_GB.AssociateDescription =Associate office document file types with {#ASSC_APP_NAME} ar_SA.AssociateDescription =هل تريد ربط صيغة المستند بـ {#ASSC_APP_NAME} bg.AssociateDescription =Свържете типовете файлове на офис документи с {#ASSC_APP_NAME} ca.AssociateDescription =Associa els tipus de fitxers de documents d'oficina amb{#ASSC_APP_NAME} @@ -51,6 +52,7 @@ sr_Latn_RS.AssociateDescription =Poveži ofis dokument fajl tipove sa {#ASSC_APP sr_Cyrl_RS.AssociateDescription =Повежи офис документ фајл типове са {#ASSC_APP_NAME} en.AssociateCaption =File Associations +en_GB.AssociateCaption =File Associations ar_SA.AssociateCaption =ربط الملفات bg.AssociateCaption =Свързвания на файлове ca.AssociateCaption =Associacions de fitxers @@ -96,6 +98,7 @@ sr_Latn_RS.AssociateCaption =Fajl povezivanja sr_Cyrl_RS.AssociateCaption =Фајл повезивања en.AssociateDont =Do not associate +en_GB.AssociateDont =Do not associate ar_SA.AssociateDont =عدم ربط bg.AssociateDont =Не свързвай ca.AssociateDont =No associar @@ -141,6 +144,7 @@ sr_Latn_RS.AssociateDont =Nemoj da povežeš sr_Cyrl_RS.AssociateDont =Немој да повежеш en.AssociateAll =Associate all +en_GB.AssociateAll =Associate all ar_SA.AssociateAll =ربط الكل bg.AssociateAll =Свържи всички ca.AssociateAll =Associar tots @@ -186,6 +190,7 @@ sr_Latn_RS.AssociateAll =Poveži sve sr_Cyrl_RS.AssociateAll =Повежи све en.AssociateSel =Associate selected +en_GB.AssociateSel =Associate selected ar_SA.AssociateSel =ربط المختار bg.AssociateSel =Свържи избраните ca.AssociateSel =Associar seleccionats @@ -231,6 +236,7 @@ sr_Latn_RS.AssociateSel =Poveži odabrano sr_Cyrl_RS.AssociateSel =Повежи одабрано en.AssociateAudio =File types +en_GB.AssociateAudio =File types ar_SA.AssociateAudio =صيغ الملف bg.AssociateAudio =Типове файлове ca.AssociateAudio =Tipus de fitxers @@ -276,6 +282,7 @@ sr_Latn_RS.AssociateAudio =Fajl tipovi sr_Cyrl_RS.AssociateAudio =Фајл типови en.extMSWord =Microsoft Word Document +en_GB.extMSWord =Microsoft Word Document ar_SA.extMSWord =مستند مايكروسوفت وورد bg.extMSWord =Microsoft Word документ ca.extMSWord =Document Microsoft Word @@ -321,6 +328,7 @@ sr_Cyrl_RS.extMSWord =Microsoft Word документ sr_Latn_RS.extMSWord =Microsoft Word dokument en.extMSExcel =Microsoft Excel Workbook +en_GB.extMSExcel =Microsoft Excel Workbook ar_SA.extMSExcel =جدول بياني مايكروسوفت إكسل bg.extMSExcel =Microsoft Excel работна книга ca.extMSExcel =Llibre de Microsoft Excel @@ -366,6 +374,7 @@ sr_Cyrl_RS.extMSExcel =Microsoft Excel радна књига sr_Latn_RS.extMSExcel =Microsoft Excel radna knjiga en.extMSPresentation =Microsoft PowerPoint Presentation +en_GB.extMSPresentation =Microsoft PowerPoint Presentation ar_SA.extMSPresentation =عرض تقديمي مايكروسوفت بوربوينت قابل للتعديل bg.extMSPresentation =Microsoft PowerPoint презентация ca.extMSPresentation =Presentació Microsoft PowerPoint @@ -411,6 +420,7 @@ sr_Cyrl_RS.extMSPresentation =Microsoft PowerPoint презентација sr_Latn_RS.extMSPresentation =Microsoft PowerPoint prezentacija en.extMSSlideshow =Microsoft PowerPoint Slideshow +en_GB.extMSSlideshow =Microsoft PowerPoint Slideshow ar_SA.extMSSlideshow =عرض تقديمي مايكروسوفت بوربوينت غير قابل للتعديل bg.extMSSlideshow =Microsoft PowerPoint слайдшоу ca.extMSSlideshow =Presentació de diapositives Microsoft PowerPoint @@ -456,6 +466,7 @@ sr_Cyrl_RS.extMSSlideshow =Microsoft PowerPoint слајд-шоу sr_Latn_RS.extMSSlideshow =Microsoft PowerPoint slajd-šou en.extODT =OpenDocument Text File +en_GB.extODT =OpenDocument Text File ar_SA.extODT =ملف نصي ليبري أوفس bg.extODT =OpenDocument текстов файл ca.extODT =Fitxer de text OpenDocument @@ -501,6 +512,7 @@ sr_Cyrl_RS.extODT =OpenDocument текст фајл sr_Latn_RS.extODT =OpenDocument tekst fajl en.extODS =OpenDocument Spreadsheet +en_GB.extODS =OpenDocument Spreadsheet ar_SA.extODS =جدول ليبري أوفس bg.extODS =OpenDocument електронна таблица ca.extODS =Full de càlcul OpenDocument @@ -546,6 +558,7 @@ sr_Cyrl_RS.extODS =OpenDocument прорачунска табела sr_Latn_RS.extODS =OpenDocument proračunska tabela en.extODP =OpenDocument Presentation +en_GB.extODP =OpenDocument Presentation ar_SA.extODP =عرض ليبري أوفس bg.extODP =OpenDocument презентация ca.extODP =Presentació OpenDocument @@ -591,6 +604,7 @@ sr_Cyrl_RS.extODP =OpenDocument презентација sr_Latn_RS.extODP =OpenDocument prezentacija en.extDOC =Word 97-2003 Document +en_GB.extDOC =Word 97-2003 Document ar_SA.extDOC =مستند وورد 97-2003 bg.extDOC =Word 97-2003 документ ca.extDOC =Document Word 97-2003 @@ -636,6 +650,7 @@ sr_Cyrl_RS.extDOC =Word 97-2003 документ sr_Latn_RS.extDOC =Word 97-2003 dokument en.extDOCX =Office Open XML Document +en_GB.extDOCX =Office Open XML Document ar_SA.extDOCX =مستند وورد bg.extDOCX =Office Open XML документ ca.extDOCX =Document Office Open XML @@ -681,6 +696,7 @@ sr_Cyrl_RS.extDOCX =Office Open XML документ sr_Latn_RS.extDOCX =Office Open XML dokument en.extDOCXF =ONLYOFFICE Form Template +en_GB.extDOCXF =ONLYOFFICE Form Template ar_SA.extDOCXF =قالب استبيان ONLYOFFICE bg.extDOCXF =ONLYOFFICE Шаблон на формуляр ca.extDOCXF =Plantilla de formulari ONLYOFFICE @@ -726,6 +742,7 @@ sr_Cyrl_RS.extDOCXF =ONLYOFFICE формулар шаблон sr_Latn_RS.extDOCXF =ONLYOFFICE formular šablon en.extXLS =Excel 97-2003 Spreadsheet +en_GB.extXLS =Excel 97-2003 Spreadsheet ar_SA.extXLS =جدول إكسل 97-2003 bg.extXLS =Excel 97-2003 таблица ca.extXLS =Full de càlcul Excel 97-2003 @@ -771,6 +788,7 @@ sr_Cyrl_RS.extXLS =Excel 97-2003 прорачунска табела sr_Latn_RS.extXLS =Excel 97-2003 proračunska tabela en.extXLSX =Office Open XML Spreadsheet +en_GB.extXLSX =Office Open XML Spreadsheet ar_SA.extXLSX =جدول إكسل bg.extXLSX =Office Open XML таблица ca.extXLSX =Full de càlcul Office Open XML @@ -816,6 +834,7 @@ sr_Cyrl_RS.extXLSX =Office Open XML прорачунска табела sr_Latn_RS.extXLSX =Office Open XML proračunska tabela en.extPPT =PowerPoint 97-2003 Presentation +en_GB.extPPT =PowerPoint 97-2003 Presentation ar_SA.extPPT =عرض بوربوينت 97-2003 bg.extPPT =PowerPoint 97-2003 Презентация ca.extPPT =Presentació de diapositives PowerPoint 97-2003 @@ -861,6 +880,7 @@ sr_Cyrl_RS.extPPT =PowerPoint 97-2003 презентација sr_Latn_RS.extPPT =PowerPoint 97-2003 prezentacija en.extPPTX =Office Open XML Presentation +en_GB.extPPTX =Office Open XML Presentation ar_SA.extPPTX =عرض بوربوينت قابل للتعديل bg.extPPTX =Office Open XML Презентация ca.extPPTX =Presentació Office Open XML @@ -906,6 +926,7 @@ sr_Cyrl_RS.extPPTX =Office Open XML презентација sr_Latn_RS.extPPTX =Office Open XML prezentacija en.extPPS =PowerPoint 97-2003 Slide Show +en_GB.extPPS =PowerPoint 97-2003 Slide Show ar_SA.extPPS =عرض بوربوينت 97-2003 bg.extPPS =PowerPoint 97-2003 Слайдшоу ca.extPPS =Presentació de diapositives PowerPoint 97-2003 @@ -951,6 +972,7 @@ sr_Cyrl_RS.extPPS =PowerPoint 97-2003 слајд-шоу sr_Latn_RS.extPPS =PowerPoint 97-2003 slajd-šou en.extPPSX =Office Open XML Slide Show +en_GB.extPPSX =Office Open XML Slide Show ar_SA.extPPSX =عرض بوربوينت غير قابل للتعديل bg.extPPSX =Office Open XML Слайдшоу ca.extPPSX =Presentació de diapositives Office Open XML @@ -996,6 +1018,7 @@ sr_Cyrl_RS.extPPSX =Office Open XML слајд-шоу sr_Latn_RS.extPPSX =Office Open XML slajd-šou en.extRTF =Rich Text Format File +en_GB.extRTF =Rich Text Format File ar_SA.extRTF =ملف نصي غني bg.extRTF =Файл с богат текстов формат ca.extRTF =Fitxer en format de text enriquit @@ -1041,6 +1064,7 @@ sr_Latn_RS.extRTF =Богати текст формат фајл sr_Latn_RS.extRTF =Bogati tekst format fajl en.extCSV =Comma Separated Values +en_GB.extCSV =Comma Separated Values ar_SA.extCSV =قيم مفرّقة بفاصلة bg.extCSV =Стойности, разделени със запетая ca.extCSV =Valors separats per comes @@ -1086,6 +1110,7 @@ sr_Cyrl_RS.extCSV =Вредности одвојене зарезом sr_Latn_RS.extCSV =Vrednosti odvojene zarezom en.extPDF =Portable Document +en_GB.extPDF =Portable Document ar_SA.extPDF =بي دي إف bg.extPDF =Преносим документ ca.extPDF =Document portàtil @@ -1131,6 +1156,7 @@ sr_Cyrl_RS.extPDF =Преносиви документ sr_Latn_RS.extPDF =Prenosivi dokument en.extDJVU =Digital Document +en_GB.extDJVU =Digital Document ar_SA.extDJVU =مستند رقمي bg.extDJVU =Дигитален документ ca.extDJVU =Document digital @@ -1176,6 +1202,7 @@ sr_Cyrl_RS.extDJVU =Дигитални документ sr_Latn_RS.extDJVU =Digitalni dokument en.extXPS =Open XML Paper Specification +en_GB.extXPS =Open XML Paper Specification ar_SA.extXPS =مستند أوبن إكس بي إس bg.extXPS =Open XML хартиена спецификация ca.extXPS =Especificació de paper Open XML @@ -1221,6 +1248,7 @@ sr_Cyrl_RS.extXPS =Open XML папир спецификација sr_Latn_RS.extXPS =Open XML papir specifikacija en.extPOT =PowerPoint Template +en_GB.extPOT =PowerPoint Template ar_SA.extPOT =قالب بوربوينت sr_Latn_RS.extPOT =PowerPoint Šablon si.extPOT =පවර්පොයින්ට් අච්චුව @@ -1238,6 +1266,7 @@ sr_Cyrl_RS.extPOT =PowerPoint шаблон sr_Latn_RS.extPOT =PowerPoint šablon en.extPPTM =PowerPoint Open XML Macro-Enabled Presentation +en_GB.extPPTM =PowerPoint Open XML Macro-Enabled Presentation ar_SA.extPPTM =عرض بوربوينت مع خاصية الماكرو sr_Latn_RS.extPPTM =PowerPoint Open XML Makro-omogućena Prezentacija si.extPPTM =පවර්පොයින්ට් විවෘත XML සාර්ව-සබල සමර්පණය @@ -1255,6 +1284,7 @@ sr_Cyrl_RS.extPPTM =PowerPoint презентација са макроима у sr_Latn_RS.extPPTM =PowerPoint prezentacija sa makroima u otvorenom XML formatu en.extEPUB =Open eBook File +en_GB.extEPUB =Open eBook File ar_SA.extEPUB =كتاب النشر الإلكتروني sr_Latn_RS.extEPUB =Open eBook Fajl si.extEPUB =වි-පොත් ගොනුව අරින්න @@ -1272,6 +1302,7 @@ sr_Cyrl_RS.extEPUB =Отворена еКњига sr_Latn_RS.extEPUB =Otvorena eKnjiga en.extFB2 =FictionBook 2.0 File +en_GB.extFB2 =FictionBook 2.0 File ar_SA.extFB2 =ملف فكشنبوك 2.0 sr_Latn_RS.extFB2 =KnjigaFikcije 2.0 Fajl si.extFB2 =ෆික්ෂන්බුක් 2.0 ගොනුව @@ -1289,6 +1320,7 @@ sr_Cyrl_RS.extFB2 =FictionBook 2.0 датотека sr_Latn_RS.extFB2 =FictionBook 2.0 datoteka en.extDOTX =Word Open XML Document Template +en_GB.extDOTX =Word Open XML Document Template ar_SA.extDOTX =قالب وورد sr_Latn_RS.extDOTX =Word Open XML Dokument Šablon si.extDOTX =වර්ඩ් විවෘත XML ලේඛන අච්චුව @@ -1306,6 +1338,7 @@ sr_Cyrl_RS.extDOTX =Word шаблон документа у отвореном X sr_Latn_RS.extDOTX =Word šablon dokumenta u otvorenom XML formatu en.extOXPS =Open XML Paper Specification +en_GB.extOXPS =Open XML Paper Specification ar_SA.extOXPS =مستند أوبن إكس بي إس bg.extOXPS =Open XML хартиена спецификация ca.extOXPS =Especificació de paper Open XML @@ -1350,6 +1383,7 @@ sr_Cyrl_RS.extOXPS =Open XML папир спецификација sr_Latn_RS.extOXPS =Open XML papir specifikacija en.extXLSB =Excel Binary File Format +en_GB.extXLSB =Excel Binary File Format si.extXLSB =එක්සෙල් ද්විමය ගොනු ආකෘතිය es.extXLSB =Formato de archivo binario de Excel fr.extXLSB =Format de fichier binaire Excel @@ -1367,6 +1401,7 @@ sr_Latn_RS.extXLSB =Excel binarni format datoteke ;====================================================================================================== en.jumpDOCX =New document +en_GB.jumpDOCX =New document ar_SA.jumpDOCX =مستند جديد bg.jumpDOCX =Нов документ ca.jumpDOCX =Nou document @@ -1412,6 +1447,7 @@ sr_Latn_RS.jumpDOCX =Novi dokument sr_Cyrl_RS.jumpDOCX =Нови документ en.jumpXLSX =New spreadsheet +en_GB.jumpXLSX =New spreadsheet ar_SA.jumpXLSX =جدول بياني جديد bg.jumpXLSX =Нова електронна таблица ca.jumpXLSX =Nou full de càlcul @@ -1457,6 +1493,7 @@ sr_Latn_RS.jumpXLSX =Nova proračunska tabela sr_Cyrl_RS.jumpXLSX =Нова прорачунска табела en.jumpPPTX =New presentation +en_GB.jumpPPTX =New presentation ar_SA.jumpPPTX =عرض تقديمي جديد bg.jumpPPTX =Нова презентация ca.jumpPPTX =Nova presentació @@ -1502,6 +1539,7 @@ sr_Latn_RS.jumpPPTX =Nova prezentacija sr_Cyrl_RS.jumpPPTX =Нова презентација en.jumpDOCXF =New PDF Form +en_GB.jumpDOCXF =New PDF Form ar_SA.jumpDOCXF =نموذج PDF جديد bg.jumpDOCXF =Нов PDF формуляр ca.jumpDOCXF =Nou formulari PDF @@ -1547,6 +1585,7 @@ sr_Latn_RS.jumpDOCXF =Novi PDF formular sr_Cyrl_RS.jumpDOCXF =Нови PDF формулар en.defprogAppDescription=Free desktop office suite for document editing and collaboration +en_GB.defprogAppDescription=Free desktop office suite for document editing and collaboration ar_SA.defprogAppDescription=حزمة برامج مكتبية مجانية لتحرير المستندات والتعاون لإنجازها مع رفقائك bg.defprogAppDescription=Безплатен офис пакет за редактиране и съвместна работа по документи ca.defprogAppDescription=Suite d'oficina gratuïta per a l'edició de documents i col·laboració @@ -1592,6 +1631,7 @@ sr_Latn_RS.defprogAppDescription=Besplatni desktop ofis paket za uređivanje dok sr_Cyrl_RS.defprogAppDescription =Бесплатни десктоп офис пакет за уређивање докумената и сарадњу en.warnWin10FileAssociationDesc=To associate the files with the application, open the following window after the installation is complete: +en_GB.warnWin10FileAssociationDesc=To associate the files with the application, open the following window after the installation is complete: ar_SA.warnWin10FileAssociationDesc=لربط الملفات مع التطبيق، افتح النافذة التالية بعد إكمال التثبيت bg.warnWin10FileAssociationDesc=За да свържете файловете с приложението, отворете следния прозорец, след като инсталацията приключи: ca.warnWin10FileAssociationDesc=Per associar els fitxers a l'aplicació, obriu la finestra següent després de la instal·lació: @@ -1637,6 +1677,7 @@ sr_Latn_RS.warnWin10FileAssociationDesc=Da biste povezali fajlove sa aplikacijom sr_Cyrl_RS.warnWin10FileAssociationDesc =Да бисте повезали фајлове са апликацијом, отворите предстојећи прозор након што се инсталација заврши en.warnWin10FileAssociationPath=Settings > Apps > Default apps +en_GB.warnWin10FileAssociationPath=Settings > Apps > Default apps ar_SA.warnWin10FileAssociationPath=الإعدادات > تطبيقات > الافتراضية bg.warnWin10FileAssociationPath=Настройки> Приложения> Приложение по подразбиране ca.warnWin10FileAssociationPath=Configuració> Aplicacions> Aplicacions predeterminades @@ -1682,6 +1723,7 @@ sr_Latn_RS.warnWin10FileAssociationPath=Podešavanja > Aplikacije > Podrazumevan sr_Cyrl_RS.warnWin10FileAssociationPath =Подешавања > Апликације > Подразумеване апликације en.runOpenDefaultApps=Open Default apps +en_GB.runOpenDefaultApps=Open Default apps ar_SA.runOpenDefaultApps=افتح التطبيقات الافتراضية bg.runOpenDefaultApps=Отвори приложения по подразбиране ca.runOpenDefaultApps=Obriu les aplicacions per defecte diff --git a/win-linux/package/windows/common.iss b/win-linux/package/windows/common.iss index 37f7864c5..25e750add 100644 --- a/win-linux/package/windows/common.iss +++ b/win-linux/package/windows/common.iss @@ -160,6 +160,7 @@ Name: zh_TW; MessagesFile: compiler:Languages\ChineseTraditional.isl; LicenseFil Name: ar_SA; MessagesFile: compiler:Languages\Arabic.isl; LicenseFile: {#sLicenseFile}; Name: sr_Latn_RS; MessagesFile: compiler:Languages\SerbianLatin.isl; LicenseFile: {#sLicenseFile}; Name: sr_Cyrl_RS; MessagesFile: compiler:Languages\SerbianCyrillic.isl; LicenseFile: {#sLicenseFile}; +Name: en_GB; MessagesFile: compiler:Languages\EnglishBritish.isl; LicenseFile: {#sLicenseFile}; [LangOptions] lo.LanguageName=ພາສາລາວ @@ -169,6 +170,7 @@ ar_SA.LanguageName=الْعَرَبِيَّة [CustomMessages] ;====================================================================================================== en.PrevVer=The previous version of {#sAppName} detected, please click 'OK' button to uninstall it, or 'Cancel' to quit setup. +en_GB.PrevVer=The previous version of {#sAppName} detected, please click 'OK' button to uninstall it, or 'Cancel' to quit setup. ru.PrevVer=Обнаружена предыдущая версия {#sAppName}, нажмите кнопку 'OK', чтобы удалить её, или 'Отмена', чтобы выйти из программы инсталляции. it_IT.PrevVer=È stata rilevata la versione precedente di {#sAppName}. Fai clic sul pulsante "OK" per disinstallarla oppure su "Annulla" per uscire dalla configurazione. fr.PrevVer=La version précédente de {#sAppName} a été détectée. Cliquez sur le bouton 'OK' pour la désinstaller ou sur 'Annuler' pour quitter l'installation. @@ -180,6 +182,7 @@ es.PrevVer=Se ha detectado la versión anterior de {#sAppName}. Por favor, haga de.PrevVer=Die vorherige Version von {#sAppName} wurde erkannt. Bitte klicken Sie auf 'OK', um sie zu deinstallieren, oder auf 'Abbrechen', um das Setup zu beenden. ;====================================================================================================== en.Launch =Launch %1 +en_GB.Launch =Launch %1 ar_SA.Launch =بدء تشغيل %1 bg.Launch =Пускане %1 ca.Launch =Llança %1 @@ -225,6 +228,7 @@ sr_Latn_RS.Launch =Lansiraj %1 sr_Cyrl_RS.Launch =Лансирај %1 ;====================================================================================================== en.CreateDesktopIcon =Create %1 &desktop icon +en_GB.CreateDesktopIcon =Create %1 &desktop icon ar_SA.CreateDesktopIcon =إنشاء %1 &أيقونة سطح المكتب bg.CreateDesktopIcon =Създаване на %1 &икона на работния плот ca.CreateDesktopIcon =Crea una icona d'escriptori per a %1 @@ -270,6 +274,7 @@ sr_Latn_RS.CreateDesktopIcon =Kreiraj %1 &desktop ikonicu sr_Cyrl_RS.CreateDesktopIcon =Креирај %1 &десктоп иконицу ;====================================================================================================== en.InstallAdditionalComponents =Installing additional system components. Please wait... +en_GB.InstallAdditionalComponents =Installing additional system components. Please wait... ar_SA.InstallAdditionalComponents =جاري تثبيت مكونات نظام إضافية. الرجاء الانتظار... ca.InstallAdditionalComponents =Instal·lació de components de sistema addicionals. Si us plau, espereu... bg.InstallAdditionalComponents =Инсталиране на допълнителни системни компоненти. Моля, изчакайте... @@ -315,6 +320,7 @@ sr_Latn_RS.InstallAdditionalComponents =Instaliranje dodatnih sistemskih kompone sr_Cyrl_RS.InstallAdditionalComponents =Инсталирање додатних системских компоненти. Молимо сачекајте... ;====================================================================================================== en.AdditionalTasks =Tasks: +en_GB.AdditionalTasks =Tasks: ar_SA.AdditionalTasks =المهام: bg.AdditionalTasks =Задачи: ca.AdditionalTasks =Tasques: @@ -360,6 +366,7 @@ sr_Latn_RS.AdditionalTasks =Zadaci: sr_Cyrl_RS.AdditionalTasks =Задаци: ;====================================================================================================== en.Uninstall =Uninstall +en_GB.Uninstall =Uninstall ar_SA.Uninstall =إزالة التثبيت bg.AdditionalTasks =Деинсталиране ca.AdditionalTasks =Desinstal·lar @@ -405,6 +412,7 @@ sr_Latn_RS.Uninstall =Deinstaliraj sr_Cyrl_RS.Uninstall =Деинсталирај ;====================================================================================================== en.WarningWrongArchitecture =You are trying to install the %1-bit application version over the %2-bit version installed. Please uninstall the previous version first or download the correct version for installation. +en_GB.WarningWrongArchitecture =You are trying to install the %1-bit application version over the %2-bit version installed. Please uninstall the previous version first or download the correct version for installation. ar_SA.WarningWrongArchitecture =أنت تحاول تثبيت نسخة %1-bit من التطبيق على نسخة %2-bit المثبتة. فضلًا قم بإزالة النسخة السابقة أولًا أو قم بتحميل النسخة الصحيحة ليتم تثبيتها. bg.WarningWrongArchitecture =Опитвате се да инсталирате %1-битовата версия на приложението над инсталираната %2-битова версия. Моля, деинсталирайте първо предишната версия или изтеглете правилната версия за инсталиране. ca.WarningWrongArchitecture =Estau provant a instal·lar la versió de l'aplicació %1-bit amb la versió %2-bit instal·lada. Si us plau, desintaleu primer la versió anterior o descarregeu la versió correcta per a la instal·lació. @@ -451,6 +459,7 @@ sr_Cyrl_RS.WarningWrongArchitecture =Покушавате да инсталир ;====================================================================================================== en.UpdateAppRunning=Setup has detected that %1 is currently running.%n%nIt'll be closed automatically. Click OK to continue, or Cancel to exit. +en_GB.UpdateAppRunning=Setup has detected that %1 is currently running.%n%nIt'll be closed automatically. Click OK to continue, or Cancel to exit. ar_SA.UpdateAppRunning=تم اكتشاف أن %1 قيد التشغيل.%n%nسيتم إغلاقه بشكل تلقائي. اضغط حسنًا للإكمال، أو إلغاء. bg.UpdateAppRunning=Настройката установи, че %1 в момента работи.%n%nТова ще бъде затворено автоматично. Щракнете върху OK, за да продължите, или Отказ, за да излезете. ca.UpdateAppRunning=La configuració ha detectat que actualment s'està executant %1.%n%n Es tancarà automàticament. Feu clic a D'acord per continuar o Cancel·la per sortir. @@ -496,6 +505,7 @@ sr_Latn_RS.UpdateAppRunning=Setup je detektovao da %1 se trenutno izvršava.%n%n sr_Cyrl_RS.UpdateAppRunning =Сетуп је детектовао да %1 се тренутно извршава.%n%nБиће затворено аутоматски. Кликните ОК да наставите, или Откажи да изађете. ;====================================================================================================== en.WarningClearAppData =Do you want to clear the user settings and application cached data? +en_GB.WarningClearAppData =Do you want to clear the user settings and application cached data? ar_SA.WarningClearAppData =هل تريد مسح إعدادات المستخدم وبيانات التطبيق المؤقتة؟ bg.WarningClearAppData =Искате ли да изчистите потребителските настройки и кешираните данни на приложението? ca.WarningClearAppData =Voleu esborrar la configuració de l'usuari i les dades de la memòria cau de l'aplicació? @@ -543,6 +553,7 @@ sr_Cyrl_RS.WarningClearAppData =Да ли желите да обришете к ;en.AssociateDescription =Associate office document file types with %1 +;en_GB.AssociateDescription =Associate office document file types with %1 ;ar_SA.AssociateDescription =هل تريد ربط صيغة المستند بـ %1 ;bg.AssociateDescription =Свържете типовете файлове на офис документи с %1 ;it_IT.AssociateDescription =Associa i file documentodi Office con %1 @@ -568,6 +579,7 @@ sr_Cyrl_RS.WarningClearAppData =Да ли желите да обришете к ;sr_Cyrl_RS.AssociateDescription =Повежи врсте офис фајл докумената са %1 ;====================================================================================================== en.UpdateService =Update service for {#sAppName} +en_GB.UpdateService =Update service for {#sAppName} ar_SA.UpdateService =خدمة التحديث لـ {#sAppName} cs.UpdateService =Služba aktualizace {#sAppName} fi.UpdateService =Palvelu päivitystä varten {#sAppName} diff --git a/win-linux/package/windows/uninstall_page.iss b/win-linux/package/windows/uninstall_page.iss index e696f791f..37b2649f6 100644 --- a/win-linux/package/windows/uninstall_page.iss +++ b/win-linux/package/windows/uninstall_page.iss @@ -1,6 +1,7 @@  [CustomMessages] en.UninstallPageLabel=Press Uninstall to proceed with uninstallation. +en_GB.UninstallPageLabel=Press Uninstall to proceed with uninstallation. cs.UninstallPageLabel=Stisknutím Odinstalovat pokračujte v odinstalování. sk.UninstallPageLabel=Stlačením Odinštalovať pokračujte v odinštalácii. ru.UninstallPageLabel=Нажмите кнопку «Удалить», чтобы приступить к удалению. @@ -22,6 +23,7 @@ sr_Cyrl_RS.UninstallPageLabel=Притисните Деинсталирај да en.UninstallOptionClearData=Clear all user settings and application cached data +en_GB.UninstallOptionClearData=Clear all user settings and application cached data cs.UninstallOptionClearData=Vymažte všechna uživatelská nastavení a data uložená v paměti sk.UninstallOptionClearData=Vymazať všetky používateľské nastavenia a údaje uložené vo vyrovnávacej pamäti ru.UninstallOptionClearData=Очистить все пользовательские настройки и кэш приложения From fac8433f4eacf0662b9ef838efbb7dc676acd294 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 19 Aug 2024 17:59:01 +0300 Subject: [PATCH 02/97] [win] fix bug 69675 --- win-linux/src/windows/platform_win/cwindowplatform.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/win-linux/src/windows/platform_win/cwindowplatform.cpp b/win-linux/src/windows/platform_win/cwindowplatform.cpp index a92182ae3..b78553927 100644 --- a/win-linux/src/windows/platform_win/cwindowplatform.cpp +++ b/win-linux/src/windows/platform_win/cwindowplatform.cpp @@ -177,6 +177,9 @@ CWindowPlatform::CWindowPlatform(const QRect &rect) : m_dpi = GetLogicalDpi(this); GetFrameMetricsForDpi(m_frame, m_dpi, m_isMaximized); SetWindowPos(m_hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); + connect(this->window()->windowHandle(), &QWindow::screenChanged, this, [=]() { + SetWindowPos(m_hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); + }); } CWindowPlatform::~CWindowPlatform() From 18914dbf28305d544e4d9c61fc13331595585918 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 21 Aug 2024 20:21:17 +0300 Subject: [PATCH 03/97] [start page] refactoring --- common/loginpage/src/css/component.less | 8 +++++--- common/loginpage/src/panelsettings.js | 2 +- common/loginpage/src/styles.less | 14 ++++++-------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/common/loginpage/src/css/component.less b/common/loginpage/src/css/component.less index 3dc2b5866..5bc3f6e5d 100644 --- a/common/loginpage/src/css/component.less +++ b/common/loginpage/src/css/component.less @@ -353,9 +353,11 @@ input[type="radio"] { } } - .dropdown-menu li small { - padding-left: 0; - display: block; + &.subtext-bottom { + .dropdown-menu li small { + padding-left: 0; + display: block; + } } .rtl & { diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index ec4f5fb77..f683c9369 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -211,7 +211,7 @@
- diff --git a/common/loginpage/src/styles.less b/common/loginpage/src/styles.less index ee57dec3e..6086bfceb 100644 --- a/common/loginpage/src/styles.less +++ b/common/loginpage/src/styles.less @@ -879,14 +879,6 @@ li.menu-item { } } -#box-settings { - #options-wrap { - overflow-y: auto; - flex-grow: 0; - height: 100%; - } -} - .menu-container { position: absolute; } @@ -1284,6 +1276,12 @@ li.menu-item { > .content-box { overflow-y: auto; } + + #options-wrap { + overflow-y: auto; + flex-grow: 0; + height: 100%; + } } .templates { From 7a9c266154439195eb4ecb2d7ef18212efa0e42b Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 21 Aug 2024 20:25:12 +0300 Subject: [PATCH 04/97] [win-nix] extended Language combo in settings --- common/loginpage/src/css/component.less | 13 ++++ common/loginpage/src/panelsettings.js | 5 +- common/loginpage/src/styles.less | 7 ++ win-linux/src/clangater.cpp | 92 ++++++++++++------------- win-linux/src/clangater.h | 2 +- 5 files changed, 70 insertions(+), 49 deletions(-) diff --git a/common/loginpage/src/css/component.less b/common/loginpage/src/css/component.less index 5bc3f6e5d..7a36b5943 100644 --- a/common/loginpage/src/css/component.less +++ b/common/loginpage/src/css/component.less @@ -360,6 +360,19 @@ input[type="radio"] { } } + &.subtext-right { + .dropdown-menu li { + span.text { + width: 100%; + } + + small { + float: right; + padding-top: 2px; + } + } + } + .rtl & { .dropdown-menu { right: 0; diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index f683c9369..1791805ea 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -174,7 +174,7 @@
- +
@@ -547,7 +547,8 @@ let def_lang; for (let lang in appSettings.locale.langs) { /^en/.test(lang) && (def_lang = lang); - $combo.append(``); + const n = appSettings.locale.langs[lang]; + $combo.append(``); } if ( !appSettings.locale.langs[appSettings.locale.current] ) { diff --git a/common/loginpage/src/styles.less b/common/loginpage/src/styles.less index 6086bfceb..bec96b0f9 100644 --- a/common/loginpage/src/styles.less +++ b/common/loginpage/src/styles.less @@ -1282,8 +1282,15 @@ li.menu-item { flex-grow: 0; height: 100%; } + + .settings-field-lang { + .dropdown-menu { + width: 350px; + } + } } + .templates { #frame { display: flex; diff --git a/win-linux/src/clangater.cpp b/win-linux/src/clangater.cpp index 74fc47eaa..9b07875fb 100644 --- a/win-linux/src/clangater.cpp +++ b/win-linux/src/clangater.cpp @@ -107,7 +107,7 @@ public: } QString langName(const QString& code) { - return m_langs.value(code); + return m_langs.value(code).first; } bool reload(const QString& lang) { @@ -140,7 +140,7 @@ public: } QString findCloseLang(const QString& n) { - QMap::iterator i = m_langs.begin(); + QMap>::iterator i = m_langs.begin(); while ( i != m_langs.end() ) { if ( i.key().startsWith(n) ) return i.key(); @@ -155,51 +155,51 @@ private: std::list m_list; std::list m_dirs; - QMap m_langs{ - {"en-US", "English"}, - {"ru-RU", "Русский"}, - {"de-DE", "Deutsch"}, - {"fr-FR", "Français"}, - {"es-ES", "Español"}, - {"sk-SK", "Slovenčina"}, - {"cs-CZ", "Čeština"}, - {"it-IT", "Italiano"}, - {"pt-BR", "Português Brasileiro"} - ,{"pt-PT", "Português (Portugal)"} - ,{"pl-PL", "Polski"} - ,{"zh-CN", "简体中文"} - ,{"zh-TW", "繁體中文"} - ,{"ca-ES", "Catalan"} - ,{"da-DK", "Dansk"} - ,{"el-GR", "Ελληνικά"} + QMap> m_langs{ + {"en-US", {"English", ""}}, + {"ru-RU", {"Русский", "Russian"}}, + {"de-DE", {"Deutsch", "German"}}, + {"fr-FR", {"Français", "French"}}, + {"es-ES", {"Español", "Spanish"}}, + {"sk-SK", {"Slovenčina", "Slovak"}}, + {"cs-CZ", {"Čeština", "Czech"}}, + {"it-IT", {"Italiano", "Italian"}}, + {"pt-BR", {"Português Brasileiro", "Portuguese (Brazil)"}} + ,{"pt-PT", {"Português (Portugal)", "Portuguese (Portugal)"}} + ,{"pl-PL", {"Polski", "Polish"}} + ,{"zh-CN", {"简体中文", "Chinese (Simplified)"}} + ,{"zh-TW", {"繁體中文", "Chinese (Traditional)"}} + ,{"ca-ES", {"Catalan", "Catalan"}} + ,{"da-DK", {"Dansk", "Danish"}} + ,{"el-GR", {"Ελληνικά", "Greek"}} // ,{"et-EE", "Eesti"} - ,{"fi-FI", "Suomi"} -// ,{"ga-IE", "Gaeilge"} + ,{"fi-FI", {"Suomi", "Finnish"}} +// ,{"ga-IE", {"Gaeilge", "Galego"}} // ,{"hi-IN", "हिन्दी"} // ,{"hr-HR", "Hrvatska"} - ,{"hu-HU", "Magyar"} - ,{"hy-AM", "Հայերեն"} - ,{"id-ID", "Indonesian"} - ,{"no", "Norsk"} - ,{"ro-RO", "Romanian"} - ,{"sl-SI", "Slovene"} - ,{"sv-SE", "Svenska"} - ,{"tr-TR", "Türkçe"} - ,{"ja-JP", "日本語"} - ,{"ko-KR", "한국어"} - ,{"bg-BG", "Български"} - ,{"nl-NL", "Nederlands"} - ,{"vi-VN", "Tiếng Việt"} - ,{"lv-LV", "Latviešu valoda"} + ,{"hu-HU", {"Magyar", "Hungarian"}} + ,{"hy-AM", {"Հայերեն", "Armenian"}} + ,{"id-ID", {"Indonesian", "Indonesian"}} + ,{"no", {"Norsk", "Norwegian"}} + ,{"ro-RO", {"Romanian", "Romanian"}} + ,{"sl-SI", {"Slovene", "Slovenian"}} + ,{"sv-SE", {"Svenska", "Swedish"}} + ,{"tr-TR", {"Türkçe", "Turkish"}} + ,{"ja-JP", {"日本語", "Japanese"}} + ,{"ko-KR", {"한국어", "Korean"}} + ,{"bg-BG", {"Български", "Bulgarian"}} + ,{"nl-NL", {"Nederlands", "Dutch"}} + ,{"vi-VN", {"Tiếng Việt", "Vietnamese"}} + ,{"lv-LV", {"Latviešu valoda", "Latvian"}} // ,{"lt-LT", "Lietuvių kalba"} - ,{"be-BY", "Беларуская мова"} - ,{"uk-UA", "Украї́нська мо́ва"} - ,{"lo-LA", "ພາສາລາວ"} - ,{"gl-ES", "Galego"} - ,{"si-LK", "සිංහල"} - ,{"ar-SA", "اَلْعَرَبِيَّة"} - ,{"sr-Latn-RS", "Srpski (Latin)"} - ,{"sr-Cyrl-RS", "Српски (Ћирилица)"} + ,{"be-BY", {"Беларуская мова", "Belarusian"}} + ,{"uk-UA", {"Украї́нська мо́ва", "Ukrainian"}} + ,{"lo-LA", {"ພາສາລາວ", "Lao"}} + ,{"gl-ES", {"Galego", "Galego"}} + ,{"si-LK", {"සිංහල", "Sinhala (Sri Lanka)"}} + ,{"ar-SA", {"اَلْعَرَبِيَّة", "Arabic"}} + ,{"sr-Latn-RS", {"Srpski (Latin)", "Serbian (Latin)"}} + ,{"sr-Cyrl-RS", {"Српски (Ћирилица)", "Serbian (Cyrillic)"}} }; }; @@ -317,7 +317,7 @@ void CLangater::reloadTranslations(const QString& lang) #endif } -void CLangater::refreshLangs(const QMap& map) +void CLangater::refreshLangs(const QMap>& map) { getInstance()->m_intf->m_langs = {map}; } @@ -340,9 +340,9 @@ QJsonObject CLangater::availableLangsToJson() { QJsonObject _out_obj; - QMap::const_iterator i = getInstance()->m_intf->m_langs.constBegin(); + QMap>::const_iterator i = getInstance()->m_intf->m_langs.constBegin(); while ( i != getInstance()->m_intf->m_langs.constEnd() ) { - _out_obj.insert(i.key(), i.value()); + _out_obj.insert(i.key(), QJsonObject{{"name", i.value().first},{"enname", i.value().second}}); ++i; } diff --git a/win-linux/src/clangater.h b/win-linux/src/clangater.h index 5e7eea7cf..f6a61b721 100644 --- a/win-linux/src/clangater.h +++ b/win-linux/src/clangater.h @@ -15,7 +15,7 @@ public: static CLangater * getInstance(); static void init(); static void reloadTranslations(const QString&); - static void refreshLangs(const QMap&); + static void refreshLangs(const QMap>&); static QString getCurrentLangCode(); static QString getLangName(const QString& code = QString()); static void addTranslation(const QString& dir, const QString& name); From 395cbaa1923cb3e8c8dd0aad5609558568b58e21 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 24 Aug 2024 01:27:28 +0300 Subject: [PATCH 05/97] [macos] added en-GB lang to the project --- macos/ONLYOFFICE.xcodeproj/project.pbxproj | 19 + .../en-GB.lproj/InfoPlist.strings | 6 + .../en-GB.lproj/InfoPlist.strings | 6 + .../en-GB.lproj/InfoPlist.strings | 6 + .../en-GB.lproj/Document-Sign.strings | 39 ++ .../en-GB.lproj/Localizable.strings | 141 ++++++ .../en-GB.lproj/Localizable.stringsdict | 57 +++ macos/ONLYOFFICE/en-GB.lproj/Main.strings | 456 ++++++++++++++++++ .../en-GB.lproj/MoveApplication.strings | 24 + .../en-GB.lproj/Presentation-Reporter.strings | 3 + 10 files changed, 757 insertions(+) create mode 100644 macos/ONLYOFFICE/Resources/ONLYOFFICE-arm/en-GB.lproj/InfoPlist.strings create mode 100644 macos/ONLYOFFICE/Resources/ONLYOFFICE-v8/en-GB.lproj/InfoPlist.strings create mode 100644 macos/ONLYOFFICE/Resources/ONLYOFFICE-x86_64/en-GB.lproj/InfoPlist.strings create mode 100644 macos/ONLYOFFICE/en-GB.lproj/Document-Sign.strings create mode 100644 macos/ONLYOFFICE/en-GB.lproj/Localizable.stringsdict create mode 100644 macos/ONLYOFFICE/en-GB.lproj/Main.strings create mode 100644 macos/ONLYOFFICE/en-GB.lproj/MoveApplication.strings create mode 100644 macos/ONLYOFFICE/en-GB.lproj/Presentation-Reporter.strings diff --git a/macos/ONLYOFFICE.xcodeproj/project.pbxproj b/macos/ONLYOFFICE.xcodeproj/project.pbxproj index b6e4e7df2..46b608c85 100644 --- a/macos/ONLYOFFICE.xcodeproj/project.pbxproj +++ b/macos/ONLYOFFICE.xcodeproj/project.pbxproj @@ -421,6 +421,15 @@ /* Begin PBXFileReference section */ 5A0229392C4A54600011C6EC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 5A02293A2C7770DF0011C6EC /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/Document-Sign.strings"; sourceTree = ""; }; + 5A02293B2C7770E00011C6EC /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/Localizable.strings"; sourceTree = ""; }; + 5A02293C2C7770E00011C6EC /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "en-GB"; path = "en-GB.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 5A02293D2C7770E00011C6EC /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/Main.strings"; sourceTree = ""; }; + 5A02293E2C7770E00011C6EC /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/MoveApplication.strings"; sourceTree = ""; }; + 5A02293F2C7770E00011C6EC /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/Presentation-Reporter.strings"; sourceTree = ""; }; + 5A0229402C7770E00011C6EC /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/InfoPlist.strings"; sourceTree = ""; }; + 5A0229412C7770E00011C6EC /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/InfoPlist.strings"; sourceTree = ""; }; + 5A0229422C7770E00011C6EC /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/InfoPlist.strings"; sourceTree = ""; }; 5A18BAA3285B5BF6004625C7 /* CertificateCommon.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CertificateCommon.h; sourceTree = ""; }; 5A417F722C05265E00758795 /* sr-Latn-RS */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sr-Latn-RS"; path = "sr-Latn-RS.lproj/Document-Sign.strings"; sourceTree = ""; }; 5A417F732C05265E00758795 /* sr-Latn-RS */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sr-Latn-RS"; path = "sr-Latn-RS.lproj/Localizable.strings"; sourceTree = ""; }; @@ -1955,6 +1964,7 @@ "ar-SA", "sr-Latn-RS", "sr-RS", + "en-GB", ); mainGroup = FCBC425F1B9D650400405301; productRefGroup = FCBC42691B9D650400405301 /* Products */; @@ -2580,6 +2590,7 @@ 5ABE02562B22699F0031328E /* ar-SA */, 5A417F772C05265E00758795 /* sr-Latn-RS */, 5A417F802C05267F00758795 /* sr-RS */, + 5A02293F2C7770E00011C6EC /* en-GB */, ); name = "Presentation-Reporter.storyboard"; sourceTree = ""; @@ -2630,6 +2641,7 @@ 5ABE02552B22699F0031328E /* ar-SA */, 5A417F762C05265E00758795 /* sr-Latn-RS */, 5A417F7F2C05267F00758795 /* sr-RS */, + 5A02293E2C7770E00011C6EC /* en-GB */, ); name = MoveApplication.strings; sourceTree = ""; @@ -2720,6 +2732,7 @@ 5ABE02592B22699F0031328E /* ar-SA */, 5A417F7A2C05265E00758795 /* sr-Latn-RS */, 5A417F832C05267F00758795 /* sr-RS */, + 5A0229422C7770E00011C6EC /* en-GB */, ); name = InfoPlist.strings; sourceTree = ""; @@ -2810,6 +2823,7 @@ 5ABE02582B22699F0031328E /* ar-SA */, 5A417F792C05265E00758795 /* sr-Latn-RS */, 5A417F822C05267F00758795 /* sr-RS */, + 5A0229412C7770E00011C6EC /* en-GB */, ); name = InfoPlist.strings; sourceTree = ""; @@ -2901,6 +2915,7 @@ 5ABE02572B22699F0031328E /* ar-SA */, 5A417F782C05265E00758795 /* sr-Latn-RS */, 5A417F812C05267F00758795 /* sr-RS */, + 5A0229402C7770E00011C6EC /* en-GB */, ); name = InfoPlist.strings; sourceTree = ""; @@ -2951,6 +2966,7 @@ 5ABE02542B22699F0031328E /* ar-SA */, 5A417F752C05265E00758795 /* sr-Latn-RS */, 5A417F7E2C05267F00758795 /* sr-RS */, + 5A02293D2C7770E00011C6EC /* en-GB */, ); name = Main.storyboard; sourceTree = ""; @@ -3001,6 +3017,7 @@ 5ABE02532B22699F0031328E /* ar-SA */, 5A417F742C05265E00758795 /* sr-Latn-RS */, 5A417F7D2C05267F00758795 /* sr-RS */, + 5A02293C2C7770E00011C6EC /* en-GB */, ); name = Localizable.stringsdict; sourceTree = ""; @@ -3051,6 +3068,7 @@ 5ABE02512B22699F0031328E /* ar-SA */, 5A417F722C05265E00758795 /* sr-Latn-RS */, 5A417F7B2C05267F00758795 /* sr-RS */, + 5A02293A2C7770DF0011C6EC /* en-GB */, ); name = "Document-Sign.storyboard"; sourceTree = ""; @@ -3102,6 +3120,7 @@ 5A417F732C05265E00758795 /* sr-Latn-RS */, 5A417F7C2C05267F00758795 /* sr-RS */, 5A0229392C4A54600011C6EC /* en */, + 5A02293B2C7770E00011C6EC /* en-GB */, ); name = Localizable.strings; sourceTree = ""; diff --git a/macos/ONLYOFFICE/Resources/ONLYOFFICE-arm/en-GB.lproj/InfoPlist.strings b/macos/ONLYOFFICE/Resources/ONLYOFFICE-arm/en-GB.lproj/InfoPlist.strings new file mode 100644 index 000000000..49383c83a --- /dev/null +++ b/macos/ONLYOFFICE/Resources/ONLYOFFICE-arm/en-GB.lproj/InfoPlist.strings @@ -0,0 +1,6 @@ +/* Bundle name */ +"CFBundleName" = "ONLYOFFICE"; + +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "Copyright © 2024 Ascensio System SIA. All rights reserved."; + diff --git a/macos/ONLYOFFICE/Resources/ONLYOFFICE-v8/en-GB.lproj/InfoPlist.strings b/macos/ONLYOFFICE/Resources/ONLYOFFICE-v8/en-GB.lproj/InfoPlist.strings new file mode 100644 index 000000000..49383c83a --- /dev/null +++ b/macos/ONLYOFFICE/Resources/ONLYOFFICE-v8/en-GB.lproj/InfoPlist.strings @@ -0,0 +1,6 @@ +/* Bundle name */ +"CFBundleName" = "ONLYOFFICE"; + +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "Copyright © 2024 Ascensio System SIA. All rights reserved."; + diff --git a/macos/ONLYOFFICE/Resources/ONLYOFFICE-x86_64/en-GB.lproj/InfoPlist.strings b/macos/ONLYOFFICE/Resources/ONLYOFFICE-x86_64/en-GB.lproj/InfoPlist.strings new file mode 100644 index 000000000..49383c83a --- /dev/null +++ b/macos/ONLYOFFICE/Resources/ONLYOFFICE-x86_64/en-GB.lproj/InfoPlist.strings @@ -0,0 +1,6 @@ +/* Bundle name */ +"CFBundleName" = "ONLYOFFICE"; + +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "Copyright © 2024 Ascensio System SIA. All rights reserved."; + diff --git a/macos/ONLYOFFICE/en-GB.lproj/Document-Sign.strings b/macos/ONLYOFFICE/en-GB.lproj/Document-Sign.strings new file mode 100644 index 000000000..b646db46c --- /dev/null +++ b/macos/ONLYOFFICE/en-GB.lproj/Document-Sign.strings @@ -0,0 +1,39 @@ +/* Class = "NSTextFieldCell"; title = "Enter the password for the private key."; ObjectID = "1dL-nN-bJI"; */ +"1dL-nN-bJI.title" = "Enter the password for the private key."; + +/* Class = "NSTextFieldCell"; title = "Enter the password for the digital signature."; ObjectID = "1Fy-mg-aq9"; */ +"1Fy-mg-aq9.title" = "Enter the password for the digital signature."; + +/* Class = "NSTextFieldCell"; title = "Specify the digital signature file for the document."; ObjectID = "2Ck-6y-ygx"; */ +"2Ck-6y-ygx.title" = "Specify the digital signature file for the document."; + +/* Class = "NSSecureTextFieldCell"; placeholderString = "Enter Password"; ObjectID = "4gA-s8-Lne"; */ +"4gA-s8-Lne.placeholderString" = "Enter Password"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "GOU-av-TC1"; */ +"GOU-av-TC1.title" = "Cancel"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "jpH-3g-Gt5"; */ +"jpH-3g-Gt5.title" = "Cancel"; + +/* Class = "NSButtonCell"; title = "Load a Private Key"; ObjectID = "P3k-kI-w22"; */ +"P3k-kI-w22.title" = "Load a Private Key"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "qZ4-0O-L0G"; */ +"qZ4-0O-L0G.title" = "Cancel"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "RbM-Dq-A3K"; */ +"RbM-Dq-A3K.title" = "Cancel"; + +/* Class = "NSTextFieldCell"; title = "Specify a private key for the digital signature."; ObjectID = "Tfc-EF-VnS"; */ +"Tfc-EF-VnS.title" = "Specify a private key for the digital signature."; + +/* Class = "NSButtonCell"; title = "Load Signature"; ObjectID = "tTF-wa-eJp"; */ +"tTF-wa-eJp.title" = "Load Signature"; + +/* Class = "NSWindow"; title = "Window"; ObjectID = "uKp-p4-6uB"; */ +"uKp-p4-6uB.title" = "Window"; + +/* Class = "NSSecureTextFieldCell"; placeholderString = "Enter Password"; ObjectID = "Zj5-0h-hpW"; */ +"Zj5-0h-hpW.placeholderString" = "Enter Password"; + diff --git a/macos/ONLYOFFICE/en-GB.lproj/Localizable.strings b/macos/ONLYOFFICE/en-GB.lproj/Localizable.strings index 758946fd9..c99509c75 100644 --- a/macos/ONLYOFFICE/en-GB.lproj/Localizable.strings +++ b/macos/ONLYOFFICE/en-GB.lproj/Localizable.strings @@ -1,12 +1,54 @@ +/* No comment provided by engineer. */ +"%@ Help" = "%@ Help"; + +/* No comment provided by engineer. */ +"About %@" = "About %@"; + +/* No comment provided by engineer. */ +"Acknowledgments" = "Acknowledgments"; + +/* No comment provided by engineer. */ +"Before signing the document, it must be saved." = "Before signing the document, it must be saved."; + +/* No comment provided by engineer. */ +"Cancel" = "Cancel"; + +/* No comment provided by engineer. */ +"Cannot open file of Digital Signature" = "Cannot open file of Digital Signature"; + +/* No comment provided by engineer. */ +"Cannot open file of Private Key" = "Cannot open file of Private Key"; + +/* No comment provided by engineer. */ +"Cannot open folder of the file location." = "Cannot open folder of the file location."; + /* No comment provided by engineer. */ "Comma-Separated Values" = "Comma Separated Values (*.csv)"; +/* No comment provided by engineer. */ +"Create portal" = "Create portal"; + +/* No comment provided by engineer. */ +"Delete and Quit" = "Delete and Quit"; + /* No comment provided by engineer. */ "DjVu File" = "Digital Document (*.djvu)"; +/* No comment provided by engineer. */ +"Do you want to save the changes made to the document \"%@\"?" = "Do you want to save the changes made to the document \"%@\"?"; + +/* No comment provided by engineer. */ +"Document %ld.docx" = "Document %ld.docx"; + +/* No comment provided by engineer. */ +"Document %ld.pdf" = "Document %ld.pdf"; + /* No comment provided by engineer. */ "Document template" = "Word Open XML Document Template (*.dotx)"; +/* No comment provided by engineer. */ +"Don't Save" = "Don't Save"; + /* No comment provided by engineer. */ "Excel 97-2003 Spreadsheet" = "Excel 97-2003 Spreadsheet (*.xls)"; @@ -16,9 +58,27 @@ /* No comment provided by engineer. */ "FictionBook File" = "FictionBook 2 File (*.fb2)"; +/* No comment provided by engineer. */ +"File \"%@\" can not be open or not exist." = "File \"%@\" can not be open or not exist."; + +/* No comment provided by engineer. */ +"File can not be open." = "File can not be open."; + +/* No comment provided by engineer. */ +"File Format:" = "File Format:"; + +/* No comment provided by engineer. */ +"Hide %@" = "Hide %@"; + /* No comment provided by engineer. */ "If you don't review your documents, all your changeses will be lost." = "If you don't review your documents, all your changes will be lost."; +/* No comment provided by engineer. */ +"If you have already purchased %@, you should find your activation key in an email confirmation." = "If you have already purchased %@, you should find your activation key in an email confirmation."; + +/* No comment provided by engineer. */ +"License Agreement" = "License Agreement"; + /* No comment provided by engineer. */ "Macro-enabled Presentation" = "Macro-enabled Presentation (*.pptm)"; @@ -40,6 +100,18 @@ /* No comment provided by engineer. */ "new-spreadsheet" = "New spreadsheet"; +/* No comment provided by engineer. */ +"No" = "No"; + +/* No comment provided by engineer. */ +"OK" = "OK"; + +/* No comment provided by engineer. */ +"ONLYOFFICE can not open the Digital Signature file. Try opening another file." = "ONLYOFFICE can not open the Digital Signature file. Try opening another file."; + +/* No comment provided by engineer. */ +"ONLYOFFICE can not open the Private Key. Try opening another file." = "ONLYOFFICE can not open the Private Key. Try opening another file."; + /* No comment provided by engineer. */ "OpenDocument Document Template" = "OpenDocument Document Template (*.ott)"; @@ -49,6 +121,9 @@ /* No comment provided by engineer. */ "OpenDocument Spreadsheet Template" = "OpenDocument Spreadsheet Template (*.ots)"; +/* No comment provided by engineer. */ +"Opening" = "Opening"; + /* No comment provided by engineer. */ "OpenOffice Document" = "OpenDocument Text File (*.odt)"; @@ -76,15 +151,63 @@ /* No comment provided by engineer. */ "PowerPoint Slide Show" = "Office Open XML Slide Show (*.ppsx)"; +/* No comment provided by engineer. */ +"Preparing..." = "Preparing..."; + +/* No comment provided by engineer. */ +"Presentation %ld.pptx" = "Presentation %ld.pptx"; + /* No comment provided by engineer. */ "Presentation template" = "PowerPoint Open XML Presentation Template (*.potx)"; +/* No comment provided by engineer. */ +"Presenter View" = "Presenter View"; + +/* No comment provided by engineer. */ +"Quit %@" = "Quit %@"; + +/* No comment provided by engineer. */ +"Review Changes..." = "Review Changes..."; + /* No comment provided by engineer. */ "Rich Text Document" = "Rich Text Format File (*.rtf)"; +/* No comment provided by engineer. */ +"Save" = "Save"; + +/* No comment provided by engineer. */ +"Save the document?" = "Save the document?"; + +/* No comment provided by engineer. */ +"Signature Details" = "Signature Details"; + +/* No comment provided by engineer. */ +"Spreadsheet %ld.xlsx" = "Spreadsheet %ld.xlsx"; + /* No comment provided by engineer. */ "Spreadsheet template" = "Excel Open XML Spreadsheet Template (*.xltx)"; +/* No comment provided by engineer. */ +"Thank you for evaluating %@!" = "Thank you for evaluating %@!"; + +/* No comment provided by engineer. */ +"The document \"%@\" must be built. Continue?" = "The document \"%@\" must be built. Continue?"; + +/* No comment provided by engineer. */ +"To open the file location, it must be saved." = "To open the file location, it must be saved."; + +/* No comment provided by engineer. */ +"Unconfirmed" = "Unconfirmed"; + +/* No comment provided by engineer. */ +"Untitled" = "Untitled"; + +/* No comment provided by engineer. */ +"Web Page" = "Web Page"; + +/* No comment provided by engineer. */ +"With access to pro features" = "With access to pro features"; + /* No comment provided by engineer. */ "Word 97-2003 Document" = "Word 97-2003 Document (*.doc)"; @@ -94,3 +217,21 @@ /* No comment provided by engineer. */ "XML Paper Specification" = "OpenXPS Document (*.xps)"; +/* No comment provided by engineer. */ +"Yes" = "Yes"; + +/* No comment provided by engineer. */ +"You have %ld %@ documents with unconfirmed changes. Do you want to review these changes before quitting?" = "You have %1$ld %2$@ documents with unconfirmed changes. Do you want to review these changes before quitting?"; + +/* No comment provided by engineer. */ +"You have successfully activated %@." = "You have successfully activated %@."; + +/* No comment provided by engineer. */ +"Your changes will be lost if you don’t save them." = "Your changes will be lost if you don’t save them."; + +/* No comment provided by engineer. */ +"Your subscription has expired.\n\nThe program works in the non-activated mode.\n\nNow you can prolong or upgrade your subscription with a discount." = "Your subscription has expired.\n\nThe program works in the non-activated mode.\n\nNow you can prolong or upgrade your subscription with a discount."; + +/* No comment provided by engineer. */ +"Your subscription is about to expire\n(%d days left).\n\nWe have a special offer for you." = "Your subscription is about to expire\n(%d days left).\n\nWe have a special offer for you."; + diff --git a/macos/ONLYOFFICE/en-GB.lproj/Localizable.stringsdict b/macos/ONLYOFFICE/en-GB.lproj/Localizable.stringsdict new file mode 100644 index 000000000..db6d26f41 --- /dev/null +++ b/macos/ONLYOFFICE/en-GB.lproj/Localizable.stringsdict @@ -0,0 +1,57 @@ + + + + + %d days are left until the license expiration. + + NSStringLocalizedFormatKey + %#@days@ + days + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %d day are left until the license expiration. + other + %d days are left until the license expiration. + + + You are using a trial version of the application. +The trial period will end in %d days, after that you will not be able to create and edit documents. + + NSStringLocalizedFormatKey + %#@days@ + days + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + You are using a trial version of the application. +The trial period will end in %d day, after that you will not be able to create and edit documents. + other + You are using a trial version of the application. +The trial period will end in %d days, after that you will not be able to create and edit documents. + + + You have %ld %@ documents with unconfirmed changes. Do you want to review these changes before quitting? + + NSStringLocalizedFormatKey + %#@documents@ + documents + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + one + You have %ld %@ document with unconfirmed changes. Do you want to review these changes before quitting? + other + You have %ld %@ documents with unconfirmed changes. Do you want to review these changes before quitting? + + + + diff --git a/macos/ONLYOFFICE/en-GB.lproj/Main.strings b/macos/ONLYOFFICE/en-GB.lproj/Main.strings new file mode 100644 index 000000000..adc7df97f --- /dev/null +++ b/macos/ONLYOFFICE/en-GB.lproj/Main.strings @@ -0,0 +1,456 @@ +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Lower"; ObjectID = "1tx-W0-xDw"; */ +"1tx-W0-xDw.title" = "Lower"; + +/* Class = "NSMenuItem"; title = "Customize Toolbar…"; ObjectID = "1UK-8n-QPP"; */ +"1UK-8n-QPP.title" = "Customize Toolbar…"; + +/* Class = "NSMenuItem"; title = "ONLYOFFICE"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "ONLYOFFICE"; + +/* Class = "NSMenuItem"; title = "Raise"; ObjectID = "2h7-ER-AoG"; */ +"2h7-ER-AoG.title" = "Raise"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "Transformations"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "Spelling"; + +/* Class = "NSMenuItem"; title = "Use Default"; ObjectID = "3Om-Ey-2VK"; */ +"3Om-Ey-2VK.title" = "Use Default"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "Find"; + +/* Class = "NSMenuItem"; title = "License Agreement"; ObjectID = "4et-TX-a4m"; */ +"4et-TX-a4m.title" = "License Agreement"; + +/* Class = "NSMenuItem"; title = "Quit ONLYOFFICE"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "Quit ONLYOFFICE"; + +/* Class = "NSMenuItem"; title = "About ONLYOFFICE"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "About ONLYOFFICE"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "Copy Style"; ObjectID = "5Vv-lz-BsD"; */ +"5Vv-lz-BsD.title" = "Copy Style"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "Redo"; + +/* Class = "NSButtonCell"; title = "License agreement"; ObjectID = "8Ga-Cu-VGe"; */ +"8Ga-Cu-VGe.title" = "License agreement"; + +/* Class = "NSMenu"; title = "Writing Direction"; ObjectID = "8mr-sm-Yjd"; */ +"8mr-sm-Yjd.title" = "Writing Direction"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "9aQ-wl-gjS"; */ +"9aQ-wl-gjS.title" = "New"; + +/* Class = "NSTextFieldCell"; title = "none"; ObjectID = "9i7-kj-42B"; */ +"9i7-kj-42B.title" = "none"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "Smart Copy/Paste"; + +/* Class = "NSMenuItem"; title = "Tighten"; ObjectID = "46P-cB-AYj"; */ +"46P-cB-AYj.title" = "Tighten"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "Correct Spelling Automatically"; + +/* Class = "NSMenuItem"; title = "Use Default"; ObjectID = "agt-UL-0e3"; */ +"agt-UL-0e3.title" = "Use Default"; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "Print…"; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "Window"; + +/* Class = "NSMenu"; title = "Font"; ObjectID = "aXa-aM-Jaq"; */ +"aXa-aM-Jaq.title" = "Font"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "Main Menu"; + +/* Class = "NSMenuItem"; title = "\tLeft to Right"; ObjectID = "BgM-ve-c93"; */ +"BgM-ve-c93.title" = "\tLeft to Right"; + +/* Class = "NSMenuItem"; title = "Show Colors"; ObjectID = "bgn-CT-cEk"; */ +"bgn-CT-cEk.title" = "Show Colors"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "File"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "Preferences…"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "Use Selection for Find"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "Save As…"; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "Transformations"; + +/* Class = "NSMenuItem"; title = "Use None"; ObjectID = "cDB-IK-hbR"; */ +"cDB-IK-hbR.title" = "Use None"; + +/* Class = "NSMenuItem"; title = "Acknowledgments"; ObjectID = "CJU-dx-a9l"; */ +"CJU-dx-a9l.title" = "Acknowledgments"; + +/* Class = "NSMenuItem"; title = "Selection"; ObjectID = "cqv-fj-IhA"; */ +"cqv-fj-IhA.title" = "Selection"; + +/* Class = "NSMenuItem"; title = "Smart Links"; ObjectID = "cwL-P1-jid"; */ +"cwL-P1-jid.title" = "Smart Links"; + +/* Class = "NSMenu"; title = "Text"; ObjectID = "d9c-me-L2H"; */ +"d9c-me-L2H.title" = "Text"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "Make Lower Case"; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "File"; + +/* Class = "NSMenuItem"; title = "Spreadsheet"; ObjectID = "DOj-j9-dza"; */ +"DOj-j9-dza.title" = "Spreadsheet"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "Undo"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "Spelling and Grammar"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "Close"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "Help"; + +/* Class = "NSMenuItem"; title = "Text"; ObjectID = "Fal-I4-PZk"; */ +"Fal-I4-PZk.title" = "Text"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Product Help"; ObjectID = "FKE-Sm-Kum"; */ +"FKE-Sm-Kum.title" = "Product Help"; + +/* Class = "NSTextFieldCell"; title = "User Name"; ObjectID = "FoF-wl-Dxi"; */ +"FoF-wl-Dxi.title" = "User Name"; + +/* Class = "NSMenuItem"; title = "Bold"; ObjectID = "GB9-OM-e27"; */ +"GB9-OM-e27.title" = "Bold"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "GEO-Iw-cKr"; */ +"GEO-Iw-cKr.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Font"; ObjectID = "Gi5-1S-RQB"; */ +"Gi5-1S-RQB.title" = "Font"; + +/* Class = "NSTextFieldCell"; title = "File Name"; ObjectID = "gm3-6i-EnL"; */ +"gm3-6i-EnL.title" = "File Name"; + +/* Class = "NSMenuItem"; title = "Use Default"; ObjectID = "GUa-eO-cwY"; */ +"GUa-eO-cwY.title" = "Use Default"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "Paste"; + +/* Class = "NSMenuItem"; title = "Writing Direction"; ObjectID = "H1b-Si-o9J"; */ +"H1b-Si-o9J.title" = "Writing Direction"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "H8h-7b-M4v"; */ +"H8h-7b-M4v.title" = "View"; + +/* Class = "NSMenu"; title = "New"; ObjectID = "hD5-Cz-ItX"; */ +"hD5-Cz-ItX.title" = "New"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "Show Spelling and Grammar"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "Text Replacement"; + +/* Class = "NSMenuItem"; title = "Presentation"; ObjectID = "hkB-TU-Ps1"; */ +"hkB-TU-Ps1.title" = "Presentation"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "Smart Quotes"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "HyV-fh-RgO"; */ +"HyV-fh-RgO.title" = "View"; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "Check Document Now"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Subscript"; ObjectID = "I0S-gh-46l"; */ +"I0S-gh-46l.title" = "Subscript"; + +/* Class = "NSMenuItem"; title = "Smaller"; ObjectID = "i1d-Er-qST"; */ +"i1d-Er-qST.title" = "Smaller"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "Open…"; + +/* Class = "NSMenu"; title = "Baseline"; ObjectID = "ijk-EB-dga"; */ +"ijk-EB-dga.title" = "Baseline"; + +/* Class = "NSWindow"; title = "ONLYOFFICE"; ObjectID = "IQv-IB-iLA"; */ +"IQv-IB-iLA.title" = "ONLYOFFICE"; + +/* Class = "NSMenuItem"; title = "Justify"; ObjectID = "J5U-5w-g23"; */ +"J5U-5w-g23.title" = "Justify"; + +/* Class = "NSMenuItem"; title = "Use None"; ObjectID = "J7y-lM-qPV"; */ +"J7y-lM-qPV.title" = "Use None"; + +/* Class = "NSMenuItem"; title = "Kern"; ObjectID = "jBQ-r6-VK2"; */ +"jBQ-r6-VK2.title" = "Kern"; + +/* Class = "NSMenuItem"; title = "\tRight to Left"; ObjectID = "jFq-tB-4Kx"; */ +"jFq-tB-4Kx.title" = "\tRight to Left"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "Revert to Saved"; + +/* Class = "NSTabViewItem"; label = "ONLYOFFICE"; ObjectID = "kcg-El-49G"; */ +"kcg-El-49G.label" = "ONLYOFFICE"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "Show All"; + +/* Class = "NSMenuItem"; title = "\tLeft to Right"; ObjectID = "Lbh-J2-qVU"; */ +"Lbh-J2-qVU.title" = "\tLeft to Right"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "Bring All to Front"; + +/* Class = "NSMenuItem"; title = "Paste Ruler"; ObjectID = "LVM-kO-fVI"; */ +"LVM-kO-fVI.title" = "Paste Ruler"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "m0C-e9-0oc"; */ +"m0C-e9-0oc.title" = "Cancel"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "Check Grammar With Spelling"; + +/* Class = "NSMenuItem"; title = "Copy Ruler"; ObjectID = "MkV-Pr-PK5"; */ +"MkV-Pr-PK5.title" = "Copy Ruler"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "Services"; + +/* Class = "NSMenuItem"; title = "\tDefault"; ObjectID = "Nop-cj-93Q"; */ +"Nop-cj-93Q.title" = "\tDefault"; + +/* Class = "NSMenuItem"; title = "Ligatures"; ObjectID = "o6e-r0-MWq"; */ +"o6e-r0-MWq.title" = "Ligatures"; + +/* Class = "NSMenuItem"; title = "Baseline"; ObjectID = "OaQ-X3-Vso"; */ +"OaQ-X3-Vso.title" = "Baseline"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Loosen"; ObjectID = "ogc-rX-tC1"; */ +"ogc-rX-tC1.title" = "Loosen"; + +/* Class = "NSMenuItem"; title = "Hide ONLYOFFICE"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "Hide ONLYOFFICE"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "Find Previous"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "Minimize"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "Stop Speaking"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "Delete"; + +/* Class = "NSMenuItem"; title = "Bigger"; ObjectID = "Ptp-SP-VEL"; */ +"Ptp-SP-VEL.title" = "Bigger"; + +/* Class = "NSMenuItem"; title = "Save"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "Save"; + +/* Class = "NSMenuItem"; title = "Show Fonts"; ObjectID = "Q5e-8K-NDq"; */ +"Q5e-8K-NDq.title" = "Show Fonts"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "Find Next"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "Page Setup…"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "Zoom"; + +/* Class = "NSMenuItem"; title = "\tRight to Left"; ObjectID = "RB4-Sm-HuC"; */ +"RB4-Sm-HuC.title" = "\tRight to Left"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "Check Spelling While Typing"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "Smart Dashes"; + +/* Class = "NSButtonCell"; title = "Close"; ObjectID = "Riu-oE-8dj"; */ +"Riu-oE-8dj.title" = "Close"; + +/* Class = "NSTextFieldCell"; title = "none"; ObjectID = "Rkd-xb-FRJ"; */ +"Rkd-xb-FRJ.title" = "none"; + +/* Class = "NSButtonCell"; title = "Logout"; ObjectID = "RmO-tv-UKh"; */ +"RmO-tv-UKh.title" = "Logout"; + +/* Class = "NSMenuItem"; title = "Superscript"; ObjectID = "Rqc-34-cIF"; */ +"Rqc-34-cIF.title" = "Superscript"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "Select All"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "Jump to Selection"; + +/* Class = "NSTextFieldCell"; title = "Copyright info"; ObjectID = "sGd-zc-V0B"; */ +"sGd-zc-V0B.title" = "Copyright info"; + +/* Class = "NSMenuItem"; title = "Show Toolbar"; ObjectID = "snW-S8-Cw5"; */ +"snW-S8-Cw5.title" = "Show Toolbar"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Document"; ObjectID = "TEm-B8-gsH"; */ +"TEm-B8-gsH.title" = "Document"; + +/* Class = "NSMenu"; title = "Kern"; ObjectID = "tlD-Oa-oAM"; */ +"tlD-Oa-oAM.title" = "Kern"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "Data Detectors"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "ud7-wC-A79"; */ +"ud7-wC-A79.title" = "Check for Updates…"; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "Capitalize"; + +/* Class = "NSMenu"; title = "ONLYOFFICE"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "ONLYOFFICE"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "Cut"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "Hide Others"; + +/* Class = "NSMenuItem"; title = "Center"; ObjectID = "VIY-Ag-zcb"; */ +"VIY-Ag-zcb.title" = "Center"; + +/* Class = "NSMenuItem"; title = "Italic"; ObjectID = "Vjx-xi-njq"; */ +"Vjx-xi-njq.title" = "Italic"; + +/* Class = "NSMenuItem"; title = "Paste Style"; ObjectID = "vKC-jM-MkH"; */ +"vKC-jM-MkH.title" = "Paste Style"; + +/* Class = "NSMenuItem"; title = "Show Ruler"; ObjectID = "vLm-3I-IUL"; */ +"vLm-3I-IUL.title" = "Show Ruler"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "Make Upper Case"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ +"vNY-rz-j42.title" = "Clear Menu"; + +/* Class = "NSMenu"; title = "Ligatures"; ObjectID = "w0m-vy-SC9"; */ +"w0m-vy-SC9.title" = "Ligatures"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "Align Right"; ObjectID = "wb2-vD-lq4"; */ +"wb2-vD-lq4.title" = "Align Right"; + +/* Class = "NSMenuItem"; title = "Paste and Match Style"; ObjectID = "WeT-3V-zwk"; */ +"WeT-3V-zwk.title" = "Paste and Match Style"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "wpe-8d-5DV"; */ +"wpe-8d-5DV.title" = "Text Cell"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "Help"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "WRG-CD-K1S"; */ +"WRG-CD-K1S.title" = "Underline"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "Copy"; + +/* Class = "NSTextFieldCell"; title = "Product"; ObjectID = "xCO-ey-2lo"; */ +"xCO-ey-2lo.title" = "Product"; + +/* Class = "NSMenuItem"; title = "Use All"; ObjectID = "xQD-1f-W4t"; */ +"xQD-1f-W4t.title" = "Use All"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "Find…"; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "Find and Replace…"; + +/* Class = "NSMenuItem"; title = "\tDefault"; ObjectID = "YGs-j5-SAR"; */ +"YGs-j5-SAR.title" = "\tDefault"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "Start Speaking"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "Show Substitutions"; + +/* Class = "NSTextFieldCell"; title = "Version"; ObjectID = "ZbA-hc-8PE"; */ +"ZbA-hc-8PE.title" = "Version"; + +/* Class = "NSMenuItem"; title = "Align Left"; ObjectID = "ZM1-6Q-yy1"; */ +"ZM1-6Q-yy1.title" = "Align Left"; + +/* Class = "NSTextFieldCell"; title = "Email:"; ObjectID = "Zsi-3o-ASl"; */ +"Zsi-3o-ASl.title" = "Email:"; + +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "ZvO-Gk-QUH"; */ +"ZvO-Gk-QUH.title" = "Paragraph"; + +/* Class = "NSTextFieldCell"; title = "Portal:"; ObjectID = "zwS-9G-S0N"; */ +"zwS-9G-S0N.title" = "Portal:"; + diff --git a/macos/ONLYOFFICE/en-GB.lproj/MoveApplication.strings b/macos/ONLYOFFICE/en-GB.lproj/MoveApplication.strings new file mode 100644 index 000000000..ff75127a8 --- /dev/null +++ b/macos/ONLYOFFICE/en-GB.lproj/MoveApplication.strings @@ -0,0 +1,24 @@ +/* No comment provided by engineer. */ +"Could not move to Applications folder" = "Could not move to Applications folder"; + +/* No comment provided by engineer. */ +"Do Not Move" = "Do Not Move"; + +/* No comment provided by engineer. */ +"I can move myself to the Applications folder if you'd like." = "I can move myself to the Applications folder if you'd like."; + +/* No comment provided by engineer. */ +"Move to Applications Folder" = "Move to Applications Folder"; + +/* No comment provided by engineer. */ +"Move to Applications folder in your Home folder?" = "Move to Applications folder in your Home folder?"; + +/* No comment provided by engineer. */ +"Move to Applications folder?" = "Move to Applications folder?"; + +/* No comment provided by engineer. */ +"Note that this will require an administrator password." = "Note that this will require an administrator password."; + +/* No comment provided by engineer. */ +"This will keep your Downloads folder uncluttered." = "This will keep your Downloads folder uncluttered."; + diff --git a/macos/ONLYOFFICE/en-GB.lproj/Presentation-Reporter.strings b/macos/ONLYOFFICE/en-GB.lproj/Presentation-Reporter.strings new file mode 100644 index 000000000..2efa0e7e7 --- /dev/null +++ b/macos/ONLYOFFICE/en-GB.lproj/Presentation-Reporter.strings @@ -0,0 +1,3 @@ +/* Class = "NSWindow"; title = "Reporter Window"; ObjectID = "Ygx-5K-Hn8"; */ +"Ygx-5K-Hn8.title" = "Reporter Window"; + From c798f83e3709c2a1b3b33c7abc9532c608e5814c Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 24 Aug 2024 01:29:20 +0300 Subject: [PATCH 06/97] [macos] fix lang info for the start page setiings --- .../Code/Controllers/Common/ASCLinguist.m | 79 ++++++++++--------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCLinguist.m b/macos/ONLYOFFICE/Code/Controllers/Common/ASCLinguist.m index 0e5d815fd..f587edb91 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCLinguist.m +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCLinguist.m @@ -100,50 +100,51 @@ static BOOL uiLayoutDirectionRTL = NO; + (NSDictionary *)availableLanguages { return @{ - @"en": @"English", - @"ru": @"Русский", - @"de": @"Deutsch", - @"fr": @"Français", - @"es": @"Español", - @"it": @"Italiano", - @"pt-BR": @"Português Brasileiro", - @"pt-PT": @"Português (Portugal)", - @"zh-CN": @"简体中文", - @"zh-TW": @"繁體中文", - @"sk-SK": @"Slovenčina", - @"cs-CZ": @"Čeština", - @"pl-PL": @"Polski", - @"ca-ES": @"Catalan", - @"da-DK": @"Dansk", - @"el-GR": @"Ελληνικά", + @"en-US": @{@"name": @"English (United States)", @"enname": @""}, + @"en-GB": @{@"name": @"English (United Kingdom)", @"enname": @""}, + @"ru": @{@"name": @"Русский", @"enname": @"Russian"}, + @"de": @{@"name": @"Deutsch", @"enname": @"German"}, + @"fr": @{@"name": @"Français", @"enname": @"French"}, + @"es": @{@"name": @"Español", @"enname": @"Spanish"}, + @"it": @{@"name": @"Italiano", @"enname": @"Italian"}, + @"pt-BR": @{@"name": @"Português Brasileiro", @"enname": @"Portuguese (Brazil)"}, + @"pt-PT": @{@"name": @"Português (Portugal)", @"enname": @"Portuguese (Portugal)"}, + @"zh-CN": @{@"name": @"简体中文", @"enname": @"Chinese (Simplified)"}, + @"zh-TW": @{@"name": @"繁體中文", @"enname": @"Chinese (Traditional)"}, + @"sk-SK": @{@"name": @"Slovenčina", @"enname": @"Slovak"}, + @"cs-CZ": @{@"name": @"Čeština", @"enname": @"Czech"}, + @"pl-PL": @{@"name": @"Polski", @"enname":@"Polish"}, + @"ca-ES": @{@"name": @"Catalan", @"enname": @"Catalan"}, + @"da-DK": @{@"name": @"Dansk", @"enname": @"Danish"}, + @"el-GR": @{@"name": @"Ελληνικά", @"enname": @"Greek"}, // @"et-EE": @"Eesti", - @"fi-FI": @"Suomi", + @"fi-FI": @{@"name": @"Suomi", @"enname": @"Finnish"}, // @"ga-IE": @"Gaeilge", // @"hi-IN": @"हिन्दी", // @"hr-HR": @"Hrvatska", - @"hu-HU": @"Magyar", - @"hy-AM": @"Հայերեն", - @"id-ID": @"Indonesian", - @"no": @"Norsk", - @"ro-RO": @"Romanian", - @"sl-SI": @"Slovene", - @"sv-SE": @"Svenska", - @"sr-Latn-RS": @"Srpski (Latin)", - @"sr-Cyrl-RS": @"Српски (ћирилица)", - @"tr-TR": @"Türkçe", - @"ja-JP": @"日本語", - @"ko-KR": @"한국어", - @"bg-BG": @"Български", - @"nl-NL": @"Nederlands", - @"vi-VN": @"Tiếng Việt", - @"lv-LV": @"Latviešu valoda", + @"hu-HU": @{@"name": @"Magyar", @"enname": @"Hungarian"}, + @"hy-AM": @{@"name": @"Հայերեն", @"enname": @"Armenian"}, + @"id-ID": @{@"name": @"Indonesian", @"enname": @"Indonesian"}, + @"no": @{@"name": @"Norsk", @"enname": @"Norwegian"}, + @"ro-RO": @{@"name": @"Romanian", @"enname": @"Romanian"}, + @"sl-SI": @{@"name": @"Slovene", @"enname": @"Slovenian"}, + @"sv-SE": @{@"name": @"Svenska", @"enname": @"Swedish"}, + @"sr-Latn-RS": @{@"name": @"Srpski (Latin)", @"enname": @"Serbian (Latin)"}, + @"sr-Cyrl-RS": @{@"name": @"Српски (ћирилица)", @"enname": @"Serbian (Cyrillic)"}, + @"tr-TR": @{@"name": @"Türkçe", @"enname": @"Turkish"}, + @"ja-JP": @{@"name": @"日本語", @"enname": @"Japanese"}, + @"ko-KR": @{@"name": @"한국어", @"enname": @"Korean"}, + @"bg-BG": @{@"name": @"Български", @"enname": @"Bulgarian"}, + @"nl-NL": @{@"name": @"Nederlands", @"enname": @"Dutch"}, + @"vi-VN": @{@"name": @"Tiếng Việt", @"enname": @"Vietnamese"}, + @"lv-LV": @{@"name": @"Latviešu valoda", @"enname": @"Latvian"}, // @"lt-LT": @"Lietuvių kalba", - @"be-BY": @"Беларуская мова", - @"uk-UA": @"Украї́нська мо́ва", - @"lo-LA": @"ພາສາລາວ", - @"gl-ES": @"Galego", - @"si-LK": @"සිංහල", - @"ar-SA": @"اَلْعَرَبِيَّة" + @"be-BY": @{@"name": @"Беларуская мова", @"enname": @"Belarusian"}, + @"uk-UA": @{@"name": @"Украї́нська мо́ва", @"enname": @"Ukrainian"}, + @"lo-LA": @{@"name": @"ພາສາລາວ", @"enname": @"Lao"}, + @"gl-ES": @{@"name": @"Galego", @"enname": @"Galego"}, + @"si-LK": @{@"name": @"සිංහල", @"enname": @"Sinhala (Sri Lanka)"}, + @"ar-SA": @{@"name": @"اَلْعَرَبِيَّة", @"enname": @"Arabic"} }; } From 2898b926efdb7a092ef609d86181a3f30ac481e7 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 26 Aug 2024 13:07:33 +0300 Subject: [PATCH 07/97] [all] removed unused templates --- common/converter/empty/cs-CZ/new.docx | Bin 8434 -> 0 bytes common/converter/empty/cs-CZ/new.pptx | Bin 35659 -> 0 bytes common/converter/empty/cs-CZ/new.xlsx | Bin 6396 -> 0 bytes common/converter/empty/de-DE/new.docx | Bin 8433 -> 0 bytes common/converter/empty/de-DE/new.pptx | Bin 35634 -> 0 bytes common/converter/empty/de-DE/new.xlsx | Bin 6396 -> 0 bytes common/converter/empty/es-ES/new.docx | Bin 8432 -> 0 bytes common/converter/empty/es-ES/new.pptx | Bin 35632 -> 0 bytes common/converter/empty/es-ES/new.xlsx | Bin 6396 -> 0 bytes common/converter/empty/fr-FR/new.docx | Bin 8433 -> 0 bytes common/converter/empty/fr-FR/new.pptx | Bin 35635 -> 0 bytes common/converter/empty/fr-FR/new.xlsx | Bin 6396 -> 0 bytes common/converter/empty/in_new.docx | Bin 8411 -> 0 bytes common/converter/empty/in_new.pptx | Bin 33717 -> 0 bytes common/converter/empty/in_new.xlsx | Bin 6389 -> 0 bytes common/converter/empty/it-IT/new.docx | Bin 7054 -> 0 bytes common/converter/empty/it-IT/new.pptx | Bin 35637 -> 0 bytes common/converter/empty/it-IT/new.xlsx | Bin 6389 -> 0 bytes common/converter/empty/mm_new.docx | Bin 8413 -> 0 bytes common/converter/empty/mm_new.pptx | Bin 33722 -> 0 bytes common/converter/empty/mm_new.xlsx | Bin 6389 -> 0 bytes common/converter/empty/pt-BR/new.docx | Bin 8553 -> 0 bytes common/converter/empty/pt-BR/new.pptx | Bin 35609 -> 0 bytes common/converter/empty/pt-BR/new.xlsx | Bin 6389 -> 0 bytes common/converter/empty/ru-RU/new.docx | Bin 8433 -> 0 bytes common/converter/empty/ru-RU/new.pptx | Bin 35615 -> 0 bytes common/converter/empty/ru-RU/new.xlsx | Bin 6396 -> 0 bytes 27 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 common/converter/empty/cs-CZ/new.docx delete mode 100644 common/converter/empty/cs-CZ/new.pptx delete mode 100644 common/converter/empty/cs-CZ/new.xlsx delete mode 100644 common/converter/empty/de-DE/new.docx delete mode 100644 common/converter/empty/de-DE/new.pptx delete mode 100644 common/converter/empty/de-DE/new.xlsx delete mode 100644 common/converter/empty/es-ES/new.docx delete mode 100644 common/converter/empty/es-ES/new.pptx delete mode 100644 common/converter/empty/es-ES/new.xlsx delete mode 100644 common/converter/empty/fr-FR/new.docx delete mode 100644 common/converter/empty/fr-FR/new.pptx delete mode 100644 common/converter/empty/fr-FR/new.xlsx delete mode 100644 common/converter/empty/in_new.docx delete mode 100644 common/converter/empty/in_new.pptx delete mode 100644 common/converter/empty/in_new.xlsx delete mode 100644 common/converter/empty/it-IT/new.docx delete mode 100644 common/converter/empty/it-IT/new.pptx delete mode 100644 common/converter/empty/it-IT/new.xlsx delete mode 100644 common/converter/empty/mm_new.docx delete mode 100644 common/converter/empty/mm_new.pptx delete mode 100644 common/converter/empty/mm_new.xlsx delete mode 100644 common/converter/empty/pt-BR/new.docx delete mode 100644 common/converter/empty/pt-BR/new.pptx delete mode 100644 common/converter/empty/pt-BR/new.xlsx delete mode 100644 common/converter/empty/ru-RU/new.docx delete mode 100644 common/converter/empty/ru-RU/new.pptx delete mode 100644 common/converter/empty/ru-RU/new.xlsx diff --git a/common/converter/empty/cs-CZ/new.docx b/common/converter/empty/cs-CZ/new.docx deleted file mode 100644 index 244ca53edc780561d50a709de8a14096c314f36d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8434 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 AqW}N^ diff --git a/common/converter/empty/cs-CZ/new.pptx b/common/converter/empty/cs-CZ/new.pptx deleted file mode 100644 index 28435379d431aa70e66ea6e859b87c520b36d2db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35659 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 diff --git a/common/converter/empty/de-DE/new.docx b/common/converter/empty/de-DE/new.docx deleted file mode 100644 index 7084b3d4b61bb3076015bd79b7fd71e5ebfe8b92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8433 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 diff --git a/common/converter/empty/de-DE/new.pptx b/common/converter/empty/de-DE/new.pptx deleted file mode 100644 index 7ff44412fa0b1a6ac9ac9ed47a329e5c4a1f8e21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35634 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 diff --git a/common/converter/empty/es-ES/new.docx b/common/converter/empty/es-ES/new.docx deleted file mode 100644 index 0cf6cf52fa7376a2c466fa7d731d8a2a7c7bb7f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8432 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 diff --git a/common/converter/empty/fr-FR/new.pptx b/common/converter/empty/fr-FR/new.pptx deleted file mode 100644 index 7f78513743e30d3fd013e8e799ffc1e6f3cc9b81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35635 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 BC8q!Y diff --git a/common/converter/empty/fr-FR/new.xlsx b/common/converter/empty/fr-FR/new.xlsx deleted file mode 100644 index 8e53d9ea3f3640d4e0f0d9fcdfaab1b1656a6081..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6396 zcmaJ_1z6MT_a7igO2-f+Bm`+tK#-7*5z=r8m5!04OH#VK)qzNeOd6385NSpTNC-&d zKvEp?A98oy{ptPhdA>V);Qf9+=RN1V?+Gn6oC{Qdv(IFhrozu3e}566q^0u%EjMQu zcYdwEm*E3^13zf&yVu{piv<95V*>zWn9J_DxbS&9Ip!tHI)})Rg(E=6Oz&nPog$zI zG?KRTq#%3j+LbM#cZwg_C9Wp@IOeMj8Oitc6GnXA%D{Rlsb@75EawDz+rAcyYmwUj zYEsEDLrOE>FqjR*q2|DRpO@LB>(J}|h9gP5h{gPMV#RXi=d`&`xC@iT_G@=Ez^3dy z3E)AediXo%S6z6OJaa1AN{ejowZ(fq_dsL_ZCBM2`q?5_LMir z(f&0Gb~VFq-nqRLvfKAqZZbFNI6^(?Vj^fru2u8NoUA1X+O$Q=ZzmiTC26S1Z8CfZ z4m6f0{e=Y2U=acCw0*bYjNDY-h!opO$py~s3vU_0`MO^s~==7 zdQdN{u|rl+d9k-s0zt0t6Np2IgYcdgAkb-|>rt7EQm~W$C_r=zORVq?qvTL*JL%;i zuArTcTqJ86u~H1}uzUT`MSfZrhHgh54v(pV_Kl7cxW7I3{%D%ah;E5OX0+)SHcu6i zDumCa`X3zG4K6U672-c;|gA~RROdR(nb zozi5r4bcgM0f1_j3iZhzK!#@o;ID@Wp$DY7QeU`g@X1DaLSNVPV?WUOQp&undPBEe zwc-^sO|fqz=m}S8>~#tTPHmCS5CI@@SopQmi>!|V?Q^PhAG4%80c{S3VAyQ$J5MyY zLA4C!o;zWwSEoT{3%J*7gr3(L1a~~IG*U5d%v}`6yPH3zY8KNe_$0$b*MW zg$Vt%=yjMdJyde>RjpRxBp9JsM!!i@p@$t3os^dxCb6XDN(?Z$JHRv(`d#0=s)@cw zpQ?S>vlNTR+ zC$Guo4K460Bi-FMO$vkA-XP+f5FuGvvu7+$nI7{s?R&!3cmg@tdHo5#5k&5Tml*yj z5gOSazs%&<-*lLga`FRd>-8xhU;Rmf9Yc60geo$HD=Qqf2BD|1%PlWS88bD0YBLL; z@JYDJ(9OBK)-EI~p0YRcqpK_s2Yj3Xn&08rUOUY>#rqY%f4Z1a@#|r0JhEhwn9*xXmfB-8{D&UE8RyS<4X1*5p6t;mg3)m&o1MFKkq;bi;iTJXmzT<3K1C<5#gwwc&z zW46zhu*wpaN3M-gn#$NtSNZPq6mfSQYt0K=h*~#V(dA!xkZpUdO)zstntnL3up>*w zX~SkQ08ctfU0C+r+adu<{Tqav+o@S6P?(4Xc3xL`g{-t(;Ie@D^&4+pxQmJ^fZvqh zb>LxIRrSi@idB-Ynw6pk??x;B(u~#Qp*ZDYfG$sYk+W{ZarVA1mamRTM;(6Aiv!8HdR#VQ^NT#*DA3N z-3A)}x)uq$eEgimCOdX4FUF4Ai)<18yd@MmbWlQ>xkXi0NM1TD*~&cStxmzJJ>I2B z{#Z*wgR3GgJ|d*VpKaJRx-pa6)GaeV(H_bu5>ek*b!)V~*ny~<4Y*IRlCHj^_H&iT&3=j6DA*L$XCUBP1&U#q&%Vvg_-x+dw9vYX-5X|=X64z zChm=L3oUm0P){zFgy45mvfE_K>unC~QK@UkUUDgAYb(3{^qCxkOZCl#^% zW_p^5XqPdLl=RHj?H|4N@tyP{ovsj~aNN%;6m@8P#*{|bI*m3!iOs0Vwv@@lh zE#&^}3hM^Qyhp0g0#o1cm1E}Z9zhC42g zTEi#4r7HHGJL}(KN~%UAN2@E#E(pyaSOgJ{X<-%2pQh&&+eHFtV$wqt;7AIh*A&!- zLHPQ--kn@@ZT=mx#M8z_1xkk#^2VS0#_pL!f2zrKcK<3W--vo^Jn@-&2R>=f9i)>; zi|BYo`mNFQ6@~UJZQ@&P#S6@MN)0Vp;x5WMS$?o*k2;qseOhFt@1tH>0-w zm5kVSaV4*3cvKtrctCU;--mN{g%-Tr2sE|hva6hw@zpP~ncLm8tO1;H zRI838xqK(wSO?UvuVYf@g?x)63zZl&t5ZTgp0V&5Ur%$l(l>dXH_xfj-iK&&g}k>k zZpITM8pLlyzIL--fl)>8Qe+cOjSm39-2^?Dx_j} zo(kAmY_fMdcm;Sf$Gm0fYZ_7J(XODM&btSBD=QYa4F>ov)E!Q6i66@qel`kCpIP^f zOP>LX3_7 z9Z=#fbqJCAI(X`SNE14BOn}ZA_&;kN*~Q+7PE>{Hi7I$V&y#_dvzxD^6s?XlBYtoPhwW(QTYlEQtG z%`cS7nfQ#0%-enJK=D01ZOU|DH9HOQA3jG^yaHbzW+ihu$j85EUySVk?zJ({xH~*0 zj2*lqUMXj*@4D&3E3zv*jgRBZy&*!B*r>C4nbUC1fh9y=5R}|xC~UW_Y}ha%;Ham< z=b2t-oGEZ8SBodu-@La=Q>5QK6yBFN&9R^_8Z4&D-T?`||MZ)EkkI(cC)m@p$skL7 z^TL{?0bi4FVBwD_|4$igf-Fxy_ctc1O2$vb8^Zmq8c(C!l?9oi@8W4MA6>dT9d$}r z=~P>xo0up9C5RUtEIV4(;^H2E?gB8Pyh0BXhrU8=HeG?PBE>|Yt6$kbc1;W&$1g-( zMZ+|!i6QZJiYY5oHY}PDz)d5*>MM+MRTl^0QGN4UN=%fo5mPN0q-OdQ*me9pGMQas zIt$&MFN|OqT8gfX--nN1^{*#j&I@N=Qrj|L|1KjI>%TqaO%;6=FuRlJ=w zDCf&Ck1XHWixo+|(H#QB3Wqqmq>A68k}nZ=XqDs?4LR9Kw~DhqOH;ZB;K(N<>aLZ<37_^-wuQ2)(hq~mEoc4a z)EB%ZXU1<%%E&L8@+nSgvCR{{h%;GU2>6jZ8+AcNyrSGIF@~`)Q={@l*RCl*{lk_3 zEwy%i21N{^eRvk>eEr>H!|Myv^{KMd*K02L2s6ySZe)4g(2(GPpxkIfb9qY9?YQWe{qG6Z2{y3~xh{Gj& zVl7@W?Fs004Jd}D5r|o|@n5LS#bWS(ffRo{oY<%PlvWR>3a&tIyVh(6roAjT&#*BE z!K`b9z(f7cZ?EN8?G48HuXydrHg^}kHk-Xe3CEJ3GHQ*{mM(FU8%&xMi;-eJb%#Fszj6avF_)5yJwv}qMsMw7sGt3O4{8q z#s3>c^$cjSP)hu*Ms5T|JLJC2ThGejZBK8r+riOMxlmaK2QjxWQ-~id;Pb<~e9=xT zPu^3}-gw3JP3f(z@f9wbg~`v#y!W1_78J>97MDc0>ZBji{SYq9795+k$M^HQxbCvo z9L5Wo0R~d+3RbIe8Z&D~=_#2FLSQp3WQ2K?6?jSXd&v(MS6 z?CkT;RE-e8{PPc3s2g~HW&hA)br1_JXB+lU8&(FfenJ0f_J)Q&!{J0d|3LpeiNj=| zmEzBc;U2@PsX6?KjFy-TzfYGi8A?zm@*f8DtO=9CC1ZuG5v4R*d9?gR@uzVNn&Qkp zlc+dC-F=v#%v}6pUMS0;C27m)mV8R3DJB$NYo?#6npBo%4 zF?IgE1xLf5>70e?xKTQvciNcHj$sEseTtSD2YY|i{NHUm8v0E0R!rz$O*|$ETK_`E zbN$ism;Qe$2hk+VD3X5E!A0qhnQ1Tys)f0J+F#N5Tzj&wU$oSD_`8*UuUOFdXB*h~4gXjDg2}|`w9s(I)aGz*DzwDh$^Y+a z9aJHW+R6D%hzU*QeE8GVX!&13`tLlC-b65J6TXcMkv(DNec^Fu1!0ksvHTCh`kAJ?9z}DE#2;^vI@5BcBXBZ-Y z+H+dbTs1il0}22*0w2Kp!wl^0S>0`{O=3Ch{MmtlXL8r*J)VZ6Sw%(u4?>I3NEid@ zk9tK~8K-+(i}v?CeaTg4cD;tY&x|{MPV)4!UFfF{blRqb1-y5hoo2+^ST;JMjRTHY zTBqhJ9Ais;82UQb5cQG^8&k2I0?Q@hOGASA#JJ(~2b&p&G&_zD$FH4DEU-z^KGqn& zdnr5iOt$v1di;X3d}dFUJw{4Lq39j)( zYHRDsHi8w)*S={67h-o5y<#EP6U1l8ipWF)_G68mw7?#?2nNxw^EkU9v8FdUZfR@{;Ti`6)r7ya*`4u5K19F39v=RN_Q5NYQZXG1k$ zx7~mbjQj30vU4=K^WRXPWrx@UxM4j4Q?kC@Y-}UJVQIHO)>(8QVHZalUYu53%Mf*d z^@nl)j;67n3E5X>BPFXd=(>9(W{d`X-?x35MP2O{3JuWk<=1C2G@ItwuqI-|_TMCY zHY6&x0!_wlZAY8Bz=8xEC3a?IY`Z06112A7W>H=*f8HNGD~p+C&!o_4)Ab7ZsR;if z=0s^36%m%0-+?DEi>Q@NB{Mc)B&?O?xm5L#`f9m@yJ#(mkjZmah{!)f2@WjM&Cb#I zUKsJ2ggoA>+NoFthfp5)|64!Y4FQLoi;an`^Q|9p6WXF?*?~cOUSU0M_L&LUA?3lP zA7>?La%{+2`Qkfgr;TRd6Ggnbkz@;Ev=W;-AJ%N7EE<_jqT79xMO$i=h_9UCGC{%* z4dhfC^uGQfqFK?2V1PW5`6@N7wK90%G6{$Nj8Ne*qW(+QDo!&OM4pxTKEkSfm69CE zXp2hSqEh{u^Jx+x0f!s|*aga#Z+^~Wj5p{Gi3|2r7#vdblwUbF3Zzg>;QPID z>zQp`(DhYMR_*O%-d^JG%rv4g!|WO6_7%UoaDyuCY#eVNMb9xg)gf>;oQk0=a>vx8 z4j(WK?qZ1I@t!vw*t~kvJ7h&_JpGaS?N?(8ep7^z)&5rP=`dt`JBEoqJFTpIj+7xh z2C4?ytG=SjLQkmrsxy^_i(q>$qT$ii?73xCwcv%wLkThAOVk9sV(t*=0=Ab=-i)wd zbOdVeNPf?=X-;Z7;MysP0rHkCzno&rNM)qdC73QEmp$5`2^`tH@{gav3y)@TJwkv) z4Iv4iZ;yp9~fC&i+Q#)H{RRcroyWEHzmbYzZ2f{BEYb;0-KYogX0V0#w z$_o!8ZRJ4Is5YaFrdT^o%L_o2CTIIG`ts6jy>D-+tL>2^;_LoyIb;-gUbLFmKXl3- zMJt0w%STAt)DO*NS@Diat$~jqUNUP9Q9|$N$oo%zdFO)9Ya?Y8TDP*~ z867Xc_t3)u3eJoYlgFZeAQkfj`^`p?C>)zK``R2X`_}ByDt=tYlGHOlv>)f#X{Xmt z#ZbNLKb(e}<1Dk&ClqiR(Tihd4AZZn@P@-rOQUv?tCi7Vvh!*Ss!O_oosoB9^SOL9~H=c5RKIB6vBVMZkGRq)$u!@Ssi1>myl#97NDm30Z_Ej6fL|)?& zPTN+4c*(VjiKD2eBd9?YJavxxNt!IsQq#){zARVkUmv<|i*8M8cZ`MwBDpYvYUe#i zGf3oEVHq^kts`tU^+@@vz!Yx3h#*x)A2Yxzb|3 zJbvg)6Vnr??l^AvI3x&x6%;t@B%b1iiUyMuE7nf3#H~TrLnMhHO`PBIk(bzo&$c&A zxQKVwTxh{hRn~^+SP-Epbv;!J{>WL~c;$F)lk4!BJo5^pO0~-Louv?AHSIyQxB4^1 zpVm~ChSW4mB3VmRP@i*qTQ(`@$2dxGx)W`jU3WFHh^!12;AS8_V6=Q*v0>`!H64{ z>IZ{Ina0yA4V!Zet(Ph(j)l`LCNabp^go_F?DDbLEDIP;Ou01YjnCR>vVTXlQ%<)> z6~J+pYm}Zo94`7_yxAC8a;~QGv<8*Ac8kYUanE(9GgvbgHK)~|W^+k!JUIxwM!`GnK&Z9*a^p}&@6%OR zp5$Lu_a*@Ew1&CTGhPrCIj*AjQO6<{)tAql;X`C{t|Em|%wb{L6s{tkwyOn!*CiQcl74CpmnsJQj>R z7SDLC^wdrXkYxiSd1y@2{2bcb4BM|ViO!doSE6c}W?xr9^)kj7)y6A^S2nl57%bXt zWyZ66KDN&krB2gVS5Bb*`h0WZDs?#3WfaA;-Wu~69|fB%wt>j=&dAL~sq-V;{0wB` z-edHk;;2dY2b-)W8M>n7#S+*fl^GO+?zJZM49lsFYw#Q`4bv-J>w=VWRG3kqlukQt zYPJqzph@`C&bcW9IIXu(j)LB8tU_LR554f5yzrWv!^IZ6Bo@04FInXXwG`*(wWBoZ z^ij~QIbgK=+i*puDFNEdt+?_rT|vru{oS-c6U3)3U)oZcJnN`UB4ptDM-o1p&XzB{ zBi3D`pVNA2DDsGZ$DmsKjit29ao9&jr?<}|+v`e6`zxvEvi-1E#NIyf>3#NOGCWo4 z9q8z%$5z1683*z~;wOy368RsM0kbW+lVN4b*n~RqlT)jf+FHddVXCb^7^-NiZ>DnS zyVC@xoJu>h_9W6;+AwBl-dm_Xd)SI*acyd6VVUhlUt;w>32@w5-jw|oN6pyJ-5(M$C zu;7ttr#4higgX-;8N&{a-0Of8frD-VSwr6js4*<}YE2vf<E&@ zXA>0K!J6nED3H)C{_E2sAk|#{7h&OR2_Oz zkiH3O!q0i(a8!sk7;K5t%cHpK7&E^HMsyHa<%vU0N^2r566P+FCoT52gy|-jZmTGw zKNA-rl2}um2DYpTcxUjEJx;V$(mynpyrt#}~Djd1?C=b&+u8iROmDn6%Q* zw}~`Qf_9uvuf~uN;ycB(d{#(5O?61Vl(8s>02Xn|^;mrlWFsYqj;S|j*PP8C^)G}w6x zeKl$IR>p(}&_8XJs1%1jFOFzkygPkie*+@8rgaLsg2kH4Ls~u+Deg%SHfyX+y(krS zuV>$zsZF-pnaeyK5;~;gd$`h(f)JWxiuQGA92>DLeegrWwt*$5rd1893Vsqlsp#p76`bRe+QXCk<4TtfDi~I7I@x_jsdeIJC;W*UV@}{YIp>FK^RRGtfv1|guzse3?CJP4EOWnwhf2WAm{Yp z;s{4IevAYRxX&hWxQ^dTzO9r1RsB*ho7h6*AAGtfF|JHMrXR6wM31m^EJUTiiq7KU z!BAWLHZg);AN!E@J#Tv+Vi4)tce=~cn641jVRmWP3n;_|*Pvyz!Ep>WRP^w}u|tq# zHC62~dE$^DUNhPGJHf~T!Uu)gv91*8E5Rcj1*kJ8GzN$q4g%#%-j1T^0_cerKGEXBFeie;U4}I&QLN*9NtdS^o zTPSE+SfawHB&aviv72NLMou)?!w{XIinPB@*n=y|q995`q1v|ZSy)&%wU+jfHBB?t z@Yb_Fdb!-Uly2G><-u9G??ZL271R!sV*IvTCYunF(!@1lV+5>pEvalX4j#dbpRRrt z-tiH_wrkCTy$Sv>5rtk-zp=JV)}(oU$}Ur!b*e-LgL-)#-;{<=cNOXYa4}0)F1@aR z=KU7?b}nC4T-9)s?6FTFBEiJ@XQ6L_9RU}P`&TQ;4#$dJ6=i;l;Z(b};`8np!_~Vt z2p2~v)+_vtM(>kqmTG!iZN2X$xTN~;3I1>U>Q{p6Iht7CZ<^kw`Q}AiyeBxlQ@{uL z?`i&P__iE`o_v5k?3f{%Y7$*ouV} z^e9=5hIHs%RfJdnx{LIgl+q>pkjxiv)bjA3k~?_+9}C&v6dLWLAZ>w_ae)^zVu-?D z1MheB?$njUfm@vHKxrT8{^rCq5qcUqp4=Fl@7}(Y(PXNL0j8Jxi_bh__^1Pz8&jFq z=lzo|4$Eqn5vW`i80bF`!wRev4{{@m^wl<)0Xt{aW?uv&!&7UpuJ4(1=i^v5h*5G7 zGnglLgeMqlZF8H5WXiKuM>nl=eR>3M)9mc;n7ETRreBfvRLH$}3W?|j~M(w+Q?wy|r~ zKrVh(ko9DCd1M8sTkW1Y>NmFAqc6DIzD!P`RO)qr4sqtM23KFG6pbIa!Bqnf0APWA zq%8?Ih_&S@k?k7m4je$m5TH)DdFc z7T@d6H>b6a^kFu-hZ6Qmp>PN zSJkb6|9b-Ntld8Be~r0|^vJk5IT-N=Vm>B4o^CZbQaNMIA;Y|}mrw?@o^5F;vg4p5yI%7uqJFNz2VQEq&ut0^!b#&U1U?na%0@eFt+Unvk*v= zbX_q_?7I7LWK8#zEjBLQ;(+O0T&$-uf?cvdYR1<*!?yHV&4JnrPh}!mj?CXlK{ixLxSSwU-5D{;dUFSBl@BoT74>2=iGm762BdvUB6!0RFuv?$1kfwpw@*I|2oP zhS>WQfA;4g6uw}JSFr!g{I_oXeGZ6sAlMLlpX1LCHH70<#tOJ+ednF~{p$M^>W>?- zBEd2SReyO1V((M@*_6Cbp#pAI{-XG|MR}jV&PN278yuG7y;d89#e+~n-^9WWiw5t7 z>EDWf2*K?gRsfd@cLcvGh5O(>OmQ9&;MqegHU7>YIq>HT0|eX`4DRwf_|%BzJbu(YG47srrgu;Yq7ge;ZnOMX$4jSvC5HuSMqyJ1fjT9qVqS3 z|Mc9gtoIoqq99BVdtcO_Z)Fh1TTwW;|A_ii&THjgHwI!=P5&6!0gc}_x1B?7YG0V`tw=W!Pv@?j`sK8%J?-& zUb}%_8xJ3OqEuD&NGhtdG_Zo%>!7KHiZk&sP zaS!~ER;W0yBPRlmeFy2z$dauZvevQ_>{K7doK*UOMRIXXN6Tr<9C*ko1OXZ78kt{1Loz+D%!V+Ns&($LNt=0Ls4QcX_35$-ys-p?EL1kE9 zOM-rTBguO3wJU7a{(_YY%}!7^Ha+@;8M()hh}4Irh2Y9v2w(V8@SB4Q{|38EEFZD6 zY7H(q$22uWfwsQo@Gt2YKM%MWy`j5r)v&|H%vT+Yr4g?ySlx_3ZX{E4UczFX5pAXM zQvwB9ICwIrUrI0hJo3PgC$WHivNI{%QOaLllImq7Z)(K=b~<*r^{j|zP)%B0z-0Lf*^B_t`-5K2)2QU~Q9h)2*n5d{|FbKZUqi=dos$Xgt zWZ<`NprL9UYU=80YOTvFE9`D9Zf-5DEv@cPfgo;AAWto=p#2~qK_bE;BJPg^B>lp~ zfx^Nf{K52$z;`t@4s~@7;g=3K;ju99czOu?df&T;yT?oVyNQQ~sfQmwAOg67fr+Sy zFzERKiIAtGtWI$1x|Q4d0a#a#&mMqWvR5{bkj zqurNxS#^_VKHLRI-7Cl=m8E5{hm@dDVR43)p+Qz+a)g$mGDZK&<_a%Yy&XGUa~V2Z zvY$BLa2q*Zu^T^IcO5=j_A`00={|b0N+O|HI+N9Va9lkCjZVGI>M1;_oYi`>&Ux(~ zm&+BG(`)~*c8^RptIg?Ybis1TcD>{7a%PWAE}O^q>Uv>FF8hbq+x^?nlrFxn-zy}r z+8YVPEjltZG!rz}ux_OE0Y0cdbwzlvm0+~rX;@INq-Yclp)4}G4fk-V70#^ybLk;r z%J=XQp@kUyYCmt$jG?sQYs_^+2;U8ZZG96E(J%G*0X%(M+alUnF!^pM31O)pTOa^` z^)>(i+GlKiI{0r7sLxk+c20EvRd4<(2l0m-9}Q*}^5>~A{X7+T|4q)$!PwE*#!27F z+}7rIF#cDaO6-yC$N#KTq+P(N?SAXTaBAiN@AHWPvUsXtOPk1j4X%e)UF zongY9$>>*+gfyJNm54n2>Mz?Bat-}gd;YWCf9JH{cDJ#0GIo^FcXTp#aQs^e{Acms zLHSSO|H@|#Q)-y?pTfkSexv@s-}I-iW%!!|qo#VGdg)=nw%fP464$MpafOY}XbDd# zZvZ7zoChjttWh8C(Om4ed!+CoKhPD~F5C&}U}o6IatlBa8b>hWMf8H^s9>=bFX$_YJE2zwVocAx{Jk9S3wa& z>w-nVPH5l>nZ759wYhqXIScL~?_j^nm?^>|QyWzu&w;^02A5nK(V$A>(aSSQ-|7ed ztAQZ^0wZ*U{0P2t%7Xy_jDBiP@UN8rN43w?wQbhe5qxy@F8Iyx(97P9DMB^-W!J&P z*K%ax`K20Y0`nSB&PZvXZZ+D6jwD>jrJAHE*0P1ozuid*!j2I9N`EpjyM7#yk(^1p zBpg|mug^-wBBUPO4WtQPeJKz7Vpf9iec-!EBut~Gq8VM*$NQSSPd}qT_)-f(AklPh zI1%@Jvf#d0u!68u{O+!LGBTL=O=PiJH<>O5!w??7rzGqevp3NIVzFL;N z?ThA^G2tJ7L8RI85fW?Qexaio3a(=@PqN?-tA+|P$OEd<4tNRQ#sGSc-wmZ^qFhUE z8*?y_+9D;tj-YO%MHmAxJ7O{}o8f78NG_w}8%+^k|5;OQJnmPD7qY5LHSQOW8;%N# zt-zHRzPO9K`QG&7f!ihon2Me%rd5X?!haF0-H`HEkefsu%E+Mn9x;-JCvHa0+%}xNDr->(ze>Br7 z=0pR6lD(9~8ev-zniaBs+qZscmGm(NhSVPc1hXe-MpaF~k(F6!%$ZbD9b6g1yHew| zTHyxj=n!*Ta$K*?LlpTz$6(JdHPfZ)ZsDLSdpU0?>=@9MWneMGykrnsTMlqIr|AK& zUmfgZ_u>Jwakgrw1V5x*D@XWUCu)nqt5A=(H>RNn4d*g4ycUnYfuw~JlO!0`?(UzJ z9W*JjeGQEYSB|9Usi4Xk#oTQ*#)^gu^zl z6sV}>D8*PTP#wf0Sc6zYY*@S3!kPO>Dd4NpTh!}7o0!7`FR?HA7b&vy>T2^DX9$#mAw%TRP*hP6$FdG&{zYz4;a}?7@H! zLyomC?HQyqedX>e9?#(4Auw#Z4@7&9l#|9c8G-z{uq$YGP(fNK{ z-Hq|NW&(Y=_+oi890(w(&vf!7&#%!#Ywn004jkwkwzVS0qALb9q{m1veXKKE4o^}+&U zdGXryY~PobXxvAgWuv?XaF?~3Dt(#M`r~Gm)E9E!C`V>ZHF=>x(9JGCRWI1emEL4V z%~30g0JLbrUXaKVtj7K-k~Icd8heW{O{sN_-36rTaQMq5qhedD3d#kcMXHo z)T&zk$!H(qlHPonW~bViu5b5CMfqd~E29Q|-c{RBg6n`+Dta<^7`Bm5sYt1o4?8p< zi2$TrC{GX*3Dr|TWvw-eiUre}zu7e>rS#^Tm)!6g<@F@o6V@j1wKx7n$#6T@K8>l~ z6Zqka|E5ar1J*RS3j$8g1+<4;(B_taZ685DH~$v;Z5PyA4qzuY(3j7Tp8cS_YXWq3 zeaP!O1@KCyLtqcRZSDTJSe#CAm6_1}s@d~XfZ{ul9joU@&Bvb ze?szqlKxlKUb5PmW9(D*$7i*t{J-AwN7eh|JO5tmD`RUdfEi$d9|X60%woJ#2ojNW zlNE+JRh1MHpGAf?kmX6C>sDmYB z^0fj^w3)LOtuy6l(l79;k-yY{Id>SpLUY}D-##Y4x{JnxlflR_=z+E|=BQ0Sb3K_i zv;p;S-;RBBE2{95-J>!t;6NiV_X{`pN-_NK3}0YBjgvFP3!t<7$QX1EqS< z9*1FkoZohT7*U-I!o z-@+4tn(v>*P7ho(6`SI3a}9b~WtsQ-1<#AflQ`U!_;zK?O}eA%d8HuBgdmRdv9sDg z&W+|hC)7M$kZM0P%cI(sVtNNpZG5X0Qia$UkP7^Z^nG(?)9z{eyQtD$QvAQI+F+!N z!)a5h)eX6F=KiAe?DQ#rPE=gGRUeY?tZDKuD`DIgYIZTdhULpnYOkP#-|9^rO} zn`nSoa+lmp02f>W2ksVpn{_0MWDz0@`0f$pE;F57J63E8@agN$qry)ynA9({TyK!f zo_pP26zw)bTHsu(j{Db_qj(%xTjby70S)4|kYzRn0ys*^c#tq zl6sRmKmpL)N~L-k6otishxAYi1aO2eJ)ec`G&M9TBvh``gzx8pZU4bTE=RHTmeY53G?n`}P;$3K#U3S!)V>(hnIqP!xJ8yB`l`6G(#N62M`(WSEi81} za2R+wqZJx-t>nXKS-}ORYKwL01Mu&G==9lT@<`dt{AM%TK3kpNJm>H1_m6$!+4nV@ zeEQFp@$0H9f0wpGFJ@km3Y>AH;@9xBdq6EaEM>#kvx1ST`wdrVe4Mn1O}im&tEt!5 z8)F2R=7*t33-Df%w0cZNTT*c%>dAz}&WY(U#{zJ1WTbkKxr{hWPDH=+i!R@Gnj%m# zfBG~yXg+@4{9u+;H_>3F;4-iG zq*t$Y8N<5KJ#VlSz6d)(DLjJ|v^-U+uDr#nJWGjf;FVKd&^U$30su}3s3m4{?dg3s zwD?Qik^I;L8(&?i1k5_=Ay=Ta8=8Wv(p5iXWK2`sy)uO18Z9LIJD|)2(ODY_9T{HF zm(!;EBM+JY)g?V$;~TMv82&y+p&U?H<7gh+pW9g$lq)oPXW(d|Gut=o)pS;KPo%%)VUl;c_AcOphNiVJ zD(*AOQ>ZIe;nKUsiQOn_X>T`bsT5zAjwk_=8@5RK8c7$|rAHNmJP1OZ zhxF&6BSol+2R)VwSZQIn=4iq?4c(#o$Gzh3SMs{I6X@>Yj=&3So+r3sT^F6DZ-)Ai z-^${3t_k9)3DD=^L3OT)U9cR|P+gJ|J?Bn)df)m$cU~;-DY?+!`rvs_=X_ls8amZG z4B&mP3EFggyJFzNc&-tx{@GnFgau<;b3UF}vv|*)nfn8NhFe3esZx%cYZljX=NPa9 z<7kJnj%Z11d}8EP7urR?&7$qKRSp>_{tm{rExYKEI?A2)y0Rners5e#59JAbMaPsI@0j?5#s1xgSI%u%6wqUUZQlfSf{(Zl z5{sH9t|AS=P@ncFu0lg#nf9g$$4mQ?dtRh#6g!#02OG!S3T;mPN^*0)DHz%p;H<7F z1=Jyk6`xztN%e+3zi_bwM#2j`8Ze8h=&8Tm{`vgUTwa=%aXSlwXmFb%wM)21r4S$l zp_EkA#U)PjIx0KcZyMmN5y;-=y~=fkp_?<5h_76rK@ObU(N1g|BH&!txS=4{y@o_K zq`nJpab0XZN3zCy&rURuCV><&T6{Sd;?6lSGE<7xap_!pKw@0Ozk;SH4QVC0*_}7A zf<+LCq5c6Vbk8`VjtVuy&g}LT3vsD5*r~rp(_PPVY5X1Pni{eL| z^svaGcKQvjA&s!t7{LS++?Y%-0S#6>3%3rVNAzU*IlfklW8Mqy)LJDD){gOq?9@k) zEbr`9%H_fP*>nfouOFj#f5R334CemoI>+BQPFmmH*4gR*h35WB-uyT5e+B0jX5z1! zK2s&zpU9hkanqmP`a7VDn(F){ZxFyQwJ&jd&qyl+LYbWrdwN7}0i*X9yx-on>V0MM-4qSbJAyS-@rTp(GA~%xtA-ZPKumAZhPEa8(lPGO9A>o4`n96n z?BYZexGgapqPYr}VVDWV5JplY&}Rc%6HC7$PT+bfo|LVY+*B~R4`(K;@#{ZZDp!^Az z{^$BL{m1AJ@>vxB=lV1M$LQbiztW%OKSqC}&oR^g-2bfqG5Vu`{%`bW`;XDT|9_=F z`+to7PM?#j|M~gn_|MV*lQg)S)5XI3%mcP?f1lv}xBCC5i$9Q0=hqFJHCB`^yc$=8 z21}6wAG47XrDX?Z81aN0S-fw_W|}3$7Q|<(xKOu^O+!Zskp;w3F0=E_9UE%Q12$OI}A-gbK5{E6qDu>qCcbUZqDwie{_@v zbIaLYMOOt8Fi7(D6FHIyvou&|RfzjNp;n4hY|)TY)x`R)%*tZE6W2zpy8!UJ_|?x^ zovu*aJJk*&F&2)r;TM(&V2sqpzTc>*UZGWTf>s&?N?}-gAI2}MFlxkwWqc3T8Dw<; zN?T&QHcBoQ4TI*mDpAF#=avfd87LPM4aG`I-%@8O|MI=5WsRGjND5WZ(0p|w!X#B2 z`^eARsLLwEtwp;=kjI!X@@zQK>ukQd^5?KBh6GQlQ~k*Cdurpz@z2x+mv+C6HDwVM zuFrA85VttUy4b?=Sh;4J*S@HPF*oHaXUAJOr^#J~s>~vC4|CdziC|~*%gfEL1VHa0 z;2bz)!6ExN&+p$6Jnn!{Yxcl^L9zlT(s}w_1m`mAvc`&G&{IajCF3S7$1@^Qmk)$v z*f=WYDm>RSW?2|&Fv=4chi7Dp5$1h(D_n8gzhP(@zrbTU<`+c*0 znhSlKvX3|H#ltP7$WvEALTKJj(IIdHD zBHv37+P;sH`_DG-E&E`~a%>9)+JJkXoq#H>coz2o$(SCsXmT6sS40zve~M-9Tc5x2 z1#(wxGY0B_ZUVW#z^M>)AY0r)tB+CC#>leZrrWn^ScpCdFY^oGQWzB@(6IW0w78c> zdbxuM(60zu8~|;&JhLI_5S$5UKMF~Tl+E+yB3&U3&=fDzQu&s?kKk%J_*~{bV>-~L zBQ|`KQvX^)1qbZ-0<&)_2%POg;}pX097&z+GK9RPh+=X zkLq;Wy>K2=*)P03S8nxrd490n>UwtstXzHT;@{-AX*ClaOfxHNg3QmL?N@q%Yzme^V?zF(|r|3VX&(b>1~CK^#Ny}&lBlw@^^73Cy# zs*~^b_P31+2!P*|fh1}euJfY{2lVxU(!pu zo{Q_0q?2$W5=Xqt87%0t#@gPkgp0UDbS7y)raK#Y^pLO{{nU0MaEhpOB&N;SuzI3Vch9#yc-wxp+H16nM-8HGvv~};3`t9d zdu|owfx}ab?gMV!N;83<9coJjGc=*Z zFqW6PD#|5aWHS6oi4_10@w^$@0__dFr+IeXM(KqbMV0a%y%`@x-&XDi%j7%+$V~3L5xYAh3+)$ z?}E6gu@S#a(NEYZu;-)3@3YKg@K5I8bV?7-YDhI(T!$n745TlIMO76*5d9cPHNI`7Wt+SCRp(m9Ty*nm~Z4%6#lJVGlGE5&*zQ{=kWkoC_M|~Rc z?TxK^vU6m&;C_4<&jOF+@Q;^tK%I)oEh!|w))V)0>1Rj+)y-EZZ(gvZYNjJ@(sbvc zceRq^3QUc9%p|5?oZqe>>8?oJ{6t}LvI|YzI4thnPhxtRqs79~Uv}oBL~puf^4-tD zMyxQ3Zn#HHuXt^f!a4viWM!6Ybw8eu)|P(I#g=dC1A{H~RnBg}RFbfOvP&iCv!=Dy zK+O7oK&gY zfqY08Y|p!t`)%E&U|XGsT^>{3<`c_urFJ*_G;DfUmzygEj<~9=TU*7?-_MSn#(#5Z z8;cvF*%a{fdHd5|@b9?JRtgki{6r07pL2$P8`poph6T01jQz~FdPa3juknEVOYx;u zsbskF1wAiF!74cI7gaqhn%z++^)tS53UU~(HVcE|Xv(1u5qvk6qB6Y9jLbwHYdo7CC7_Lb^Ku#WYE#=rkuh(Z zR3JFUhe0GK_UY;+vCT^=7N)}7Wt3)l!H8c@V$_s~{B9^P-7@@B6Il7(ibxDcC?4Qj z0YPRQ3<`b9;LxY!Cmj@9thMu(pV83YXy?%V8Yv}<0w6<3IV>2Wa@FuNQt%?=rd<5%L&+Qc|H zKSW_19sjgc2u=o*F)k#NzbaSCEi8#U!P+QvbP8N3P_2OCq_Z`DP7d&wj92MwC{=w} z_s+d_JIK*GTOdP00hSLg6t!e<>0k7pFKWthvwVv-z)R*jZuQx!g8mugw+FVmE7s^L z#8%d!a^^p5Pe^CsXI)v+eT}AEn>lS&9N`@j&5i+?%U=W77`si@ z+d5GSp@fxB`FpjA!_An8Gy?T%*~S#Y5<}0CCO$boCfYW~J`jUEs+>(GQlzBT;fba- zK=>qKdk9R|yn@m9u&Tk@XeK2ui_--Zz9O*>mza{WE#&Wcs3fVR0s2OOx!+5%Wc2w6B|=F#ha-x)#bQPvgF!KA*Mpire1{>XE7^C zlP`9M-`FVkoQo}n?6~_Fb|m-0$Q?d`JTYwE`1-9C{-)hCi5_%}%64~Fs|fW$|c@jL}J2Nqa?jC?VC zx43eD(jPbi?k_k(R58!6_-LDYGfG?`RaNUOQkP(Bj z0){w{poT7ZA;hlI#!?qPuHP7TvG1_h(J3!1L@cKJWNFq7BoO3Jzxm%Q5?})N*l-AX zEZX`USPj^;tUTB__5oJ0Otx%Y4Z`QAvRN@AU(DQlas|~}_i^!1GIqP1m!zHD&dphx zQ3a=Xy2i$JW(5kyryCuhUP zm(nRz$_maJkgNC(Kwgj1k85Z*b2Is-c_~g4#-5B`uUc;F++m+<`rJ*Fx`JWR#9un4 zcl-DXk}0RAj=y{>uoqo<`8DUAUj>*sknOGjGRFw1#n(=~&Mpb%ig*Cc7KL6tdpkQ- z*ZW~mov2YrX&)l#_2cKEM`d;7+%fV~LU(qc4+2l3*uW(n=yQy*gq6Ca$P5l<6!ozJEjB;5tY9s$Yy1GyI2SDuWb=$WvFKfi{2ZB`lU*~s5;`* zBAX*IXtpd`V77>qLhJ%}4C66I+8d*4&0MAn6{q6SyHAwh^K^fA!DP0;WmP(VXGgNn z4s02H2RL5OOkLEP4sL%mICh%UPCnO9lRzFF;nhZ-H%3Qkht^*oPBeG^rn)A|5c(u{}<^=vR}&hQp_H_~9v1?+v9+$N`stZrT|fEwC5NyW;AdB#I%&5T&^QFFM8 zO_VsZ^%knWUs;#iV!x-K>#&~g{U5@X&jJTX>k}x5d`|HGUD*CXtWT(|ebNgUf1wwG z3WPKLIfH1#H2s(%k8c4n!lHu|L*g1NZONyXR=*U>F~)Opn9q9nA?}Oj4S!s|k-Zme zc5Eb%ugcSgx1}u~f~=xd)^XC6wTHc3kvbEuA;l|m=sSy$-A6;coUMG43+A$*V|2q+ zI#N<2CH)ks%TyHUN&v!5c_fHr&O%g;O%?7E1<(7g_`mk++r(-f%+avEnnMB`+fW=sWi z>-JfKA31Uvk$O|ztZ72l1hp>C=AW9WY^ZZ##5S#8SRiUxIeta7n5F{olx$R?X}OrN z_jI&@8Yu|^EBENgYb~jl>n*b|j$!@5Vw+=Ty?9}=(5hph;Bo=h32~nkF~o!DPJXS4 ztN^h$9dXVDDuDL{cv|61v<2IFnLCj;N6=i)xn+K@d8gVGPpP>;DPyadD?J>v&R{W! z9n2}tq3t8zzgrzv$$a+(7oyvHP?Qe_@2hm=VOxIEjeYKMRU%}50ah=`6q2e@HnqAY zGhM-57KB8ru~uQ3vc&vs;f%iUEaeZ<3@o zDvP4oEr%FH&odiMiq+`-DM`RnF$TB}yh4C$0^yk+ic977%J@rYB@vONa$FI3*rjJh z>-22_jTVfiu{;xzEVRf}_)fW*KzmD}@08zY7@6xzjJS}W4LM=^&z8u+Z`00AGcntU z6i-8Fxlw4n1X|7^maumQA@+oJ@(w|FJczWodqs3Y{R6JR=t9wB+}?OP;;==kk*fK2 zVMRNtuv07V?sh(3?R?op@B~j;i`az~>zE1s8o<-Bse@$8yc_j!3Fh<2c|zk;_sjA& zT+i%$u;N!Xppz$)7(i|#tSP`{#bue}iSOAxd@-ZqQQz?f13 z2W47{_(dUW`X1XXsHsEY6jF53T>bHSe|GXiY*?kncSdDxDkyeiSmQzPrTNm;-Pc#_u^rn>-KYcYPBF{KdF2fX zK;|v=x`=js3jn13rG2GN8>4MlCFPrsr^51cvjFsJdWQt!;8wy<3&Z#V=5z~#qO`oW z69*$=K+hk1lkb0;egE!ZhEeYC20jsm2K>KIO@GY1&c6P+g#jOWBFbSz4U}k{ZD7(k z1a?DWDsVPfVud*^Q`EJ5uzx1DOb_(K;$MWxV?f!OD0mvirey*fS~RNtoFR=hYk$YmWs@u9qd23(_@k(J7&=Yy zjT>j_T_mnc@%tl>53qa4UPYIYFOu1S5`zTHWI1cp&6;{92)Mq*L~k_;t?Nz*8)v0K z)?l%7>RaAGPvEFi#M+YHgsgb^c4m#Q5Av~3(T^o*6yK;> z6cY77t!mfQHVx%cE*McEHn@-t_O4rx&iR*hpLbMFWffIostYuKExK{^P5URv4!CR1 zt`Pr_TQj^YiD_SHsr4cf!*Ov3Hij7vBqk+;gj6|b>V_azj;$vLb`p+X#szDPjJd`F z-R&aIFQF-qI30)QVnTQYKe@j4P|RDMEK2$7ppew2yZ21PCNMa7?yx&5a9;;(vP0J^ zG*oJu6IM664ke%b-m$;`+_5(;QE6ENJUZEtEHeQ?%VP$@xijFC5j}?pO2v-$)OP(o z5SK0@fKilh^c^fEyKxUE=uHb@E$vOGK?WBpyTMr{6`FKK+Sx&s<&9wfGz(%<97gM@4>;Qr1ql}v+4xByL3v`jH2?k?K z3OZ*y{Ua<|Vy~1~U9BjWThUih0gM$8)XC$V#w}mOb&T$=n3~0jGbKctf@M97}l)N-?1Ykt5pZj+6~#x zBbl-cVJkW#5ZQC_Kt@G| z0=k3O7y!{grt2+C{S1W;IofIKJs`UP~e$yc-|@mA%GWphp+p zBh?eo8l>Nb3J+}3NMb0~O^z*O>EtgCgt-Qw8SEq|_0;e>d^uD-7b=VFw4~iIlt6E^ z^v$G~!(4kunNmL&Xs29TP3_V}-UXXdSt(e*6PH4Nz3k%#<>o@5A#fejisl$+P3rY- zFc*Xj{~(%0%i1Pfw?zuI>Vao$wJm2(Di?^8=H;9LNfXx*IK2QgY#TkE!)#*plA50` zvL&me=!n3JBB%WtWOHgsoJ}exI!Xgt-fxFAt(P9P%3tPME_ z7u>;3qu=*HX;JdI7Hcbajo%RpT~a{AXgPWzDU@i295YUe@twi6DX>NAF19I>ZzHI41LGinh>I(H zu;{7oL(YX89d7~ZEnM9E5?8%O;N(s0sW3)rVi7a0Z1pIwZW5Q}%Q?2GVwK4K;t|)T zY+yq zh|&H;RGd(xGfOee3=aWCNPVh24Z~%bjeX_t*UJsYb$EY38;QQo%1)1{&hHax;j+Sw zW)y7LWZ{ek06((W6kRv>EjuJcSX%5CeFYgUAy?7{={-hPR)u6$Xaq1khGM;0j9GRI zKzkY&1Z5|(%-k!<8@ak(bM}>WC`|2YI}}SwD+4NXLz=-gSvnXTuwVOMo7UoYEQ&PR zfzZuZu5*kmU;0%=zk;b?>)(-A{!F1eRK1x)Z?H!PxBzWbx9;YVE53N^5o#GL>nlG< zEjef21-h<1vYlNsw{mDI&$vLoaAsZ>>cG=-HA+>XJ#K_`04_(4Czvy_Sd45#H^+ku z2I`1h?kZaU;124tk?A4d;SwCT?@2p`!}K%Tz;Kdn$c5sdw}b93G#+A)&X5{Cp~@RB zF3vg;P37S&4A{~iz)kfnWY1of_nL|zlpZ6#4LEJM+#{!WwNH$B6X52>f{_iNrt*I|uUd#LGuO~yZH5-1Lm%|C zp2^EW2kZ1f5REwig!v$!_Dv=^A610X$2R;yKSKb;#AKnAN(Y^XFZea%(r$o*nn+@3 zIFW@#1U=&Z=jZH%z|BtqxJtL6$d}#1#T&aoA({B7n=ZiYbm)lqw%$$gc?bVOY^5M_ zjC3GcBs~D{#Ku4PsvdKdH3>;$T)G33WLSq*8>#t5akCvEBp=M$7kA|zPd@yi zAOApzT-k^n9DnW|T7v)k*!pABs8U7BW{ncAGgM$6Y=u;k*`+>*35Jv`OV;_louY8)}p843w)5b-E(Ad$%2Ewu- zP~%JM5n~bNj#1Q6k|)5{a-=(LHepnX?;C?-5B)d4xsXKD^l-)v;0-e=v77;sZn-Lzr-)n z^>QcY)19} zJ4on(tOEF8jApEX&TAhP6a?auFBwjq={GOA)|!4_WZ9Azs>B`pB^+-{SI3+die(B8 zoZa~E#SOQ;5x`5z;YAXHv6x@l}?4ejTVahyh+j)83 z-*0ape}Qy{N0SjnmP!?_Wj4kIJpt~KpOOVEht+0tzB6+=lA2?%n{Pk)Ai(X_U7es&9DF6LYIaWO*2i~HOb5}ju#Vww&&ii^ct!v3(A+@vcCY0Vn$IBp z`#||)C2d0OH#EoSypZ1V%UuEi*`@m%GOxeq{RZS9jgF9HG-UI4WZtbe6lNbkc}q&Z zdnmr;T5zN9{n$e5U>!s;Chndaz$CR~mm14Vg-3f!SHBG56lJemL{3K1HO=<@2#?P9 z{Yc1p^7w9p9OqkvCfPTmr+-as?P z1f7`V!ITAuDfjb+x(7L)8d~c*EpQjdzSgH{m~ydBMQE8aJT*rl-!-M5Eh#j4{exHY zB+Y*&=@8(#FqAv>XQ^tQpp$UHzQ2Iy_@iKiJV`1_unJRntyNOFt~pEPc?p(BeOtap zvSeAXAX_>*?05xuX>cpsYp!+P&0PlCH3ef{C7lz&y68KLF`kYiO(|DG6`T6{mu}LC za$vLi%d@tq2Nu)G$3$C)iq&!)W@yQ)*Lr|@z5y%T7c{+dxQcx|mgsN+j(9Tol);ozc6ZPi zhse=NwO7W``u+03u;95!%WQ*HV!(*bh+13Zxrxs_l5cZSux_I{DDf<(KgN zcj{7dFQKEI(%Y3+{1@L}mUfzh1&7{Bj+-VH&LRmmdF7QI{7+idm6Ni zz{eSH-kbM~UcCey`l=5@r{XJE?KndBob0#$xZY@Z+QKm8H=N@wZh8d)8UT$^^Yj_n`}fr>2c;+ zg=+2UXb+z5SDQq1)N-JAJ@Yse`Nah$?Y1-u=GttRk;@LEU@)ZJ5Ie-I-`JWm?U4H1 zPHi4&65>(}oQ0ZCVlI3?uJ>N}E^59`yaxr;WLplVCpQ(Oa(~KQ>W2KmViib6_%b0e*@La;A|>u27sKp+9y-k1yj- z>J1>8N0iHH_YeD+lewyl`fP|o-mh_6e!in#4?db`zt=IB7E&SQtmg1l6pP*O>`Z*x zG&OR~?flA7(49pl$8mRlzTD{gx{JxV$LZ{9ccKLwDZip*r=}v@q5xzW74*Lr6cxl@ zsIpMi#(va+$1=W()Q$b0%FY5RtEKDXAl)I7(%sz+(j9_ycc;=)(w)++fQWQS3nJa! z9Rd>4@jbxxf?Tfe{f=ur2bS#LnVB zmEzA#*czvxKX#gqd*9TqIhgDDdsH2-10gf;1paDZ95|2F zgd_VJ-E8M}fAk4P1rp157mtQS%9}(Jy0f;WiZ_hRqrT5$nDt5lfk#mkCbV!nd|jKY z>JZ|Gtvt+AqkR|Wu=^J4IrX{R7VFj~HD>Bil%d6uufSUk^g#)_q$FP4fZh-vLTJwLAw#zO56) zbl8NFYL(AR()f3>5eJ|vBiM2#*dAC|ao16Bp;v#R4kCjMU%-y_MF0_55|0Ce1{txU z(tM6O-%?B`-bwQlwIg3qJk->*;Y56$0$q-|dTsxGdAZ0=l69M%bIQaXfq$}naoG= zb}k*}Lgjg)+>V28u-+3Gozm`~WiX`^L6LAYgZ#5jIK|#TWhRkk8!66ZX;n;p#PXjI z;x(=8BcfFm^`?aO*3%0jra@u1-ge(U;Qq(9&i}5-bsaSN>(3wB)@hQVg^vK(-1Zgl zlJ(oBw%?8JaBesCwG2s_0%Q)sX5G?X(v^e}a|T33w~hG-q~%BA@V!{THI)#S7k4`i zj1_>@F~&~|X^8x}ykJqv>k99->pAQo4AUkL54GO@UYhmMbazh>HBq-jfxZI)dy_jg9G~dSg(U0FY5 zm#7%o$$<~Dn$Gr^=Cz8YG+sWzk#fM0J;fr7-{AD6wPirV)y=l(g%KUtI3JUlUiPK!ZX=|vF@^B)J67H1LM+yj1()7oRE`Jw;j5;q%u3Apg^yG zSl^6`gnA*`;z?9_hJHSdFWuSTD!*XVJM zu!wm&0BXcetas`eeSlzfu`^{tPf@aHq;A_ph3*|o$WDkl#d%bCP)a#e(s)Dyt9_E=_f1)P3A`C$^)M+R~YN3Ne<*v)V$)PWjfbv$}a~ zv`z)DrhaH^WW8(D&A_^-w1t`QS#t37d0Sxqd}MCPYq#xf8jMjOl2OzaO8;;MDMI;t zQ|x_d3uKb`sMn)SNoZkPE9TjyZ7h%>U}nIO&WQD=&b(DCO6pKwHj#IB<49ZmyR4&TV9^@elv!0Z-WXu2Sn5>?@W!90@3LfQ0s5Us@baZ~j(!~h%LQ)Ui$oy+k*(-j} z`0in@)OXZ%imj_8hQ#&r2pIIcS#*9QI||HR-WaIrGRE5#l(Q#KQVl^B7*9>%E({a0 zcM4kUf{4f~){*g$AY&c{BQ4vyUDTPpehn!_L*HD#u0%w>U;)}Y^HcJfLXgIj+0D&8 zyQzuAYM@UE>s$0$)j(bv%E=?&UZGU+A0-j{PiD>If^sM{W47d7ClW$ckH?Eo5IJCQz3zX;!>fNU0h3btjH zgwB2{v$c<)j=1B;+@@H$sLSL_F_U=KNi5RgUTy}XEF~vlW5mvsGy4u}R;aCzt{d{@ zd-Gfp`qh_a49OYBsA(yTuAG~Vp%&wudn87+y}VdHb81FxNgN(yQU}1KKkS7J*L1tu zXw5*PhvSgnuO#8Ed~parWWPwV(rhCOOx5XCp6yDT>rzPx;*Mxfa^7@$vYaHi`;F^Z zF9hSoi;{Q8eC})q``EP5hwo%?@p;!*_Y77`mWI5Cklv%77$L6i(8-L_^*s3iRy19x z%!+x5ZnB4YreFvaKP=1-&W#i9m4V3Kla^))ap;9Ih}4_200wDX;%!G@g$^n=n#ew_ z(i7G#XSJHz<4l%RIsLd4aSG!<7 zc|Ig-ZrNYH*QwRL)z_hf??>7fq-Uo%A0yQ&t5qs9x}I2kH1?)^`qjra{5@>~YK6&I z+bgM{kM>KnII-w)<#v%I@yVhtyTg*a*Pha`^nW%3xrmhmQWrMmToi7hLT{*AYS;chW>xqz1h)H`~>jAe0sd~ssIO8d5 z<7P7di{Ui5I^j+nB>Z}4LygBJ)2Jno$0-Az2cvu&t_x{DC3{bxje!9jcAOA|`egVe zL><&P-&j9KW5YJzglG9M4{|R!iLoG9De&&)G=eU+alJtA8xms(Xk$N+L2iGCG>g(O z&{B}crG2QSDckTh5Jm8%AqNq!Ss3^^75T7)bPn-`J8;A26UtMh;>>q zK!Y8tP8-_{H73HQ%pTK(Je3P&fKP(em@JT*#P#5&jg{_A6_#>Jd+n6FA(4Rf#N&!zW5Y|ugh zMu1q&?b4y!XR8CqY^Cp{Hv5WCpk4OF49=$vetG~+pZ&d);Gfe$ zKxpr^Xwmf~;!pY>zsZ68k|?-+kG_)J9R=|+>jCh(0n3u7X!{mgA+T!lG= zk+`FX1HN>41(**%`Moi2n_=mBW9T>?Vy*Hz?~6Kbs81*a{X*1N| zs+E89%DZqOmF@>8HC5(*z796G)49;)Vrb~@(k<XMs#k@N^#n-KJ4L$zRYXwIY8S zg-|co--H4z?1wLw>*>X2VimL$CgFQjk}M=1)qDW~SkB$xggQm_hAGYUU{$ttkN{>k z;6Wh!Xh0NTMH1aOEhRStH@m?%} zUhIjiqSGyDVGHJ!p)sLn7yS7lsvD_|#oz7fhRFi>C4xb__!uNr$)D%G#NRbEmacXO z?T6o-$)0m6ED`?F!bfi(O83HW&bmz)BC;9G#zYtV-0oS4dw z9|a=W^^5t`Q=^uAvu4-WM{RsHgf-JM{c}qxDsg(1mxte(@3j#dM#aoYW*k;Pcq*VJ8G>lXEOg5K| zjFVkHitBofDdT z5yQY7C>iTzLiZyuB2GtwL=A&>WdDOaNln`#S-g7fK*^*$326@s;?qsaSN0PouZru1 z5dDJ5sw%zS8>oSdMEet|bCgb|2Nfw&=x%I|BTnb+ybcNqL~OGL9X0n7?p-;O4#w|m z02OAMi>uB>*ayFqzWnfAnFkyL%!~aq*BWWyH$|85Bl?t2} zpCx>mdbgvI1wWbk)7|Y<95T;j^sOb&8n$Opm0s|T4w$yMWN1PzJNddVLHzedrJ1C) zK^01oM~pmQ*D!d4QXpv%wayuK_E<45Htm;dk4huTU?>UDfTaVC;H@>Ah%+MzZD}WV3O|Vs$`7xH_$!-R=b=E8RHaVaHbaW#$))z}ERHHnd}Wca zR>8A5l&^q>7(tvl7VkB&pz=!{ZXFnZuVmw0X7f|!CksV};@NUVR#0MB3mz`a$mh$a zIs%TP!D$@UGYKF;ATc)p}dhsD%@x?uKFpiJd=GHM1 zKDV(UJyC`ChLU>4K9W^s+6C?PmhA1D3469UM%Xp>cv0xF03s{=JYpx1re)huHJVr_ z!}Kh34Q}SbaeYn&+bBcI5Tq{44+iCG_y-(@SSK~5HD$3=QhJ1rJ${RyWy)5PsU>mc zCWa@m&IVtD!VS3LS$%GScab@qIx!)B)2U90NNq;wIeJ$2xKjy-HDj#ZoBXw4slX2h z*qO6#v)uBiSpqw$=BZ`j@9vD8w3OWjKbeU`+w*Ax8t@Bo;Sy<=n#I(xcCgeg7?XZ5 zN0lae>OU=GP8EZn$;%rZ0?tQsl~vgzwP|vugIfL}Df#AI7nC499@`?REE8$w-PsHTki;ycmJa!<_VvvBLFbP~1^7r9&kl zhn~gZbp)+q1Vr_ch*sJaoEUm97tD=n5n|HnmD*bRj<*U9WKXaahp_9i*sVTpP;$2v zJJNOX=81^}7M^GM>TR>|;<^}vzVjje*+R#mOTUj=h()zA;!08>>j;-aZ)x_@zDCa} zXLD#jXR1&IPNI-`Q#y0FX!A{91zhb2^L7fTQ4mBu=8#AkFyc;&P2WQS7u^3iO87TPqv}Y5}Ic3Tm zZp(BQ?{PT?T#xNZSAyOv%`V&h!C=GuW!0RqqDkozD~Bx_!ssUngysAD{UQ<-si%KW z(IJ77t^|Io>Q2l6E^LPQK^Jzt+YaEutgg2001^S=*}tUzcJe8x(wBN-bJ!3rfk`kd zSW?ZL>>J)1k+7V$aTo|V?8X}n@bBf#p9=V3zW1Lem}8g2uWF$akA%KQ7#EsCFt>S4 zL@={5cls?ZvdrO_h-em4?#;sc0t_^JxU{w~KQ_#YGBp=(RRxgXW@AXPr|IP^f|50^ zYt0DdvqCs&h`^p|-)KKdYCj?~(ydz-_b9jRNAC;G91!zXE`dfQA`7Wiy5O+GUZ@cu z&)}ed@|<_L1@5i#aVDTpbCfEK!QT5(dY$rF&I# zmugcf$$H8 zk_`3wHpI!@L2Y1LED7A$m+mD}k^Cm^umTo2Tu$=iM?BN9;Ra^AXYA?>r60OlUJyL7 z$<^dU5hRE)gWUdNkGH4~2f4`h$d!ekaFy0m`%z|mfW*{bO?9T){PsNQ##!{EMpz!+ zHO3bG3>IykmdDe>Jg8=-7;|Vc9?m=a^lY`4i~ARa?+|d3rZ0s8>Y+1jP%qE?XfKbq z7=IitY^U;`IX{Usi10W&JKnB$D}!z-2{)SII@$Y{X*A=$GZKan(*W-ap)!jDJCB$* zA^^bzQ{|!8&C!-0}CGK)1)&oa^FtZRnU&wjq1OqxM!kQmf*SpOs{t z*kx6;)nE0=M6fN!vn*|OPX+kqC$Wv;`t&3CT5{wyjO!A>`bp4JhynZ_{^$ysR=sca zhndOB*Pn=$OBtpIr$5EbqaV?EDsha9>wM$6G6WdjhmGnyeGKWSTPM)+f@XbD^%=Ub z8PN!ju)J+SQT)(btE6F$qDBc>?8_(&41N>?IBTXu?5ms#9M7Wd_M+vx-v&qPf}mYwHZ0FeBLxjVKJkw&i{LY_+afB7nFuj2 zx7CB5MJzyc#cpQRa-x3DE=I#J!Zc}N`DKe$!O298W}^_wMseCf3^Y{e(s)#t99MdL zTy%0E(4#rvMHDe9hG?st+MZMQoZ55j8V>EBUI-K}7d{Nr-c<3;3PoI8?6KC*fE&|C zk%FM!x|boxsF=lnyzpSC$i7_3Fr=wJaTUkg4T{y922-J@*-@-C zXGO>H24To%O@}Pr#1#AC7r$db0!!azPG^J>ZZ`Zxt!Up(sUou!UXuHx6LAJMYfb9W0R5HN<#%GruD24)xqa^14)Y@ zE?ryGd8=Ewld3Dt%3KhlAII7nX%_&_De^DpRCDc|;uXrs0nW*R!&S&`dNQ}r9u05> zodbL+26@*2Qj@0;FTY%j3KFsrCk>%BulgvgQfuPBI4C@pG)&*elq3f@Cx<^er(`gr zAc()6QwM8&|4x&dfVhRum_c3c&#t4@w3%$4svGZjbInYcRESj|G`oR~ZM9y2BsB$&N5{A$bDRX0>s z5iC1yEPd2JAc0Fg<-Vr%>pct-hz#JII73cGJ^I55;cp(GzJMD=`a>y|L*dzd5R zuLmP1JJKsm#+GQJCW{c}C|#LthDc-EFBu6TFPr-#)T(f9V@#4^Cu^)2v0Vg-(so_v zRYiE~=1?cIX)81Y1M#Uo(I-DdbVcB#`Z$&jRTZ$<5v3nR@lK08IwqS$wO{>dYTXxc zB~}=dwB<=9%gA@8G)o3J!f?YGHTavBB7@fP%p><+2ujN_4$&&@rj>a=>xD1MaBMP$ zx1u}e2^&v$RrDg*tbv2J5ygY&(iDR$K8Hh2QjAG|TW(A9WL&>;$Wz~faguWx43%?7 zrFdE56R+dNCq>)u7oV!uW80NieG>yi3aJaHvst!u;QHor>zf~$`Z;Wnwnp_I$O%xS z=z*{6ZBLzfz*cWckRJitu!F7%O7bVzUs8b&QG=0u(AOpNPDRk|tpLI0WHOvMw+M%w zJd(k3zY{8p1-P{~B9=BofLkj9kS4oYI8YO`va|;z!O~K6vNo{OxLP>qij$K81jl}z zA>HJB;Vu-SrrnSOj>Gaw7Z&OO`19hpvz>WI9qP$uRaURlbKp$yE?PO7mzS64^F*QC zJT+EKYOfL66C%R`@r|@8)F>ILk9#J98ljAUvvae{!Nu!*8hWI8-O*=gut9}QAB*z{ z+H3hh4#8q#KyNh28tS?cMhNgekyi3pMEP=I{fdaf3=tOo)6dz(*3ly@$whTS&iZ$Q zfy))%Z6%nXw{`- zD~Zp>ahX1A4mEtt{z^F}n{5s6yN4(`F@#22W5Hh@6_A%!KJ*!13@MTMB=wVV7J~~E zAOAqhHUnNQybaxYBF(P!vNMr0ZY&D49#Yf5>NEcBXAv)?hT_9J;s#r2b+x;oeLR<} zf@fIb=#1V_$Wa%0Ym05v?hr{nvLaa}+^pVsaTtty9`G`CG3xTmRR3BIFhVopeq0Yy2W3|&1&v-KC~-C-oFh0nZ1(eF9STlnHXSyKbIvm(AEE3q0xa7 zgEN%uSDGduF{{F119ZPNdSI@NZdB-)e8CjWOG+`H_aOTo8A2s0)IF4%{}^O zA+A>EZ;q=%ECSY?|IWkmD@@=|b+{7mzB#VUuc8h9Vg7K1?q_1Vg4|R{^xq-(6O`Sn z-NR|lZpe6mlMvJc#k{C8~?ekHB>b>IHk)TqCVud}m00wC^N zKipLJ)7V^LZkmeaUm3SKU2eZMxvkm5xnOR%cz}}_pjX^4+dbl4*wwcd_w!lY!ukQS zQ&+J2UGpyCA@%=T!ZM(j{UZE5Rk$_(XG{OysnY@bMX$`SzdgCtqyP6C^?Rr8eaQUb zJ9S^5^ri||pJ12|l;H+)r&tf)t7icFyW}hF_p9Tk4}f9)C-SWl{B6TQ0zIUvev1Zw z`k&Abm-->S@>?_n_J2X&s+Zp_^g~MEcgQ&Zg?y_EewX}^#`YaDAYsx!`q4k`;jQBK zUGhWf)py8v|Al<3Wqp_YkS_EcGX8%d->O94B|oINe1{B>lKbDSajU<4m;8{H@f|YZ ze<9y08{Z{Aq!N6G4478@?=s(N2LDC|Jml`{@7|E{04E5*a@#-1_eb`9+sT@T#*xcl-#w>U%QKjW@P>wVmP zNswC{Fvp*9*F*F^?!LOfEe?$5&$#Pxc^`LwTkb6mOYqOQ>%n**cYi11E$*f8pK;eC z@ILPTeyv+vn%JLl*Te2U?*2ZATU?yTZ-&2cq9_0zb6yNb~H_ZiRc z6Q)nU8$R4X_hWXhu6r{hnR&?kx*Gr9DEEV2ZfJOb(|66^YH`cCtv%8HUxV`ejU)tOf zC`|5N`I_*LXX`^NYqx~2RyTy-*4geB;Gxx%67T-3Wb}!_qt?u?U^kjWF|5~_RJ<^i^v|C$@pLS z-MYU=zyJ4nuH)gopL5>N`MlqA-UF6LyFvsweb~5IJW2An6zcQ zm{OXS4prVA z3v`QuaALB#ow2p3W>|x9Bxt2B(o2Yo;>gDAsd{^mjhXJxIxSaG6eq`|aaX3pJr=@S z@>)M!Q@RKxww}=6rmIo4%yuRV2_(T|DdoC%vK+x{(irq`E8;LCN>Tp78r4to-s-}r zN5|GvC^&%ojXxpGL2ELrLBhMw6hnP$F}IIMc!$+c>lSsFm+Bt~ z3w~%l;1B;P(Tb8YORLLhaQ++MpX`JR;gj z-hV}>rCb}}SV3tiCX+dJa**Rx8N9(;tCW`LR?s7X*U5Z`JFFP1$38lpBqyf&O{YT* zXq0jL*=jhxlo2R=sWaz&UA{l0N!Zh|Efa^(ix4!<|HPsczmX5Xz5lwZk0HaTieGV? z;AJspSF7mebqzNt8aCRd>nsnJY7JSZ>=;baOnj0D=MIW+`h99(e`pgvWk0L;c5})x zLmaMj2kqEnm<cQB-AhB_9MKH7q2vhtOzrzfL14>pcvM~fU;#L3KFxF!rYi)J)Ku3(?g?f5jUyYnRk|( z_#{MPb_Y+}3ZQ7#NAaN9ZKkc|v*a_3|JLvMiy5w8M^lIu1WCo@nrf0gvxA$%a0Nf7 z003?vFZ;Ea_gu^C+PXMHJVa2^WBiQGvIFNExt3FlC%&4V-PM+1IXyD`PS5F%Sgy{Y z8(f+3B;Zb;4LPN-aYZ@v&0T+_8}If&@)KUg*RP_?2EDS1gHO9E_<0}XK9^xt8c%xP z*-s#QUo5lpRS~ra&{RM$RxTx!XCBMU!XesxqQZKz1l{Jvbr=@v3FB1ggbw3^V_9)7 z{d2o&n3622l@XUAM+O_yk<9GSW1*+j5VABHqa;(7M&5)eahjpX^yWlat5xQCFAQ;* z0>4B@O9syk4MFU+rB{h3**gM{QB#`=izLKvLXUVvZVI;8vSnlxk^hh$skgxH~ z)75>mc}RMxc_^rl8wiDd>D&n+eQDsD4xW4#BdfkWmCC+plPYaPI|X%FucmmZvCX|{ z;J&?o8IL- zyLpez$BTT}=jUQVo~@pW%d|4evIP31n5go+I}0JdEOEn>@*}j3g%qdv;A2?ECLWpNwGx-Eix2}0OL^InM1QqpTEkJGpSD)UD^nImwD}{{_TiW8T#c;b>p^(9k$YT zC5-FgxpKV%u>8-d%d!cXWYn`Nvc8&{GRi^1v&L3c5h@JzHrliqF*0{0N?#;`IkB2n zSM7S+627+W^?i3$h}i_KY@EF+mRr$IHQdL`1Gb+~W7P(kbfQE*Jli=qJ3dib-1Ou; zdr_#zWc~qMm@+H$AeO*uI48bx5){xeNOg_AuKnD5k%7MdatxBC0u&x{hbVsvA z$Djv~BX6|dOv|AH=jnZ*m4%To&3)c9-wy&^$qAs@R&ADm{pLgno61bThBS)LAE<#vvR@EJ6f*~>B)#3^V> zXBRvYPQit?75{X~?u%Yb!fVllyfvup)YKX?*C^&2El*l?hS_wr%#_fpy%rq)WGPtg zPvAH9RA7^Q4kEjfecn)YO; zwOpRd;JrIcoVrXX065|Xy*A>oaJTSI4fr-Oe{1zc?GEevgJEY2%HQ4A;|`Mf!dJEG;7 z!TS7ciV<5|5KsN4y83WVjY)gL<5t>^+qaa5&!$m6vJLC+myiPayMeWDqzh@ebTSN@ z+{{4Xog9raWY+R#iXx|OheVt_-=8H$vsye1f73J{)brD2wYPd_V4NS-XIrHBfvJYw znj5FU4*$eeG#j>60i4Kc)ip|Htz`>(UkzSRbd46j*_Mpf`%xZCby+Uw7nM2*Joi(; z96p`~U2RGNJqCV5-Ki5ya~eWE!g9BooqP;m{V@0D8+n_BIzbu@GQMh%UjDV$T{nO{ z{S@Z;C7zL&K5L<;I$91GJ{qnyLYuHERqbwjf5Jd0 zF7+H?-62oPYbU<;df6n;Dy0`@u|zu@a-{MUoP#1^VmYEZ#s{s%pPzb9J3HLdo|+VX zlZb=aen<{Y+{_&3!?%`xkbWaAX2msW{P_R0x7Yq;+`$wAaYVknS;E!9V;|+q2UiCN zyxS$awD#9mel-eV16|flJOt?dUfHL93wQ1AWwR+0s$pf6795R>_Ak6`?19@FsO-+uRi1MY7g>^ zfKuM^>5#F_nAHpQVtNRs)*>fdYa9UiO@EZpoeA#uh}_dM4ok>hE-O(Hg%a|4M?3>% z5f_5jIjUUm1Iftq&ia?dQUnV&z7+0G=!q+vdN8nAIRe93Of(?LBN_2=8IwWFF={3r zpC`X-ut%UIClDOWELklEXkCr|SUVE?m`rr1pXk`>qhw+PzPG?y^Kg=+wwEsoaYl~# zoMnPnKovEYkYnt%?71B0yBJ;vg@IBV3dap6luH#M{@o&!s>XYE=n?}QFxjU&@;BJY z7t-}l-yfqPPT}P%$3HEbfjz_$IUVO0kFcO|+fjHLIN|AlcWvjL-NiEGBg=LE#iFRL z;AS3N$pf?OcifGNuSo`1c;@_a#a&*&ZT)s42?Zm z8V+Z0nKol7r6LkpE$9`b7%BKM%FRMD&o<;CO(A8N5ciUH=+>T8G;D&aM2@JPLMLh~ zsG}mg(RLB-y8gE@a zul2BZyMkctDtzns$b^^H)M);k>u?Hn9>Mv+ADx)0TV7Vrr8W~6a%0_<7tl>g*jK?)X43zdk^RJ zxTMCwjI-Ep!gLqsyiQZ5VOL~DiV9sKL#Wde6pP=q?dSm%KCknT5-V556NX@$2PERp zR;e6mvCmCZ#YzyfmtS$?r<(rQB#J7{y3XHXe0()qM^`Sb;<#$v_(_TkjSh8ILgD?A z9B>Qdz1`8(=%Z2rbW?*uiwa{h29_{l!0>IH0b3PMGzJ>n0AOe6{fe4s$M2%U39!_c@_IILqaJhH_%S?#R1tVe|i${@U;0=4-d>0+ud4!PNykyDB%uosXVg| zof0e+QuCdDH0YCEw<|UtGoD7b{Asw%G$}cr>$qvze@otU4np!36plTLjRKf?Zr|8MOevXeIW z!G*_e-Ts#AEo`{;GbRu8NVR)f+d7ieRi3p z%N+~y2EJax|I@!9dt$bld+!Y2Nu$LDRS5h4cJl93E5I9R_)ad~gvihcaU$%0iS*xf z9>nqW zvySnvtYZ=)N(M4+_v%Hq5w=U_@2C0Sg#{7(IZ^DtasQK1^|GF z*2K-y0m8{~{d|(BXotdm^M0jS?K_)92^K~bP(i#A%O+B2c?LIGVAT|;(SKq5z9uZA zz;bg_-llQ!Ox@pwg99D=un?`MQ)*kHa>emX#1Ehy`nZ4_ecELi*{)T;4JM~y|8`kJ zod_Qq4rUOgBj&9t8t?ATy>#dHOFSJCW#SRuA|rA1i-U8bsASlg^Q}F}3Yn$CS2gXc zfP`n~`JCKdQ;H5GOHpdH9@{6Ykv^kvVkO>h88&MgUY8%MiD#s}$9;HrT|cYGpY!;R zmXWdD>vIc3f~HIkcR$e<5}ec>4@QMen^0!ms#9dOzrDd5Fr$)m{H>WA2>{?hcmogN z4GU*;H8*D$2&buw3x~I(gJq(LViy--&k|a@?NVHs%r{a+rhC zSUl!>Bi+X}MYYDVF^N0=%946krNTV8bXkue)LHiR#*8r*ioyJi%CM-84YU{z@q=Zy zhA#G@Q}NeBUX#TOezc|vzJn1{@sHoUteGRKI-ydXxVbA}PoZ`w-hk})_0rE5>71K$ z-`qWzv~`iMz5NX3mwT@lo4fDHy9R_?uMqdG-`#8O>}L7hzweaoy6)dZTQ0p>6K83y z4y~r_r)!oV*+B}GaaH<+E6+Z>BaF?Md6!XC?0I3ADs(qfx*^e8+`ZN7S#caaNX4h@5)S;U8YF{rsrV@Ih6)%>Q9+1xaoHF{U4<TPJNJs&}o?m zxpYRZmNO?8KnBoF8_dAv3NfiGRdnC@uZkZjF;Q;|x`M)TDLObca}q+wpdGEoQgsc- z{XVNMEp?P49>xJkKdl4+<~>c75QhDIU5AvHvzrCykGT5T@ki{L?*ngaBRbqe0RV3Q zvm;{Rc{o}+xnDcwdoY%dE30&I;UPSuSHrA=C5<_?gHG!KTme+@!qq9~U`oJ7e|D$> zYe}SZ>fzmXxP?z0e5+i*EPq58O*%E?zV)N2Mww1oxbF$-W4&etgFUs*Ak@sSTiE5F z+{0!$;^in~32TQ|9w_jzA3x=x9xX_k?K6guo70DY{1$Qy*WfQ=R&ieM63!`r=XKB` z-7vppJDI%C>LhW-5fy5ymcYja9Y`0OhmcW?ggo`U3Ir&SufK9io0&mTHB+1mAN=4zKx=|CqJFlb2UUWS8%cC4}k zFaoF^CAr{@mard|+%&P#U>9X%rwYblw)6vGU4`DR+n{oZI?+MU(#`UsdBYWi4 z>>N1GW&4{f<)2pmJ z2vYSP=!ns0X1ng=EQ`Jr)Q?6E8E|}tTItY2@{RCFk*yQ9Jm2fp$qqPQJDw7l#QB_M zY8bkyjw%-aPUllFd)Kvnc*7GgRYdiS)1=XGF^R&r5=PIdEg(cJR2u~&v1pNu}> z$q?I;H==3|7{xedSUPwT--|1*OMi-uHp*?(1wx^0JKpKXs}*W`a>zkd6Q#lHWA#Q9 zi|+~VamoeA**-IFZI?I`CkKrS6P_kP-zN8G zDbbW($W(TRB2wX_IXbk~gU!$Q3=wezMp5J%2P^_RXKtklGoOkfqiu(;C zSzYA|Q+pr$u~!%RV#UcKyc_X*+(9he-EEz$A=ledoz|SnDi_{GO8>jLLc)!_$RIWK zx@P^Ehz^X`$F}`KIKu{_u7XEq;mmAC zW?|2Kh|I#Bfk(2VJ0w(nP4%^_D{oHS-f1zZUjV)2+XY_=2<+>BC`$AX(l8e7-8L7& zW@rqwYn))P<+k>jMZH0>xbdyyy|$F>0p)wfGqL84H=L2-_vsY%2h?jGkl^v17)tG@ ztUd-gM}d4NQG&buVifO}Qk>kCreu1H2i7t)|s_Lc)onDkp*SdhpU4>bK}wz-MS^**5^0LRY!b z`}g~5k*O%McUJ;!r=NE#uz3}=$X-n-2=!Nj2IJy*3x$*G_xYXA>TMq~$7!=7Q+-rc zYq8+`YT>gakIm=hGWUSf(8vtq$oS@miXdwq3OS<9MmGiW%V#b8CiyTigF_V1fwB{{ zz~Uqo4C}{OafZ%;7j5NrCGK>2cyMixjZUb%)(Q5UNjRZDr9CcRN?f_odJ6ot+kZuz zon6DEuHonaK%g)HfcrD9A?`j7mfzQ0d8PqmjukKH3M#W#Y%W}#q_m*&w7w`~ld(KY z@SWZpkf!_w<~+m2R}9*LSa!_j;3ECB1zf$OT=&trlQ7Qjy=WEt=VTOSY*9h`YNQ&)sOdiyd`%bT_WWpIapaEQV9P2;+@@b08n8A1DhiuC2!UF$ z(sOo)r{oPD0|t&eN^8r!CBoEFy@J4=D^J$)K%jov81kxANLZ$W#<)Gz-EJ_KaRi(sR}?C)4*;pq1NaSL&i_DQ#5O1EY zi?vi`+eoCbph=9LYsHYm5xxyNgB0~i`sd}FKqg-OrHj0d@aH8CX-_s{wJeMh+z6(C zkT{q`INX!PRGIRW&x3=_xGXDutRMG~g_B>3YX#j0=OQn_9(q}jc$!kq&-2u|);+5#%5u~Q-p)h2Fu-o)%7`)LVwRD1 zytZWXw%&*TUQk2EzzhMm8~uoJ)Jq^>^G%~_!2L7k${~~Yq~n*x*DsupU~voZu|oLE z%Z)HmW6h%)zb;`m5MgwvS&Y~|(^ZeSSyEjvJ7WuNUDGX$2klPH-=Sv#A znJw4g?SO``{IHx`F`#-8AGO&|--wshOK&0o@bVzc_$7@kJwzKH zNg@;euu&>#R3B848Fa$wo^iU(6!e%wEpP!wlzp` zAFSKQJbb%riuN5rC(U`&}SE>AL?X)UbH|Yqd-k z0a#5!ARiRH4df4N*bl=J_yL46ivTrJ#Mq{5*nsOl);OK{8J@Ku-L0jFL1;PZ%k`E5 zAko};XAi=BC$t5L&^`FOT2s{n6de*I{Rp+#emCi-QZ#`+&9p0sQNEi42%Y|}*0r6g z&vNko|AtMTIq;GPHx%KZ?AQTNWS>)j=Ws6b*!0KfkiO*aqk4);;fbCQ2QHs`q0Y^S z)+^z0LD_kGzk)K0jCVJI!O_(GVfDR9Z3RM%nT5Y9aN&@M|=c*`1+bS1C({}ig z&oub>sgk9$69>!SuN5y|vumU*=d$ZgbQ~pgFFfJDH`tc&$;o)ud3Zwsq#IF0627g- z!T4_HASD3&iiz|#$f{~P)IUAiu`OR)n9o5{l;@^LP3t%$d1pr`-Qp}&Ntu1~xQ<^^ zPHT%=+ACw`ses6H=y4p}opDwbKH`ZntqOM$)z3O2()eA<(J*fG^ehZ6-yo|(G5 z*h@+H zV_UMOcqhx+QXF#|j1r|WqmN^l$2MJ%FPC3RUXc8>^G9xOpGn~L6j9O^A&eyYr{cd< z-qD+LniIggAbPxKuw~Z=UZATpKQbi&I%s_1rB_c2&qGbLecHZsOFGk?f!WTE@N5({ z(nlCFG88WKds5_DwKVr9Y~{_05?bh8TCMiNOb;t;EG7BeE#=+hsXOhucyqthV! zj_Q+SbM+r2yF#gAl&tqtEc4)J7U1piukoi;#VMtjrtRO>hso5Wz4!4 z_j}istsXDa56zy7eG#8bnste4Q*Y~C_FWWPe6>eTuaXiT#fLM5d%r)R+E!oSJ#(2i zvF9gii%yBdvwpq!^@UEU#QcGeZ|TBsD3W96oA-Z(`MS1}N`BFQYKfQRf~qK9F6KDF zJ!Bw$kD0V#(DC;3$G&9;n7%2;?L|4&Ax!ieP7SV`q+kLJW#+u57|;NV%~nqIEq5|Q z$E0YO1s-yG${_DEKQ6|jZYNoanW&NxHH%|^ z$@Y3T48>uU$2E-c0b6=t-us3FPhr6mN?+|svy3}l3Yyyaf;2y^MwS=%ROWj+bmPX} z(B>s#A;`}AbS@+AdR)XKq&>L(2qUD>{C>o352AaH&|_Z7cNi&&P4%y=6vLWyI?+2h zXTqR5Ku6UQHpz<|u=<5=ChkPFN#W49&@v79q^l5()mYykWFo?^|L!H1e};J0fNIO_ z4sMCscF8X3dy!z)7thwY%)HFnaR+J$FQtUEr6E>_WI~-68<4m+-i5NU=O4cY`6BBa zd_WtLFRrBVQ3eaCb`IsE7bPn6_C1eYrSdggMce4S^J3qdB}WEav)NIG&nT0ewhtPt z^>C9J6Tp!^Rk-t*EO%eek3US4N@j35W;`&|hv*rv4R89u;aYXx!wfO*k4>Hx{-a8Z zT5$TNRa_V~mVS~c#d_Vi{p}s${a1MvZ6LZFli0P+>{Br7u))OtU1#U2FWp zT-W=HuvRH1FP7Pf&^Xy5$H@xdaP}#6qufi}$l z(|1t=0wdb{^#X|pw-^>lf@!(@2d}QcekVk+2gGgWA}*q8syE4IBCdX;U#=;;!6+%l zFhrqUk4VZ15W#F9i72uW#FUAakBcS5=zAfUGKi?O@uUM8Vf6|(jkL6-ACC3Cl4iXC zBq=>EHhF~|+`gBtrbQcpiIpjrkpbDO`y%jSKn7}oJ?&cV#xsP@fTX>VSSrM9Qqyph zz%atA&67*CW&w;<>V5HHI!G~In}Zp+H%w4ap%-MqF@a9#$?C{>_|4AVPVZpYF6Shq z6NSANmh)&U1f49-ILC}_CFwnO>fCLJtsHEA1g-R$3)wfdB6Ty{tvl8C)V%0iZa_H9 zwB{KnSEYta@7&sQMYec0lb=gq{ZyrJ)8a0s7b>?oDrb71m{BRr=49ex#9D6GYW^{W zR|E6cP`nr1#2?z1 zd29Cb{*s_4PtjdhH@iAl?}=Gp>c!arx=;@qMb-0cF%JycWU-}v8-F~f5d621{0kRe zz2a($NXUeM|IX_prVfCZ#=oxLSpI9E_+P;Pq`(>e0?;5@90dMPLLBS+(R3}E6d;R% zDHqK;h2(`IFZFx-r)qz)z}G|kP|Xp+H~c-qPfqw3{NK;pYxobgUK4TX{DW-$r%V2% zTd!e1#(nfp;P33>ck=a@3YdU@<0OAbqCqsdsDG*OyNuuA*D>`cdG!N+{cJ!)*>?;6 zL1q1k|C5^eg(t)O3;#P&^E>?CYV03y8blL^^%MSg#r+HXe|cX5aoqow()@40>+I*p zb^VdW{-3~~xzIl+@6T-L8vbMQp8gyBSEBJB6L>uXf2JtEq-i49#NVv=CFhqtKeC)Z fH^yHgXo&xHn^aRoL(DEBj1a#(#Dbe9xqkZ}QTfk( diff --git a/common/converter/empty/it-IT/new.pptx b/common/converter/empty/it-IT/new.pptx deleted file mode 100644 index f97d6f7ff7caac6de8f3c93df4126c05d80d14c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35637 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 MKpZKFv#A*1e|@@SLjV8( diff --git a/common/converter/empty/mm_new.docx b/common/converter/empty/mm_new.docx deleted file mode 100644 index d0854505aa6ba31682ec7042b1e2059b60c6460f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8413 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 DUV6de diff --git a/common/converter/empty/mm_new.pptx b/common/converter/empty/mm_new.pptx deleted file mode 100644 index c06dbb40e039bf888ce7e3a33cbe6a33bbc6c935..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33722 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 diff --git a/common/converter/empty/pt-BR/new.pptx b/common/converter/empty/pt-BR/new.pptx deleted file mode 100644 index f042db063eda13d449896606fc89b712b131a56c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35609 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 MKT_i7Q!&8*0M$!m#sB~S diff --git a/common/converter/empty/ru-RU/new.docx b/common/converter/empty/ru-RU/new.docx deleted file mode 100644 index 13e2919a86b041ab510f3e1594154d86e8449cd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8433 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 CN1vns diff --git a/common/converter/empty/ru-RU/new.pptx b/common/converter/empty/ru-RU/new.pptx deleted file mode 100644 index f747cfe57119ff104e944ae1eb1ff415b86c0a74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35615 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 diff --git a/common/converter/empty/ru-RU/new.xlsx b/common/converter/empty/ru-RU/new.xlsx deleted file mode 100644 index 39ba466b11f1ba88c54c3d0611265de1252695ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6396 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 Date: Mon, 26 Aug 2024 13:11:35 +0300 Subject: [PATCH 08/97] [win-nix] added en-GB lang --- common/loginpage/src/index.html | 2 +- win-linux/defaults.pri | 1 + win-linux/langs/en_GB.qm | Bin 0 -> 16651 bytes win-linux/langs/en_GB.ts | 229 ++++++++++++++++---------------- win-linux/resources.qrc | 1 + win-linux/src/clangater.cpp | 3 +- 6 files changed, 121 insertions(+), 115 deletions(-) create mode 100644 win-linux/langs/en_GB.qm diff --git a/common/loginpage/src/index.html b/common/loginpage/src/index.html index d9b80d49a..1872aa144 100644 --- a/common/loginpage/src/index.html +++ b/common/loginpage/src/index.html @@ -151,7 +151,7 @@ - + diff --git a/win-linux/defaults.pri b/win-linux/defaults.pri index 28900e36e..642252b1d 100644 --- a/win-linux/defaults.pri +++ b/win-linux/defaults.pri @@ -7,6 +7,7 @@ CONFIG += app_bundle CONFIG += c++11 TRANSLATIONS = ./langs/en.ts \ + ./langs/en_GB.ts \ ./langs/ru.ts \ ./langs/de.ts \ ./langs/es.ts \ diff --git a/win-linux/langs/en_GB.qm b/win-linux/langs/en_GB.qm new file mode 100644 index 0000000000000000000000000000000000000000..2c2b10f4473a1ef616dde58e7571fb87a1a41847 GIT binary patch literal 16651 zcmeHO3ve9eegE{9Ea_y)FWDG-ZICh8mMz&}EIWXnAY)lVCtEftxU1W}yG3`qm)$)* z2%#wrGl6ki(!?#{Q3z=oV4yTD1SpVF9yKLRsL3!1>5x)V($LA^NomV4lh*zHzwh>S z((avUrjMDTF?)Nr-}iq%zW@Kf`<_zTUp;-#iSKM!`{%#j z+~Io3CHUON*rf`tdl{?zlDJ-aKdz(r{uah+|CzD9*D`kOMO^o?%DVFy+w&f)9{v_% zb!WtNw9%HQG4c0bzg0ZF-*zk%s7;D+a_HUuR zKgGsxe*tj%*{>fw##sF=;=1t+yZxqH8M`pYUcT>N8Qa=X(RS}Q7~65CV#U5*#(GXw zZ2!*hGuC}|#eo{&v*p%`qjnc#o4!zyexjAJi(jw!%=7Ouw(O>gL`-+ZD$FFIF|02c6r#S*1(@pRTbgv+H8U*8WD7H3fLSV`djBS6d>XpkU7+dlEs=v7xaJnC?`sf_s)Ao_0q%>{cMd-bKAj`3TYg1cFPW*SI|I6#Hq>mn_aX4}t2O=2PvQBSYX(2}KKSuL zjs15Gj4l01P5ub@a?zTaN3Qq>(9>S?SZ@scyQbz(etSLSGhFk`hk$?arkYoN@MYke ztagPIR z)$i46`cC|Qs#d=o_^iL8R)1j_*GFsb{HN=oOApolY41_cdvopEx8VEs$7|pIBCe~S zs+%0V8S?#MUFzK1!1r&}{myH+Uo%(t@HNobhRM3upZ@~nlBoOXs~~UtmGvvP4=`4h zu3z8#BgW2qz5b&7r$OiW^}~O8KKL|Pf9rMNYuC5ykN@r*7O?u?ydU)Mc%=T0&)$#q zx7EM=NCRWBhwEQ`@Fn2?v-_YCma^K9ebR1Ne_X&hQ}A@Cd* z*Ij?qcp%dNKJINyt$P^Hf37iQfDgOgY)roZxmHv)T5tUU`1qs7KfDvaSJgJYbPW2r z?u$*!DsIJfXH(COps)JzrZ3%(=VC)mch7+jm4}<|o$LgjqfL+A{WAD`qUo_uJ`OqE zCa&kd*7R4ev}3=oHP_x42fhQ%%LiU#OgbU1JGVBs-vNKJcC=ag#u?bbk7MmMg!c!r z_A7B+`svs@x?lBGab3MrT+iJtu2N@gT?c+&cT!yUw#3%GjQexuViK)uYmP~SxGrxf zTyKf(+5IB)vO4yOjo{OoZ^q(lA-~$YV%o_sgRf1oo6fl&_FpZo9oNP_SE=HDL|i-W zik&$94&>SxJNY*JLG?)N?PHM3s?{xZr}5m%#+H_^d>8utla@`tfIe<{y5-(et+40T zmM34YfB9t_IdhEQzb>d(Ohs zHve5`DeUCzOFK^Uom8wz;!^@ob>jDNeD*`svEwYe+!a#qQ6n#9^Oh}vUAAo6lATs1 zNW_tnlr&8Kou%5grl%~)HY8h~RwXr=R1sL)%OOg($(tv8qTE?P9EBgmDIb)=JKM(6kqiA*I=+*S_+QlF4 z=^57TWYLnfz8xjal61qCtb8tKn6|3WX0gI%qd8TNTbT;j1G|XzgH{r<25~rIB~j-f zDhq$JT(k=7ae1)94=5*F)~sPFJ&QsJ*x8yv-G+iDe0*_MmtMSbvBh?}^uji=a9W+0 z%7?Z}ESixsnj+;)ZH9!1ElPu1el-A<#r*(pnrWGXUm3h?i>nzZwV#=b;sz0C*dzo@ zcAA1%6J?6KlkH*J`rsGB%CH)5ff%>2R1CMJ)%7 z>gm2*2nJw`$vRjUbRf-jM1s~(ETO27g@z~v$3oG?)2RXcBC&b=pQ6t!R+3gZQNqIg z4A(0gyOMq-`0k{^6eYZQwQk({K-fAxaGdM7A|05zpb7BEnt zW~OCl=DBh%g2Ig-69o~X6F{4oMo}sc)IH|L7qG9GM2~@cLQqHSOc*-iXkO*!%2`Sg z7dZ}3cNXPqz~GjWK1x|wwlvH69wLdg@GvGPgE(G8z6}4C{GSari@b=u;2ig)IsTlZrQ{dq_&2lI zPpl}m02d*&c}bnqEZgF27%-%HWRJ5l6bJ;F zYAz!uR7tZrUrKMgq!&yb&Jt6~!=r^3P>`_*{fo-Pei^NDGd8ilJa|ib^NMEh6`>2j zz&&`-4R-5Xy5E$fVqp&WIv|B{oZl7kOkE3s0d#-0OPe zlYY~a9`S91V~6@&l~Qy0sYtRn0s-OZNps`ajsk!T6|;EqfJ3fJT5NC*nW8jlnA20J zCqxN!7eq&tIOpd+2-3j0Sc1lqSSfaRR3t$`w~vOULw(&Y3CXDl-v|~S1QX|hH=XfF zOGJ1Y0SzVq=JAUJ&7$-xg*!^)32-qAX`q?~Qa(mrH8FC)#UgEIGvSO3WCiW}$F3B< zlr-;#TuP$RL3kLu; zk?&B!XVNW)2^66z@6-ypXfac=_|5jQWa-FN6D~)xX*&|&4tNIx05wQ}Y?O*3lyWQt zBA)Vbeq^+7*n?wCX_0`207wP^vY%}LqT`NiNBDcnyeOjr6w_K@g3@S8{E zglTM3bqeN+- zrT9bVo1Bk3OGgLBTs9a=w9;J>0XU2YLM#N<3WAOMz*>>a-xmSaa}mXgNFe>%zI=3G zA`nCjC0gUjv<9Hx{; z9L14^IuWLZ>j<6$&cnGJ6{H9+YK{xRg{xo~A{zsU1T1vozi1C(Y8i&gh5#yYpJkSV zNjFr6GCE2fh0h94A9K)8f10y&Y+%SWiAbe^`@gg-K-*a_w0CixZ3VdA^56xOv~}#D zFC0<;i&E4f=t*?88Ruz{0*6ldN*e5&_2Ha@*O>G9jkd9|_z@55oHZ8-{vc=5EH*d! zCptw_&??Th!&TN{9z_)|rYs#B^CBmLM@bkfr;6p%sE5|bV6qV8n zC)FIk4aYyQc-5FOtD0j5)iwN98l?f_AtG@6hj;D>=R%mVuJ9vKI&=nTY4)!TKPB^2 zYn&&)X($e1A~I6vEF%gp#leSMK)|@iCp_ae?Q$bRYy7a!*sPfdV+#;h$E#nx;baA# zZZ4GOhurdN*!gBCaJ*P3!n5_Z%l!_vWZVfL-Q-&uPAA0I2?fl+ACv6|1sFWF*j%ta z8=pAh*|0OcLT0W10-epN}QUk;@Kmk$Iymrt$#NNTChBQmrjFn~B{T$rgj zOr=>C{#zD|Pw|te)2*Nr9i8&1 zpP{g=c#`@s)K8(xnCR0}f?Nw^lx8G>fv8s`A%3badcRSP zhB_%;t(r=-ilJKi1$LoCyMfw)<7(DG(}u^A;OpM}PxhR) zg90>ovxb81KH5!$eo=*aT2*s_2Gjxq{=3^x3lR9f-+T&^6!5l72Mp3L*_xJkYngZ8 zg3rT)UF!2w!NyO}{HQfUg%EKRff>1#hc!c#_hIlPE8D?&i$x#?Fx)$0pw(idV<{QB z*Ht6MGH{F(-5d0A=oz)pKa*sAepa4e+#)`97i|Gs)}XvB%ADjKXb{9XgJoR8>*88U zmk#A9G6gpXP+3-2DPny&&7_Fsu>)E{)h(2%^19pU_B_cjD$u+ad<9&((}8q4g9@nj zw<&r!C!E@#=y)6OeG)u&x67CF-19#K$s1>wMC#%FGzo6QNJ<^u#IsmGZ)c8~MhfFh zR#6Y_++OtF%o!jrsiujsCTejTiA3HsRb_)%e<+83pIR7A<5WD4<0<82bUGtHO!HVo z15rWW2>(CJE1JSzQ+1Q7>(e}V({uaVPkk33xjG1kX3PT)eJVFA(k!EzPFM(h_MkF)ige=~fRn4Z#N~Uf@?@@tmb$n*U2*n90+vzL^^VW7ier`1lG zrdynM6=z!*ZF!xzMeHM@WHXW0W_T(d>tAR{FMKRaZ-h`ON;sGZYd50_q#Ibkt9Rv@qR3LO8$3L;QfXB}KAkZkVg?%?N@Xr{Ig z^6)_!1#PlFK6;R+*gQLlUb^alj9FXZa542vIS#yOM^|aQ8xMN8mVSCA3P(8^Vgsfw?f=ZC}nd+zVScP%Zf?s!!K}Hf&#F!bDX4NT6v(+-Bcg+ML zBL@6vkSnRB@+O}!_eel|#2lc{ayC%9<}A`>6hy4FklW6@sA$yfZVq|F5<5ARim&s^gH7K3Eaqk@%} zR+yf`V#kJg`radDm5VXhmGx{7=fy;t=OTuwp@AT0%FxDku{jvRr}S{XB?}Ha5d`Ah zrb%wdGzFK@@Ja+|a&WIm_o^?S-*9DX=D2T!ZX@#t;?}h2oP$g+v$TN%07KS|96_yS=2?6<3dOt+Y^iUN` zM0am9ATf2;xv)6+QO8D%*LnxR#WQ2?=+ha7u6W<4V1!N>^YgjCm;pO+3A{6(w~9DSK_$P@L>_-+soq;ftlSUBUG z4quB(7VfENMX)GQ$eMzi2H3Y)uIk|k_!GX$nJ9(O>tJ-07X@oE^lacXM5Snd0f2C% z(t^$|;2J{xKROKKB`_D?Exf9REEhQvi30QVq_E;JAFLg7uj!!{pkkA=4F!Y3P%s^$ z=?#JL;0SQY4zXd8-T6}XkSA*nz-ala6d?~(jzpe??xw2i(Td6W2 zIJ}LvlIr-h#xutdd|T;vk$U@%av={Ni09MmS%hsppPfQ(g*;6R#zUbxc18$Hp*-4}$2*;vLFXAZceGTj5peOXrt_D} zc%fIkY({lpoPLoA!YRAYT3h)B>YR*fCGzmDZ9BK_-rCg_rTH7Z444c@6e4jZq1O%< kb@TzdS$f1b**RAj>l@%5L373P4;{X5v literal 0 HcmV?d00001 diff --git a/win-linux/langs/en_GB.ts b/win-linux/langs/en_GB.ts index f128fa24a..b7e722d1a 100644 --- a/win-linux/langs/en_GB.ts +++ b/win-linux/langs/en_GB.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View @@ -17,23 +17,23 @@ All the editor windows will be closed. Do you want to continue? - + You must restart the application for the settings to take effect. You need to restart the application for the settings to take effect. Restart now? - - + + Document%1.docx - + Book%1.xlsx - + Presentation%1.pptx @@ -41,7 +41,7 @@ CAscTabWidget - + Document Opening... @@ -66,70 +66,62 @@ CDialogOpenSsl - + Select certificate - + select certificate file... - + Certificate password: Certificate password: - + select key file... - + Key password: - - - - - Open Document - - - - + Enter certificate path - + Certificate is not supported - + Enter certificate password - + Wrong certificate password.<br>Please enter again Wrong certificate password.<br>Please enter once again - + Enter valid private key - + Key is not supported - + Enter key password @@ -176,32 +168,32 @@ CEditorWindow - + Open main window - + Document must be saved to continue.<br>Save the document? The document must be saved to continue.<br>Save the document? - + Print Document Print document - + Document must be saved firstly. The document must be saved first. - + %1 has been changed. Save changes? %1 has been modified.<br>Do you want to save the changes? - + Some data will lost.<br>Continue? If you continue saving in this format all features except the text will be lost.<br>Are you sure you want to continue? @@ -209,12 +201,12 @@ CEditorWindowPrivate - + There are no printers available - + There are no pages set to print. @@ -524,6 +516,10 @@ + Jpeg (*.jpeg *.jpg);;Png (*.png);;Gif (*.gif);;Bmp (*.bmp);;Tiff (*.tiff *.tif) + + + Jpeg (*.jpeg *.jpg);;Png (*.png);;Gif (*.gif);;Bmp (*.bmp) @@ -553,58 +549,58 @@ CMainWindow - + More than one document is open.<br>Close the window anyway? - + Don't ask again. - - + + File format not supported. File format is not supported - + %1 doesn't exists!<br>Remove file from the list? %1 is not available. It might be renamed, moved or deleted.<br>Do you want to remove the file from the list? - + Document must be saved firstly. The document must be saved first. - + Document must be saved to continue.<br>Save the document? The document must be saved to continue.<br>Save the document? - + There are no printers available - + Print Document Print document - + There are no pages set to print. - + Sign Up Create portal - + %1 is modified.<br>Do you want to keep changes? %1 has been modified.<br>Do you want to save the changes? @@ -620,202 +616,191 @@ CPrintProgress - + Document is printing: page %1 of %2 Printing document: page %1 of %2 - Document is preparing - Preparing document - - - - &Cancel - - - - - Printing... - + Preparing document CUpdateManager - + Check for updates - + Unable to check update: URL not defined. - + To finish updating, restart app - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + Downloading new version %1 (%2%) - + Cancel - + An error occurred while loading updates: package Url is empty! An error occurred while loading updates: package URL is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + Update is available (version %1) - + Download update - + Current version is up to date - + An error occurred while unpacking the archive An error occurred while unpacking the archive - + Update download failed: out of memory! - + Update download failed: server connection error! - + Update download failed: wrong URL! - + Update download failed: unable to create file! - + Update download failed: network error! - + A service error has occurred! - + Last check performed %1 - + Preparing update (%1%) - + An error occurred while check updates: the Update Service is not installed or is not running! An error occurred while checking updates: the Update Service is not installed or is not running! - + An error occurred while loading updates: the Update Service is not installed or is not running! - + An error occurred while unzip updates: the Update Service is not installed or is not running! An error occurred while unzipping updates: the Update Service is not installed or is not running! - + Error opening JSON file. - + The current version does not support installing this update directly. To install updates, you can download the required package from the official website. - + Update is available - - + + Current version - - + + New version - + To finish updating, restart the app - + Would you like to download update now? - + Update is ready to install @@ -844,8 +829,8 @@ - - + + Access to file '%1' is denied! @@ -903,58 +888,58 @@ - + An error occurred while start install updates! An error occurred while start installing updates! - + An error occurred while start replacing files: Update Service not found! - + Cancel - + Yes - + No - + OK - + Skip - + Buy Now - + Activate - + Continue - + An error occurred while opening the portal:<br>%1 @@ -963,7 +948,7 @@ App can't work correctly under admin rights. - + File %1 is already loaded. Replace it? @@ -983,12 +968,12 @@ - + The syntaxis for the page range is invalid.<br>Enter one or more page ranges, for example: 1-3,7,11. - + Specified range %1-%2 exceeds document limits: maximum number of pages is %3 @@ -998,5 +983,23 @@ Unable to open print dialog:<br>%1 + + + Printing... + CPrintProgress + + + + + Document is preparing + CPrintProgress + Preparing document + + + + &Cancel + CPrintProgress + + diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index a3855ce60..d89398431 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -186,6 +186,7 @@ langs/de.qm langs/el_GR.qm langs/en.qm + langs/en_GB.qm langs/es.qm langs/et.qm langs/fi.qm diff --git a/win-linux/src/clangater.cpp b/win-linux/src/clangater.cpp index 9b07875fb..ef6642764 100644 --- a/win-linux/src/clangater.cpp +++ b/win-linux/src/clangater.cpp @@ -156,7 +156,8 @@ private: std::list m_dirs; QMap> m_langs{ - {"en-US", {"English", ""}}, + {"en-US", {"English (United States)", ""}}, + {"en-GB", {"English (United Kingdom)", ""}}, {"ru-RU", {"Русский", "Russian"}}, {"de-DE", {"Deutsch", "German"}}, {"fr-FR", {"Français", "French"}}, From a5e40babe3a87e945ff55c482f024ec4d90b47c2 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 28 Aug 2024 16:23:24 +0300 Subject: [PATCH 09/97] [start page] fix bug 69909 --- common/loginpage/src/styles.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/loginpage/src/styles.less b/common/loginpage/src/styles.less index bec96b0f9..134e13b6f 100644 --- a/common/loginpage/src/styles.less +++ b/common/loginpage/src/styles.less @@ -1284,7 +1284,7 @@ li.menu-item { } .settings-field-lang { - .dropdown-menu { + .dropdown-menu:not(.inner) { width: 350px; } } From ae57047aa31239b05aced4760425aa791dbbd177 Mon Sep 17 00:00:00 2001 From: Semyon Bezrukov Date: Fri, 30 Aug 2024 14:58:00 +0300 Subject: [PATCH 10/97] Fix inno setup build warnings (#1321) * Fix deprecated constant "pf" * Fix deprecated architecture identifier * Fix minimum version warning * Disable read version info --- win-linux/package/windows/common.iss | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/win-linux/package/windows/common.iss b/win-linux/package/windows/common.iss index 25e750add..57da9e66c 100644 --- a/win-linux/package/windows/common.iss +++ b/win-linux/package/windows/common.iss @@ -57,7 +57,11 @@ AppComments = {cm:defprogAppDescription} DefaultGroupName = {#sCompanyName} ;UsePreviousAppDir =no DirExistsWarning =no +#if Int(DecodeVer(PREPROCVER,1)) >= 6 +DefaultDirName ={commonpf}\{#APP_PATH} +#else DefaultDirName ={pf}\{#APP_PATH} +#endif DisableProgramGroupPage = yes DisableWelcomePage = no DEPCompatible = no @@ -75,17 +79,15 @@ SetupMutex =ASC #if str(ARCH) == "x64" #if Int(DecodeVer(PREPROCVER,1)) >= 6 -ArchitecturesAllowed = x64 arm64 -ArchitecturesInstallIn64BitMode = x64 arm64 +ArchitecturesAllowed = x64compatible +ArchitecturesInstallIn64BitMode = x64compatible #else ArchitecturesAllowed = x64 ArchitecturesInstallIn64BitMode = x64 #endif #endif -#ifndef _WIN_XP -MinVersion = 6.1 -#else +#ifdef _WIN_XP MinVersion = 5.0 OnlyBelowVersion = 6.1 #endif @@ -1050,9 +1052,9 @@ Source: "data\vcredist_{#ARCH}.exe"; DestDir: {app}; Flags: deleteafterinstall; Source: "{#BRANDING_DIR}\data\VisualElementsManifest.xml"; DestDir: {app}; DestName: {#VISEFFECTS_MANIFEST_NAME}; MinVersion: 6.3; Source: "{#BRANDING_DIR}\data\visual_elements_icon_*"; DestDir: {app}\browser; MinVersion: 6.3; -Source: "{#BUILD_DIR}\desktop\*"; DestDir: {app}; Flags: recursesubdirs; +Source: "{#BUILD_DIR}\desktop\*"; DestDir: {app}; Flags: ignoreversion recursesubdirs; #if defined(_WIN_XP) | defined(EMBED_HELP) -Source: "{#BUILD_DIR}\help\*"; DestDir: {app}; Flags: recursesubdirs; +Source: "{#BUILD_DIR}\help\*"; DestDir: {app}; Flags: ignoreversion recursesubdirs; #endif Source: "{#BUILD_DIR}\desktop\*.exe"; DestDir: {app}; Flags: signonce; Source: "{#BUILD_DIR}\desktop\*.dll"; DestDir: {app}; Flags: signonce; From ff711a132281eefacd0b540f87476d14b39fd052 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 2 Sep 2024 10:20:40 +0300 Subject: [PATCH 11/97] [win-linux] updmanager: small refactoring --- win-linux/src/cupdatemanager.cpp | 9 ++------- win-linux/src/cupdatemanager.h | 1 - 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index d527df2f4..3278b68da 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -721,11 +721,6 @@ void CUpdateManager::setServiceLang(QString lang) CLogger::log("Cannot set service language to: " + lang); } -QString CUpdateManager::getVersion() const -{ - return m_packageData->version; -} - void CUpdateManager::onLoadUpdateFinished(const QString &filePath) { if (getFileHash(filePath) != m_packageData->hash) { @@ -961,7 +956,7 @@ void CUpdateManager::showUpdateMessage(QWidget *parent) { "To install updates, you can download the required package from the official website."); int result = WinDlg::showDialog(parent, tr("Update is available"), QString("%1\n%2: %3\n%4: %5\n%6 (%7 MB)").arg(name, tr("Current version"), - curr_version, tr("New version"), getVersion(), + curr_version, tr("New version"), m_packageData->version, text, m_packageData->fileSize), WinDlg::DlgBtns::mbSkipRemindDownload); __UNLOCK @@ -990,7 +985,7 @@ void CUpdateManager::showStartInstallMessage(QWidget *parent) getFileVersion(QStrToTStr(qApp->applicationDirPath()) + DAEMON_NAME); int result = WinDlg::showDialog(parent, tr("Update is ready to install"), QString("%1\n%2: %3\n%4: %5\n%6").arg(name, tr("Current version"), - curr_version, tr("New version"), getVersion(), + curr_version, tr("New version"), m_packageData->version, tr("To finish updating, restart the app")), WinDlg::DlgBtns::mbInslaterRestart); __UNLOCK diff --git a/win-linux/src/cupdatemanager.h b/win-linux/src/cupdatemanager.h index df6e89095..a75b1ef7b 100644 --- a/win-linux/src/cupdatemanager.h +++ b/win-linux/src/cupdatemanager.h @@ -88,7 +88,6 @@ public: void cancelLoading(); void skipVersion(); int getUpdateMode(); - QString getVersion() const; void handleAppClose(); void loadUpdates(); void installUpdates(); From 7ebc18b2b18d5d81f69891a557c510021232a248 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 2 Sep 2024 11:59:30 +0300 Subject: [PATCH 12/97] [win-linux] updatesvc: add command line parameter handling --- .../update-daemon/src/platform_linux/main.cpp | 1 + .../src/platform_linux/utils.cpp | 27 +++++++++++++++++++ .../update-daemon/src/platform_linux/utils.h | 3 +++ .../update-daemon/src/platform_win/main.cpp | 2 ++ .../update-daemon/src/platform_win/utils.cpp | 26 ++++++++++++++++++ .../update-daemon/src/platform_win/utils.h | 3 +++ 6 files changed, 62 insertions(+) diff --git a/win-linux/extras/update-daemon/src/platform_linux/main.cpp b/win-linux/extras/update-daemon/src/platform_linux/main.cpp index e764bbad4..633aaa91f 100644 --- a/win-linux/extras/update-daemon/src/platform_linux/main.cpp +++ b/win-linux/extras/update-daemon/src/platform_linux/main.cpp @@ -58,6 +58,7 @@ int main(int argc, char *argv[]) { if (argc > 1) { if (strcmp(argv[1], "--run-as-app") == 0) { + NS_Utils::parseCmdArgs(argc, argv); std::locale::global(std::locale("")); Translator lang(NS_Utils::GetAppLanguage(), "/langs/langs.iss"); CSocket socket(0, INSTANCE_SVC_PORT); diff --git a/win-linux/extras/update-daemon/src/platform_linux/utils.cpp b/win-linux/extras/update-daemon/src/platform_linux/utils.cpp index 4894e6b7f..3b367546a 100644 --- a/win-linux/extras/update-daemon/src/platform_linux/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_linux/utils.cpp @@ -39,6 +39,7 @@ #include #include //#include +#include #include #include "../../src/defines.h" #include "../../src/prop/defines_p.h" @@ -122,6 +123,32 @@ static bool moving_folder_content(const string &from, const string &to, bool use namespace NS_Utils { + std::vector cmd_args; + + void parseCmdArgs(int argc, char *argv[]) + { + for (int i = 0; i < argc; i++) + cmd_args.push_back(argv[i]); + } + + bool cmdArgContains(const string ¶m) + { + auto len = param.length(); + return std::any_of(cmd_args.cbegin(), cmd_args.cend(), [¶m, len](const string &arg) { + return arg.find(param) == 0 && (len == arg.length() || arg[len] == '=' || arg[len] == ':' || arg[len] == '|'); + }); + } + + string cmdArgValue(const string ¶m) + { + auto len = param.length(); + for (const auto &arg : cmd_args) { + if (arg.find(param) == 0 && len < arg.length() && (arg[len] == '=' || arg[len] == ':' || arg[len] == '|')) + return arg.substr(len + 1); + } + return ""; + } + string GetLastErrorAsString() { char buff[LINE_MAX] = {0}; diff --git a/win-linux/extras/update-daemon/src/platform_linux/utils.h b/win-linux/extras/update-daemon/src/platform_linux/utils.h index 23689629b..66850b029 100644 --- a/win-linux/extras/update-daemon/src/platform_linux/utils.h +++ b/win-linux/extras/update-daemon/src/platform_linux/utils.h @@ -50,6 +50,9 @@ using std::list; namespace NS_Utils { +void parseCmdArgs(int argc, char *argv[]); +bool cmdArgContains(const string ¶m); +string cmdArgValue(const string ¶m); string GetLastErrorAsString(); int ShowMessage(string str, bool showError = false); //string GetSysLanguage(); diff --git a/win-linux/extras/update-daemon/src/platform_win/main.cpp b/win-linux/extras/update-daemon/src/platform_win/main.cpp index 94cf98931..3202a8f15 100644 --- a/win-linux/extras/update-daemon/src/platform_win/main.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/main.cpp @@ -98,6 +98,7 @@ int __cdecl _tmain (int argc, TCHAR *argv[]) } else if (lstrcmpi(argv[1], _T("--run-as-app")) == 0) { NS_Utils::setRunAsApp(); + NS_Utils::parseCmdArgs(argc, argv); std::locale::global(std::locale("")); Translator lang(NS_Utils::GetAppLanguage().c_str(), IDT_TRANSLATIONS); CSocket socket(0, INSTANCE_SVC_PORT); @@ -158,6 +159,7 @@ int __cdecl _tmain (int argc, TCHAR *argv[]) VOID WINAPI SvcMain(DWORD argc, LPTSTR *argv) { + NS_Utils::parseCmdArgs(argc, argv); if (argc > 1) { if (lstrcmpi(argv[1], _T("--log")) == 0) { NS_Logger::AllowWriteLog(); diff --git a/win-linux/extras/update-daemon/src/platform_win/utils.cpp b/win-linux/extras/update-daemon/src/platform_win/utils.cpp index 4f957aa73..83e0986d4 100644 --- a/win-linux/extras/update-daemon/src/platform_win/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/utils.cpp @@ -82,6 +82,32 @@ namespace NS_Utils return run_as_app; } + std::vector cmd_args; + + void parseCmdArgs(int argc, wchar_t *argv[]) + { + for (int i = 0; i < argc; i++) + cmd_args.push_back(argv[i]); + } + + bool cmdArgContains(const wstring ¶m) + { + auto len = param.length(); + return std::any_of(cmd_args.cbegin(), cmd_args.cend(), [¶m, len](const wstring &arg) { + return arg.find(param) == 0 && (len == arg.length() || arg[len] == L'=' || arg[len] == L':' || arg[len] == L'|'); + }); + } + + wstring cmdArgValue(const wstring ¶m) + { + auto len = param.length(); + for (const auto &arg : cmd_args) { + if (arg.find(param) == 0 && len < arg.length() && (arg[len] == L'=' || arg[len] == L':' || arg[len] == L'|')) + return arg.substr(len + 1); + } + return L""; + } + wstring GetLastErrorAsString() { DWORD errID = ::GetLastError(); diff --git a/win-linux/extras/update-daemon/src/platform_win/utils.h b/win-linux/extras/update-daemon/src/platform_win/utils.h index b9afd2cc6..18ddf466c 100644 --- a/win-linux/extras/update-daemon/src/platform_win/utils.h +++ b/win-linux/extras/update-daemon/src/platform_win/utils.h @@ -52,6 +52,9 @@ namespace NS_Utils { void setRunAsApp(); bool isRunAsApp(); +void parseCmdArgs(int argc, wchar_t *argv[]); +bool cmdArgContains(const wstring ¶m); +wstring cmdArgValue(const wstring ¶m); wstring GetLastErrorAsString(); int ShowMessage(wstring str, bool showError = false); wstring GetAppLanguage(); From 128957b8b37631ba7c4130ead9671a0ecdc2c2f0 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 2 Sep 2024 12:01:07 +0300 Subject: [PATCH 13/97] [win-linux] updatesvc: add log support for portable version --- win-linux/extras/update-daemon/src/platform_linux/main.cpp | 2 ++ win-linux/extras/update-daemon/src/platform_win/main.cpp | 2 ++ win-linux/src/cupdatemanager.cpp | 5 ++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/win-linux/extras/update-daemon/src/platform_linux/main.cpp b/win-linux/extras/update-daemon/src/platform_linux/main.cpp index 633aaa91f..98f9dd10e 100644 --- a/win-linux/extras/update-daemon/src/platform_linux/main.cpp +++ b/win-linux/extras/update-daemon/src/platform_linux/main.cpp @@ -59,6 +59,8 @@ int main(int argc, char *argv[]) if (argc > 1) { if (strcmp(argv[1], "--run-as-app") == 0) { NS_Utils::parseCmdArgs(argc, argv); + if (NS_Utils::cmdArgContains("--log")) + NS_Logger::AllowWriteLog(); std::locale::global(std::locale("")); Translator lang(NS_Utils::GetAppLanguage(), "/langs/langs.iss"); CSocket socket(0, INSTANCE_SVC_PORT); diff --git a/win-linux/extras/update-daemon/src/platform_win/main.cpp b/win-linux/extras/update-daemon/src/platform_win/main.cpp index 3202a8f15..b05ccc9be 100644 --- a/win-linux/extras/update-daemon/src/platform_win/main.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/main.cpp @@ -99,6 +99,8 @@ int __cdecl _tmain (int argc, TCHAR *argv[]) if (lstrcmpi(argv[1], _T("--run-as-app")) == 0) { NS_Utils::setRunAsApp(); NS_Utils::parseCmdArgs(argc, argv); + if (NS_Utils::cmdArgContains(_T("--log"))) + NS_Logger::AllowWriteLog(); std::locale::global(std::locale("")); Translator lang(NS_Utils::GetAppLanguage().c_str(), IDT_TRANSLATIONS); CSocket socket(0, INSTANCE_SVC_PORT); diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index 3278b68da..a86376689 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -383,7 +383,10 @@ CUpdateManager::CUpdateManager(QObject *parent): std::string msg = std::to_string(pid); CSocket sock(INSTANCE_SVC_PORT, 0); sock.sendMessage((void*)msg.c_str(), msg.length() + 1); - runProcess(QStrToTStr(qApp->applicationDirPath()) + DAEMON_NAME, _T("--run-as-app ") + std::to_tstring(pid)); + tstring args = _T("--run-as-app ") + std::to_tstring(pid); + if (InputArgs::contains(L"--log")) + args.append(_T(" --log")); + runProcess(QStrToTStr(qApp->applicationDirPath()) + DAEMON_NAME, args); } init(); } else { From b53177c7378b03a21b67b16ef88f9d8b9d075dcb Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 2 Sep 2024 12:01:50 +0300 Subject: [PATCH 14/97] [win] updatesvc: small refactoring --- win-linux/extras/update-daemon/src/platform_win/main.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/win-linux/extras/update-daemon/src/platform_win/main.cpp b/win-linux/extras/update-daemon/src/platform_win/main.cpp index b05ccc9be..ef18293bd 100644 --- a/win-linux/extras/update-daemon/src/platform_win/main.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/main.cpp @@ -162,11 +162,8 @@ int __cdecl _tmain (int argc, TCHAR *argv[]) VOID WINAPI SvcMain(DWORD argc, LPTSTR *argv) { NS_Utils::parseCmdArgs(argc, argv); - if (argc > 1) { - if (lstrcmpi(argv[1], _T("--log")) == 0) { - NS_Logger::AllowWriteLog(); - } - } + if (NS_Utils::cmdArgContains(_T("--log"))) + NS_Logger::AllowWriteLog(); gSvcStatusHandle = RegisterServiceCtrlHandler(SERVICE_NAME, SvcCtrlHandler); if (gSvcStatusHandle == NULL) { From 0034202d419cbefaf0f7445553c91798df235677 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 2 Sep 2024 12:02:37 +0300 Subject: [PATCH 15/97] [win-linux] updmanager: move update channel processing to service --- win-linux/ASCDocumentEditor.pro | 13 --------- .../extras/update-daemon/UpdateDaemon.pro | 13 +++++++++ .../update-daemon/src/classes/csvcmanager.cpp | 24 ++++++++++++---- .../update-daemon/src/classes/csvcmanager.h | 3 +- win-linux/src/cupdatemanager.cpp | 28 ++++--------------- win-linux/src/cupdatemanager.h | 1 - 6 files changed, 40 insertions(+), 42 deletions(-) diff --git a/win-linux/ASCDocumentEditor.pro b/win-linux/ASCDocumentEditor.pro index 83e730a7e..f551b403d 100644 --- a/win-linux/ASCDocumentEditor.pro +++ b/win-linux/ASCDocumentEditor.pro @@ -27,20 +27,7 @@ message($$PLATFORM_BUILD) #win32 { updmodule:!build_xp { DEFINES += _UPDMODULE - - ENV_URL_APPCAST_MAIN = $$(DESKTOP_URL_UPDATES_MAIN_CHANNEL) - !isEmpty(ENV_URL_APPCAST_MAIN) { - DEFINES += URL_APPCAST_UPDATES=\\\"$${ENV_URL_APPCAST_MAIN}\\\" - } - - ENV_URL_APPCAST_DEV = $$(DESKTOP_URL_UPDATES_DEV_CHANNEL) - !isEmpty(ENV_URL_APPCAST_DEV) { - DEFINES += URL_APPCAST_DEV_CHANNEL=\\\"$${ENV_URL_APPCAST_DEV}\\\" - } - message(updates is turned on) - message(appcast url: $$ENV_URL_APPCAST_MAIN) - message(appcast dev url: \\\"$$ENV_URL_APPCAST_DEV\\\") } #} diff --git a/win-linux/extras/update-daemon/UpdateDaemon.pro b/win-linux/extras/update-daemon/UpdateDaemon.pro index e30100852..a9eead74f 100644 --- a/win-linux/extras/update-daemon/UpdateDaemon.pro +++ b/win-linux/extras/update-daemon/UpdateDaemon.pro @@ -6,6 +6,19 @@ DEFINES += COPYRIGHT_YEAR=$${CURRENT_YEAR} DEFINES += APP_ICON_PATH=\"./icons/desktopeditors.ico\" DEFINES += APP_LANG_PATH=\"./langs/langs.iss\" +ENV_URL_APPCAST_MAIN = $$(DESKTOP_URL_UPDATES_MAIN_CHANNEL) +!isEmpty(ENV_URL_APPCAST_MAIN) { + DEFINES += URL_APPCAST_UPDATES=\\\"$${ENV_URL_APPCAST_MAIN}\\\" +} + +ENV_URL_APPCAST_DEV = $$(DESKTOP_URL_UPDATES_DEV_CHANNEL) +!isEmpty(ENV_URL_APPCAST_DEV) { + DEFINES += URL_APPCAST_DEV_CHANNEL=\\\"$${ENV_URL_APPCAST_DEV}\\\" +} + +message(appcast url: $$ENV_URL_APPCAST_MAIN) +message(appcast dev url: $$ENV_URL_APPCAST_DEV) + core_linux { GLIB_RESOURCE_FILES += $$PWD/res/gresource.xml diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 9af304b84..45bbab7fd 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -74,7 +74,13 @@ # define ARCHIVE_PATTERN _T("*.tar.xz") # define sleep(a) usleep(a*1000) #endif - +#ifndef URL_APPCAST_UPDATES +# define URL_APPCAST_UPDATES "" +#endif +#ifndef URL_APPCAST_DEV_CHANNEL +# define URL_APPCAST_DEV_CHANNEL "" +#endif +#define CMD_ARGUMENT_UPDATES_CHANNEL _T("--updates-appcast-channel") #define UPDATE_PATH _T("/" REG_APP_NAME "Updates") #define BACKUP_PATH _T("/" REG_APP_NAME "Backup") #define SUCCES_UNPACKED _T("/success_unpacked.txt") @@ -192,6 +198,9 @@ CSvcManager::CSvcManager(): m_pDownloader(new CDownloader), m_pUnzip(new CUnzip) { + m_checkUrl = (NS_Utils::cmdArgContains(CMD_ARGUMENT_UPDATES_CHANNEL) && NS_Utils::cmdArgValue(CMD_ARGUMENT_UPDATES_CHANNEL) == _T("dev")) + ? _T(URL_APPCAST_DEV_CHANNEL) : _T(URL_APPCAST_UPDATES); + NS_Logger::WriteLog(m_checkUrl.empty() ? _T("Updates is off, URL is empty.") : _T("Updates is on, URL: ") + m_checkUrl); init(); } @@ -235,10 +244,15 @@ void CSvcManager::init() case MSG_CheckUpdates: { __GLOBAL_LOCK //DeleteUrlCacheEntry(params[1].c_str()); - m_downloadMode = Mode::CHECK_UPDATES; - if (m_pDownloader) - m_pDownloader->downloadFile(params[1], generateTmpFileName(_T(".json"))); - NS_Logger::WriteLog(_T("Received MSG_CheckUpdates, URL: ") + params[1]); + if (!m_checkUrl.empty()) { + m_downloadMode = Mode::CHECK_UPDATES; + if (m_pDownloader) + m_pDownloader->downloadFile(m_checkUrl, generateTmpFileName(_T(".json"))); + NS_Logger::WriteLog(_T("Received MSG_CheckUpdates, URL: ") + m_checkUrl); + } else { + m_socket->sendMessage(MSG_OtherError, _T("SVC_TXT_ERR_URL")); + __UNLOCK + } break; } case MSG_LoadUpdates: { diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.h b/win-linux/extras/update-daemon/src/classes/csvcmanager.h index 7f718695c..2569f2efd 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.h +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.h @@ -68,7 +68,8 @@ private: void startReplacingService(const bool restartAfterUpdate); FnVoidVoid m_quit_callback = nullptr; - tstring m_newVersion; + tstring m_checkUrl, + m_newVersion; bool m_lock = false; int m_downloadMode; future m_future_clear; diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index a86376689..ee9ab272c 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -67,15 +67,8 @@ #define MINIMUM_INTERVAL 30 #define RESET_MESSAGE_MS 20000 #define CHECK_ON_STARTUP_MS 9000 -#define CMD_ARGUMENT_UPDATES_CHANNEL L"--updates-appcast-channel" #define CMD_ARGUMENT_UPDATES_INTERVAL L"--updates-interval" #define SERVICE_NAME APP_TITLE " Update Service" -#ifndef URL_APPCAST_UPDATES -# define URL_APPCAST_UPDATES "" -#endif -#ifndef URL_APPCAST_DEV_CHANNEL -# define URL_APPCAST_DEV_CHANNEL "" -#endif #define __GLOBAL_LOCK if (m_lock) {CLogger::log("Blocked in: " + FUNCTION_INFO); return;} m_lock = true; \ CLogger::log("Locking and further execution:" + FUNCTION_INFO); #define __UNLOCK m_lock = false; CLogger::log("Unlocked in:" + FUNCTION_INFO); @@ -337,18 +330,11 @@ CUpdateManager::CUpdateManager(QObject *parent): QObject(parent), m_packageData(new PackageData), m_savedPackageData(new SavedPackageData), - m_checkUrl(L""), m_dialogSchedule(new DialogSchedule(this)), m_socket(new CSocket(SVC_PORT, APP_PORT)) { // =========== Set updates URL ============ if ( Utils::updatesAllowed() ) { - if ( InputArgs::contains(CMD_ARGUMENT_UPDATES_CHANNEL) ) { - std::wstring ch_updates = InputArgs::argument_value(CMD_ARGUMENT_UPDATES_CHANNEL); - if ( ch_updates == L"dev" ) { - m_checkUrl = QString(URL_APPCAST_DEV_CHANNEL).toStdWString(); - } - } if ( InputArgs::contains(CMD_ARGUMENT_UPDATES_INTERVAL) ) { int interval = QString::fromStdWString(InputArgs::argument_value(CMD_ARGUMENT_UPDATES_INTERVAL)).toInt(); if (interval >= MINIMUM_INTERVAL) { @@ -359,12 +345,7 @@ CUpdateManager::CUpdateManager(QObject *parent): } } - if ( m_checkUrl.empty() ) - m_checkUrl = QString(URL_APPCAST_UPDATES).toStdWString(); - } - - if ( !m_checkUrl.empty()) { - CLogger::log("Updates is on, URL: " + QString::fromStdWString(m_checkUrl)); + CLogger::log("Updates is on"); m_pIntervalTimer = new QTimer(this); m_pIntervalTimer->setSingleShot(false); connect(m_pIntervalTimer, SIGNAL(timeout()), this, SLOT(checkUpdates())); @@ -390,8 +371,8 @@ CUpdateManager::CUpdateManager(QObject *parent): } init(); } else { - CLogger::log("Updates is off, URL is empty."); - refreshStartPage({"error", {TXT_ERR_URL}, BTN_TXT_CHECK, "", "true"}); + CLogger::log("Updates is off"); + refreshStartPage({"error", {TXT_ERR_NOT_ALLOWED}, BTN_TXT_CHECK, "", "true"}); } } @@ -572,6 +553,9 @@ void CUpdateManager::onError(const QString &error) else if (error == "SVC_TXT_ERR_DNL_INET") _error = SVC_TXT_ERR_DNL_INET; + else + if (error == "SVC_TXT_ERR_URL") + _error = TXT_ERR_URL; refreshStartPage({"error", {_error}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK diff --git a/win-linux/src/cupdatemanager.h b/win-linux/src/cupdatemanager.h index a75b1ef7b..fe1c9022f 100644 --- a/win-linux/src/cupdatemanager.h +++ b/win-linux/src/cupdatemanager.h @@ -124,7 +124,6 @@ private: QTimer *m_pIntervalStartTimer = nullptr, *m_pLastCheckMsgTimer = nullptr, *m_pIntervalTimer = nullptr; - wstring m_checkUrl; Command m_lastCommand; From 5b962ea8b1fca5b1d65257f4243a9ca91bafac7e Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 2 Sep 2024 12:03:28 +0300 Subject: [PATCH 16/97] [win-linux] updatesvc: add json parser --- win-linux/extras/update-daemon/common.pri | 3 + .../update-daemon/src/classes/cjson.cpp | 189 + .../extras/update-daemon/src/classes/cjson.h | 96 + .../update-daemon/src/classes/cjson_p.h | 3431 +++++++++++++++++ 4 files changed, 3719 insertions(+) create mode 100644 win-linux/extras/update-daemon/src/classes/cjson.cpp create mode 100644 win-linux/extras/update-daemon/src/classes/cjson.h create mode 100644 win-linux/extras/update-daemon/src/classes/cjson_p.h diff --git a/win-linux/extras/update-daemon/common.pri b/win-linux/extras/update-daemon/common.pri index 0e2dd0676..76e685120 100644 --- a/win-linux/extras/update-daemon/common.pri +++ b/win-linux/extras/update-daemon/common.pri @@ -18,10 +18,13 @@ INCLUDEPATH += $$PWD/../../src/prop HEADERS += $$PWD/src/version.h \ $$PWD/src/classes/csocket.h \ $$PWD/src/classes/csvcmanager.h \ + $$PWD/src/classes/cjson_p.h \ + $$PWD/src/classes/cjson.h \ $$PWD/src/classes/translator.h SOURCES += $$PWD/src/classes/csocket.cpp \ $$PWD/src/classes/csvcmanager.cpp \ + $$PWD/src/classes/cjson.cpp \ $$PWD/src/classes/translator.cpp ENV_PRODUCT_VERSION = $$(PRODUCT_VERSION) diff --git a/win-linux/extras/update-daemon/src/classes/cjson.cpp b/win-linux/extras/update-daemon/src/classes/cjson.cpp new file mode 100644 index 000000000..03aea59bf --- /dev/null +++ b/win-linux/extras/update-daemon/src/classes/cjson.cpp @@ -0,0 +1,189 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "cjson.h" +#include "cjson_p.h" +#include + + +static std::string TStrToUtf8(const tstring &str) +{ +#ifdef _WIN32 + std::wstring_convert, wchar_t> utf8_conv; + return utf8_conv.to_bytes(str); +#else + return str; +#endif +} + +class JsonObjectPrivate +{ +public: + json_object_s *obj = nullptr; +}; + +class JsonValuePrivate +{ +public: + json_value_s *val = nullptr; +}; + +class JsonDocumentPrivate +{ +public: + json_value_s *root = nullptr; +}; + + +JsonValue::JsonValue() : pimpl(new JsonValuePrivate) +{} + +JsonValue::JsonValue(const JsonValue &jval) : JsonValue() +{ + pimpl->val = jval.pimpl->val; +} + +JsonValue::~JsonValue() +{ + delete pimpl, pimpl = nullptr; +} + +JsonValue& JsonValue::operator=(const JsonValue &jval) +{ + if (this == &jval) + return *this; + pimpl->val = jval.pimpl->val; + return *this; +} + +JsonObject JsonValue::toObject() +{ + JsonObject jobj; + if (pimpl->val && pimpl->val->type == json_type_object) + jobj.pimpl->obj = (json_object_s*)pimpl->val->payload; + return jobj; +} + +tstring JsonValue::toTString() +{ + tstring str; + if (pimpl->val && pimpl->val->type == json_type_string) { + json_string_s *jstr = (json_string_s*)pimpl->val->payload; +#ifdef _WIN32 + size_t len = jstr->string_size, outSize = 0; + wchar_t *pDestBuf = new wchar_t[len + 1]; + mbstowcs_s(&outSize, pDestBuf, len + 1, jstr->string, len); + if (outSize > 0) + str = pDestBuf; + delete[] pDestBuf; +#else + str = std::string(jstr->string, jstr->string_size); +#endif + } + return str; +} + + +JsonObject::JsonObject() : pimpl(new JsonObjectPrivate) +{} + +JsonObject::JsonObject(const JsonObject &jobj) : JsonObject() +{ + pimpl->obj = jobj.pimpl->obj; +} + +JsonObject::~JsonObject() +{ + delete pimpl, pimpl = nullptr; +} + +JsonObject& JsonObject::operator=(const JsonObject &jobj) +{ + if (this == &jobj) + return *this; + pimpl->obj = jobj.pimpl->obj; + return *this; +} + +JsonValue JsonObject::value(const tstring &key) +{ + std::string utf8_key = TStrToUtf8(key); + JsonValue jval; + json_object_element_s *element; + if (pimpl->obj && (element = pimpl->obj->start) != NULL) { + do { + if (strcmp(element->name->string, utf8_key.c_str()) == 0) { + jval.pimpl->val = element->value; + break; + } + } while ((element = element->next) != NULL); + } + return jval; +} + +bool JsonObject::contains(const tstring &key) +{ + std::string utf8_key = TStrToUtf8(key); + json_object_element_s *element; + if (pimpl->obj && (element = pimpl->obj->start) != NULL) { + do { + if (strcmp(element->name->string, utf8_key.c_str()) == 0) + return true; + } while ((element = element->next) != NULL); + } + return false; +} + + +JsonDocument::JsonDocument() : pimpl(new JsonDocumentPrivate) +{} + +JsonDocument::JsonDocument(const tstring &json) : JsonDocument() +{ + std::string utf8_json = TStrToUtf8(json); + pimpl->root = json_parse(utf8_json.c_str(), utf8_json.length()); +} + +JsonDocument::~JsonDocument() +{ + if (pimpl->root) + free(pimpl->root); + delete pimpl, pimpl = nullptr; +} + +JsonObject JsonDocument::object() +{ + JsonObject obj; + if (pimpl->root && pimpl->root->type == json_type_object && pimpl->root->payload) + obj.pimpl->obj = (json_object_s*)pimpl->root->payload; + return obj; +} diff --git a/win-linux/extras/update-daemon/src/classes/cjson.h b/win-linux/extras/update-daemon/src/classes/cjson.h new file mode 100644 index 000000000..7c511c929 --- /dev/null +++ b/win-linux/extras/update-daemon/src/classes/cjson.h @@ -0,0 +1,96 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#ifndef CJSON_H +#define CJSON_H + +#include +#ifdef _WIN32 +# include +# define tstring std::wstring +#else +# define _T(str) str +# define tstring std::string +#endif + +class JsonObject; +class JsonObjectPrivate; +class JsonValuePrivate; +class JsonDocumentPrivate; + +class JsonValue +{ +public: + JsonValue(); + JsonValue(const JsonValue&); + ~JsonValue(); + + JsonValue& operator=(const JsonValue&); + JsonObject toObject(); + tstring toTString(); + +private: + friend class JsonObject; + JsonValuePrivate *pimpl; +}; + +class JsonObject +{ +public: + JsonObject(); + JsonObject(const JsonObject&); + ~JsonObject(); + + JsonObject& operator=(const JsonObject&); + JsonValue value(const tstring&); + bool contains(const tstring&); + +private: + friend class JsonDocument; + friend class JsonValue; + JsonObjectPrivate *pimpl; +}; + +class JsonDocument +{ +public: + JsonDocument(const tstring&); + ~JsonDocument(); + + JsonObject object(); + +private: + JsonDocument(); + JsonDocumentPrivate *pimpl; +}; + +#endif // CJSON_H diff --git a/win-linux/extras/update-daemon/src/classes/cjson_p.h b/win-linux/extras/update-daemon/src/classes/cjson_p.h new file mode 100644 index 000000000..0419c6b60 --- /dev/null +++ b/win-linux/extras/update-daemon/src/classes/cjson_p.h @@ -0,0 +1,3431 @@ + +#ifndef SHEREDOM_JSON_H_INCLUDED +#define SHEREDOM_JSON_H_INCLUDED + +#if defined(_MSC_VER) +#pragma warning(push) + +/* disable warning: no function prototype given: converting '()' to '(void)' */ +#pragma warning(disable : 4255) + +/* disable warning: '__cplusplus' is not defined as a preprocessor macro, + * replacing with '0' for '#if/#elif' */ +#pragma warning(disable : 4668) + +/* disable warning: 'bytes padding added after construct' */ +#pragma warning(disable : 4820) +#endif + +#include +#include + +#if defined(__TINYC__) +#define JSON_ATTRIBUTE(a) __attribute((a)) +#else +#define JSON_ATTRIBUTE(a) __attribute__((a)) +#endif + +#if defined(_MSC_VER) || defined(__WATCOMC__) +#define json_weak __inline +#elif defined(__clang__) || defined(__GNUC__) || defined(__TINYC__) +#define json_weak JSON_ATTRIBUTE(weak) +#else +#error Non clang, non gcc, non MSVC, non tcc, non WATCOM compiler found! +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +struct json_value_s; +struct json_parse_result_s; + +enum json_parse_flags_e { + json_parse_flags_default = 0, + + /* allow trailing commas in objects and arrays. For example, both [true,] and + {"a" : null,} would be allowed with this option on. */ + json_parse_flags_allow_trailing_comma = 0x1, + + /* allow unquoted keys for objects. For example, {a : null} would be allowed + with this option on. */ + json_parse_flags_allow_unquoted_keys = 0x2, + + /* allow a global unbracketed object. For example, a : null, b : true, c : {} + would be allowed with this option on. */ + json_parse_flags_allow_global_object = 0x4, + + /* allow objects to use '=' instead of ':' between key/value pairs. For + example, a = null, b : true would be allowed with this option on. */ + json_parse_flags_allow_equals_in_object = 0x8, + + /* allow that objects don't have to have comma separators between key/value + pairs. */ + json_parse_flags_allow_no_commas = 0x10, + + /* allow c-style comments (either variants) to be ignored in the input JSON + file. */ + json_parse_flags_allow_c_style_comments = 0x20, + + /* deprecated flag, unused. */ + json_parse_flags_deprecated = 0x40, + + /* record location information for each value. */ + json_parse_flags_allow_location_information = 0x80, + + /* allow strings to be 'single quoted'. */ + json_parse_flags_allow_single_quoted_strings = 0x100, + + /* allow numbers to be hexadecimal. */ + json_parse_flags_allow_hexadecimal_numbers = 0x200, + + /* allow numbers like +123 to be parsed. */ + json_parse_flags_allow_leading_plus_sign = 0x400, + + /* allow numbers like .0123 or 123. to be parsed. */ + json_parse_flags_allow_leading_or_trailing_decimal_point = 0x800, + + /* allow Infinity, -Infinity, NaN, -NaN. */ + json_parse_flags_allow_inf_and_nan = 0x1000, + + /* allow multi line string values. */ + json_parse_flags_allow_multi_line_strings = 0x2000, + + /* allow simplified JSON to be parsed. Simplified JSON is an enabling of a set + of other parsing options. */ + json_parse_flags_allow_simplified_json = + (json_parse_flags_allow_trailing_comma | + json_parse_flags_allow_unquoted_keys | + json_parse_flags_allow_global_object | + json_parse_flags_allow_equals_in_object | + json_parse_flags_allow_no_commas), + + /* allow JSON5 to be parsed. JSON5 is an enabling of a set of other parsing + options. */ + json_parse_flags_allow_json5 = + (json_parse_flags_allow_trailing_comma | + json_parse_flags_allow_unquoted_keys | + json_parse_flags_allow_c_style_comments | + json_parse_flags_allow_single_quoted_strings | + json_parse_flags_allow_hexadecimal_numbers | + json_parse_flags_allow_leading_plus_sign | + json_parse_flags_allow_leading_or_trailing_decimal_point | + json_parse_flags_allow_inf_and_nan | + json_parse_flags_allow_multi_line_strings) +}; + +/* Parse a JSON text file, returning a pointer to the root of the JSON + * structure. json_parse performs 1 call to malloc for the entire encoding. + * Returns 0 if an error occurred (malformed JSON input, or malloc failed). */ +json_weak struct json_value_s *json_parse(const void *src, size_t src_size); + +/* Parse a JSON text file, returning a pointer to the root of the JSON + * structure. json_parse performs 1 call to alloc_func_ptr for the entire + * encoding. Returns 0 if an error occurred (malformed JSON input, or malloc + * failed). If an error occurred, the result struct (if not NULL) will explain + * the type of error, and the location in the input it occurred. If + * alloc_func_ptr is null then malloc is used. */ +json_weak struct json_value_s * +json_parse_ex(const void *src, size_t src_size, size_t flags_bitset, + void *(*alloc_func_ptr)(void *, size_t), void *user_data, + struct json_parse_result_s *result); + +/* Extracts a value and all the data that makes it up into a newly created + * value. json_extract_value performs 1 call to malloc for the entire encoding. + */ +json_weak struct json_value_s * +json_extract_value(const struct json_value_s *value); + +/* Extracts a value and all the data that makes it up into a newly created + * value. json_extract_value performs 1 call to alloc_func_ptr for the entire + * encoding. If alloc_func_ptr is null then malloc is used. */ +json_weak struct json_value_s * +json_extract_value_ex(const struct json_value_s *value, + void *(*alloc_func_ptr)(void *, size_t), void *user_data); + +/* Write out a minified JSON utf-8 string. This string is an encoding of the + * minimal string characters required to still encode the same data. + * json_write_minified performs 1 call to malloc for the entire encoding. Return + * 0 if an error occurred (malformed JSON input, or malloc failed). The out_size + * parameter is optional as the utf-8 string is null terminated. */ +json_weak void *json_write_minified(const struct json_value_s *value, + size_t *out_size); + +/* Write out a pretty JSON utf-8 string. This string is encoded such that the + * resultant JSON is pretty in that it is easily human readable. The indent and + * newline parameters allow a user to specify what kind of indentation and + * newline they want (two spaces / three spaces / tabs? \r, \n, \r\n ?). Both + * indent and newline can be NULL, indent defaults to two spaces (" "), and + * newline defaults to linux newlines ('\n' as the newline character). + * json_write_pretty performs 1 call to malloc for the entire encoding. Return 0 + * if an error occurred (malformed JSON input, or malloc failed). The out_size + * parameter is optional as the utf-8 string is null terminated. */ +json_weak void *json_write_pretty(const struct json_value_s *value, + const char *indent, const char *newline, + size_t *out_size); + +/* Reinterpret a JSON value as a string. Returns null is the value was not a + * string. */ +json_weak struct json_string_s * +json_value_as_string(struct json_value_s *const value); + +/* Reinterpret a JSON value as a number. Returns null is the value was not a + * number. */ +json_weak struct json_number_s * +json_value_as_number(struct json_value_s *const value); + +/* Reinterpret a JSON value as an object. Returns null is the value was not an + * object. */ +json_weak struct json_object_s * +json_value_as_object(struct json_value_s *const value); + +/* Reinterpret a JSON value as an array. Returns null is the value was not an + * array. */ +json_weak struct json_array_s * +json_value_as_array(struct json_value_s *const value); + +/* Whether the value is true. */ +json_weak int json_value_is_true(const struct json_value_s *const value); + +/* Whether the value is false. */ +json_weak int json_value_is_false(const struct json_value_s *const value); + +/* Whether the value is null. */ +json_weak int json_value_is_null(const struct json_value_s *const value); + +/* The various types JSON values can be. Used to identify what a value is. */ +typedef enum json_type_e { + json_type_string, + json_type_number, + json_type_object, + json_type_array, + json_type_true, + json_type_false, + json_type_null + +} json_type_t; + +/* A JSON string value. */ +typedef struct json_string_s { + /* utf-8 string */ + const char *string; + /* The size (in bytes) of the string */ + size_t string_size; + +} json_string_t; + +/* A JSON string value (extended). */ +typedef struct json_string_ex_s { + /* The JSON string this extends. */ + struct json_string_s string; + + /* The character offset for the value in the JSON input. */ + size_t offset; + + /* The line number for the value in the JSON input. */ + size_t line_no; + + /* The row number for the value in the JSON input, in bytes. */ + size_t row_no; + +} json_string_ex_t; + +/* A JSON number value. */ +typedef struct json_number_s { + /* ASCII string containing representation of the number. */ + const char *number; + /* the size (in bytes) of the number. */ + size_t number_size; + +} json_number_t; + +/* an element of a JSON object. */ +typedef struct json_object_element_s { + /* the name of this element. */ + struct json_string_s *name; + /* the value of this element. */ + struct json_value_s *value; + /* the next object element (can be NULL if the last element in the object). */ + struct json_object_element_s *next; + +} json_object_element_t; + +/* a JSON object value. */ +typedef struct json_object_s { + /* a linked list of the elements in the object. */ + struct json_object_element_s *start; + /* the number of elements in the object. */ + size_t length; + +} json_object_t; + +/* an element of a JSON array. */ +typedef struct json_array_element_s { + /* the value of this element. */ + struct json_value_s *value; + /* the next array element (can be NULL if the last element in the array). */ + struct json_array_element_s *next; + +} json_array_element_t; + +/* a JSON array value. */ +typedef struct json_array_s { + /* a linked list of the elements in the array. */ + struct json_array_element_s *start; + /* the number of elements in the array. */ + size_t length; + +} json_array_t; + +/* a JSON value. */ +typedef struct json_value_s { + /* a pointer to either a json_string_s, json_number_s, json_object_s, or. */ + /* json_array_s. Should be cast to the appropriate struct type based on what. + */ + /* the type of this value is. */ + void *payload; + /* must be one of json_type_e. If type is json_type_true, json_type_false, or. + */ + /* json_type_null, payload will be NULL. */ + size_t type; + +} json_value_t; + +/* a JSON value (extended). */ +typedef struct json_value_ex_s { + /* the JSON value this extends. */ + struct json_value_s value; + + /* the character offset for the value in the JSON input. */ + size_t offset; + + /* the line number for the value in the JSON input. */ + size_t line_no; + + /* the row number for the value in the JSON input, in bytes. */ + size_t row_no; + +} json_value_ex_t; + +/* a parsing error code. */ +enum json_parse_error_e { + /* no error occurred (huzzah!). */ + json_parse_error_none = 0, + + /* expected either a comma or a closing '}' or ']' to close an object or. */ + /* array! */ + json_parse_error_expected_comma_or_closing_bracket, + + /* colon separating name/value pair was missing! */ + json_parse_error_expected_colon, + + /* expected string to begin with '"'! */ + json_parse_error_expected_opening_quote, + + /* invalid escaped sequence in string! */ + json_parse_error_invalid_string_escape_sequence, + + /* invalid number format! */ + json_parse_error_invalid_number_format, + + /* invalid value! */ + json_parse_error_invalid_value, + + /* reached end of buffer before object/array was complete! */ + json_parse_error_premature_end_of_buffer, + + /* string was malformed! */ + json_parse_error_invalid_string, + + /* a call to malloc, or a user provider allocator, failed. */ + json_parse_error_allocator_failed, + + /* the JSON input had unexpected trailing characters that weren't part of the. + JSON value. */ + json_parse_error_unexpected_trailing_characters, + + /* catch-all error for everything else that exploded (real bad chi!). */ + json_parse_error_unknown +}; + +/* error report from json_parse_ex(). */ +typedef struct json_parse_result_s { + /* the error code (one of json_parse_error_e). */ + size_t error; + + /* the character offset for the error in the JSON input. */ + size_t error_offset; + + /* the line number for the error in the JSON input. */ + size_t error_line_no; + + /* the row number for the error, in bytes. */ + size_t error_row_no; + +} json_parse_result_t; + +#ifdef __cplusplus +} /* extern "C". */ +#endif + +#include + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +#if defined(_MSC_VER) && (_MSC_VER < 1920) +#define json_uintmax_t unsigned __int64 +#else +#include +#define json_uintmax_t uintmax_t +#endif + +#if defined(_MSC_VER) +#define json_strtoumax _strtoui64 +#else +#define json_strtoumax strtoumax +#endif + +#if defined(__cplusplus) && (__cplusplus >= 201103L) +#define json_null nullptr +#else +#define json_null 0 +#endif + +#if defined(__clang__) +#pragma clang diagnostic push + +/* we do one big allocation via malloc, then cast aligned slices of this for. */ +/* our structures - we don't have a way to tell the compiler we know what we. */ +/* are doing, so disable the warning instead! */ +#pragma clang diagnostic ignored "-Wcast-align" + +/* We use C style casts everywhere. */ +#pragma clang diagnostic ignored "-Wold-style-cast" + +/* We need long long for strtoull. */ +#pragma clang diagnostic ignored "-Wc++11-long-long" + +/* Who cares if nullptr doesn't work with C++98, we don't use it there! */ +#pragma clang diagnostic ignored "-Wc++98-compat" +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" + +#if __has_warning("-Wunsafe-buffer-usage") +#pragma clang diagnostic ignored "-Wunsafe-buffer-usage" +#endif + +#elif defined(_MSC_VER) +#pragma warning(push) + +/* disable 'function selected for inline expansion' warning. */ +#pragma warning(disable : 4711) + +/* disable '#pragma warning: there is no warning number' warning. */ +#pragma warning(disable : 4619) + +/* disable 'warning number not a valid compiler warning' warning. */ +#pragma warning(disable : 4616) + +/* disable 'Compiler will insert Spectre mitigation for memory load if + * /Qspectre. */ +/* switch specified' warning. */ +#pragma warning(disable : 5045) +#endif + +struct json_parse_state_s { + const char *src; + size_t size; + size_t offset; + size_t flags_bitset; + char *data; + char *dom; + size_t dom_size; + size_t data_size; + size_t line_no; /* line counter for error reporting. */ + size_t line_offset; /* (offset-line_offset) is the character number (in + bytes). */ + size_t error; +}; + +json_weak int json_hexadecimal_digit(const char c); +int json_hexadecimal_digit(const char c) { + if ('0' <= c && c <= '9') { + return c - '0'; + } + if ('a' <= c && c <= 'f') { + return c - 'a' + 10; + } + if ('A' <= c && c <= 'F') { + return c - 'A' + 10; + } + return -1; +} + +json_weak int json_hexadecimal_value(const char *c, const unsigned long size, + unsigned long *result); +int json_hexadecimal_value(const char *c, const unsigned long size, + unsigned long *result) { + const char *p; + int digit; + + if (size > sizeof(unsigned long) * 2) { + return 0; + } + + *result = 0; + for (p = c; (unsigned long)(p - c) < size; ++p) { + *result <<= 4; + digit = json_hexadecimal_digit(*p); + if (digit < 0 || digit > 15) { + return 0; + } + *result |= (unsigned char)digit; + } + return 1; +} + +json_weak int json_skip_whitespace(struct json_parse_state_s *state); +int json_skip_whitespace(struct json_parse_state_s *state) { + size_t offset = state->offset; + const size_t size = state->size; + const char *const src = state->src; + + if (offset >= state->size) { + return 0; + } + + /* the only valid whitespace according to ECMA-404 is ' ', '\n', '\r' and + * '\t'. */ + switch (src[offset]) { + default: + return 0; + case ' ': + case '\r': + case '\t': + case '\n': + break; + } + + do { + switch (src[offset]) { + default: + /* Update offset. */ + state->offset = offset; + return 1; + case ' ': + case '\r': + case '\t': + break; + case '\n': + state->line_no++; + state->line_offset = offset; + break; + } + + offset++; + } while (offset < size); + + /* Update offset. */ + state->offset = offset; + return 1; +} + +json_weak int json_skip_c_style_comments(struct json_parse_state_s *state); +int json_skip_c_style_comments(struct json_parse_state_s *state) { + /* to have a C-style comment we need at least 2 characters of space */ + if ((state->offset + 2) > state->size) { + return 0; + } + + /* do we have a comment? */ + if ('/' == state->src[state->offset]) { + if ('/' == state->src[state->offset + 1]) { + /* we had a comment of the form // */ + + /* skip first '/' */ + state->offset++; + + /* skip second '/' */ + state->offset++; + + while (state->offset < state->size) { + switch (state->src[state->offset]) { + default: + /* skip the character in the comment */ + state->offset++; + break; + case '\n': + /* if we have a newline, our comment has ended! Skip the newline */ + state->offset++; + + /* we entered a newline, so move our line info forward */ + state->line_no++; + state->line_offset = state->offset; + return 1; + } + } + + /* we reached the end of the JSON file! */ + return 1; + } else if ('*' == state->src[state->offset + 1]) { + /* we had a comment in the C-style long form */ + + /* skip '/' */ + state->offset++; + + /* skip '*' */ + state->offset++; + + while (state->offset + 1 < state->size) { + if (('*' == state->src[state->offset]) && + ('/' == state->src[state->offset + 1])) { + /* we reached the end of our comment! */ + state->offset += 2; + return 1; + } else if ('\n' == state->src[state->offset]) { + /* we entered a newline, so move our line info forward */ + state->line_no++; + state->line_offset = state->offset; + } + + /* skip character within comment */ + state->offset++; + } + + /* comment wasn't ended correctly which is a failure */ + return 1; + } + } + + /* we didn't have any comment, which is ok too! */ + return 0; +} + +json_weak int json_skip_all_skippables(struct json_parse_state_s *state); +int json_skip_all_skippables(struct json_parse_state_s *state) { + /* skip all whitespace and other skippables until there are none left. note + * that the previous version suffered from read past errors should. the + * stream end on json_skip_c_style_comments eg. '{"a" ' with comments flag. + */ + + int did_consume = 0; + const size_t size = state->size; + + if (json_parse_flags_allow_c_style_comments & state->flags_bitset) { + do { + if (state->offset == size) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + + did_consume = json_skip_whitespace(state); + + /* This should really be checked on access, not in front of every call. + */ + if (state->offset >= size) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + + did_consume |= json_skip_c_style_comments(state); + } while (0 != did_consume); + } else { + do { + if (state->offset == size) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + + did_consume = json_skip_whitespace(state); + } while (0 != did_consume); + } + + if (state->offset == size) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + + return 0; +} + +json_weak int json_get_value_size(struct json_parse_state_s *state, + int is_global_object); + +json_weak int json_get_string_size(struct json_parse_state_s *state, + size_t is_key); +int json_get_string_size(struct json_parse_state_s *state, size_t is_key) { + size_t offset = state->offset; + const size_t size = state->size; + size_t data_size = 0; + const char *const src = state->src; + const int is_single_quote = '\'' == src[offset]; + const char quote_to_use = is_single_quote ? '\'' : '"'; + const size_t flags_bitset = state->flags_bitset; + unsigned long codepoint; + unsigned long high_surrogate = 0; + + if ((json_parse_flags_allow_location_information & flags_bitset) != 0 && + is_key != 0) { + state->dom_size += sizeof(struct json_string_ex_s); + } else { + state->dom_size += sizeof(struct json_string_s); + } + + if ('"' != src[offset]) { + /* if we are allowed single quoted strings check for that too. */ + if (!((json_parse_flags_allow_single_quoted_strings & flags_bitset) && + is_single_quote)) { + state->error = json_parse_error_expected_opening_quote; + state->offset = offset; + return 1; + } + } + + /* skip leading '"' or '\''. */ + offset++; + + while ((offset < size) && (quote_to_use != src[offset])) { + /* add space for the character. */ + data_size++; + + switch (src[offset]) { + default: + break; + case '\0': + case '\t': + state->error = json_parse_error_invalid_string; + state->offset = offset; + return 1; + } + + if ('\\' == src[offset]) { + /* skip reverse solidus character. */ + offset++; + + if (offset == size) { + state->error = json_parse_error_premature_end_of_buffer; + state->offset = offset; + return 1; + } + + switch (src[offset]) { + default: + state->error = json_parse_error_invalid_string_escape_sequence; + state->offset = offset; + return 1; + case '"': + case '\\': + case '/': + case 'b': + case 'f': + case 'n': + case 'r': + case 't': + /* all valid characters! */ + offset++; + break; + case 'u': + if (!(offset + 5 < size)) { + /* invalid escaped unicode sequence! */ + state->error = json_parse_error_invalid_string_escape_sequence; + state->offset = offset; + return 1; + } + + codepoint = 0; + if (!json_hexadecimal_value(&src[offset + 1], 4, &codepoint)) { + /* escaped unicode sequences must contain 4 hexadecimal digits! */ + state->error = json_parse_error_invalid_string_escape_sequence; + state->offset = offset; + return 1; + } + + /* Valid sequence! + * see: https://en.wikipedia.org/wiki/UTF-8#Invalid_code_points. + * 1 7 U + 0000 U + 007F 0xxxxxxx. + * 2 11 U + 0080 U + 07FF 110xxxxx + * 10xxxxxx. + * 3 16 U + 0800 U + FFFF 1110xxxx + * 10xxxxxx 10xxxxxx. + * 4 21 U + 10000 U + 10FFFF 11110xxx + * 10xxxxxx 10xxxxxx 10xxxxxx. + * Note: the high and low surrogate halves used by UTF-16 (U+D800 + * through U+DFFF) and code points not encodable by UTF-16 (those after + * U+10FFFF) are not legal Unicode values, and their UTF-8 encoding must + * be treated as an invalid byte sequence. */ + + if (high_surrogate != 0) { + /* we previously read the high half of the \uxxxx\uxxxx pair, so now + * we expect the low half. */ + if (codepoint >= 0xdc00 && + codepoint <= 0xdfff) { /* low surrogate range. */ + data_size += 3; + high_surrogate = 0; + } else { + state->error = json_parse_error_invalid_string_escape_sequence; + state->offset = offset; + return 1; + } + } else if (codepoint <= 0x7f) { + data_size += 0; + } else if (codepoint <= 0x7ff) { + data_size += 1; + } else if (codepoint >= 0xd800 && + codepoint <= 0xdbff) { /* high surrogate range. */ + /* The codepoint is the first half of a "utf-16 surrogate pair". so we + * need the other half for it to be valid: \uHHHH\uLLLL. */ + if (offset + 11 > size || '\\' != src[offset + 5] || + 'u' != src[offset + 6]) { + state->error = json_parse_error_invalid_string_escape_sequence; + state->offset = offset; + return 1; + } + high_surrogate = codepoint; + } else if (codepoint >= 0xd800 && + codepoint <= 0xdfff) { /* low surrogate range. */ + /* we did not read the other half before. */ + state->error = json_parse_error_invalid_string_escape_sequence; + state->offset = offset; + return 1; + } else { + data_size += 2; + } + /* escaped codepoints after 0xffff are supported in json through utf-16 + * surrogate pairs: \uD83D\uDD25 for U+1F525. */ + + offset += 5; + break; + } + } else if (('\r' == src[offset]) || ('\n' == src[offset])) { + if (!(json_parse_flags_allow_multi_line_strings & flags_bitset)) { + /* invalid escaped unicode sequence! */ + state->error = json_parse_error_invalid_string_escape_sequence; + state->offset = offset; + return 1; + } + + offset++; + } else { + /* skip character (valid part of sequence). */ + offset++; + } + } + + /* If the offset is equal to the size, we had a non-terminated string! */ + if (offset == size) { + state->error = json_parse_error_premature_end_of_buffer; + state->offset = offset - 1; + return 1; + } + + /* skip trailing '"' or '\''. */ + offset++; + + /* add enough space to store the string. */ + state->data_size += data_size; + + /* one more byte for null terminator ending the string! */ + state->data_size++; + + /* update offset. */ + state->offset = offset; + + return 0; +} + +json_weak int is_valid_unquoted_key_char(const char c); +int is_valid_unquoted_key_char(const char c) { + return (('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || + ('A' <= c && c <= 'Z') || ('_' == c)); +} + +json_weak int json_get_key_size(struct json_parse_state_s *state); +int json_get_key_size(struct json_parse_state_s *state) { + const size_t flags_bitset = state->flags_bitset; + + if (json_parse_flags_allow_unquoted_keys & flags_bitset) { + size_t offset = state->offset; + const size_t size = state->size; + const char *const src = state->src; + size_t data_size = state->data_size; + + /* if we are allowing unquoted keys, first grok for a quote... */ + if ('"' == src[offset]) { + /* ... if we got a comma, just parse the key as a string as normal. */ + return json_get_string_size(state, 1); + } else if ((json_parse_flags_allow_single_quoted_strings & flags_bitset) && + ('\'' == src[offset])) { + /* ... if we got a comma, just parse the key as a string as normal. */ + return json_get_string_size(state, 1); + } else { + while ((offset < size) && is_valid_unquoted_key_char(src[offset])) { + offset++; + data_size++; + } + + /* one more byte for null terminator ending the string! */ + data_size++; + + if (json_parse_flags_allow_location_information & flags_bitset) { + state->dom_size += sizeof(struct json_string_ex_s); + } else { + state->dom_size += sizeof(struct json_string_s); + } + + /* update offset. */ + state->offset = offset; + + /* update data_size. */ + state->data_size = data_size; + + return 0; + } + } else { + /* we are only allowed to have quoted keys, so just parse a string! */ + return json_get_string_size(state, 1); + } +} + +json_weak int json_get_object_size(struct json_parse_state_s *state, + int is_global_object); +int json_get_object_size(struct json_parse_state_s *state, + int is_global_object) { + const size_t flags_bitset = state->flags_bitset; + const char *const src = state->src; + const size_t size = state->size; + size_t elements = 0; + int allow_comma = 0; + int found_closing_brace = 0; + + if (is_global_object) { + /* if we found an opening '{' of an object, we actually have a normal JSON + * object at the root of the DOM... */ + if (!json_skip_all_skippables(state) && '{' == state->src[state->offset]) { + /* . and we don't actually have a global object after all! */ + is_global_object = 0; + } + } + + if (!is_global_object) { + if ('{' != src[state->offset]) { + state->error = json_parse_error_unknown; + return 1; + } + + /* skip leading '{'. */ + state->offset++; + } + + state->dom_size += sizeof(struct json_object_s); + + if ((state->offset == size) && !is_global_object) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + + do { + if (!is_global_object) { + if (json_skip_all_skippables(state)) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + + if ('}' == src[state->offset]) { + /* skip trailing '}'. */ + state->offset++; + + found_closing_brace = 1; + + /* finished the object! */ + break; + } + } else { + /* we don't require brackets, so that means the object ends when the input + * stream ends! */ + if (json_skip_all_skippables(state)) { + break; + } + } + + /* if we parsed at least one element previously, grok for a comma. */ + if (allow_comma) { + if (',' == src[state->offset]) { + /* skip comma. */ + state->offset++; + allow_comma = 0; + } else if (json_parse_flags_allow_no_commas & flags_bitset) { + /* we don't require a comma, and we didn't find one, which is ok! */ + allow_comma = 0; + } else { + /* otherwise we are required to have a comma, and we found none. */ + state->error = json_parse_error_expected_comma_or_closing_bracket; + return 1; + } + + if (json_parse_flags_allow_trailing_comma & flags_bitset) { + continue; + } else { + if (json_skip_all_skippables(state)) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + } + } + + if (json_get_key_size(state)) { + /* key parsing failed! */ + state->error = json_parse_error_invalid_string; + return 1; + } + + if (json_skip_all_skippables(state)) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + + if (json_parse_flags_allow_equals_in_object & flags_bitset) { + const char current = src[state->offset]; + if ((':' != current) && ('=' != current)) { + state->error = json_parse_error_expected_colon; + return 1; + } + } else { + if (':' != src[state->offset]) { + state->error = json_parse_error_expected_colon; + return 1; + } + } + + /* skip colon. */ + state->offset++; + + if (json_skip_all_skippables(state)) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + + if (json_get_value_size(state, /* is_global_object = */ 0)) { + /* value parsing failed! */ + return 1; + } + + /* successfully parsed a name/value pair! */ + elements++; + allow_comma = 1; + } while (state->offset < size); + + if ((state->offset == size) && !is_global_object && !found_closing_brace) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + + state->dom_size += sizeof(struct json_object_element_s) * elements; + + return 0; +} + +json_weak int json_get_array_size(struct json_parse_state_s *state); +int json_get_array_size(struct json_parse_state_s *state) { + const size_t flags_bitset = state->flags_bitset; + size_t elements = 0; + int allow_comma = 0; + const char *const src = state->src; + const size_t size = state->size; + + if ('[' != src[state->offset]) { + /* expected array to begin with leading '['. */ + state->error = json_parse_error_unknown; + return 1; + } + + /* skip leading '['. */ + state->offset++; + + state->dom_size += sizeof(struct json_array_s); + + while (state->offset < size) { + if (json_skip_all_skippables(state)) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + + if (']' == src[state->offset]) { + /* skip trailing ']'. */ + state->offset++; + + state->dom_size += sizeof(struct json_array_element_s) * elements; + + /* finished the object! */ + return 0; + } + + /* if we parsed at least once element previously, grok for a comma. */ + if (allow_comma) { + if (',' == src[state->offset]) { + /* skip comma. */ + state->offset++; + allow_comma = 0; + } else if (!(json_parse_flags_allow_no_commas & flags_bitset)) { + state->error = json_parse_error_expected_comma_or_closing_bracket; + return 1; + } + + if (json_parse_flags_allow_trailing_comma & flags_bitset) { + allow_comma = 0; + continue; + } else { + if (json_skip_all_skippables(state)) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + } + } + + if (json_get_value_size(state, /* is_global_object = */ 0)) { + /* value parsing failed! */ + return 1; + } + + /* successfully parsed an array element! */ + elements++; + allow_comma = 1; + } + + /* we consumed the entire input before finding the closing ']' of the array! + */ + state->error = json_parse_error_premature_end_of_buffer; + return 1; +} + +json_weak int json_get_number_size(struct json_parse_state_s *state); +int json_get_number_size(struct json_parse_state_s *state) { + const size_t flags_bitset = state->flags_bitset; + size_t offset = state->offset; + const size_t size = state->size; + int had_leading_digits = 0; + const char *const src = state->src; + + state->dom_size += sizeof(struct json_number_s); + + if ((json_parse_flags_allow_hexadecimal_numbers & flags_bitset) && + (offset + 1 < size) && ('0' == src[offset]) && + (('x' == src[offset + 1]) || ('X' == src[offset + 1]))) { + /* skip the leading 0x that identifies a hexadecimal number. */ + offset += 2; + + /* consume hexadecimal digits. */ + while ((offset < size) && (('0' <= src[offset] && src[offset] <= '9') || + ('a' <= src[offset] && src[offset] <= 'f') || + ('A' <= src[offset] && src[offset] <= 'F'))) { + offset++; + } + } else { + int found_sign = 0; + int inf_or_nan = 0; + + if ((offset < size) && + (('-' == src[offset]) || + ((json_parse_flags_allow_leading_plus_sign & flags_bitset) && + ('+' == src[offset])))) { + /* skip valid leading '-' or '+'. */ + offset++; + + found_sign = 1; + } + + if (json_parse_flags_allow_inf_and_nan & flags_bitset) { + const char inf[9] = "Infinity"; + const size_t inf_strlen = sizeof(inf) - 1; + const char nan[4] = "NaN"; + const size_t nan_strlen = sizeof(nan) - 1; + + if (offset + inf_strlen < size) { + int found = 1; + size_t i; + for (i = 0; i < inf_strlen; i++) { + if (inf[i] != src[offset + i]) { + found = 0; + break; + } + } + + if (found) { + /* We found our special 'Infinity' keyword! */ + offset += inf_strlen; + + inf_or_nan = 1; + } + } + + if (offset + nan_strlen < size) { + int found = 1; + size_t i; + for (i = 0; i < nan_strlen; i++) { + if (nan[i] != src[offset + i]) { + found = 0; + break; + } + } + + if (found) { + /* We found our special 'NaN' keyword! */ + offset += nan_strlen; + + inf_or_nan = 1; + } + } + + if (inf_or_nan) { + if (offset < size) { + switch (src[offset]) { + default: + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'e': + case 'E': + /* cannot follow an inf or nan with digits! */ + state->error = json_parse_error_invalid_number_format; + state->offset = offset; + return 1; + } + } + } + } + + if (found_sign && !inf_or_nan && (offset < size) && + !('0' <= src[offset] && src[offset] <= '9')) { + /* check if we are allowing leading '.'. */ + if (!(json_parse_flags_allow_leading_or_trailing_decimal_point & + flags_bitset) || + ('.' != src[offset])) { + /* a leading '-' must be immediately followed by any digit! */ + state->error = json_parse_error_invalid_number_format; + state->offset = offset; + return 1; + } + } + + if ((offset < size) && ('0' == src[offset])) { + /* skip valid '0'. */ + offset++; + + /* we need to record whether we had any leading digits for checks later. + */ + had_leading_digits = 1; + + if ((offset < size) && ('0' <= src[offset] && src[offset] <= '9')) { + /* a leading '0' must not be immediately followed by any digit! */ + state->error = json_parse_error_invalid_number_format; + state->offset = offset; + return 1; + } + } + + /* the main digits of our number next. */ + while ((offset < size) && ('0' <= src[offset] && src[offset] <= '9')) { + offset++; + + /* we need to record whether we had any leading digits for checks later. + */ + had_leading_digits = 1; + } + + if ((offset < size) && ('.' == src[offset])) { + offset++; + + if ((offset >= size) || !('0' <= src[offset] && src[offset] <= '9')) { + if (!(json_parse_flags_allow_leading_or_trailing_decimal_point & + flags_bitset) || + !had_leading_digits) { + /* a decimal point must be followed by at least one digit. */ + state->error = json_parse_error_invalid_number_format; + state->offset = offset; + return 1; + } + } + + /* a decimal point can be followed by more digits of course! */ + while ((offset < size) && ('0' <= src[offset] && src[offset] <= '9')) { + offset++; + } + } + + if ((offset < size) && ('e' == src[offset] || 'E' == src[offset])) { + /* our number has an exponent! Skip 'e' or 'E'. */ + offset++; + + if ((offset < size) && ('-' == src[offset] || '+' == src[offset])) { + /* skip optional '-' or '+'. */ + offset++; + } + + if ((offset < size) && !('0' <= src[offset] && src[offset] <= '9')) { + /* an exponent must have at least one digit! */ + state->error = json_parse_error_invalid_number_format; + state->offset = offset; + return 1; + } + + /* consume exponent digits. */ + do { + offset++; + } while ((offset < size) && ('0' <= src[offset] && src[offset] <= '9')); + } + } + + if (offset < size) { + switch (src[offset]) { + case ' ': + case '\t': + case '\r': + case '\n': + case '}': + case ',': + case ']': + /* all of the above are ok. */ + break; + case '=': + if (json_parse_flags_allow_equals_in_object & flags_bitset) { + break; + } + + state->error = json_parse_error_invalid_number_format; + state->offset = offset; + return 1; + default: + state->error = json_parse_error_invalid_number_format; + state->offset = offset; + return 1; + } + } + + state->data_size += offset - state->offset; + + /* one more byte for null terminator ending the number string! */ + state->data_size++; + + /* update offset. */ + state->offset = offset; + + return 0; +} + +json_weak int json_get_value_size(struct json_parse_state_s *state, + int is_global_object); +int json_get_value_size(struct json_parse_state_s *state, + int is_global_object) { + const size_t flags_bitset = state->flags_bitset; + const char *const src = state->src; + size_t offset; + const size_t size = state->size; + + if (json_parse_flags_allow_location_information & flags_bitset) { + state->dom_size += sizeof(struct json_value_ex_s); + } else { + state->dom_size += sizeof(struct json_value_s); + } + + if (is_global_object) { + return json_get_object_size(state, /* is_global_object = */ 1); + } else { + if (json_skip_all_skippables(state)) { + state->error = json_parse_error_premature_end_of_buffer; + return 1; + } + + /* can cache offset now. */ + offset = state->offset; + + switch (src[offset]) { + case '"': + return json_get_string_size(state, 0); + case '\'': + if (json_parse_flags_allow_single_quoted_strings & flags_bitset) { + return json_get_string_size(state, 0); + } else { + /* invalid value! */ + state->error = json_parse_error_invalid_value; + return 1; + } + case '{': + return json_get_object_size(state, /* is_global_object = */ 0); + case '[': + return json_get_array_size(state); + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return json_get_number_size(state); + case '+': + if (json_parse_flags_allow_leading_plus_sign & flags_bitset) { + return json_get_number_size(state); + } else { + /* invalid value! */ + state->error = json_parse_error_invalid_number_format; + return 1; + } + case '.': + if (json_parse_flags_allow_leading_or_trailing_decimal_point & + flags_bitset) { + return json_get_number_size(state); + } else { + /* invalid value! */ + state->error = json_parse_error_invalid_number_format; + return 1; + } + default: + if ((offset + 4) <= size && 't' == src[offset + 0] && + 'r' == src[offset + 1] && 'u' == src[offset + 2] && + 'e' == src[offset + 3]) { + state->offset += 4; + return 0; + } else if ((offset + 5) <= size && 'f' == src[offset + 0] && + 'a' == src[offset + 1] && 'l' == src[offset + 2] && + 's' == src[offset + 3] && 'e' == src[offset + 4]) { + state->offset += 5; + return 0; + } else if ((offset + 4) <= size && 'n' == state->src[offset + 0] && + 'u' == state->src[offset + 1] && + 'l' == state->src[offset + 2] && + 'l' == state->src[offset + 3]) { + state->offset += 4; + return 0; + } else if ((json_parse_flags_allow_inf_and_nan & flags_bitset) && + (offset + 3) <= size && 'N' == src[offset + 0] && + 'a' == src[offset + 1] && 'N' == src[offset + 2]) { + return json_get_number_size(state); + } else if ((json_parse_flags_allow_inf_and_nan & flags_bitset) && + (offset + 8) <= size && 'I' == src[offset + 0] && + 'n' == src[offset + 1] && 'f' == src[offset + 2] && + 'i' == src[offset + 3] && 'n' == src[offset + 4] && + 'i' == src[offset + 5] && 't' == src[offset + 6] && + 'y' == src[offset + 7]) { + return json_get_number_size(state); + } + + /* invalid value! */ + state->error = json_parse_error_invalid_value; + return 1; + } + } +} + +json_weak void json_parse_value(struct json_parse_state_s *state, + int is_global_object, + struct json_value_s *value); + +json_weak void json_parse_string(struct json_parse_state_s *state, + struct json_string_s *string); +void json_parse_string(struct json_parse_state_s *state, + struct json_string_s *string) { + size_t offset = state->offset; + size_t bytes_written = 0; + const char *const src = state->src; + const char quote_to_use = '\'' == src[offset] ? '\'' : '"'; + char *data = state->data; + unsigned long high_surrogate = 0; + unsigned long codepoint; + + string->string = data; + + /* skip leading '"' or '\''. */ + offset++; + + while (quote_to_use != src[offset]) { + if ('\\' == src[offset]) { + /* skip the reverse solidus. */ + offset++; + + switch (src[offset++]) { + default: + return; /* we cannot ever reach here. */ + case 'u': { + codepoint = 0; + if (!json_hexadecimal_value(&src[offset], 4, &codepoint)) { + return; /* this shouldn't happen as the value was already validated. + */ + } + + offset += 4; + + if (codepoint <= 0x7fu) { + data[bytes_written++] = (char)codepoint; /* 0xxxxxxx. */ + } else if (codepoint <= 0x7ffu) { + data[bytes_written++] = + (char)(0xc0u | (codepoint >> 6)); /* 110xxxxx. */ + data[bytes_written++] = + (char)(0x80u | (codepoint & 0x3fu)); /* 10xxxxxx. */ + } else if (codepoint >= 0xd800 && + codepoint <= 0xdbff) { /* high surrogate. */ + high_surrogate = codepoint; + continue; /* we need the low half to form a complete codepoint. */ + } else if (codepoint >= 0xdc00 && + codepoint <= 0xdfff) { /* low surrogate. */ + /* combine with the previously read half to obtain the complete + * codepoint. */ + const unsigned long surrogate_offset = + 0x10000u - (0xD800u << 10) - 0xDC00u; + codepoint = (high_surrogate << 10) + codepoint + surrogate_offset; + high_surrogate = 0; + data[bytes_written++] = + (char)(0xF0u | (codepoint >> 18)); /* 11110xxx. */ + data[bytes_written++] = + (char)(0x80u | ((codepoint >> 12) & 0x3fu)); /* 10xxxxxx. */ + data[bytes_written++] = + (char)(0x80u | ((codepoint >> 6) & 0x3fu)); /* 10xxxxxx. */ + data[bytes_written++] = + (char)(0x80u | (codepoint & 0x3fu)); /* 10xxxxxx. */ + } else { + /* we assume the value was validated and thus is within the valid + * range. */ + data[bytes_written++] = + (char)(0xe0u | (codepoint >> 12)); /* 1110xxxx. */ + data[bytes_written++] = + (char)(0x80u | ((codepoint >> 6) & 0x3fu)); /* 10xxxxxx. */ + data[bytes_written++] = + (char)(0x80u | (codepoint & 0x3fu)); /* 10xxxxxx. */ + } + } break; + case '"': + data[bytes_written++] = '"'; + break; + case '\\': + data[bytes_written++] = '\\'; + break; + case '/': + data[bytes_written++] = '/'; + break; + case 'b': + data[bytes_written++] = '\b'; + break; + case 'f': + data[bytes_written++] = '\f'; + break; + case 'n': + data[bytes_written++] = '\n'; + break; + case 'r': + data[bytes_written++] = '\r'; + break; + case 't': + data[bytes_written++] = '\t'; + break; + case '\r': + data[bytes_written++] = '\r'; + + /* check if we have a "\r\n" sequence. */ + if ('\n' == src[offset]) { + data[bytes_written++] = '\n'; + offset++; + } + + break; + case '\n': + data[bytes_written++] = '\n'; + break; + } + } else { + /* copy the character. */ + data[bytes_written++] = src[offset++]; + } + } + + /* skip trailing '"' or '\''. */ + offset++; + + /* record the size of the string. */ + string->string_size = bytes_written; + + /* add null terminator to string. */ + data[bytes_written++] = '\0'; + + /* move data along. */ + state->data += bytes_written; + + /* update offset. */ + state->offset = offset; +} + +json_weak void json_parse_key(struct json_parse_state_s *state, + struct json_string_s *string); +void json_parse_key(struct json_parse_state_s *state, + struct json_string_s *string) { + if (json_parse_flags_allow_unquoted_keys & state->flags_bitset) { + const char *const src = state->src; + char *const data = state->data; + size_t offset = state->offset; + + /* if we are allowing unquoted keys, check for quoted anyway... */ + if (('"' == src[offset]) || ('\'' == src[offset])) { + /* ... if we got a quote, just parse the key as a string as normal. */ + json_parse_string(state, string); + } else { + size_t size = 0; + + string->string = state->data; + + while (is_valid_unquoted_key_char(src[offset])) { + data[size++] = src[offset++]; + } + + /* add null terminator to string. */ + data[size] = '\0'; + + /* record the size of the string. */ + string->string_size = size++; + + /* move data along. */ + state->data += size; + + /* update offset. */ + state->offset = offset; + } + } else { + /* we are only allowed to have quoted keys, so just parse a string! */ + json_parse_string(state, string); + } +} + +json_weak void json_parse_object(struct json_parse_state_s *state, + int is_global_object, + struct json_object_s *object); +void json_parse_object(struct json_parse_state_s *state, int is_global_object, + struct json_object_s *object) { + const size_t flags_bitset = state->flags_bitset; + const size_t size = state->size; + const char *const src = state->src; + size_t elements = 0; + int allow_comma = 0; + struct json_object_element_s *previous = json_null; + + if (is_global_object) { + /* if we skipped some whitespace, and then found an opening '{' of an. */ + /* object, we actually have a normal JSON object at the root of the DOM... + */ + if ('{' == src[state->offset]) { + /* . and we don't actually have a global object after all! */ + is_global_object = 0; + } + } + + if (!is_global_object) { + /* skip leading '{'. */ + state->offset++; + } + + (void)json_skip_all_skippables(state); + + /* reset elements. */ + elements = 0; + + while (state->offset < size) { + struct json_object_element_s *element = json_null; + struct json_string_s *string = json_null; + struct json_value_s *value = json_null; + + if (!is_global_object) { + (void)json_skip_all_skippables(state); + + if ('}' == src[state->offset]) { + /* skip trailing '}'. */ + state->offset++; + + /* finished the object! */ + break; + } + } else { + if (json_skip_all_skippables(state)) { + /* global object ends when the file ends! */ + break; + } + } + + /* if we parsed at least one element previously, grok for a comma. */ + if (allow_comma) { + if (',' == src[state->offset]) { + /* skip comma. */ + state->offset++; + allow_comma = 0; + continue; + } + } + + element = (struct json_object_element_s *)state->dom; + + state->dom += sizeof(struct json_object_element_s); + + if (json_null == previous) { + /* this is our first element, so record it in our object. */ + object->start = element; + } else { + previous->next = element; + } + + previous = element; + + if (json_parse_flags_allow_location_information & flags_bitset) { + struct json_string_ex_s *string_ex = + (struct json_string_ex_s *)state->dom; + state->dom += sizeof(struct json_string_ex_s); + + string_ex->offset = state->offset; + string_ex->line_no = state->line_no; + string_ex->row_no = state->offset - state->line_offset; + + string = &(string_ex->string); + } else { + string = (struct json_string_s *)state->dom; + state->dom += sizeof(struct json_string_s); + } + + element->name = string; + + (void)json_parse_key(state, string); + + (void)json_skip_all_skippables(state); + + /* skip colon or equals. */ + state->offset++; + + (void)json_skip_all_skippables(state); + + if (json_parse_flags_allow_location_information & flags_bitset) { + struct json_value_ex_s *value_ex = (struct json_value_ex_s *)state->dom; + state->dom += sizeof(struct json_value_ex_s); + + value_ex->offset = state->offset; + value_ex->line_no = state->line_no; + value_ex->row_no = state->offset - state->line_offset; + + value = &(value_ex->value); + } else { + value = (struct json_value_s *)state->dom; + state->dom += sizeof(struct json_value_s); + } + + element->value = value; + + json_parse_value(state, /* is_global_object = */ 0, value); + + /* successfully parsed a name/value pair! */ + elements++; + allow_comma = 1; + } + + /* if we had at least one element, end the linked list. */ + if (previous) { + previous->next = json_null; + } + + if (0 == elements) { + object->start = json_null; + } + + object->length = elements; +} + +json_weak void json_parse_array(struct json_parse_state_s *state, + struct json_array_s *array); +void json_parse_array(struct json_parse_state_s *state, + struct json_array_s *array) { + const char *const src = state->src; + const size_t size = state->size; + size_t elements = 0; + int allow_comma = 0; + struct json_array_element_s *previous = json_null; + + /* skip leading '['. */ + state->offset++; + + (void)json_skip_all_skippables(state); + + /* reset elements. */ + elements = 0; + + do { + struct json_array_element_s *element = json_null; + struct json_value_s *value = json_null; + + (void)json_skip_all_skippables(state); + + if (']' == src[state->offset]) { + /* skip trailing ']'. */ + state->offset++; + + /* finished the array! */ + break; + } + + /* if we parsed at least one element previously, grok for a comma. */ + if (allow_comma) { + if (',' == src[state->offset]) { + /* skip comma. */ + state->offset++; + allow_comma = 0; + continue; + } + } + + element = (struct json_array_element_s *)state->dom; + + state->dom += sizeof(struct json_array_element_s); + + if (json_null == previous) { + /* this is our first element, so record it in our array. */ + array->start = element; + } else { + previous->next = element; + } + + previous = element; + + if (json_parse_flags_allow_location_information & state->flags_bitset) { + struct json_value_ex_s *value_ex = (struct json_value_ex_s *)state->dom; + state->dom += sizeof(struct json_value_ex_s); + + value_ex->offset = state->offset; + value_ex->line_no = state->line_no; + value_ex->row_no = state->offset - state->line_offset; + + value = &(value_ex->value); + } else { + value = (struct json_value_s *)state->dom; + state->dom += sizeof(struct json_value_s); + } + + element->value = value; + + json_parse_value(state, /* is_global_object = */ 0, value); + + /* successfully parsed an array element! */ + elements++; + allow_comma = 1; + } while (state->offset < size); + + /* end the linked list. */ + if (previous) { + previous->next = json_null; + } + + if (0 == elements) { + array->start = json_null; + } + + array->length = elements; +} + +json_weak void json_parse_number(struct json_parse_state_s *state, + struct json_number_s *number); +void json_parse_number(struct json_parse_state_s *state, + struct json_number_s *number) { + const size_t flags_bitset = state->flags_bitset; + size_t offset = state->offset; + const size_t size = state->size; + size_t bytes_written = 0; + const char *const src = state->src; + char *data = state->data; + + number->number = data; + + if (json_parse_flags_allow_hexadecimal_numbers & flags_bitset) { + if (('0' == src[offset]) && + (('x' == src[offset + 1]) || ('X' == src[offset + 1]))) { + /* consume hexadecimal digits. */ + while ((offset < size) && + (('0' <= src[offset] && src[offset] <= '9') || + ('a' <= src[offset] && src[offset] <= 'f') || + ('A' <= src[offset] && src[offset] <= 'F') || + ('x' == src[offset]) || ('X' == src[offset]))) { + data[bytes_written++] = src[offset++]; + } + } + } + + while (offset < size) { + int end = 0; + + switch (src[offset]) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case 'e': + case 'E': + case '+': + case '-': + data[bytes_written++] = src[offset++]; + break; + default: + end = 1; + break; + } + + if (0 != end) { + break; + } + } + + if (json_parse_flags_allow_inf_and_nan & flags_bitset) { + const size_t inf_strlen = 8; /* = strlen("Infinity");. */ + const size_t nan_strlen = 3; /* = strlen("NaN");. */ + + if (offset + inf_strlen < size) { + if ('I' == src[offset]) { + size_t i; + /* We found our special 'Infinity' keyword! */ + for (i = 0; i < inf_strlen; i++) { + data[bytes_written++] = src[offset++]; + } + } + } + + if (offset + nan_strlen < size) { + if ('N' == src[offset]) { + size_t i; + /* We found our special 'NaN' keyword! */ + for (i = 0; i < nan_strlen; i++) { + data[bytes_written++] = src[offset++]; + } + } + } + } + + /* record the size of the number. */ + number->number_size = bytes_written; + /* add null terminator to number string. */ + data[bytes_written++] = '\0'; + /* move data along. */ + state->data += bytes_written; + /* update offset. */ + state->offset = offset; +} + +json_weak void json_parse_value(struct json_parse_state_s *state, + int is_global_object, + struct json_value_s *value); +void json_parse_value(struct json_parse_state_s *state, int is_global_object, + struct json_value_s *value) { + const size_t flags_bitset = state->flags_bitset; + const char *const src = state->src; + const size_t size = state->size; + size_t offset; + + (void)json_skip_all_skippables(state); + + /* cache offset now. */ + offset = state->offset; + + if (is_global_object) { + value->type = json_type_object; + value->payload = state->dom; + state->dom += sizeof(struct json_object_s); + json_parse_object(state, /* is_global_object = */ 1, + (struct json_object_s *)value->payload); + } else { + switch (src[offset]) { + case '"': + case '\'': + value->type = json_type_string; + value->payload = state->dom; + state->dom += sizeof(struct json_string_s); + json_parse_string(state, (struct json_string_s *)value->payload); + break; + case '{': + value->type = json_type_object; + value->payload = state->dom; + state->dom += sizeof(struct json_object_s); + json_parse_object(state, /* is_global_object = */ 0, + (struct json_object_s *)value->payload); + break; + case '[': + value->type = json_type_array; + value->payload = state->dom; + state->dom += sizeof(struct json_array_s); + json_parse_array(state, (struct json_array_s *)value->payload); + break; + case '-': + case '+': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + value->type = json_type_number; + value->payload = state->dom; + state->dom += sizeof(struct json_number_s); + json_parse_number(state, (struct json_number_s *)value->payload); + break; + default: + if ((offset + 4) <= size && 't' == src[offset + 0] && + 'r' == src[offset + 1] && 'u' == src[offset + 2] && + 'e' == src[offset + 3]) { + value->type = json_type_true; + value->payload = json_null; + state->offset += 4; + } else if ((offset + 5) <= size && 'f' == src[offset + 0] && + 'a' == src[offset + 1] && 'l' == src[offset + 2] && + 's' == src[offset + 3] && 'e' == src[offset + 4]) { + value->type = json_type_false; + value->payload = json_null; + state->offset += 5; + } else if ((offset + 4) <= size && 'n' == src[offset + 0] && + 'u' == src[offset + 1] && 'l' == src[offset + 2] && + 'l' == src[offset + 3]) { + value->type = json_type_null; + value->payload = json_null; + state->offset += 4; + } else if ((json_parse_flags_allow_inf_and_nan & flags_bitset) && + (offset + 3) <= size && 'N' == src[offset + 0] && + 'a' == src[offset + 1] && 'N' == src[offset + 2]) { + value->type = json_type_number; + value->payload = state->dom; + state->dom += sizeof(struct json_number_s); + json_parse_number(state, (struct json_number_s *)value->payload); + } else if ((json_parse_flags_allow_inf_and_nan & flags_bitset) && + (offset + 8) <= size && 'I' == src[offset + 0] && + 'n' == src[offset + 1] && 'f' == src[offset + 2] && + 'i' == src[offset + 3] && 'n' == src[offset + 4] && + 'i' == src[offset + 5] && 't' == src[offset + 6] && + 'y' == src[offset + 7]) { + value->type = json_type_number; + value->payload = state->dom; + state->dom += sizeof(struct json_number_s); + json_parse_number(state, (struct json_number_s *)value->payload); + } + break; + } + } +} + +struct json_value_s * +json_parse_ex(const void *src, size_t src_size, size_t flags_bitset, + void *(*alloc_func_ptr)(void *user_data, size_t size), + void *user_data, struct json_parse_result_s *result) { + struct json_parse_state_s state; + void *allocation; + struct json_value_s *value; + size_t total_size; + int input_error; + + if (result) { + result->error = json_parse_error_none; + result->error_offset = 0; + result->error_line_no = 0; + result->error_row_no = 0; + } + + if (json_null == src) { + /* invalid src pointer was null! */ + return json_null; + } + + state.src = (const char *)src; + state.size = src_size; + state.offset = 0; + state.line_no = 1; + state.line_offset = 0; + state.error = json_parse_error_none; + state.dom_size = 0; + state.data_size = 0; + state.flags_bitset = flags_bitset; + + input_error = json_get_value_size( + &state, (int)(json_parse_flags_allow_global_object & state.flags_bitset)); + + if (0 == input_error) { + json_skip_all_skippables(&state); + + if (state.offset != state.size) { + /* our parsing didn't have an error, but there are characters remaining in + * the input that weren't part of the JSON! */ + + state.error = json_parse_error_unexpected_trailing_characters; + input_error = 1; + } + } + + if (input_error) { + /* parsing value's size failed (most likely an invalid JSON DOM!). */ + if (result) { + result->error = state.error; + result->error_offset = state.offset; + result->error_line_no = state.line_no; + result->error_row_no = state.offset - state.line_offset; + } + return json_null; + } + + /* our total allocation is the combination of the dom and data sizes (we. */ + /* first encode the structure of the JSON, and then the data referenced by. */ + /* the JSON values). */ + total_size = state.dom_size + state.data_size; + + if (json_null == alloc_func_ptr) { + allocation = malloc(total_size); + } else { + allocation = alloc_func_ptr(user_data, total_size); + } + + if (json_null == allocation) { + /* malloc failed! */ + if (result) { + result->error = json_parse_error_allocator_failed; + result->error_offset = 0; + result->error_line_no = 0; + result->error_row_no = 0; + } + + return json_null; + } + + /* reset offset so we can reuse it. */ + state.offset = 0; + + /* reset the line information so we can reuse it. */ + state.line_no = 1; + state.line_offset = 0; + + state.dom = (char *)allocation; + state.data = state.dom + state.dom_size; + + if (json_parse_flags_allow_location_information & state.flags_bitset) { + struct json_value_ex_s *value_ex = (struct json_value_ex_s *)state.dom; + state.dom += sizeof(struct json_value_ex_s); + + value_ex->offset = state.offset; + value_ex->line_no = state.line_no; + value_ex->row_no = state.offset - state.line_offset; + + value = &(value_ex->value); + } else { + value = (struct json_value_s *)state.dom; + state.dom += sizeof(struct json_value_s); + } + + json_parse_value( + &state, (int)(json_parse_flags_allow_global_object & state.flags_bitset), + value); + + return (struct json_value_s *)allocation; +} + +struct json_value_s *json_parse(const void *src, size_t src_size) { + return json_parse_ex(src, src_size, json_parse_flags_default, json_null, + json_null, json_null); +} + +struct json_extract_result_s { + size_t dom_size; + size_t data_size; +}; + +struct json_value_s *json_extract_value(const struct json_value_s *value) { + return json_extract_value_ex(value, json_null, json_null); +} + +json_weak struct json_extract_result_s +json_extract_get_number_size(const struct json_number_s *const number); +json_weak struct json_extract_result_s +json_extract_get_string_size(const struct json_string_s *const string); +json_weak struct json_extract_result_s +json_extract_get_object_size(const struct json_object_s *const object); +json_weak struct json_extract_result_s +json_extract_get_array_size(const struct json_array_s *const array); +json_weak struct json_extract_result_s +json_extract_get_value_size(const struct json_value_s *const value); + +struct json_extract_result_s +json_extract_get_number_size(const struct json_number_s *const number) { + struct json_extract_result_s result; + result.dom_size = sizeof(struct json_number_s); + result.data_size = number->number_size; + return result; +} + +struct json_extract_result_s +json_extract_get_string_size(const struct json_string_s *const string) { + struct json_extract_result_s result; + result.dom_size = sizeof(struct json_string_s); + result.data_size = string->string_size + 1; + return result; +} + +struct json_extract_result_s +json_extract_get_object_size(const struct json_object_s *const object) { + struct json_extract_result_s result; + size_t i; + const struct json_object_element_s *element = object->start; + + result.dom_size = sizeof(struct json_object_s) + + (sizeof(struct json_object_element_s) * object->length); + result.data_size = 0; + + for (i = 0; i < object->length; i++) { + const struct json_extract_result_s string_result = + json_extract_get_string_size(element->name); + const struct json_extract_result_s value_result = + json_extract_get_value_size(element->value); + + result.dom_size += string_result.dom_size; + result.data_size += string_result.data_size; + + result.dom_size += value_result.dom_size; + result.data_size += value_result.data_size; + + element = element->next; + } + + return result; +} + +struct json_extract_result_s +json_extract_get_array_size(const struct json_array_s *const array) { + struct json_extract_result_s result; + size_t i; + const struct json_array_element_s *element = array->start; + + result.dom_size = sizeof(struct json_array_s) + + (sizeof(struct json_array_element_s) * array->length); + result.data_size = 0; + + for (i = 0; i < array->length; i++) { + const struct json_extract_result_s value_result = + json_extract_get_value_size(element->value); + + result.dom_size += value_result.dom_size; + result.data_size += value_result.data_size; + + element = element->next; + } + + return result; +} + +struct json_extract_result_s +json_extract_get_value_size(const struct json_value_s *const value) { + struct json_extract_result_s result = {0, 0}; + + switch (value->type) { + default: + break; + case json_type_object: + result = json_extract_get_object_size( + (const struct json_object_s *)value->payload); + break; + case json_type_array: + result = json_extract_get_array_size( + (const struct json_array_s *)value->payload); + break; + case json_type_number: + result = json_extract_get_number_size( + (const struct json_number_s *)value->payload); + break; + case json_type_string: + result = json_extract_get_string_size( + (const struct json_string_s *)value->payload); + break; + } + + result.dom_size += sizeof(struct json_value_s); + + return result; +} + +struct json_extract_state_s { + char *dom; + char *data; +}; + +json_weak void json_extract_copy_value(struct json_extract_state_s *const state, + const struct json_value_s *const value); +void json_extract_copy_value(struct json_extract_state_s *const state, + const struct json_value_s *const value) { + struct json_string_s *string; + struct json_number_s *number; + struct json_object_s *object; + struct json_array_s *array; + struct json_value_s *new_value; + + memcpy(state->dom, value, sizeof(struct json_value_s)); + new_value = (struct json_value_s *)state->dom; + state->dom += sizeof(struct json_value_s); + new_value->payload = state->dom; + + if (json_type_string == value->type) { + memcpy(state->dom, value->payload, sizeof(struct json_string_s)); + string = (struct json_string_s *)state->dom; + state->dom += sizeof(struct json_string_s); + + memcpy(state->data, string->string, string->string_size + 1); + string->string = state->data; + state->data += string->string_size + 1; + } else if (json_type_number == value->type) { + memcpy(state->dom, value->payload, sizeof(struct json_number_s)); + number = (struct json_number_s *)state->dom; + state->dom += sizeof(struct json_number_s); + + memcpy(state->data, number->number, number->number_size); + number->number = state->data; + state->data += number->number_size; + } else if (json_type_object == value->type) { + struct json_object_element_s *element; + size_t i; + + memcpy(state->dom, value->payload, sizeof(struct json_object_s)); + object = (struct json_object_s *)state->dom; + state->dom += sizeof(struct json_object_s); + + element = object->start; + object->start = (struct json_object_element_s *)state->dom; + + for (i = 0; i < object->length; i++) { + struct json_value_s *previous_value; + struct json_object_element_s *previous_element; + + memcpy(state->dom, element, sizeof(struct json_object_element_s)); + element = (struct json_object_element_s *)state->dom; + state->dom += sizeof(struct json_object_element_s); + + string = element->name; + memcpy(state->dom, string, sizeof(struct json_string_s)); + string = (struct json_string_s *)state->dom; + state->dom += sizeof(struct json_string_s); + element->name = string; + + memcpy(state->data, string->string, string->string_size + 1); + string->string = state->data; + state->data += string->string_size + 1; + + previous_value = element->value; + element->value = (struct json_value_s *)state->dom; + json_extract_copy_value(state, previous_value); + + previous_element = element; + element = element->next; + + if (element) { + previous_element->next = (struct json_object_element_s *)state->dom; + } + } + } else if (json_type_array == value->type) { + struct json_array_element_s *element; + size_t i; + + memcpy(state->dom, value->payload, sizeof(struct json_array_s)); + array = (struct json_array_s *)state->dom; + state->dom += sizeof(struct json_array_s); + + element = array->start; + array->start = (struct json_array_element_s *)state->dom; + + for (i = 0; i < array->length; i++) { + struct json_value_s *previous_value; + struct json_array_element_s *previous_element; + + memcpy(state->dom, element, sizeof(struct json_array_element_s)); + element = (struct json_array_element_s *)state->dom; + state->dom += sizeof(struct json_array_element_s); + + previous_value = element->value; + element->value = (struct json_value_s *)state->dom; + json_extract_copy_value(state, previous_value); + + previous_element = element; + element = element->next; + + if (element) { + previous_element->next = (struct json_array_element_s *)state->dom; + } + } + } +} + +struct json_value_s *json_extract_value_ex(const struct json_value_s *value, + void *(*alloc_func_ptr)(void *, + size_t), + void *user_data) { + void *allocation; + struct json_extract_result_s result; + struct json_extract_state_s state; + size_t total_size; + + if (json_null == value) { + /* invalid value was null! */ + return json_null; + } + + result = json_extract_get_value_size(value); + total_size = result.dom_size + result.data_size; + + if (json_null == alloc_func_ptr) { + allocation = malloc(total_size); + } else { + allocation = alloc_func_ptr(user_data, total_size); + } + + state.dom = (char *)allocation; + state.data = state.dom + result.dom_size; + + json_extract_copy_value(&state, value); + + return (struct json_value_s *)allocation; +} + +struct json_string_s *json_value_as_string(struct json_value_s *const value) { + if (value->type != json_type_string) { + return json_null; + } + + return (struct json_string_s *)value->payload; +} + +struct json_number_s *json_value_as_number(struct json_value_s *const value) { + if (value->type != json_type_number) { + return json_null; + } + + return (struct json_number_s *)value->payload; +} + +struct json_object_s *json_value_as_object(struct json_value_s *const value) { + if (value->type != json_type_object) { + return json_null; + } + + return (struct json_object_s *)value->payload; +} + +struct json_array_s *json_value_as_array(struct json_value_s *const value) { + if (value->type != json_type_array) { + return json_null; + } + + return (struct json_array_s *)value->payload; +} + +int json_value_is_true(const struct json_value_s *const value) { + return value->type == json_type_true; +} + +int json_value_is_false(const struct json_value_s *const value) { + return value->type == json_type_false; +} + +int json_value_is_null(const struct json_value_s *const value) { + return value->type == json_type_null; +} + +json_weak int +json_write_minified_get_value_size(const struct json_value_s *value, + size_t *size); + +json_weak int json_write_get_number_size(const struct json_number_s *number, + size_t *size); +int json_write_get_number_size(const struct json_number_s *number, + size_t *size) { + json_uintmax_t parsed_number; + size_t i; + + if (number->number_size >= 2) { + switch (number->number[1]) { + default: + break; + case 'x': + case 'X': + /* the number is a json_parse_flags_allow_hexadecimal_numbers hexadecimal + * so we have to do extra work to convert it to a non-hexadecimal for JSON + * output. */ + parsed_number = json_strtoumax(number->number, json_null, 0); + + i = 0; + + while (0 != parsed_number) { + parsed_number /= 10; + i++; + } + + *size += i; + return 0; + } + } + + /* check to see if the number has leading/trailing decimal point. */ + i = 0; + + /* skip any leading '+' or '-'. */ + if ((i < number->number_size) && + (('+' == number->number[i]) || ('-' == number->number[i]))) { + i++; + } + + /* check if we have infinity. */ + if ((i < number->number_size) && ('I' == number->number[i])) { + const char *inf = "Infinity"; + size_t k; + + for (k = i; k < number->number_size; k++) { + const char c = *inf++; + + /* Check if we found the Infinity string! */ + if ('\0' == c) { + break; + } else if (c != number->number[k]) { + break; + } + } + + if ('\0' == *inf) { + /* Inf becomes 1.7976931348623158e308 because JSON can't support it. */ + *size += 22; + + /* if we had a leading '-' we need to record it in the JSON output. */ + if ('-' == number->number[0]) { + *size += 1; + } + } + + return 0; + } + + /* check if we have nan. */ + if ((i < number->number_size) && ('N' == number->number[i])) { + const char *nan = "NaN"; + size_t k; + + for (k = i; k < number->number_size; k++) { + const char c = *nan++; + + /* Check if we found the NaN string! */ + if ('\0' == c) { + break; + } else if (c != number->number[k]) { + break; + } + } + + if ('\0' == *nan) { + /* NaN becomes 1 because JSON can't support it. */ + *size += 1; + + return 0; + } + } + + /* if we had a leading decimal point. */ + if ((i < number->number_size) && ('.' == number->number[i])) { + /* 1 + because we had a leading decimal point. */ + *size += 1; + goto cleanup; + } + + for (; i < number->number_size; i++) { + const char c = number->number[i]; + if (!('0' <= c && c <= '9')) { + break; + } + } + + /* if we had a trailing decimal point. */ + if ((i + 1 == number->number_size) && ('.' == number->number[i])) { + /* 1 + because we had a trailing decimal point. */ + *size += 1; + goto cleanup; + } + +cleanup: + *size += number->number_size; /* the actual string of the number. */ + + /* if we had a leading '+' we don't record it in the JSON output. */ + if ('+' == number->number[0]) { + *size -= 1; + } + + return 0; +} + +json_weak int json_write_get_string_size(const struct json_string_s *string, + size_t *size); +int json_write_get_string_size(const struct json_string_s *string, + size_t *size) { + size_t i; + for (i = 0; i < string->string_size; i++) { + switch (string->string[i]) { + case '"': + case '\\': + case '\b': + case '\f': + case '\n': + case '\r': + case '\t': + *size += 2; + break; + default: + *size += 1; + break; + } + } + + *size += 2; /* need to encode the surrounding '"' characters. */ + + return 0; +} + +json_weak int +json_write_minified_get_array_size(const struct json_array_s *array, + size_t *size); +int json_write_minified_get_array_size(const struct json_array_s *array, + size_t *size) { + struct json_array_element_s *element; + + *size += 2; /* '[' and ']'. */ + + if (1 < array->length) { + *size += array->length - 1; /* ','s seperate each element. */ + } + + for (element = array->start; json_null != element; element = element->next) { + if (json_write_minified_get_value_size(element->value, size)) { + /* value was malformed! */ + return 1; + } + } + + return 0; +} + +json_weak int +json_write_minified_get_object_size(const struct json_object_s *object, + size_t *size); +int json_write_minified_get_object_size(const struct json_object_s *object, + size_t *size) { + struct json_object_element_s *element; + + *size += 2; /* '{' and '}'. */ + + *size += object->length; /* ':'s seperate each name/value pair. */ + + if (1 < object->length) { + *size += object->length - 1; /* ','s seperate each element. */ + } + + for (element = object->start; json_null != element; element = element->next) { + if (json_write_get_string_size(element->name, size)) { + /* string was malformed! */ + return 1; + } + + if (json_write_minified_get_value_size(element->value, size)) { + /* value was malformed! */ + return 1; + } + } + + return 0; +} + +json_weak int +json_write_minified_get_value_size(const struct json_value_s *value, + size_t *size); +int json_write_minified_get_value_size(const struct json_value_s *value, + size_t *size) { + switch (value->type) { + default: + /* unknown value type found! */ + return 1; + case json_type_number: + return json_write_get_number_size((struct json_number_s *)value->payload, + size); + case json_type_string: + return json_write_get_string_size((struct json_string_s *)value->payload, + size); + case json_type_array: + return json_write_minified_get_array_size( + (struct json_array_s *)value->payload, size); + case json_type_object: + return json_write_minified_get_object_size( + (struct json_object_s *)value->payload, size); + case json_type_true: + *size += 4; /* the string "true". */ + return 0; + case json_type_false: + *size += 5; /* the string "false". */ + return 0; + case json_type_null: + *size += 4; /* the string "null". */ + return 0; + } +} + +json_weak char *json_write_minified_value(const struct json_value_s *value, + char *data); + +json_weak char *json_write_number(const struct json_number_s *number, + char *data); +char *json_write_number(const struct json_number_s *number, char *data) { + json_uintmax_t parsed_number, backup; + size_t i; + + if (number->number_size >= 2) { + switch (number->number[1]) { + default: + break; + case 'x': + case 'X': + /* The number is a json_parse_flags_allow_hexadecimal_numbers hexadecimal + * so we have to do extra work to convert it to a non-hexadecimal for JSON + * output. */ + parsed_number = json_strtoumax(number->number, json_null, 0); + + /* We need a copy of parsed number twice, so take a backup of it. */ + backup = parsed_number; + + i = 0; + + while (0 != parsed_number) { + parsed_number /= 10; + i++; + } + + /* Restore parsed_number to its original value stored in the backup. */ + parsed_number = backup; + + /* Now use backup to take a copy of i, or the length of the string. */ + backup = i; + + do { + *(data + i - 1) = '0' + (char)(parsed_number % 10); + parsed_number /= 10; + i--; + } while (0 != parsed_number); + + data += backup; + + return data; + } + } + + /* check to see if the number has leading/trailing decimal point. */ + i = 0; + + /* skip any leading '-'. */ + if ((i < number->number_size) && + (('+' == number->number[i]) || ('-' == number->number[i]))) { + i++; + } + + /* check if we have infinity. */ + if ((i < number->number_size) && ('I' == number->number[i])) { + const char *inf = "Infinity"; + size_t k; + + for (k = i; k < number->number_size; k++) { + const char c = *inf++; + + /* Check if we found the Infinity string! */ + if ('\0' == c) { + break; + } else if (c != number->number[k]) { + break; + } + } + + if ('\0' == *inf++) { + const char *dbl_max; + + /* if we had a leading '-' we need to record it in the JSON output. */ + if ('-' == number->number[0]) { + *data++ = '-'; + } + + /* Inf becomes 1.7976931348623158e308 because JSON can't support it. */ + for (dbl_max = "1.7976931348623158e308"; '\0' != *dbl_max; dbl_max++) { + *data++ = *dbl_max; + } + + return data; + } + } + + /* check if we have nan. */ + if ((i < number->number_size) && ('N' == number->number[i])) { + const char *nan = "NaN"; + size_t k; + + for (k = i; k < number->number_size; k++) { + const char c = *nan++; + + /* Check if we found the NaN string! */ + if ('\0' == c) { + break; + } else if (c != number->number[k]) { + break; + } + } + + if ('\0' == *nan++) { + /* NaN becomes 0 because JSON can't support it. */ + *data++ = '0'; + return data; + } + } + + /* if we had a leading decimal point. */ + if ((i < number->number_size) && ('.' == number->number[i])) { + i = 0; + + /* skip any leading '+'. */ + if ('+' == number->number[i]) { + i++; + } + + /* output the leading '-' if we had one. */ + if ('-' == number->number[i]) { + *data++ = '-'; + i++; + } + + /* insert a '0' to fix the leading decimal point for JSON output. */ + *data++ = '0'; + + /* and output the rest of the number as normal. */ + for (; i < number->number_size; i++) { + *data++ = number->number[i]; + } + + return data; + } + + for (; i < number->number_size; i++) { + const char c = number->number[i]; + if (!('0' <= c && c <= '9')) { + break; + } + } + + /* if we had a trailing decimal point. */ + if ((i + 1 == number->number_size) && ('.' == number->number[i])) { + i = 0; + + /* skip any leading '+'. */ + if ('+' == number->number[i]) { + i++; + } + + /* output the leading '-' if we had one. */ + if ('-' == number->number[i]) { + *data++ = '-'; + i++; + } + + /* and output the rest of the number as normal. */ + for (; i < number->number_size; i++) { + *data++ = number->number[i]; + } + + /* insert a '0' to fix the trailing decimal point for JSON output. */ + *data++ = '0'; + + return data; + } + + i = 0; + + /* skip any leading '+'. */ + if ('+' == number->number[i]) { + i++; + } + + for (; i < number->number_size; i++) { + *data++ = number->number[i]; + } + + return data; +} + +json_weak char *json_write_string(const struct json_string_s *string, + char *data); +char *json_write_string(const struct json_string_s *string, char *data) { + size_t i; + + *data++ = '"'; /* open the string. */ + + for (i = 0; i < string->string_size; i++) { + switch (string->string[i]) { + case '"': + *data++ = '\\'; /* escape the control character. */ + *data++ = '"'; + break; + case '\\': + *data++ = '\\'; /* escape the control character. */ + *data++ = '\\'; + break; + case '\b': + *data++ = '\\'; /* escape the control character. */ + *data++ = 'b'; + break; + case '\f': + *data++ = '\\'; /* escape the control character. */ + *data++ = 'f'; + break; + case '\n': + *data++ = '\\'; /* escape the control character. */ + *data++ = 'n'; + break; + case '\r': + *data++ = '\\'; /* escape the control character. */ + *data++ = 'r'; + break; + case '\t': + *data++ = '\\'; /* escape the control character. */ + *data++ = 't'; + break; + default: + *data++ = string->string[i]; + break; + } + } + + *data++ = '"'; /* close the string. */ + + return data; +} + +json_weak char *json_write_minified_array(const struct json_array_s *array, + char *data); +char *json_write_minified_array(const struct json_array_s *array, char *data) { + struct json_array_element_s *element = json_null; + + *data++ = '['; /* open the array. */ + + for (element = array->start; json_null != element; element = element->next) { + if (element != array->start) { + *data++ = ','; /* ','s seperate each element. */ + } + + data = json_write_minified_value(element->value, data); + + if (json_null == data) { + /* value was malformed! */ + return json_null; + } + } + + *data++ = ']'; /* close the array. */ + + return data; +} + +json_weak char *json_write_minified_object(const struct json_object_s *object, + char *data); +char *json_write_minified_object(const struct json_object_s *object, + char *data) { + struct json_object_element_s *element = json_null; + + *data++ = '{'; /* open the object. */ + + for (element = object->start; json_null != element; element = element->next) { + if (element != object->start) { + *data++ = ','; /* ','s seperate each element. */ + } + + data = json_write_string(element->name, data); + + if (json_null == data) { + /* string was malformed! */ + return json_null; + } + + *data++ = ':'; /* ':'s seperate each name/value pair. */ + + data = json_write_minified_value(element->value, data); + + if (json_null == data) { + /* value was malformed! */ + return json_null; + } + } + + *data++ = '}'; /* close the object. */ + + return data; +} + +json_weak char *json_write_minified_value(const struct json_value_s *value, + char *data); +char *json_write_minified_value(const struct json_value_s *value, char *data) { + switch (value->type) { + default: + /* unknown value type found! */ + return json_null; + case json_type_number: + return json_write_number((struct json_number_s *)value->payload, data); + case json_type_string: + return json_write_string((struct json_string_s *)value->payload, data); + case json_type_array: + return json_write_minified_array((struct json_array_s *)value->payload, + data); + case json_type_object: + return json_write_minified_object((struct json_object_s *)value->payload, + data); + case json_type_true: + data[0] = 't'; + data[1] = 'r'; + data[2] = 'u'; + data[3] = 'e'; + return data + 4; + case json_type_false: + data[0] = 'f'; + data[1] = 'a'; + data[2] = 'l'; + data[3] = 's'; + data[4] = 'e'; + return data + 5; + case json_type_null: + data[0] = 'n'; + data[1] = 'u'; + data[2] = 'l'; + data[3] = 'l'; + return data + 4; + } +} + +void *json_write_minified(const struct json_value_s *value, size_t *out_size) { + size_t size = 0; + char *data = json_null; + char *data_end = json_null; + + if (json_null == value) { + return json_null; + } + + if (json_write_minified_get_value_size(value, &size)) { + /* value was malformed! */ + return json_null; + } + + size += 1; /* for the '\0' null terminating character. */ + + data = (char *)malloc(size); + + if (json_null == data) { + /* malloc failed! */ + return json_null; + } + + data_end = json_write_minified_value(value, data); + + if (json_null == data_end) { + /* bad chi occurred! */ + free(data); + return json_null; + } + + /* null terminated the string. */ + *data_end = '\0'; + + if (json_null != out_size) { + *out_size = size; + } + + return data; +} + +json_weak int json_write_pretty_get_value_size(const struct json_value_s *value, + size_t depth, size_t indent_size, + size_t newline_size, + size_t *size); + +json_weak int json_write_pretty_get_array_size(const struct json_array_s *array, + size_t depth, size_t indent_size, + size_t newline_size, + size_t *size); +int json_write_pretty_get_array_size(const struct json_array_s *array, + size_t depth, size_t indent_size, + size_t newline_size, size_t *size) { + struct json_array_element_s *element; + + *size += 1; /* '['. */ + + if (0 < array->length) { + /* if we have any elements we need to add a newline after our '['. */ + *size += newline_size; + + *size += array->length - 1; /* ','s seperate each element. */ + + for (element = array->start; json_null != element; + element = element->next) { + /* each element gets an indent. */ + *size += (depth + 1) * indent_size; + + if (json_write_pretty_get_value_size(element->value, depth + 1, + indent_size, newline_size, size)) { + /* value was malformed! */ + return 1; + } + + /* each element gets a newline too. */ + *size += newline_size; + } + + /* since we wrote out some elements, need to add a newline and indentation. + */ + /* to the trailing ']'. */ + *size += depth * indent_size; + } + + *size += 1; /* ']'. */ + + return 0; +} + +json_weak int +json_write_pretty_get_object_size(const struct json_object_s *object, + size_t depth, size_t indent_size, + size_t newline_size, size_t *size); +int json_write_pretty_get_object_size(const struct json_object_s *object, + size_t depth, size_t indent_size, + size_t newline_size, size_t *size) { + struct json_object_element_s *element; + + *size += 1; /* '{'. */ + + if (0 < object->length) { + *size += newline_size; /* need a newline next. */ + + *size += object->length - 1; /* ','s seperate each element. */ + + for (element = object->start; json_null != element; + element = element->next) { + /* each element gets an indent and newline. */ + *size += (depth + 1) * indent_size; + *size += newline_size; + + if (json_write_get_string_size(element->name, size)) { + /* string was malformed! */ + return 1; + } + + *size += 3; /* seperate each name/value pair with " : ". */ + + if (json_write_pretty_get_value_size(element->value, depth + 1, + indent_size, newline_size, size)) { + /* value was malformed! */ + return 1; + } + } + + *size += depth * indent_size; + } + + *size += 1; /* '}'. */ + + return 0; +} + +json_weak int json_write_pretty_get_value_size(const struct json_value_s *value, + size_t depth, size_t indent_size, + size_t newline_size, + size_t *size); +int json_write_pretty_get_value_size(const struct json_value_s *value, + size_t depth, size_t indent_size, + size_t newline_size, size_t *size) { + switch (value->type) { + default: + /* unknown value type found! */ + return 1; + case json_type_number: + return json_write_get_number_size((struct json_number_s *)value->payload, + size); + case json_type_string: + return json_write_get_string_size((struct json_string_s *)value->payload, + size); + case json_type_array: + return json_write_pretty_get_array_size( + (struct json_array_s *)value->payload, depth, indent_size, newline_size, + size); + case json_type_object: + return json_write_pretty_get_object_size( + (struct json_object_s *)value->payload, depth, indent_size, + newline_size, size); + case json_type_true: + *size += 4; /* the string "true". */ + return 0; + case json_type_false: + *size += 5; /* the string "false". */ + return 0; + case json_type_null: + *size += 4; /* the string "null". */ + return 0; + } +} + +json_weak char *json_write_pretty_value(const struct json_value_s *value, + size_t depth, const char *indent, + const char *newline, char *data); + +json_weak char *json_write_pretty_array(const struct json_array_s *array, + size_t depth, const char *indent, + const char *newline, char *data); +char *json_write_pretty_array(const struct json_array_s *array, size_t depth, + const char *indent, const char *newline, + char *data) { + size_t k, m; + struct json_array_element_s *element; + + *data++ = '['; /* open the array. */ + + if (0 < array->length) { + for (k = 0; '\0' != newline[k]; k++) { + *data++ = newline[k]; + } + + for (element = array->start; json_null != element; + element = element->next) { + if (element != array->start) { + *data++ = ','; /* ','s seperate each element. */ + + for (k = 0; '\0' != newline[k]; k++) { + *data++ = newline[k]; + } + } + + for (k = 0; k < depth + 1; k++) { + for (m = 0; '\0' != indent[m]; m++) { + *data++ = indent[m]; + } + } + + data = json_write_pretty_value(element->value, depth + 1, indent, newline, + data); + + if (json_null == data) { + /* value was malformed! */ + return json_null; + } + } + + for (k = 0; '\0' != newline[k]; k++) { + *data++ = newline[k]; + } + + for (k = 0; k < depth; k++) { + for (m = 0; '\0' != indent[m]; m++) { + *data++ = indent[m]; + } + } + } + + *data++ = ']'; /* close the array. */ + + return data; +} + +json_weak char *json_write_pretty_object(const struct json_object_s *object, + size_t depth, const char *indent, + const char *newline, char *data); +char *json_write_pretty_object(const struct json_object_s *object, size_t depth, + const char *indent, const char *newline, + char *data) { + size_t k, m; + struct json_object_element_s *element; + + *data++ = '{'; /* open the object. */ + + if (0 < object->length) { + for (k = 0; '\0' != newline[k]; k++) { + *data++ = newline[k]; + } + + for (element = object->start; json_null != element; + element = element->next) { + if (element != object->start) { + *data++ = ','; /* ','s seperate each element. */ + + for (k = 0; '\0' != newline[k]; k++) { + *data++ = newline[k]; + } + } + + for (k = 0; k < depth + 1; k++) { + for (m = 0; '\0' != indent[m]; m++) { + *data++ = indent[m]; + } + } + + data = json_write_string(element->name, data); + + if (json_null == data) { + /* string was malformed! */ + return json_null; + } + + /* " : "s seperate each name/value pair. */ + *data++ = ' '; + *data++ = ':'; + *data++ = ' '; + + data = json_write_pretty_value(element->value, depth + 1, indent, newline, + data); + + if (json_null == data) { + /* value was malformed! */ + return json_null; + } + } + + for (k = 0; '\0' != newline[k]; k++) { + *data++ = newline[k]; + } + + for (k = 0; k < depth; k++) { + for (m = 0; '\0' != indent[m]; m++) { + *data++ = indent[m]; + } + } + } + + *data++ = '}'; /* close the object. */ + + return data; +} + +json_weak char *json_write_pretty_value(const struct json_value_s *value, + size_t depth, const char *indent, + const char *newline, char *data); +char *json_write_pretty_value(const struct json_value_s *value, size_t depth, + const char *indent, const char *newline, + char *data) { + switch (value->type) { + default: + /* unknown value type found! */ + return json_null; + case json_type_number: + return json_write_number((struct json_number_s *)value->payload, data); + case json_type_string: + return json_write_string((struct json_string_s *)value->payload, data); + case json_type_array: + return json_write_pretty_array((struct json_array_s *)value->payload, depth, + indent, newline, data); + case json_type_object: + return json_write_pretty_object((struct json_object_s *)value->payload, + depth, indent, newline, data); + case json_type_true: + data[0] = 't'; + data[1] = 'r'; + data[2] = 'u'; + data[3] = 'e'; + return data + 4; + case json_type_false: + data[0] = 'f'; + data[1] = 'a'; + data[2] = 'l'; + data[3] = 's'; + data[4] = 'e'; + return data + 5; + case json_type_null: + data[0] = 'n'; + data[1] = 'u'; + data[2] = 'l'; + data[3] = 'l'; + return data + 4; + } +} + +void *json_write_pretty(const struct json_value_s *value, const char *indent, + const char *newline, size_t *out_size) { + size_t size = 0; + size_t indent_size = 0; + size_t newline_size = 0; + char *data = json_null; + char *data_end = json_null; + + if (json_null == value) { + return json_null; + } + + if (json_null == indent) { + indent = " "; /* default to two spaces. */ + } + + if (json_null == newline) { + newline = "\n"; /* default to linux newlines. */ + } + + while ('\0' != indent[indent_size]) { + ++indent_size; /* skip non-null terminating characters. */ + } + + while ('\0' != newline[newline_size]) { + ++newline_size; /* skip non-null terminating characters. */ + } + + if (json_write_pretty_get_value_size(value, 0, indent_size, newline_size, + &size)) { + /* value was malformed! */ + return json_null; + } + + size += 1; /* for the '\0' null terminating character. */ + + data = (char *)malloc(size); + + if (json_null == data) { + /* malloc failed! */ + return json_null; + } + + data_end = json_write_pretty_value(value, 0, indent, newline, data); + + if (json_null == data_end) { + /* bad chi occurred! */ + free(data); + return json_null; + } + + /* null terminated the string. */ + *data_end = '\0'; + + if (json_null != out_size) { + *out_size = size; + } + + return data; +} + +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(_MSC_VER) +#pragma warning(pop) +#endif + +#endif /* SHEREDOM_JSON_H_INCLUDED. */ From 774d670b09c2bf29e22eacfc1a9bc0fb9dc5ea30 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 2 Sep 2024 12:06:28 +0300 Subject: [PATCH 17/97] [win-linux] updmanager: move update parameter processing to the service --- win-linux/extras/update-daemon/common.pri | 2 +- .../update-daemon/src/classes/csvcmanager.cpp | 181 +++++++++++++++++- .../update-daemon/src/classes/csvcmanager.h | 13 +- .../src/platform_linux/utils.cpp | 49 ++--- .../update-daemon/src/platform_linux/utils.h | 2 +- .../update-daemon/src/platform_win/utils.cpp | 136 ++++++------- .../update-daemon/src/platform_win/utils.h | 2 +- win-linux/src/cupdatemanager.cpp | 108 +++-------- win-linux/src/cupdatemanager.h | 2 +- 9 files changed, 309 insertions(+), 186 deletions(-) diff --git a/win-linux/extras/update-daemon/common.pri b/win-linux/extras/update-daemon/common.pri index 76e685120..317b7117f 100644 --- a/win-linux/extras/update-daemon/common.pri +++ b/win-linux/extras/update-daemon/common.pri @@ -134,7 +134,7 @@ core_linux { CONFIG += link_pkgconfig PKGCONFIG += gtk+-3.0 - LIBS += -lSDL2 -lcurl -luuid -larchive -lpthread + LIBS += -lSDL2 -lcurl -luuid -larchive -lpthread -lcrypto } OBJECTS_DIR = $$DESTDIR/obj diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 45bbab7fd..f605079cd 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -36,7 +36,9 @@ #include #include #include +#include #include "version.h" +#include "classes/cjson.h" #include "../../src/defines.h" #include "../../src/prop/defines_p.h" #ifdef _WIN32 @@ -135,6 +137,36 @@ auto isSuccessUnpacked(const tstring &successFilePath, const tstring &version)-> return false; } +auto isVersionBHigherThanA(const tstring &a, const tstring &b)->bool { + tstringstream old_ver(a), new_ver(b); + tstring old_part, new_part; + while (std::getline(old_ver, old_part, _T('.')) && std::getline(new_ver, new_part, _T('.'))) { + int old_num = 0, new_num = 0; + try { + old_num = std::stoi(old_part); + } catch (...) {}; + try { + new_num = std::stoi(new_part); + } catch (...) {}; + if (new_num > old_num) + return true; + else + if (new_num < old_num) + return false; + } + return false; +} + +auto replace(tstring &str, const tstring &from, const tstring &to)->void { + if (from.empty()) + return; + size_t start_pos = 0; + while ((start_pos = str.find(from, start_pos)) != tstring::npos) { + str.replace(start_pos, from.length(), to); + start_pos += to.length(); + } +} + #ifdef _WIN32 auto restartService()->void { @@ -192,8 +224,36 @@ auto getCurrentDate()->wstring } #endif +struct CSvcManager::PackageData { + tstring fileName, + fileType, + object, + hash, + version, + packageUrl, + packageArgs; + bool isInstallable = true; + void clear() { + fileName.clear(); + fileType.clear(); + object.clear(); + hash.clear(); + version.clear(); + packageUrl.clear(); + packageArgs.clear(); + isInstallable = true; + } +}; + +struct CSvcManager::SavedPackageData { + tstring fileName; +}; + CSvcManager::CSvcManager(): + m_packageData(new PackageData), + m_savedPackageData(new SavedPackageData), m_downloadMode(Mode::CHECK_UPDATES), + m_packageType(Package::Portable), m_socket(new CSocket(APP_PORT, SVC_PORT)), m_pDownloader(new CDownloader), m_pUnzip(new CUnzip) @@ -208,6 +268,8 @@ CSvcManager::~CSvcManager() { if (m_future_clear.valid()) m_future_clear.wait(); + delete m_packageData, m_packageData = nullptr; + delete m_savedPackageData, m_savedPackageData = nullptr; delete m_pUnzip, m_pUnzip = nullptr; delete m_pDownloader, m_pDownloader = nullptr; delete m_socket, m_socket = nullptr; @@ -244,7 +306,15 @@ void CSvcManager::init() case MSG_CheckUpdates: { __GLOBAL_LOCK //DeleteUrlCacheEntry(params[1].c_str()); + m_packageData->clear(); if (!m_checkUrl.empty()) { + JsonDocument doc(params[1]); + JsonObject root = doc.object(); + m_currVersion = root.value(_T("currVersion")).toTString(); + m_ignVersion = root.value(_T("ignVersion")).toTString(); + m_savedPackageData->fileName = root.value(_T("fileName")).toTString(); + tstring package_str = root.value(_T("package")).toTString(); + m_packageType = package_str == _T("iss") ? ISS : package_str == _T("msi") ? MSI : package_str == _T("portable") ? Portable : Other; m_downloadMode = Mode::CHECK_UPDATES; if (m_pDownloader) m_pDownloader->downloadFile(m_checkUrl, generateTmpFileName(_T(".json"))); @@ -259,9 +329,8 @@ void CSvcManager::init() __GLOBAL_LOCK m_downloadMode = Mode::DOWNLOAD_UPDATES; if (m_pDownloader) { - tstring ext = (params[2] == _T("iss")) ? _T(".exe") : - (params[2] == _T("msi")) ? _T(".msi") : ARCHIVE_EXT; - m_pDownloader->downloadFile(params[1], generateTmpFileName(ext)); + tstring ext = m_packageData->fileType == _T("iss") ? _T(".exe") : m_packageData->fileType == _T("msi") ? _T(".msi") : ARCHIVE_EXT; + m_pDownloader->downloadFile(m_packageData->packageUrl, generateTmpFileName(ext)); } NS_Logger::WriteLog(_T("Received MSG_LoadUpdates, URL: ") + params[1]); break; @@ -280,7 +349,11 @@ void CSvcManager::init() break; } case MSG_UnzipIfNeeded: - unzipIfNeeded(params[1], params[2]); + if (!m_packageData->fileName.empty() && NS_File::getFileHash(m_packageData->fileName) == m_packageData->hash) { + unzipIfNeeded(m_packageData->fileName, m_packageData->version); + } else { + m_socket->sendMessage(MSG_OtherError, _T("SVC_TXT_ERR_MD5")); + } break; case MSG_StartReplacingFiles: @@ -387,11 +460,105 @@ void CSvcManager::onCompleteSlot(const int error, const tstring &filePath) __UNLOCK if (error == 0) { switch (m_downloadMode) { - case Mode::CHECK_UPDATES: - m_socket->sendMessage(MSG_LoadCheckFinished, filePath); + case Mode::CHECK_UPDATES: { + tstring out_json; + list lst; + if (NS_File::readFile(filePath, lst)) { + tstring json = std::accumulate(lst.begin(), lst.end(), tstring()); + JsonDocument doc(json); + JsonObject root = doc.object(); + + tstring version = root.value(_T("version")).toTString(); + tstring curr_version = m_currVersion; + tstring svc_version = root.value(_T("serviceVersion")).toTString(); + tstring curr_svc_version = _T(VER_FILEVERSION_STR); + JsonObject package = root.value(_T("package")).toObject(); +#ifdef _WIN32 +# ifdef _WIN64 + JsonObject win = package.value(_T("win_64")).toObject(); +# else + JsonObject win = package.value(_T("win_32")).toObject(); +# endif +#else + JsonObject win = package.value(_T("linux_64")).toObject(); +#endif + if (isVersionBHigherThanA(curr_version, version) && (version != m_ignVersion)) { + m_packageData->object = _T("app"); + m_packageData->version = version; + m_packageData->fileType = _T("archive"); + JsonObject package_type = win.value(_T("archive")).toObject(); +#ifdef _WIN32 + if (m_packageType != Portable) { + const tstring install_key = m_packageType == MSI ? _T("msi") : _T("iss"); + if (win.contains(install_key)) { + JsonObject install_type = win.value(install_key).toObject(); + if (install_type.contains(_T("maxVersion"))) { + tstring maxVersion = install_type.value(_T("maxVersion")).toTString(); + if (!isVersionBHigherThanA(maxVersion, curr_version)) { + package_type = install_type; + m_packageData->fileType = install_key; + m_packageData->packageArgs = package_type.value(_T("arguments")).toTString(); + } + } + } + } +#endif + m_packageData->packageUrl = package_type.value(_T("url")).toTString(); + tstring hash = package_type.value(_T("md5")).toTString(); + std::transform(hash.begin(), hash.end(), hash.begin(), ::tolower); + m_packageData->hash = hash; + + // parse release notes + // JsonObject release_notes = root.value(_T("releaseNotes")).toObject(); + // const tstring lang = CLangater::getCurrentLangCode() == "ru-RU" ? "ru-RU" : "en-EN"; + // JsonValue changelog = release_notes.value(lang); + + tstring min_version = root.value(_T("minVersion")).toTString(); + if (!min_version.empty() && isVersionBHigherThanA(curr_version, min_version)) + m_packageData->isInstallable = false; + + } else + if (isVersionBHigherThanA(curr_svc_version, svc_version)) { + m_packageData->object = _T("svc"); + m_packageData->version = svc_version; + m_packageData->fileType = _T("archive"); + JsonObject package_type = win.value(_T("serviceArchive")).toObject(); + m_packageData->packageUrl = package_type.value(_T("url")).toTString(); + tstring hash = package_type.value(_T("md5")).toTString(); + std::transform(hash.begin(), hash.end(), hash.begin(), ::tolower); + m_packageData->hash = hash; + + } else { + out_json = _T("{}"); + } + + if (out_json.empty()) { + out_json = _T("{\"object\":\"%1\",\"version\":\"%2\",\"fileType\":\"%3\",\"packageUrl\":\"%4\",\"packageArgs\":\"%5\"," + "\"hash\":\"%6\",\"isInstallable\":%7}"); + replace(out_json, _T("%1"), m_packageData->object); + replace(out_json, _T("%2"), m_packageData->version); + replace(out_json, _T("%3"), m_packageData->fileType); + replace(out_json, _T("%4"), m_packageData->packageUrl); + replace(out_json, _T("%5"), m_packageData->packageArgs); + replace(out_json, _T("%6"), m_packageData->hash); + replace(out_json, _T("%7"), m_packageData->isInstallable ? _T("true") : _T("false")); + if (!m_savedPackageData->fileName.empty() && NS_File::getFileHash(m_savedPackageData->fileName) == m_packageData->hash) + m_packageData->fileName = m_savedPackageData->fileName; + } + + } else { + // read error + } + m_socket->sendMessage(MSG_LoadCheckFinished, out_json); break; + } case Mode::DOWNLOAD_UPDATES: - m_socket->sendMessage(MSG_LoadUpdateFinished, filePath); + if (!filePath.empty() && NS_File::getFileHash(filePath) == m_packageData->hash) { + m_packageData->fileName = filePath; + m_socket->sendMessage(MSG_LoadUpdateFinished, filePath); + } else { + m_socket->sendMessage(MSG_OtherError, _T("SVC_TXT_ERR_MD5")); + } break; default: break; diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.h b/win-linux/extras/update-daemon/src/classes/csvcmanager.h index 2569f2efd..0ab1fbfe0 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.h +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.h @@ -67,11 +67,19 @@ private: void startReplacingFiles(const tstring &packageType, const bool restartAfterUpdate); void startReplacingService(const bool restartAfterUpdate); + struct PackageData; + struct SavedPackageData; + PackageData *m_packageData; + SavedPackageData *m_savedPackageData; + FnVoidVoid m_quit_callback = nullptr; tstring m_checkUrl, + m_currVersion, + m_ignVersion, m_newVersion; bool m_lock = false; - int m_downloadMode; + int m_downloadMode, + m_packageType; future m_future_clear; CSocket *m_socket = nullptr; CDownloader *m_pDownloader = nullptr; @@ -80,6 +88,9 @@ private: enum Mode { CHECK_UPDATES=0, DOWNLOAD_CHANGELOG=1, DOWNLOAD_UPDATES=2 }; + enum Package { + ISS = 0, MSI, Portable, Other + }; }; #endif // CSVCMANAGER_H diff --git a/win-linux/extras/update-daemon/src/platform_linux/utils.cpp b/win-linux/extras/update-daemon/src/platform_linux/utils.cpp index 3b367546a..9b40b118b 100644 --- a/win-linux/extras/update-daemon/src/platform_linux/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_linux/utils.cpp @@ -33,19 +33,20 @@ #include "platform_linux/utils.h" #include "version.h" #include +#include #include #include #include #include #include -//#include +#include #include #include #include "../../src/defines.h" #include "../../src/prop/defines_p.h" #define APP_CONFIG_PATH "/.config/" REG_GROUP_KEY "/" REG_APP_NAME ".conf" -//#define BUFSIZE 1024 +#define BUFSIZE 1024 static void replace(string &str, const string &from, const string &to) @@ -480,31 +481,31 @@ namespace NS_File return (count > 0) ? parentPath(string(path, count)) : ""; } -// string getFileHash(const string &fileName) -// { -// FILE *file = fopen(fileName.c_str(), "rb"); -// if (!file) -// return ""; + string getFileHash(const string &fileName) + { + FILE *file = fopen(fileName.c_str(), "rb"); + if (!file) + return ""; -// int bytes; -// unsigned char data[1024]; -// unsigned char digest[MD5_DIGEST_LENGTH]; -// MD5_CTX mdContext; -// MD5_Init(&mdContext); -// while ((bytes = fread(data, 1, 1024, file)) != 0) -// MD5_Update(&mdContext, data, bytes); + int bytes; + unsigned char data[1024]; + unsigned char digest[MD5_DIGEST_LENGTH]; + MD5_CTX mdContext; + MD5_Init(&mdContext); + while ((bytes = fread(data, 1, 1024, file)) != 0) + MD5_Update(&mdContext, data, bytes); -// MD5_Final(digest, &mdContext); -// fclose(file); + MD5_Final(digest, &mdContext); + fclose(file); -// std::ostringstream oss; -// for (int i = 0; i < MD5_DIGEST_LENGTH; i++) { -// oss.fill('0'); -// oss.width(2); -// oss << std::hex << static_cast(digest[i]); -// } -// return oss.str(); -// } + std::ostringstream oss; + for (int i = 0; i < MD5_DIGEST_LENGTH; i++) { + oss.fill('0'); + oss.width(2); + oss << std::hex << static_cast(digest[i]); + } + return oss.str(); + } // bool verifyEmbeddedSignature(const string &fileName) // { diff --git a/win-linux/extras/update-daemon/src/platform_linux/utils.h b/win-linux/extras/update-daemon/src/platform_linux/utils.h index 66850b029..dbe59b7b4 100644 --- a/win-linux/extras/update-daemon/src/platform_linux/utils.h +++ b/win-linux/extras/update-daemon/src/platform_linux/utils.h @@ -77,7 +77,7 @@ bool removeDirRecursively(const string &dir); string parentPath(const string &path); string tempPath(); string appPath(); -//string getFileHash(const string &fileName); +string getFileHash(const string &fileName); //bool verifyEmbeddedSignature(const string &fileName); } diff --git a/win-linux/extras/update-daemon/src/platform_win/utils.cpp b/win-linux/extras/update-daemon/src/platform_win/utils.cpp index 83e0986d4..30121e7a3 100644 --- a/win-linux/extras/update-daemon/src/platform_win/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/utils.cpp @@ -38,7 +38,7 @@ #include #include #include -//#include +#include #include #include #include @@ -49,7 +49,7 @@ #include "../../src/defines.h" #include "../../src/prop/defines_p.h" -//#define BUFSIZE 1024 +#define BUFSIZE 1024 static DWORD GetActiveSessionId() @@ -567,86 +567,76 @@ namespace NS_File return (res != 0) ? fromNativeSeparators(parentPath(buff)) : L""; } -// string getFileHash(const wstring &fileName) -// { -// HANDLE hFile = NULL; -// hFile = CreateFile(fileName.c_str(), -// GENERIC_READ, -// FILE_SHARE_READ, -// NULL, -// OPEN_EXISTING, -// FILE_FLAG_SEQUENTIAL_SCAN, -// NULL); + wstring getFileHash(const wstring &fileName) + { + HANDLE hFile = CreateFile(fileName.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); + if (hFile == INVALID_HANDLE_VALUE) + return L""; -// if (hFile == INVALID_HANDLE_VALUE) { -// return ""; -// } + // Get handle to the crypto provider + HCRYPTPROV hProv = 0; + if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { + CloseHandle(hFile); + return L""; + } -// // Get handle to the crypto provider -// HCRYPTPROV hProv = 0; -// if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { -// CloseHandle(hFile); -// return ""; -// } + HCRYPTHASH hHash = 0; + if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) { + CloseHandle(hFile); + CryptReleaseContext(hProv, 0); + return L""; + } -// HCRYPTHASH hHash = 0; -// if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) { -// CloseHandle(hFile); -// CryptReleaseContext(hProv, 0); -// return ""; -// } + DWORD cbRead = 0; + BYTE rgbFile[BUFSIZE]; + BOOL bResult = FALSE; + while ((bResult = ReadFile(hFile, rgbFile, BUFSIZE, &cbRead, NULL))) { + if (cbRead == 0) + break; -// DWORD cbRead = 0; -// BYTE rgbFile[BUFSIZE]; -// BOOL bResult = FALSE; -// while ((bResult = ReadFile(hFile, rgbFile, BUFSIZE, &cbRead, NULL))) { -// if (cbRead == 0) -// break; + if (!CryptHashData(hHash, rgbFile, cbRead, 0)) { + CryptReleaseContext(hProv, 0); + CryptDestroyHash(hHash); + CloseHandle(hFile); + return L""; + } + } -// if (!CryptHashData(hHash, rgbFile, cbRead, 0)) { -// CryptReleaseContext(hProv, 0); -// CryptDestroyHash(hHash); -// CloseHandle(hFile); -// return ""; -// } -// } + if (!bResult) { + CryptReleaseContext(hProv, 0); + CryptDestroyHash(hHash); + CloseHandle(hFile); + return L""; + } -// if (!bResult) { -// CryptReleaseContext(hProv, 0); -// CryptDestroyHash(hHash); -// CloseHandle(hFile); -// return ""; -// } + DWORD cbHashSize = 0, dwCount = sizeof(DWORD); + if (!CryptGetHashParam( hHash, HP_HASHSIZE, (BYTE*)&cbHashSize, &dwCount, 0)) { + CryptReleaseContext(hProv, 0); + CryptDestroyHash(hHash); + CloseHandle(hFile); + return L""; + } -// DWORD cbHashSize = 0, -// dwCount = sizeof(DWORD); -// if (!CryptGetHashParam( hHash, HP_HASHSIZE, (BYTE*)&cbHashSize, &dwCount, 0)) { -// CryptReleaseContext(hProv, 0); -// CryptDestroyHash(hHash); -// CloseHandle(hFile); -// return ""; -// } + std::vector buffer(cbHashSize); + if (!CryptGetHashParam(hHash, HP_HASHVAL, reinterpret_cast(&buffer[0]), &cbHashSize, 0)) { + CryptReleaseContext(hProv, 0); + CryptDestroyHash(hHash); + CloseHandle(hFile); + return L""; + } -// std::vector buffer(cbHashSize); -// if (!CryptGetHashParam(hHash, HP_HASHVAL, reinterpret_cast(&buffer[0]), &cbHashSize, 0)) { -// CryptReleaseContext(hProv, 0); -// CryptDestroyHash(hHash); -// CloseHandle(hFile); -// return ""; -// } + std::wostringstream oss; + for (std::vector::const_iterator it = buffer.begin(); it != buffer.end(); ++it) { + oss.fill('0'); + oss.width(2); + oss << std::hex << static_cast(*it); + } -// std::ostringstream oss; -// for (std::vector::const_iterator it = buffer.begin(); it != buffer.end(); ++it) { -// oss.fill('0'); -// oss.width(2); -// oss << std::hex << static_cast(*it); -// } - -// CryptReleaseContext(hProv, 0); -// CryptDestroyHash(hHash); -// CloseHandle(hFile); -// return oss.str(); -// } + CryptReleaseContext(hProv, 0); + CryptDestroyHash(hHash); + CloseHandle(hFile); + return oss.str(); + } bool verifyEmbeddedSignature(const wstring &fileName) { diff --git a/win-linux/extras/update-daemon/src/platform_win/utils.h b/win-linux/extras/update-daemon/src/platform_win/utils.h index 18ddf466c..6a52f2dff 100644 --- a/win-linux/extras/update-daemon/src/platform_win/utils.h +++ b/win-linux/extras/update-daemon/src/platform_win/utils.h @@ -82,7 +82,7 @@ wstring toNativeSeparators(const wstring &path); wstring parentPath(const wstring &path); wstring tempPath(); wstring appPath(); -//string getFileHash(const wstring &fileName); +wstring getFileHash(const wstring &fileName); bool verifyEmbeddedSignature(const wstring &fileName); } diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index ee9ab272c..ca20307e0 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -500,8 +500,10 @@ void CUpdateManager::checkUpdates(bool manualCheck) return; } #endif - - if (!m_socket->sendMessage(MSG_CheckUpdates, WStrToTStr(m_checkUrl))) { + QString package = IsPackage(ISS) ? "iss" : IsPackage(MSI) ? "msi" : IsPackage(Portable) ? "portable" : "other"; + QString json = QString("{\"currVersion\":\"%1\",\"ignVersion\":\"%2\",\"package\":\"%3\",\"fileName\":\"%4\"}"). + arg(QString::fromLatin1(VER_FILEVERSION_STR), ignoredVersion(), package, m_savedPackageData->fileName); + if (!m_socket->sendMessage(MSG_CheckUpdates, QStrToTStr(json))) { refreshStartPage({"error", {TXT_ERR_CHECK}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK // m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while check updates: Update Service not found!")); @@ -554,6 +556,9 @@ void CUpdateManager::onError(const QString &error) if (error == "SVC_TXT_ERR_DNL_INET") _error = SVC_TXT_ERR_DNL_INET; else + if (error == "SVC_TXT_ERR_MD5") + _error = TXT_ERR_MD5; + else if (error == "SVC_TXT_ERR_URL") _error = TXT_ERR_URL; @@ -622,7 +627,7 @@ void CUpdateManager::loadUpdates() } else if (!m_packageData->packageUrl.empty()) { - if (!m_socket->sendMessage(MSG_LoadUpdates, WStrToTStr(m_packageData->packageUrl), QStrToTStr(m_packageData->fileType))) { + if (!m_socket->sendMessage(MSG_LoadUpdates)) { refreshStartPage({"error", {TXT_ERR_LOAD}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK // m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while loading updates: Update Service not found!")); @@ -732,7 +737,7 @@ void CUpdateManager::unzipIfNeeded() __GLOBAL_LOCK refreshStartPage({"load", {TXT_PREPARING_UPD}, BTN_TXT_CANCEL, "abort", "true"}); - if (!m_socket->sendMessage(MSG_UnzipIfNeeded, QStrToTStr(m_packageData->fileName), QStrToTStr(m_packageData->version))) { + if (!m_socket->sendMessage(MSG_UnzipIfNeeded)) { refreshStartPage({"error", {TXT_ERR_UNZIP}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK // m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while unzip updates: Update Service not found!")); @@ -807,85 +812,34 @@ int CUpdateManager::getUpdateMode() return modeToEnum(reg_user.value("autoUpdateMode", "ask").toString()); } -void CUpdateManager::onLoadCheckFinished(const QString &filePath) +void CUpdateManager::onLoadCheckFinished(const QString &json) { m_manualCheck = true; - QFile jsonFile(filePath); - if ( jsonFile.open(QIODevice::ReadOnly) ) { - QByteArray ReplyText = jsonFile.readAll(); - jsonFile.close(); + if (!json.isEmpty()) { + QJsonParseError err; + QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8(), &err); + if (err.error == QJsonParseError::NoError) { + QJsonObject root = doc.object(); + if (!root.isEmpty()) { + m_packageData->object = root.value("object").toString(); + m_packageData->version = root.value("version").toString(); + m_packageData->fileType = root.value("fileType").toString(); + m_packageData->packageUrl = root.value("packageUrl").toString().toStdWString(); + m_packageData->packageArgs = root.value("packageArgs").toString().toStdWString(); + m_packageData->hash = root.value("hash").toString(); + m_packageData->isInstallable = root.value("isInstallable").toBool(); - QJsonDocument doc = QJsonDocument::fromJson(ReplyText); - QJsonObject root = doc.object(); - - QString version = root.value("version").toString(); - QString curr_version = QString::fromLatin1(VER_FILEVERSION_STR); - QString svc_version = root.value("serviceVersion").toString(); - QString curr_svc_version = getFileVersion(QStrToTStr(qApp->applicationDirPath()) + DAEMON_NAME); - QJsonObject package = root.value("package").toObject(); -#ifdef _WIN32 -# ifdef _WIN64 - QJsonObject win = package.value("win_64").toObject(); -# else - QJsonObject win = package.value("win_32").toObject(); -# endif -#else - QJsonObject win = package.value("linux_64").toObject(); -#endif - if (isVersionBHigherThanA(curr_version, version) && (version != ignoredVersion())) { - m_packageData->object = "app"; - m_packageData->version = version; - m_packageData->fileType = "archive"; - QJsonObject package_type = win.value("archive").toObject(); -#ifdef _WIN32 - if (!IsPackage(Portable)) { - const QString install_key = IsPackage(MSI) ? "msi" : "iss"; - if (win.contains(install_key)) { - QJsonObject install_type = win.value(install_key).toObject(); - if (install_type.contains("maxVersion")) { - QString maxVersion = install_type.value("maxVersion").toString(); - if (!isVersionBHigherThanA(maxVersion, curr_version)) { - package_type = install_type; - m_packageData->fileType = install_key; - m_packageData->packageArgs = package_type.value("arguments").toString().toStdWString(); - } - } + clearTempFiles(m_packageData->isInstallable && isSavedPackageValid() ? m_savedPackageData->fileName : ""); + if (m_packageData->packageUrl.empty() || !m_socket->sendMessage(MSG_RequestContentLenght, WStrToTStr(m_packageData->packageUrl))) { + m_packageData->fileSize = "--"; + onCheckFinished(false, true, m_packageData->version, ""); } - } -#endif - m_packageData->packageUrl = package_type.value("url").toString().toStdWString(); - m_packageData->hash = package_type.value("md5").toString().toLower(); - - // parse release notes - QJsonObject release_notes = root.value("releaseNotes").toObject(); - const QString lang = CLangater::getCurrentLangCode() == "ru-RU" ? "ru-RU" : "en-EN"; - QJsonValue changelog = release_notes.value(lang); - - QString min_version = root.value("minVersion").toString(); - if (!min_version.isEmpty() && isVersionBHigherThanA(curr_version, min_version)) - m_packageData->isInstallable = false; - clearTempFiles(m_packageData->isInstallable && isSavedPackageValid() ? m_savedPackageData->fileName : ""); - if (m_packageData->packageUrl.empty() || !m_socket->sendMessage(MSG_RequestContentLenght, WStrToTStr(m_packageData->packageUrl))) { - m_packageData->fileSize = "--"; - onCheckFinished(false, true, m_packageData->version, ""); - } - } else - if (isVersionBHigherThanA(curr_svc_version, svc_version)) { - m_packageData->object = "svc"; - m_packageData->version = svc_version; - m_packageData->fileType = "archive"; - QJsonObject package_type = win.value("serviceArchive").toObject(); - m_packageData->packageUrl = package_type.value("url").toString().toStdWString(); - m_packageData->hash = package_type.value("md5").toString().toLower(); - - clearTempFiles(isSavedPackageValid() ? m_savedPackageData->fileName : ""); - if (m_packageData->packageUrl.empty() || !m_socket->sendMessage(MSG_RequestContentLenght, WStrToTStr(m_packageData->packageUrl))) { - m_packageData->fileSize = "--"; - onCheckFinished(false, true, m_packageData->version, ""); + } else { + clearTempFiles(); + onCheckFinished(false, false, "", ""); } } else { - clearTempFiles(); - onCheckFinished(false, false, "", ""); + onCheckFinished(true, false, "", ""); } } else { onCheckFinished(true, false, "", ""); diff --git a/win-linux/src/cupdatemanager.h b/win-linux/src/cupdatemanager.h index fe1c9022f..4aaa1d73f 100644 --- a/win-linux/src/cupdatemanager.h +++ b/win-linux/src/cupdatemanager.h @@ -134,7 +134,7 @@ private: private slots: void onCheckFinished(bool error, bool updateExist, const QString &version, const QString &changelog); - void onLoadCheckFinished(const QString &filePath); + void onLoadCheckFinished(const QString &json); void showUpdateMessage(QWidget *parent); void onLoadUpdateFinished(const QString &filePath); void showStartInstallMessage(QWidget *parent); From 1c4b0341745a577ac148524d40ee7451f32fa6e3 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 2 Sep 2024 12:10:53 +0300 Subject: [PATCH 18/97] [win-linux] updmanager: small refactoring --- win-linux/src/cupdatemanager.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index ca20307e0..1ae5c936b 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -62,6 +62,7 @@ #endif #define modeToEnum(mod) ((mod == "silent") ? UpdateMode::SILENT : (mod == "ask") ? UpdateMode::ASK : UpdateMode::DISABLE) +#define packageToStr() QString(IsPackage(ISS) ? "iss" : IsPackage(MSI) ? "msi" : IsPackage(Portable) ? "portable" : "other") #define WStrToTStr(str) QStrToTStr(QString::fromStdWString(str)) #define DAY_TO_SEC 24*3600 #define MINIMUM_INTERVAL 30 @@ -500,9 +501,8 @@ void CUpdateManager::checkUpdates(bool manualCheck) return; } #endif - QString package = IsPackage(ISS) ? "iss" : IsPackage(MSI) ? "msi" : IsPackage(Portable) ? "portable" : "other"; QString json = QString("{\"currVersion\":\"%1\",\"ignVersion\":\"%2\",\"package\":\"%3\",\"fileName\":\"%4\"}"). - arg(QString::fromLatin1(VER_FILEVERSION_STR), ignoredVersion(), package, m_savedPackageData->fileName); + arg(QString::fromLatin1(VER_FILEVERSION_STR), ignoredVersion(), packageToStr(), m_savedPackageData->fileName); if (!m_socket->sendMessage(MSG_CheckUpdates, QStrToTStr(json))) { refreshStartPage({"error", {TXT_ERR_CHECK}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK @@ -765,8 +765,7 @@ void CUpdateManager::handleAppClose() } #endif int cmd = (m_packageData->object == "app") ? MSG_StartReplacingFiles : MSG_StartReplacingService; - if (!m_socket->sendMessage(cmd, IsPackage(ISS) ? _T("iss") : IsPackage(MSI) ? _T("msi") : - IsPackage(Portable) ? _T("portable") : _T("other"), m_restartAfterUpdate ? _T("true") : _T("false"))) { + if (!m_socket->sendMessage(cmd, QStrToTStr(packageToStr()), m_restartAfterUpdate ? _T("true") : _T("false"))) { criticalMsg(nullptr, QObject::tr("An error occurred while start replacing files: Update Service not found!")); } #ifdef _WIN32 From e75fe273fd745f6f96c91fbc435dd4defeb28603 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 2 Sep 2024 12:11:32 +0300 Subject: [PATCH 19/97] [win] updmanager: move startup of installation package to service --- .../extras/update-daemon/res/langs/langs.iss | 4 ++- .../update-daemon/src/classes/csocket.h | 3 +- .../update-daemon/src/classes/csvcmanager.cpp | 31 ++++++++++++++++++- .../update-daemon/src/classes/csvcmanager.h | 3 ++ win-linux/src/cupdatemanager.cpp | 13 +++----- 5 files changed, 43 insertions(+), 11 deletions(-) diff --git a/win-linux/extras/update-daemon/res/langs/langs.iss b/win-linux/extras/update-daemon/res/langs/langs.iss index cb16d9ee8..f7d24b61d 100644 --- a/win-linux/extras/update-daemon/res/langs/langs.iss +++ b/win-linux/extras/update-daemon/res/langs/langs.iss @@ -735,4 +735,6 @@ lt.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher išmetė klaidą: hr.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher naišao je na pogrešku: hi.MESSAGE_TEXT_ERR17 =सर्विसकंट्रोलडिसपैचर ने त्रुटि दी: sv.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher returnerade fel: -sr_Cyrl_RS.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher повратна грешка: \ No newline at end of file +sr_Cyrl_RS.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher повратна грешка: + +en.MESSAGE_TEXT_ERR18 =An error occurred while start install updates! diff --git a/win-linux/extras/update-daemon/src/classes/csocket.h b/win-linux/extras/update-daemon/src/classes/csocket.h index 8a13929a9..9ada1245d 100644 --- a/win-linux/extras/update-daemon/src/classes/csocket.h +++ b/win-linux/extras/update-daemon/src/classes/csocket.h @@ -71,7 +71,8 @@ enum MsgCommands { MSG_RequestContentLenght, MSG_UnzipProgress, MSG_SetLanguage, - MSG_StartReplacingService + MSG_StartReplacingService, + MSG_StartInstallPackage }; class CSocket diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index f605079cd..2b848d297 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -367,7 +367,17 @@ void CSvcManager::init() startReplacingService(params[2] == _T("true")); __UNLOCK break; - +#ifdef _WIN32 + case MSG_StartInstallPackage: + if (!m_packageData->fileName.empty() && NS_File::getFileHash(m_packageData->fileName) == m_packageData->hash) { + __GLOBAL_LOCK + startInstallPackage(params[1]); + __UNLOCK + } else { + m_socket->sendMessage(MSG_OtherError, _T("SVC_TXT_ERR_MD5")); + } + break; +#endif case MSG_ClearTempFiles: clearTempFiles(params[1], params[2]); break; @@ -887,3 +897,22 @@ void CSvcManager::startReplacingService(const bool restartAfterUpdate) restartService(); #endif } + +#ifdef _WIN32 +void CSvcManager::startInstallPackage(const tstring &advArgs) +{ + // Verify the signature of executable files + if (!NS_File::verifyEmbeddedSignature(m_packageData->fileName)) { + NS_Logger::WriteLog(_TR("Update cancelled. The file signature is missing:") + _T(" ") + m_packageData->fileName, true); + return; + } + tstring args = m_packageData->packageArgs; + if (!advArgs.empty()) { + if (!args.empty()) + args += _T(" "); + args += advArgs; + } + if (!NS_File::runProcess(m_packageData->fileName, args)) + NS_Logger::WriteLog(_TR("An error occurred while start install updates!"), true); +} +#endif diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.h b/win-linux/extras/update-daemon/src/classes/csvcmanager.h index 0ab1fbfe0..607fd2097 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.h +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.h @@ -66,6 +66,9 @@ private: void clearTempFiles(const tstring &prefix, const tstring &except = tstring()); void startReplacingFiles(const tstring &packageType, const bool restartAfterUpdate); void startReplacingService(const bool restartAfterUpdate); +#ifdef _WIN32 + void startInstallPackage(const tstring &advArgs); +#endif struct PackageData; struct SavedPackageData; diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index 1ae5c936b..e99276133 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -305,8 +305,7 @@ struct CUpdateManager::PackageData { object, hash, version; - wstring packageUrl, - packageArgs; + wstring packageUrl; bool isInstallable = true; void clear() { fileName.clear(); @@ -316,7 +315,6 @@ struct CUpdateManager::PackageData { hash.clear(); version.clear(); packageUrl.clear(); - packageArgs.clear(); isInstallable = true; } }; @@ -749,14 +747,14 @@ void CUpdateManager::handleAppClose() if ( m_startUpdateOnClose ) { #ifdef _WIN32 if (m_packageData->fileType != "archive") { - wstring args = m_packageData->packageArgs; + wstring args; if (m_packageData->fileType == "iss") { GET_REGISTRY_SYSTEM(reg_system) - QString prev_inst_lang = " /LANG=" + reg_system.value("locale", "en").toString(); + QString prev_inst_lang = "/LANG=" + reg_system.value("locale", "en").toString(); args += prev_inst_lang.toStdWString(); } - if (!runProcess(m_packageData->fileName.toStdWString(), args)) { - criticalMsg(nullptr, QObject::tr("An error occurred while start install updates!")); + if (!m_socket->sendMessage(MSG_StartInstallPackage, WStrToTStr(args))) { + criticalMsg(nullptr, QObject::tr("An error occurred while start install updates: Update Service not found!")); } } else { if (!Utils::isSessionInProgress()) { @@ -824,7 +822,6 @@ void CUpdateManager::onLoadCheckFinished(const QString &json) m_packageData->version = root.value("version").toString(); m_packageData->fileType = root.value("fileType").toString(); m_packageData->packageUrl = root.value("packageUrl").toString().toStdWString(); - m_packageData->packageArgs = root.value("packageArgs").toString().toStdWString(); m_packageData->hash = root.value("hash").toString(); m_packageData->isInstallable = root.value("isInstallable").toBool(); From fa8c1098caff98e3d89b445a3f369abd60b9ed21 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 2 Sep 2024 12:12:08 +0300 Subject: [PATCH 20/97] [win] updatesvc: fix move to backup for portable version --- win-linux/extras/update-daemon/src/classes/csvcmanager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 2b848d297..7ec7fa36e 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -716,12 +716,12 @@ void CSvcManager::startReplacingFiles(const tstring &packageType, const bool res } // Replace app path to Backup -#ifdef _WIN32_UNUSED - if (!NS_File::dirExists(tmpPath) && !NS_File::makePath(tmpPath)) { +#ifdef _WIN32 + if (packageType == TEXT("portable") && !NS_File::dirExists(tmpPath) && !NS_File::makePath(tmpPath)) { NS_Logger::WriteLog(_TR("Update cancelled. Can't create folder:") + _T(" ") + tmpPath, true); return; } - if (!NS_File::replaceFolder(appPath, tmpPath, false)) { + if (!NS_File::replaceFolder(appPath, tmpPath, packageType != TEXT("portable"))) { #else if (!NS_File::replaceFolder(appPath, tmpPath, true)) { #endif From df8e011bd4853e3877bce79ab2410cea9c76aac1 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 2 Sep 2024 13:48:57 +0300 Subject: [PATCH 21/97] [win] updatesvc: debug runProcess --- win-linux/extras/update-daemon/src/platform_win/utils.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/win-linux/extras/update-daemon/src/platform_win/utils.cpp b/win-linux/extras/update-daemon/src/platform_win/utils.cpp index 30121e7a3..647726ba4 100644 --- a/win-linux/extras/update-daemon/src/platform_win/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/utils.cpp @@ -292,13 +292,16 @@ namespace NS_File bool runProcess(const wstring &fileName, const wstring &args) { + wstring _args(L"\"" + fileName + L"\""); + if (!args.empty()) + _args += L" " + args; if (NS_Utils::isRunAsApp()) { STARTUPINFO si; ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); PROCESS_INFORMATION pi; ZeroMemory(&pi, sizeof(pi)); - if (CreateProcess(fileName.c_str(), const_cast(args.c_str()), + if (CreateProcess(fileName.c_str(), &_args[0], NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT, NULL, NULL, &si, &pi)) { @@ -338,7 +341,7 @@ namespace NS_File si.lpDesktop = const_cast(L"Winsta0\\Default"); PROCESS_INFORMATION pi; if (CreateProcessAsUser(hTokenDup, fileName.c_str(), - const_cast(args.c_str()), + &_args[0], NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT, lpvEnv, NULL, &si, &pi)) From 54c51f199475ab2b22632504e39e54e30b7305b4 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 3 Sep 2024 12:23:02 +0300 Subject: [PATCH 22/97] [win-linux] add gray theme --- win-linux/res/styles/editor_unix.qss | 33 ++++++++++++++ win-linux/res/styles/theme-gray.json | 55 +++++++++++++++++++++++ win-linux/resources.qrc | 1 + win-linux/src/components/asctabwidget.cpp | 38 ++++++++++++---- win-linux/src/cthemes.cpp | 10 +++-- win-linux/src/cthemes.h | 3 +- win-linux/src/windows/ceditorwindow_p.h | 2 + 7 files changed, 128 insertions(+), 14 deletions(-) create mode 100644 win-linux/res/styles/theme-gray.json diff --git a/win-linux/res/styles/editor_unix.qss b/win-linux/res/styles/editor_unix.qss index b221996c4..6941fb929 100644 --- a/win-linux/res/styles/editor_unix.qss +++ b/win-linux/res/styles/editor_unix.qss @@ -30,6 +30,39 @@ #mainPanel[window=pretty] QPushButton#toolButtonMaximize[class=min][unix=true][kde=true]:hover {image: url(:/maximize_kde_hover_light.svg);} #mainPanel[window=pretty] QPushButton#toolButtonMaximize[class=min][unix=true][kde=true]:pressed {image: url(:/maximize_kde_pressed_light.svg);} + +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMinimize[unix=true] {image: url(:/minimize_unix_normal.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMinimize[unix=true]:hover {image: url(:/minimize_unix_hover.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMinimize[unix=true]:pressed {image: url(:/minimize_unix_pressed.svg);} + +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMinimize[unix=true][kde=true] {image: url(:/minimize_kde_normal.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMinimize[unix=true][kde=true]:hover {image: url(:/minimize_kde_hover.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMinimize[unix=true][kde=true]:pressed {image: url(:/minimize_kde_pressed.svg);} + +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonClose[unix=true] {image: url(:/close_unix_normal.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonClose[unix=true]:hover {image: url(:/close_unix_hover.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonClose[unix=true]:pressed {image: url(:/close_unix_pressed.svg);} + +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonClose[unix=true][kde=true] {image: url(:/close_kde_normal.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonClose[unix=true][kde=true]:hover {image: url(:/close_kde_hover.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonClose[unix=true][kde=true]:pressed {image: url(:/close_kde_pressed.svg);} + +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[unix=true] {image: url(:/restore_unix_normal.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[unix=true]:hover {image: url(:/restore_unix_hover.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[unix=true]:pressed {image: url(:/restore_unix_pressed.svg);} + +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[unix=true][kde=true] {image: url(:/restore_kde_normal.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[unix=true][kde=true]:hover {image: url(:/restore_kde_hover.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[unix=true][kde=true]:pressed {image: url(:/restore_kde_pressed.svg);} + +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[class=min][unix=true] {image: url(:/maximize_unix_normal.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[class=min][unix=true]:hover {image: url(:/maximize_unix_hover.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[class=min][unix=true]:pressed {image: url(:/maximize_unix_pressed.svg);} + +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[class=min][unix=true][kde=true] {image: url(:/maximize_kde_normal.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[class=min][unix=true][kde=true]:hover {image: url(:/maximize_kde_hover.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[class=min][unix=true][kde=true]:pressed {image: url(:/maximize_kde_pressed.svg);} + /* 1.0x */ #toolButtonMinimize[kde=true], #toolButtonClose[kde=true], diff --git a/win-linux/res/styles/theme-gray.json b/win-linux/res/styles/theme-gray.json new file mode 100644 index 000000000..1c021aea2 --- /dev/null +++ b/win-linux/res/styles/theme-gray.json @@ -0,0 +1,55 @@ +{ + "id": "theme-gray", + "type": "light", + "values": { + "brand-word": "#f7f7f7", + "brand-slide": "#f7f7f7", + "brand-cell": "#f7f7f7", + "brand-pdf": "#f7f7f7", + + "window-background": "#fff", + "window-border": "#cbcbcb", + + "text-normal": "#444", + "text-pretty": "#fff", + + "tool-button-background": "#fff", + "tool-button-hover-background": "#fbfbfb", + "tool-button-pressed-background": "#b7b7b7", + "tool-button-active-background": "#f3f3f3", + + "download-widget-background": "#fff", + "download-widget-border": "#cbcbcb", + "download-item-hover-background": "#e0e0e0", + + "download-ghost-button-text": "#3a83db", + "download-ghost-button-text-hover": "#444", + "download-ghost-button-text-pressed": "#a5a5a5", + "download-ghost-button-text-pressed-item-hover": "#868686", + + "download-label-text": "#444", + "download-label-text-info": "#a5a5a5", + "download-label-text-info-item-hover": "#868686", + + "download-progressbar-chunk": "#3a83db", + "download-progressbar-background": "#e6e6e6", + "download-progressbar-background-item-hover": "#cacaca", + + "download-scrollbar-handle": "#cacaca", + + "tooltip-text": "#313131", + "tooltip-border": "#c0c0c0", + "tooltip-background": "#fff", + + "tab-active-background": "#f1f1f1", + "tab-simple-active-background": "#fff", + "tab-simple-active-text": "#444", + "tab-default-active-background": "#fff", + "tab-default-active-text": "#444", + "tab-divider": "#c0c0c0", + + "button-normal-opacity": "rgba(49,49,49,255)", + "logo-type": "dark", + "tab-editor-theme-type": "light" + } +} diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index d89398431..34b0e064d 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -229,5 +229,6 @@ res/styles/theme-classic-light.json res/styles/theme-dark.json res/styles/theme-contrast-dark.json + res/styles/theme-gray.json diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index d9e8c7f42..c0b10e564 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -465,20 +465,16 @@ int CAscTabWidget::insertPanel(QWidget * panel, int index) switch ( tab_type ) { case AscEditorType::etPresentation: tabcolor = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabSlideActive)); - m_pBar->setTabThemeType(tabindex, CTabBar::DarkTab); break; case AscEditorType::etSpreadsheet: tabcolor = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabCellActive)); - m_pBar->setTabThemeType(tabindex, CTabBar::DarkTab); break; case AscEditorType::etDocumentMasterForm: case AscEditorType::etDocument: tabcolor = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabWordActive)); - m_pBar->setTabThemeType(tabindex, CTabBar::DarkTab); break; case AscEditorType::etPdf: tabcolor = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabViewerActive)); - m_pBar->setTabThemeType(tabindex, CTabBar::DarkTab); break; case etPortal: tabcolor = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabSimpleActiveBackground)); @@ -489,6 +485,18 @@ int CAscTabWidget::insertPanel(QWidget * panel, int index) m_pBar->setTabThemeType(tabindex, /*ui_theme.isDark() ? CTabBar::DarkTab :*/ CTabBar::LightTab); } + switch ( tab_type ) { + case AscEditorType::etPresentation: + case AscEditorType::etSpreadsheet: + case AscEditorType::etDocumentMasterForm: + case AscEditorType::etPdf: + case AscEditorType::etDocument: + m_pBar->setTabThemeType(tabindex, + ui_theme.value(CTheme::ColorRole::ecrTabThemeType, L"dark") == L"dark" ? CTabBar::DarkTab : CTabBar::LightTab); + break; + default: break; + } + m_pBar->setActiveTabColor(tabindex, tabcolor); const char *icon_name = tabindex == m_pBar->currentIndex() ? m_mapTabIcons.at(tab_type).second : m_mapTabIcons.at(tab_type).first; @@ -797,31 +805,30 @@ void CAscTabWidget::applyDocumentChanging(int id, int type) switch (AscEditorType(type)) { case AscEditorType::etDocument: panel(tabIndex)->applyLoader("loader:style", "word"); - m_pBar->setTabThemeType(tabIndex, CTabBar::DarkTab); m_pBar->setActiveTabColor(tabIndex, QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabWordActive))); break; case AscEditorType::etSpreadsheet: panel(tabIndex)->applyLoader("loader:style", "cell"); - m_pBar->setTabThemeType(tabIndex, CTabBar::DarkTab); m_pBar->setActiveTabColor(tabIndex, QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabCellActive))); break; case AscEditorType::etPresentation: panel(tabIndex)->applyLoader("loader:style", "slide"); - m_pBar->setTabThemeType(tabIndex, CTabBar::DarkTab); m_pBar->setActiveTabColor(tabIndex, QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabSlideActive))); break; case AscEditorType::etPdf: panel(tabIndex)->applyLoader("loader:style", "pdf"); - m_pBar->setTabThemeType(tabIndex, CTabBar::DarkTab); m_pBar->setActiveTabColor(tabIndex, QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabViewerActive))); break; default: break; } + m_pBar->setTabThemeType(tabIndex, + ui_theme.value(CTheme::ColorRole::ecrTabThemeType, L"dark") == L"dark" ? CTabBar::DarkTab : CTabBar::LightTab); + const char *icon_name = tabIndex == m_pBar->currentIndex() ? m_mapTabIcons.at(AscEditorType(type)).second : m_mapTabIcons.at(AscEditorType(type)).first; m_pBar->setTabIcon(tabIndex, QIcon(icon_name)); @@ -1201,10 +1208,12 @@ void CAscTabWidget::applyUITheme(const std::wstring& theme) QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabCellActive)), QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabSlideActive))}; QColor back_color = ui_theme.color(CTheme::ColorRole::ecrWindowBackground); + const auto tab_theme = ui_theme.value(CTheme::ColorRole::ecrTabThemeType, L"dark") == L"dark" ? CTabBar::DarkTab : CTabBar::LightTab; for (int i(count()); i-- > 0; ) { panel(i)->setBackground(back_color); - switch ( panel(i)->data()->contentType() ) { + const auto tab_type = panel(i)->data()->contentType(); + switch ( tab_type ) { case AscEditorType::etPresentation: m_pBar->setActiveTabColor(i, tab_color.at(2)); break; @@ -1227,6 +1236,17 @@ void CAscTabWidget::applyUITheme(const std::wstring& theme) m_pBar->setActiveTabColor(i, QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabDefaultActiveBackground))); break; } + + switch ( tab_type ) { + case AscEditorType::etPresentation: + case AscEditorType::etSpreadsheet: + case AscEditorType::etDocumentMasterForm: + case AscEditorType::etPdf: + case AscEditorType::etDocument: + m_pBar->setTabThemeType(i, tab_theme); + break; + default: break; + } } m_pBar->refreshTheme(); diff --git a/win-linux/src/cthemes.cpp b/win-linux/src/cthemes.cpp index 4cc644ae1..bf53c67b8 100644 --- a/win-linux/src/cthemes.cpp +++ b/win-linux/src/cthemes.cpp @@ -22,7 +22,7 @@ #define REGISTRY_THEME_KEY "UITheme" #define REGISTRY_THEME_KEY_7_2 "UITheme2" #define THEME_DEFAULT_DARK_ID "theme-dark" -#define THEME_DEFAULT_LIGHT_ID "theme-classic-light" +#define THEME_DEFAULT_LIGHT_ID "theme-gray" #define THEME_ID_SYSTEM "theme-system" namespace NSTheme { @@ -82,7 +82,8 @@ namespace NSTheme { {CTheme::ColorRole::ecrTabDivider, "tab-divider"}, {CTheme::ColorRole::ecrButtonNormalOpacity, "button-normal-opacity"}, - {CTheme::ColorRole::ecrLogoColor, "logo"} + {CTheme::ColorRole::ecrLogoColor, "logo"}, + {CTheme::ColorRole::ecrTabThemeType, "tab-editor-theme-type"} }; static const std::map map_alias_names = { @@ -178,6 +179,7 @@ public: {"theme-classic-light", ":/themes/theme-classic-light.json"}, {"theme-dark", ":/themes/theme-dark.json"}, {"theme-contrast-dark", ":/themes/theme-contrast-dark.json"}, + {"theme-gray", ":/themes/theme-gray.json"}, }; GET_REGISTRY_USER(_reg_user); @@ -442,7 +444,7 @@ auto CTheme::stype() const -> QString } } -auto CTheme::value(ColorRole r) const -> std::wstring +auto CTheme::value(ColorRole r, const std::wstring& def) const -> std::wstring { if ( NSTheme::map_names.find(r) != NSTheme::map_names.end() ) { if ( m_priv->jsonValues.contains(NSTheme::map_names.at(r)) ) { @@ -450,7 +452,7 @@ auto CTheme::value(ColorRole r) const -> std::wstring } } - return L""; + return def; } auto CTheme::color(ColorRole role) const -> QColor diff --git a/win-linux/src/cthemes.h b/win-linux/src/cthemes.h index 3a764a7c8..aeb7e5f52 100644 --- a/win-linux/src/cthemes.h +++ b/win-linux/src/cthemes.h @@ -59,6 +59,7 @@ public: , ecrToolTipBorder , ecrToolTipBackground , ecrTabDivider + , ecrTabThemeType }; auto fromFile(const QString&) -> bool; @@ -71,7 +72,7 @@ public: #ifdef Q_OS_WIN auto colorRef(ColorRole r) const -> COLORREF; #endif - auto value(ColorRole) const -> std::wstring; + auto value(ColorRole, const std::wstring& def = L"") const -> std::wstring; auto isDark() const -> bool; auto isSystem() const -> bool; diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index 789e89720..bed014ada 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -502,6 +502,8 @@ public: background = GetColorValueByRole(ecrWindowBackground); border = GetColorValueByRole(ecrWindowBorder); } + if (GetCurrentTheme().id() == L"theme-gray") + border = GetColorValueByRole(ecrWindowBorder); window->setWindowColors(QColor(QString::fromStdWString(background)), QColor(QString::fromStdWString(border)), window->isActiveWindow()); } From fbeb3012afe334910f49e2f7b2b676b0d2ad8f02 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 21 Aug 2024 14:07:25 +0300 Subject: [PATCH 23/97] [win-nix] fix single editor's window for theme Gray --- win-linux/res/styles/editor.qss | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/win-linux/res/styles/editor.qss b/win-linux/res/styles/editor.qss index e3c263a17..c2bcd46da 100644 --- a/win-linux/res/styles/editor.qss +++ b/win-linux/res/styles/editor.qss @@ -26,6 +26,16 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} #mainPanel[window=pretty] QPushButton#toolButtonMaximize[unix=false][pressed=true] {background-color: rgba(255,255,255,20%);} #mainPanel[window=pretty] #labelTitle {color: %3; font-size: 12px;} +#mainPanel[uitheme=theme-gray] #labelTitle {color: #444;} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton[act=tool][unix=false][hovered=true], +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton[act=tool][unix=false]:hover {background-color: rgba(0,0,0,20%);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMinimize {image: url(:/minimize.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonClose {image: url(:/close.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonClose[unix=false]:hover {image: url(:/close_light.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize {image: url(:/restore.svg);} +#mainPanel[uitheme=theme-gray][window=pretty] QPushButton#toolButtonMaximize[class=min] {image: url(:/maximize.svg);} +#mainPanel[uitheme=theme-gray] #iconuser {background: rgba(68,68,68,80%);} + /* 1.25x */ #mainPanel[zoom="1.25x"] #toolButtonMinimize, #mainPanel[zoom="1.25x"] #toolButtonClose, From 1cf998d008216881b84bae85053b84eaa4945850 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 3 Sep 2024 16:56:30 +0300 Subject: [PATCH 24/97] [win-linux] add right tab separator --- win-linux/src/components/ctabbar.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index deff39146..6b06e7463 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -285,7 +285,8 @@ void Tab::paintEvent(QPaintEvent *ev) // if (tabBar && tabBar->property("active").toBool()) { QStylePainter p(this); - p.fillRect(rect(), QBrush(QColor(tabcolor))); + int left = AscAppManager::isRtlEnabled() ? frameWidth() : 0; + p.fillRect(rect().adjusted(left, 0, left ? 0 : -frameWidth(), 0), QBrush(QColor(tabcolor))); } } } From 37bac9285cb5b0b1639a76c14cf86aac7976eb95 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 28 Jun 2024 19:19:57 +0300 Subject: [PATCH 25/97] [start page] refactoring --- common/loginpage/src/panelsettings.js | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index 1791805ea..3a1eeafb9 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -45,23 +45,23 @@ const themes_map = { 'theme-system': { - text: 'Same as system', + text: utils.Lang.settOptThemeSystem, type: THEME_TYPE_SYSTEM, }, 'theme-light': { - text: 'Light', + text: utils.Lang.settOptThemeLight, type: 'light', }, 'theme-classic-light': { - text: 'Classic Light', + text: utils.Lang.settOptThemeClassicLight, type: 'light', }, 'theme-dark': { - text: 'Dark', + text: utils.Lang.settOptThemeDark, type: 'dark', }, 'theme-contrast-dark': { - text: 'Dark Contrast', + text: utils.Lang.settOptThemeContrastDark, type: 'dark', }, } @@ -584,22 +584,17 @@ if ( !!appSettings.uitheme ) { appSettings.uitheme == 'canuse' && (appSettings.uitheme = 'theme-light'); - const _themes = [{'theme-system': utils.Lang.settOptThemeSystem}, - {'theme-light': utils.Lang.settOptThemeLight}, - {'theme-classic-light': utils.Lang.settOptThemeClassicLight}, - {'theme-dark': utils.Lang.settOptThemeDark}, - {'theme-contrast-dark': utils.Lang.settOptThemeContrastDark}]; if ( nativevars.theme ) { if ( nativevars.theme.system == 'disabled' ) - _themes.shift(); + delete themes_map['theme-system']; } const _combo = $('#opts-ui-theme select', $panel).empty(); - _themes.forEach(item => { - const entries = Object.entries(item)[0]; - _combo.append(``); - }); + for (const [key, value] of Object.entries(themes_map)) { + _combo.append(``); + } + if ( nativevars.localthemes ) { for ( const t of nativevars.localthemes ) { From 745986c58b5a32fe39249c1b21307cf469ea65e9 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 28 Jun 2024 19:22:11 +0300 Subject: [PATCH 26/97] [win-nix] added new theme --- common/loginpage/src/panelsettings.js | 4 ++++ win-linux/src/cthemes.cpp | 1 + 2 files changed, 5 insertions(+) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index 3a1eeafb9..efbfe8231 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -64,6 +64,10 @@ text: utils.Lang.settOptThemeContrastDark, type: 'dark', }, + 'theme-gray': { + text: 'Gray', + type: 'light', + }, } const nativevars = window.RendererProcessVariable; diff --git a/win-linux/src/cthemes.cpp b/win-linux/src/cthemes.cpp index 4cc644ae1..77ec0c174 100644 --- a/win-linux/src/cthemes.cpp +++ b/win-linux/src/cthemes.cpp @@ -178,6 +178,7 @@ public: {"theme-classic-light", ":/themes/theme-classic-light.json"}, {"theme-dark", ":/themes/theme-dark.json"}, {"theme-contrast-dark", ":/themes/theme-contrast-dark.json"}, + {"theme-gray", ":/themes/theme-light.json"}, }; GET_REGISTRY_USER(_reg_user); From c01036d2863759319a581b8492ef83273cd7ffa4 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 4 Sep 2024 07:24:59 +0300 Subject: [PATCH 27/97] [win] iss: skip dir selection page --- win-linux/package/windows/common.iss | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/win-linux/package/windows/common.iss b/win-linux/package/windows/common.iss index 57da9e66c..c7dcb7ffd 100644 --- a/win-linux/package/windows/common.iss +++ b/win-linux/package/windows/common.iss @@ -918,6 +918,13 @@ begin if DirExists(path) then DelTree(path, true, true, true) end; +#ifndef _WIN_XP +function ShouldSkipPage(PageID: Integer): Boolean; +begin + Result := (PageID = wpSelectDir) and not CheckCommandlineParam('/enabledirpage'); +end; +#endif + function getAppMutex(P: String): String; var hWnd: Longint; From 9f2edbfbb4767b8740fd2ce62cee29597262f50f Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 4 Sep 2024 14:32:51 +0300 Subject: [PATCH 28/97] [win] fix bug 69943 --- win-linux/src/windows/platform_win/cwindowplatform.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/win-linux/src/windows/platform_win/cwindowplatform.cpp b/win-linux/src/windows/platform_win/cwindowplatform.cpp index b78553927..f5e020d25 100644 --- a/win-linux/src/windows/platform_win/cwindowplatform.cpp +++ b/win-linux/src/windows/platform_win/cwindowplatform.cpp @@ -334,6 +334,14 @@ bool CWindowPlatform::nativeEvent(const QByteArray &eventType, void *message, lo // break; // } + case WM_SYSCOMMAND: { + if ((msg->wParam & 0xFFF0) == SC_KEYMENU) { + if (GetKeyState(VK_RETURN) & 0x8000) + return true; + } + break; + } + case WM_NCCALCSIZE: { if (!m_borderless || !msg->wParam) break; From c969bfa403d6060d967f57f5a06e34e499dee384 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 4 Sep 2024 16:01:48 +0300 Subject: [PATCH 29/97] [macos] changes for gray theme --- macos/ONLYOFFICE/Code/Utils/ASCConstants.h | 1 + 1 file changed, 1 insertion(+) diff --git a/macos/ONLYOFFICE/Code/Utils/ASCConstants.h b/macos/ONLYOFFICE/Code/Utils/ASCConstants.h index 244edb977..3cdf64b0e 100644 --- a/macos/ONLYOFFICE/Code/Utils/ASCConstants.h +++ b/macos/ONLYOFFICE/Code/Utils/ASCConstants.h @@ -68,6 +68,7 @@ static NSString * const uiThemeClassicLight = @"theme-classic-ligh static NSString * const uiThemeDark = @"theme-dark"; static NSString * const uiThemeContrastDark = @"theme-contrast-dark"; static NSString * const uiThemeSystem = @"theme-system"; +static NSString * const uiThemeGray = @"theme-gray"; // Custom schemes static NSString * const kSchemeApp = @"oo-office"; From 28fb7b8eb4a6d4ab50f25acc3ae63ca7c95ff945 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 5 Sep 2024 14:45:13 +0300 Subject: [PATCH 30/97] [win-linux] fix colors for gray theme --- win-linux/res/styles/theme-gray.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/win-linux/res/styles/theme-gray.json b/win-linux/res/styles/theme-gray.json index 1c021aea2..7f219d550 100644 --- a/win-linux/res/styles/theme-gray.json +++ b/win-linux/res/styles/theme-gray.json @@ -7,16 +7,16 @@ "brand-cell": "#f7f7f7", "brand-pdf": "#f7f7f7", - "window-background": "#fff", + "window-background": "#d9d9d9", "window-border": "#cbcbcb", "text-normal": "#444", "text-pretty": "#fff", - "tool-button-background": "#fff", - "tool-button-hover-background": "#fbfbfb", + "tool-button-background": "#d9d9d9", + "tool-button-hover-background": "#e6e6e6", "tool-button-pressed-background": "#b7b7b7", - "tool-button-active-background": "#f3f3f3", + "tool-button-active-background": "#f7f7f7", "download-widget-background": "#fff", "download-widget-border": "#cbcbcb", @@ -38,7 +38,7 @@ "download-scrollbar-handle": "#cacaca", "tooltip-text": "#313131", - "tooltip-border": "#c0c0c0", + "tooltip-border": "#cbcbcb", "tooltip-background": "#fff", "tab-active-background": "#f1f1f1", @@ -46,7 +46,7 @@ "tab-simple-active-text": "#444", "tab-default-active-background": "#fff", "tab-default-active-text": "#444", - "tab-divider": "#c0c0c0", + "tab-divider": "#cbcbcb", "button-normal-opacity": "rgba(49,49,49,255)", "logo-type": "dark", From a2c0847b81aed1990bf9fc669f121eb2d665ea11 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 5 Sep 2024 16:54:01 +0300 Subject: [PATCH 31/97] [macos] refactoring --- .../Code/Controllers/Common/ASCCommonViewController.mm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm index 3836b2c08..1e311af24 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm @@ -944,7 +944,8 @@ if (eventData) { NSEditorApi::CAscKeyboardDown * pData = (NSEditorApi::CAscKeyboardDown *)[eventData pointerValue]; - if ( pData->get_KeyCode() == 112 /*kVK_F1*/ && pData->get_IsShift() && pData->get_IsCtrl() ) { + int keyCode = pData->get_KeyCode(); + if ( keyCode == 112 /*kVK_F1*/ && pData->get_IsShift() && pData->get_IsCtrl() ) { NSOpenPanel * openPanel = [NSOpenPanel openPanel]; openPanel.canChooseDirectories = YES; @@ -973,7 +974,7 @@ [alert runModal]; } }]; - } else if ( pData->get_KeyCode() == 9 ) { + } else if ( keyCode == 9 ) { if ( pData->get_IsCtrl() ) { if ( pData->get_IsShift() ) { [self.tabsControl selectPreviouseTab]; From 70c627a42d0fe731182df59977de8f87bea98083 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 6 Sep 2024 15:49:39 +0300 Subject: [PATCH 32/97] [macos] for bug 67689 --- .../Code/Controllers/Common/ASCCommonViewController.mm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm index 1e311af24..795a4dc87 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm @@ -982,6 +982,13 @@ [self.tabsControl selectNextTab]; } } + } else if ( keyCode == 87 ) { // W + if ( pData->get_IsCommandMac() ) { + ASCTabView * tab = [self.tabsControl selectedTab]; + if ( tab and [self tabs:self.tabsControl willRemovedTab:tab] ) { + [self.tabsControl removeTab:tab]; + } + } } } } From ccb93d02b4b5cbb65aa079edad4bbb7de54253b4 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 6 Sep 2024 19:14:14 +0300 Subject: [PATCH 33/97] [win-linux] updmanager: fix argument passing for portable version --- win-linux/src/cupdatemanager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index e99276133..d63f3a5be 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -364,8 +364,8 @@ CUpdateManager::CUpdateManager(QObject *parent): CSocket sock(INSTANCE_SVC_PORT, 0); sock.sendMessage((void*)msg.c_str(), msg.length() + 1); tstring args = _T("--run-as-app ") + std::to_tstring(pid); - if (InputArgs::contains(L"--log")) - args.append(_T(" --log")); + for (const auto &arg : InputArgs::arguments()) + args.append(_T(" ") + WStrToTStr(arg)); runProcess(QStrToTStr(qApp->applicationDirPath()) + DAEMON_NAME, args); } init(); From 54f0ca3f2a2a8e4dbcb4a817a2496837e1513970 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 6 Sep 2024 20:53:13 +0300 Subject: [PATCH 34/97] [macos] fix tab color for "gray" theme --- .../Controllers/Common/ASCThemesController.h | 1 + .../Controllers/Common/ASCThemesController.m | 6 ++- .../Code/Controls/ASCTabs/ASCTabView.m | 46 ++++++------------- 3 files changed, 21 insertions(+), 32 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.h b/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.h index a65be81f9..b7c38e3dd 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.h +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.h @@ -49,6 +49,7 @@ static NSString * const tabWordActiveBackgroundColor = @"tab-word-background- static NSString * const tabCellActiveBackgroundColor = @"tab-cell-background-active-color"; static NSString * const tabSlideActiveBackgroundColor = @"tab-slide-background-active-color"; static NSString * const tabPdfActiveBackgroundColor = @"tab-pdf-background-active-color"; +static NSString * const tabActiveTextColor = @"tab-editor-text-active-color"; @interface ASCThemesController : NSObject diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m b/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m index 86ebc46c2..525fd7ea7 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m @@ -95,7 +95,10 @@ if ( [theme isEqualToString: uiThemeSystem] ) theme = [self defaultThemeId:[NSApplication isSystemDarkMode]]; - if ([name isEqualToString:btnPortalActiveBackgroundColor]) { + if ([name isEqualToString:tabActiveTextColor]) { + if ( [theme isEqualToString:uiThemeGray] ) return UIColorFromRGB(0x444); + else return NSColor.whiteColor; + } else if ([name isEqualToString:btnPortalActiveBackgroundColor]) { if ( [theme isEqualToString:uiThemeDark] ) return UIColorFromRGB(0x333333); else if ( [theme isEqualToString:uiThemeContrastDark] ) return UIColorFromRGB(0x1e1e1e); else { @@ -106,6 +109,7 @@ } else { if ( [theme isEqualToString:uiThemeDark] ) return UIColorFromRGB(0x2a2a2a); else if ( [theme isEqualToString:uiThemeContrastDark] ) return UIColorFromRGB(0x1e1e1e); + else if ( [theme isEqualToString:uiThemeGray] ) return UIColorFromRGB(0xf7f7f7); else { if ([name isEqualToString:tabWordActiveBackgroundColor]) { return [NSColor brendDocumentEditor]; diff --git a/macos/ONLYOFFICE/Code/Controls/ASCTabs/ASCTabView.m b/macos/ONLYOFFICE/Code/Controls/ASCTabs/ASCTabView.m index ed8142d7c..306c452bb 100644 --- a/macos/ONLYOFFICE/Code/Controls/ASCTabs/ASCTabView.m +++ b/macos/ONLYOFFICE/Code/Controls/ASCTabs/ASCTabView.m @@ -230,37 +230,21 @@ static NSUInteger const kASTabViewCloseButtonSize = 12; if (type == ASCTabViewTypePortal) { tabViewCell.activeColor = [ASCThemesController currentThemeColor:btnPortalActiveBackgroundColor]; tabViewCell.activeTextColor = [tabViewCell.activeColor isLight] ? NSColor.blackColor : NSColor.whiteColor; - } else if (type == ASCTabViewTypeDocument) { - tabViewCell.activeColor = [ASCThemesController currentThemeColor:tabWordActiveBackgroundColor]; - tabViewCell.clickColor = [ASCThemesController currentThemeColor:tabWordActiveBackgroundColor]; - if (@available(macOS 10.13, *)) { - tabViewCell.activeTextColor = [NSColor colorNamed:@"tab-editorsActiveTextColor"]; - } else { - tabViewCell.activeTextColor = UIColorFromRGB(0xffffff); - } - } else if (type == ASCTabViewTypeSpreadsheet) { - tabViewCell.activeColor = [ASCThemesController currentThemeColor:tabCellActiveBackgroundColor]; - tabViewCell.clickColor = [ASCThemesController currentThemeColor:tabCellActiveBackgroundColor]; - if (@available(macOS 10.13, *)) { - tabViewCell.activeTextColor = [NSColor colorNamed:@"tab-editorsActiveTextColor"]; - } else { - tabViewCell.activeTextColor = UIColorFromRGB(0xffffff); - } - } else if (type == ASCTabViewTypePresentation) { - tabViewCell.activeColor = [ASCThemesController currentThemeColor:tabSlideActiveBackgroundColor]; - tabViewCell.clickColor = [ASCThemesController currentThemeColor:tabSlideActiveBackgroundColor]; - if (@available(macOS 10.13, *)) { - tabViewCell.activeTextColor = [NSColor colorNamed:@"tab-editorsActiveTextColor"]; - } else { - tabViewCell.activeTextColor = UIColorFromRGB(0xffffff); - } - } else if (type == ASCTabViewTypePdf) { - tabViewCell.activeColor = [ASCThemesController currentThemeColor:tabPdfActiveBackgroundColor]; - tabViewCell.clickColor = [ASCThemesController currentThemeColor:tabPdfActiveBackgroundColor]; - if (@available(macOS 10.13, *)) { - tabViewCell.activeTextColor = [NSColor colorNamed:@"tab-editorsActiveTextColor"]; - } else { - tabViewCell.activeTextColor = UIColorFromRGB(0xffffff); + } else { + tabViewCell.activeTextColor = [ASCThemesController currentThemeColor:tabActiveTextColor]; + + if (type == ASCTabViewTypeDocument) { + tabViewCell.activeColor = + tabViewCell.clickColor = [ASCThemesController currentThemeColor:tabWordActiveBackgroundColor]; + } else if (type == ASCTabViewTypeSpreadsheet) { + tabViewCell.activeColor = + tabViewCell.clickColor = [ASCThemesController currentThemeColor:tabCellActiveBackgroundColor]; + } else if (type == ASCTabViewTypePresentation) { + tabViewCell.activeColor = + tabViewCell.clickColor = [ASCThemesController currentThemeColor:tabSlideActiveBackgroundColor]; + } else if (type == ASCTabViewTypePdf) { + tabViewCell.activeColor = + tabViewCell.clickColor = [ASCThemesController currentThemeColor:tabPdfActiveBackgroundColor]; } } From 4956c7ea435f294261682647cbec9d3f89f244cf Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 7 Sep 2024 01:15:24 +0300 Subject: [PATCH 35/97] [win] changed En lang id in install package --- win-linux/package/windows/associate_page.iss | 118 +++++++++---------- win-linux/package/windows/common.iss | 23 ++-- 2 files changed, 71 insertions(+), 70 deletions(-) diff --git a/win-linux/package/windows/associate_page.iss b/win-linux/package/windows/associate_page.iss index db529ff10..b0123782f 100644 --- a/win-linux/package/windows/associate_page.iss +++ b/win-linux/package/windows/associate_page.iss @@ -5,7 +5,7 @@ ChangesAssociations=true [CustomMessages] -en.AssociateDescription =Associate office document file types with {#ASSC_APP_NAME} +en_US.AssociateDescription =Associate office document file types with {#ASSC_APP_NAME} en_GB.AssociateDescription =Associate office document file types with {#ASSC_APP_NAME} ar_SA.AssociateDescription =هل تريد ربط صيغة المستند بـ {#ASSC_APP_NAME} bg.AssociateDescription =Свържете типовете файлове на офис документи с {#ASSC_APP_NAME} @@ -51,7 +51,7 @@ zh_TW.AssociateDescription =與文書處理檔案類型聯結{#ASSC_APP_NAME} sr_Latn_RS.AssociateDescription =Poveži ofis dokument fajl tipove sa {#ASSC_APP_NAME} sr_Cyrl_RS.AssociateDescription =Повежи офис документ фајл типове са {#ASSC_APP_NAME} -en.AssociateCaption =File Associations +en_US.AssociateCaption =File Associations en_GB.AssociateCaption =File Associations ar_SA.AssociateCaption =ربط الملفات bg.AssociateCaption =Свързвания на файлове @@ -97,7 +97,7 @@ zh_TW.AssociateCaption =檔案聯結 sr_Latn_RS.AssociateCaption =Fajl povezivanja sr_Cyrl_RS.AssociateCaption =Фајл повезивања -en.AssociateDont =Do not associate +en_US.AssociateDont =Do not associate en_GB.AssociateDont =Do not associate ar_SA.AssociateDont =عدم ربط bg.AssociateDont =Не свързвай @@ -143,7 +143,7 @@ zh_TW.AssociateDont =不要聯結 sr_Latn_RS.AssociateDont =Nemoj da povežeš sr_Cyrl_RS.AssociateDont =Немој да повежеш -en.AssociateAll =Associate all +en_US.AssociateAll =Associate all en_GB.AssociateAll =Associate all ar_SA.AssociateAll =ربط الكل bg.AssociateAll =Свържи всички @@ -189,7 +189,7 @@ zh_TW.AssociateAll =全部聯結 sr_Latn_RS.AssociateAll =Poveži sve sr_Cyrl_RS.AssociateAll =Повежи све -en.AssociateSel =Associate selected +en_US.AssociateSel =Associate selected en_GB.AssociateSel =Associate selected ar_SA.AssociateSel =ربط المختار bg.AssociateSel =Свържи избраните @@ -235,7 +235,7 @@ zh_TW.AssociateSel =聯結已選定 sr_Latn_RS.AssociateSel =Poveži odabrano sr_Cyrl_RS.AssociateSel =Повежи одабрано -en.AssociateAudio =File types +en_US.AssociateAudio =File types en_GB.AssociateAudio =File types ar_SA.AssociateAudio =صيغ الملف bg.AssociateAudio =Типове файлове @@ -281,7 +281,7 @@ zh_TW.AssociateAudio =檔案類型 sr_Latn_RS.AssociateAudio =Fajl tipovi sr_Cyrl_RS.AssociateAudio =Фајл типови -en.extMSWord =Microsoft Word Document +en_US.extMSWord =Microsoft Word Document en_GB.extMSWord =Microsoft Word Document ar_SA.extMSWord =مستند مايكروسوفت وورد bg.extMSWord =Microsoft Word документ @@ -327,7 +327,7 @@ zh_TW.extMSWord =Microsoft Word 文件 sr_Cyrl_RS.extMSWord =Microsoft Word документ sr_Latn_RS.extMSWord =Microsoft Word dokument -en.extMSExcel =Microsoft Excel Workbook +en_US.extMSExcel =Microsoft Excel Workbook en_GB.extMSExcel =Microsoft Excel Workbook ar_SA.extMSExcel =جدول بياني مايكروسوفت إكسل bg.extMSExcel =Microsoft Excel работна книга @@ -373,7 +373,7 @@ zh_TW.extMSExcel =Microsoft Excel 活頁簿 sr_Cyrl_RS.extMSExcel =Microsoft Excel радна књига sr_Latn_RS.extMSExcel =Microsoft Excel radna knjiga -en.extMSPresentation =Microsoft PowerPoint Presentation +en_US.extMSPresentation =Microsoft PowerPoint Presentation en_GB.extMSPresentation =Microsoft PowerPoint Presentation ar_SA.extMSPresentation =عرض تقديمي مايكروسوفت بوربوينت قابل للتعديل bg.extMSPresentation =Microsoft PowerPoint презентация @@ -419,7 +419,7 @@ zh_TW.extMSPresentation =Microsoft PowerPoint 簡報 sr_Cyrl_RS.extMSPresentation =Microsoft PowerPoint презентација sr_Latn_RS.extMSPresentation =Microsoft PowerPoint prezentacija -en.extMSSlideshow =Microsoft PowerPoint Slideshow +en_US.extMSSlideshow =Microsoft PowerPoint Slideshow en_GB.extMSSlideshow =Microsoft PowerPoint Slideshow ar_SA.extMSSlideshow =عرض تقديمي مايكروسوفت بوربوينت غير قابل للتعديل bg.extMSSlideshow =Microsoft PowerPoint слайдшоу @@ -465,7 +465,7 @@ zh_TW.extMSSlideshow =Microsoft PowerPoint 投影片 sr_Cyrl_RS.extMSSlideshow =Microsoft PowerPoint слајд-шоу sr_Latn_RS.extMSSlideshow =Microsoft PowerPoint slajd-šou -en.extODT =OpenDocument Text File +en_US.extODT =OpenDocument Text File en_GB.extODT =OpenDocument Text File ar_SA.extODT =ملف نصي ليبري أوفس bg.extODT =OpenDocument текстов файл @@ -511,7 +511,7 @@ zh_TW.extODT =OpenDocument Text 文件 sr_Cyrl_RS.extODT =OpenDocument текст фајл sr_Latn_RS.extODT =OpenDocument tekst fajl -en.extODS =OpenDocument Spreadsheet +en_US.extODS =OpenDocument Spreadsheet en_GB.extODS =OpenDocument Spreadsheet ar_SA.extODS =جدول ليبري أوفس bg.extODS =OpenDocument електронна таблица @@ -557,7 +557,7 @@ zh_TW.extODS =OpenDocument 試算表 sr_Cyrl_RS.extODS =OpenDocument прорачунска табела sr_Latn_RS.extODS =OpenDocument proračunska tabela -en.extODP =OpenDocument Presentation +en_US.extODP =OpenDocument Presentation en_GB.extODP =OpenDocument Presentation ar_SA.extODP =عرض ليبري أوفس bg.extODP =OpenDocument презентация @@ -603,7 +603,7 @@ zh_TW.extODP =OpenDocument 簡報 sr_Cyrl_RS.extODP =OpenDocument презентација sr_Latn_RS.extODP =OpenDocument prezentacija -en.extDOC =Word 97-2003 Document +en_US.extDOC =Word 97-2003 Document en_GB.extDOC =Word 97-2003 Document ar_SA.extDOC =مستند وورد 97-2003 bg.extDOC =Word 97-2003 документ @@ -649,7 +649,7 @@ zh_TW.extDOC =Word 97-2003 文件 sr_Cyrl_RS.extDOC =Word 97-2003 документ sr_Latn_RS.extDOC =Word 97-2003 dokument -en.extDOCX =Office Open XML Document +en_US.extDOCX =Office Open XML Document en_GB.extDOCX =Office Open XML Document ar_SA.extDOCX =مستند وورد bg.extDOCX =Office Open XML документ @@ -695,7 +695,7 @@ zh_TW.extDOCX =Office Open XML 文件 sr_Cyrl_RS.extDOCX =Office Open XML документ sr_Latn_RS.extDOCX =Office Open XML dokument -en.extDOCXF =ONLYOFFICE Form Template +en_US.extDOCXF =ONLYOFFICE Form Template en_GB.extDOCXF =ONLYOFFICE Form Template ar_SA.extDOCXF =قالب استبيان ONLYOFFICE bg.extDOCXF =ONLYOFFICE Шаблон на формуляр @@ -741,7 +741,7 @@ zh_TW.extDOCXF =ONLYOFFICE 文档表单模板 sr_Cyrl_RS.extDOCXF =ONLYOFFICE формулар шаблон sr_Latn_RS.extDOCXF =ONLYOFFICE formular šablon -en.extXLS =Excel 97-2003 Spreadsheet +en_US.extXLS =Excel 97-2003 Spreadsheet en_GB.extXLS =Excel 97-2003 Spreadsheet ar_SA.extXLS =جدول إكسل 97-2003 bg.extXLS =Excel 97-2003 таблица @@ -787,7 +787,7 @@ zh_TW.extXLS =Excel 97-2003 試算表 sr_Cyrl_RS.extXLS =Excel 97-2003 прорачунска табела sr_Latn_RS.extXLS =Excel 97-2003 proračunska tabela -en.extXLSX =Office Open XML Spreadsheet +en_US.extXLSX =Office Open XML Spreadsheet en_GB.extXLSX =Office Open XML Spreadsheet ar_SA.extXLSX =جدول إكسل bg.extXLSX =Office Open XML таблица @@ -833,7 +833,7 @@ zh_TW.extXLSX =Office Open XML 試算表 sr_Cyrl_RS.extXLSX =Office Open XML прорачунска табела sr_Latn_RS.extXLSX =Office Open XML proračunska tabela -en.extPPT =PowerPoint 97-2003 Presentation +en_US.extPPT =PowerPoint 97-2003 Presentation en_GB.extPPT =PowerPoint 97-2003 Presentation ar_SA.extPPT =عرض بوربوينت 97-2003 bg.extPPT =PowerPoint 97-2003 Презентация @@ -879,7 +879,7 @@ zh_TW.extPPT =PowerPoint 97-2003 簡報 sr_Cyrl_RS.extPPT =PowerPoint 97-2003 презентација sr_Latn_RS.extPPT =PowerPoint 97-2003 prezentacija -en.extPPTX =Office Open XML Presentation +en_US.extPPTX =Office Open XML Presentation en_GB.extPPTX =Office Open XML Presentation ar_SA.extPPTX =عرض بوربوينت قابل للتعديل bg.extPPTX =Office Open XML Презентация @@ -925,7 +925,7 @@ zh_TW.extPPTX =Office Open XML 簡報 sr_Cyrl_RS.extPPTX =Office Open XML презентација sr_Latn_RS.extPPTX =Office Open XML prezentacija -en.extPPS =PowerPoint 97-2003 Slide Show +en_US.extPPS =PowerPoint 97-2003 Slide Show en_GB.extPPS =PowerPoint 97-2003 Slide Show ar_SA.extPPS =عرض بوربوينت 97-2003 bg.extPPS =PowerPoint 97-2003 Слайдшоу @@ -971,7 +971,7 @@ zh_TW.extPPS =PowerPoint 97-2003投影片 sr_Cyrl_RS.extPPS =PowerPoint 97-2003 слајд-шоу sr_Latn_RS.extPPS =PowerPoint 97-2003 slajd-šou -en.extPPSX =Office Open XML Slide Show +en_US.extPPSX =Office Open XML Slide Show en_GB.extPPSX =Office Open XML Slide Show ar_SA.extPPSX =عرض بوربوينت غير قابل للتعديل bg.extPPSX =Office Open XML Слайдшоу @@ -1017,7 +1017,7 @@ zh_TW.extPPSX =Office Open XML 投影片 sr_Cyrl_RS.extPPSX =Office Open XML слајд-шоу sr_Latn_RS.extPPSX =Office Open XML slajd-šou -en.extRTF =Rich Text Format File +en_US.extRTF =Rich Text Format File en_GB.extRTF =Rich Text Format File ar_SA.extRTF =ملف نصي غني bg.extRTF =Файл с богат текстов формат @@ -1063,7 +1063,7 @@ zh_TW.extRTF =Rich Text Format 文件 sr_Latn_RS.extRTF =Богати текст формат фајл sr_Latn_RS.extRTF =Bogati tekst format fajl -en.extCSV =Comma Separated Values +en_US.extCSV =Comma Separated Values en_GB.extCSV =Comma Separated Values ar_SA.extCSV =قيم مفرّقة بفاصلة bg.extCSV =Стойности, разделени със запетая @@ -1109,7 +1109,7 @@ zh_TW.extCSV =逗點分隔值 sr_Cyrl_RS.extCSV =Вредности одвојене зарезом sr_Latn_RS.extCSV =Vrednosti odvojene zarezom -en.extPDF =Portable Document +en_US.extPDF =Portable Document en_GB.extPDF =Portable Document ar_SA.extPDF =بي دي إف bg.extPDF =Преносим документ @@ -1155,7 +1155,7 @@ zh_TW.extPDF =PDF 檔案 sr_Cyrl_RS.extPDF =Преносиви документ sr_Latn_RS.extPDF =Prenosivi dokument -en.extDJVU =Digital Document +en_US.extDJVU =Digital Document en_GB.extDJVU =Digital Document ar_SA.extDJVU =مستند رقمي bg.extDJVU =Дигитален документ @@ -1201,7 +1201,7 @@ zh_TW.extDJVU =DjVu 檔案 sr_Cyrl_RS.extDJVU =Дигитални документ sr_Latn_RS.extDJVU =Digitalni dokument -en.extXPS =Open XML Paper Specification +en_US.extXPS =Open XML Paper Specification en_GB.extXPS =Open XML Paper Specification ar_SA.extXPS =مستند أوبن إكس بي إس bg.extXPS =Open XML хартиена спецификация @@ -1247,7 +1247,7 @@ zh_TW.extXPS =OpenXPS 檔案 sr_Cyrl_RS.extXPS =Open XML папир спецификација sr_Latn_RS.extXPS =Open XML papir specifikacija -en.extPOT =PowerPoint Template +en_US.extPOT =PowerPoint Template en_GB.extPOT =PowerPoint Template ar_SA.extPOT =قالب بوربوينت sr_Latn_RS.extPOT =PowerPoint Šablon @@ -1265,7 +1265,7 @@ it_IT.extPOT =Modello PowerPoint sr_Cyrl_RS.extPOT =PowerPoint шаблон sr_Latn_RS.extPOT =PowerPoint šablon -en.extPPTM =PowerPoint Open XML Macro-Enabled Presentation +en_US.extPPTM =PowerPoint Open XML Macro-Enabled Presentation en_GB.extPPTM =PowerPoint Open XML Macro-Enabled Presentation ar_SA.extPPTM =عرض بوربوينت مع خاصية الماكرو sr_Latn_RS.extPPTM =PowerPoint Open XML Makro-omogućena Prezentacija @@ -1283,7 +1283,7 @@ it_IT.extPPTM =Presentazione PowerPoint Open XML con attivazione macro sr_Cyrl_RS.extPPTM =PowerPoint презентација са макроима у отвореном XML формату sr_Latn_RS.extPPTM =PowerPoint prezentacija sa makroima u otvorenom XML formatu -en.extEPUB =Open eBook File +en_US.extEPUB =Open eBook File en_GB.extEPUB =Open eBook File ar_SA.extEPUB =كتاب النشر الإلكتروني sr_Latn_RS.extEPUB =Open eBook Fajl @@ -1301,7 +1301,7 @@ it_IT.extEPUB =File Open eBook sr_Cyrl_RS.extEPUB =Отворена еКњига sr_Latn_RS.extEPUB =Otvorena eKnjiga -en.extFB2 =FictionBook 2.0 File +en_US.extFB2 =FictionBook 2.0 File en_GB.extFB2 =FictionBook 2.0 File ar_SA.extFB2 =ملف فكشنبوك 2.0 sr_Latn_RS.extFB2 =KnjigaFikcije 2.0 Fajl @@ -1319,7 +1319,7 @@ it_IT.extFB2 =File FictionBook 2.0 sr_Cyrl_RS.extFB2 =FictionBook 2.0 датотека sr_Latn_RS.extFB2 =FictionBook 2.0 datoteka -en.extDOTX =Word Open XML Document Template +en_US.extDOTX =Word Open XML Document Template en_GB.extDOTX =Word Open XML Document Template ar_SA.extDOTX =قالب وورد sr_Latn_RS.extDOTX =Word Open XML Dokument Šablon @@ -1337,7 +1337,7 @@ it_IT.extDOTX =Modello di documento Word Open XML sr_Cyrl_RS.extDOTX =Word шаблон документа у отвореном XML формату sr_Latn_RS.extDOTX =Word šablon dokumenta u otvorenom XML formatu -en.extOXPS =Open XML Paper Specification +en_US.extOXPS =Open XML Paper Specification en_GB.extOXPS =Open XML Paper Specification ar_SA.extOXPS =مستند أوبن إكس بي إس bg.extOXPS =Open XML хартиена спецификация @@ -1382,7 +1382,7 @@ si.extOXPS =විවෘත XML කොළයේ පිරිවිතර sr_Cyrl_RS.extOXPS =Open XML папир спецификација sr_Latn_RS.extOXPS =Open XML papir specifikacija -en.extXLSB =Excel Binary File Format +en_US.extXLSB =Excel Binary File Format en_GB.extXLSB =Excel Binary File Format si.extXLSB =එක්සෙල් ද්විමය ගොනු ආකෘතිය es.extXLSB =Formato de archivo binario de Excel @@ -1400,7 +1400,7 @@ sr_Latn_RS.extXLSB =Excel binarni format datoteke ;====================================================================================================== -en.jumpDOCX =New document +en_US.jumpDOCX =New document en_GB.jumpDOCX =New document ar_SA.jumpDOCX =مستند جديد bg.jumpDOCX =Нов документ @@ -1446,7 +1446,7 @@ zh_TW.jumpDOCX =新文件 sr_Latn_RS.jumpDOCX =Novi dokument sr_Cyrl_RS.jumpDOCX =Нови документ -en.jumpXLSX =New spreadsheet +en_US.jumpXLSX =New spreadsheet en_GB.jumpXLSX =New spreadsheet ar_SA.jumpXLSX =جدول بياني جديد bg.jumpXLSX =Нова електронна таблица @@ -1492,7 +1492,7 @@ zh_TW.jumpXLSX =新試算表 sr_Latn_RS.jumpXLSX =Nova proračunska tabela sr_Cyrl_RS.jumpXLSX =Нова прорачунска табела -en.jumpPPTX =New presentation +en_US.jumpPPTX =New presentation en_GB.jumpPPTX =New presentation ar_SA.jumpPPTX =عرض تقديمي جديد bg.jumpPPTX =Нова презентация @@ -1538,7 +1538,7 @@ zh_TW.jumpPPTX =新簡報 sr_Latn_RS.jumpPPTX =Nova prezentacija sr_Cyrl_RS.jumpPPTX =Нова презентација -en.jumpDOCXF =New PDF Form +en_US.jumpDOCXF =New PDF Form en_GB.jumpDOCXF =New PDF Form ar_SA.jumpDOCXF =نموذج PDF جديد bg.jumpDOCXF =Нов PDF формуляр @@ -1584,7 +1584,7 @@ zh_TW.jumpDOCXF =新的 PDF 表格 sr_Latn_RS.jumpDOCXF =Novi PDF formular sr_Cyrl_RS.jumpDOCXF =Нови PDF формулар -en.defprogAppDescription=Free desktop office suite for document editing and collaboration +en_US.defprogAppDescription=Free desktop office suite for document editing and collaboration en_GB.defprogAppDescription=Free desktop office suite for document editing and collaboration ar_SA.defprogAppDescription=حزمة برامج مكتبية مجانية لتحرير المستندات والتعاون لإنجازها مع رفقائك bg.defprogAppDescription=Безплатен офис пакет за редактиране и съвместна работа по документи @@ -1630,7 +1630,7 @@ zh_TW.defprogAppDescription=使用於檔案編輯和協作的免費桌面辦公 sr_Latn_RS.defprogAppDescription=Besplatni desktop ofis paket za uređivanje dokumenata i saradnju sr_Cyrl_RS.defprogAppDescription =Бесплатни десктоп офис пакет за уређивање докумената и сарадњу -en.warnWin10FileAssociationDesc=To associate the files with the application, open the following window after the installation is complete: +en_US.warnWin10FileAssociationDesc=To associate the files with the application, open the following window after the installation is complete: en_GB.warnWin10FileAssociationDesc=To associate the files with the application, open the following window after the installation is complete: ar_SA.warnWin10FileAssociationDesc=لربط الملفات مع التطبيق، افتح النافذة التالية بعد إكمال التثبيت bg.warnWin10FileAssociationDesc=За да свържете файловете с приложението, отворете следния прозорец, след като инсталацията приключи: @@ -1676,7 +1676,7 @@ zh_TW.warnWin10FileAssociationDesc=當安裝完成後,開啟以下的視窗將 sr_Latn_RS.warnWin10FileAssociationDesc=Da biste povezali fajlove sa aplikacijom, otvorite predstojeći prozor nakon što se instalacija završi sr_Cyrl_RS.warnWin10FileAssociationDesc =Да бисте повезали фајлове са апликацијом, отворите предстојећи прозор након што се инсталација заврши -en.warnWin10FileAssociationPath=Settings > Apps > Default apps +en_US.warnWin10FileAssociationPath=Settings > Apps > Default apps en_GB.warnWin10FileAssociationPath=Settings > Apps > Default apps ar_SA.warnWin10FileAssociationPath=الإعدادات > تطبيقات > الافتراضية bg.warnWin10FileAssociationPath=Настройки> Приложения> Приложение по подразбиране @@ -1722,7 +1722,7 @@ zh_TW.warnWin10FileAssociationPath=設定 > 應用程式 > 預設應用程式 sr_Latn_RS.warnWin10FileAssociationPath=Podešavanja > Aplikacije > Podrazumevane aplikacije sr_Cyrl_RS.warnWin10FileAssociationPath =Подешавања > Апликације > Подразумеване апликације -en.runOpenDefaultApps=Open Default apps +en_US.runOpenDefaultApps=Open Default apps en_GB.runOpenDefaultApps=Open Default apps ar_SA.runOpenDefaultApps=افتح التطبيقات الافتراضية bg.runOpenDefaultApps=Отвори приложения по подразбиране @@ -1853,7 +1853,7 @@ begin #ifdef _ONLYOFFICE AudioExts[23] := 'DOCXF'; #endif - + SetArrayLength(ExtensionRegistryInfo, GetArrayLength(AudioExts)); prefix := '{#ASCC_REG_PREFIX}' + '.'; @@ -2070,9 +2070,9 @@ var found: Boolean; i: Integer; begin - langs := ['az-Latn-AZ', 'bg-BG', 'cs-CZ', 'de-DE', 'el-GR', 'en-US', 'en-GB', 'es-ES', - 'eu-ES', 'fr-FR', 'gl-ES', 'hy-AM', 'it-IT', 'ja-JP', 'ko-KR', 'lv-LV', - 'ms-MY', 'nl-NL', 'pl-PL', 'pt-PT', 'pt-BR', 'ru-RU', 'sk-SK', 'sv-SE', + langs := ['az-Latn-AZ', 'bg-BG', 'cs-CZ', 'de-DE', 'el-GR', 'en-US', 'en-GB', 'es-ES', + 'eu-ES', 'fr-FR', 'gl-ES', 'hy-AM', 'it-IT', 'ja-JP', 'ko-KR', 'lv-LV', + 'ms-MY', 'nl-NL', 'pl-PL', 'pt-PT', 'pt-BR', 'ru-RU', 'sk-SK', 'sv-SE', 'tr-TR', 'uk-UA', 'vi-VN', 'zh-CN', 'zh-TW', 'ar-SA', 'sr-Latn-RS']; found := False; @@ -2086,7 +2086,7 @@ begin break; end; end; - + if not found then begin for i := 0 to GetArrayLength(langs) - 1 do begin if Copy(langs[i], 1, 2) = lang then begin @@ -2096,9 +2096,9 @@ begin end; end; - args := ['new.docx:.docx:.Document.12:7', - 'new.pptx:.pptx:.Show.12:9', - 'new.xlsx:.xlsx:.Sheet.12:10' + args := ['new.docx:.docx:.Document.12:7', + 'new.pptx:.pptx:.Show.12:9', + 'new.xlsx:.xlsx:.Sheet.12:10' #ifdef _ONLYOFFICE ,'new.pdf:.pdf:.Pdf:5' #endif @@ -2133,7 +2133,7 @@ begin end; for i := 0 to GetArrayLength(AudioExts) - 1 do - begin + begin Explode(argsArray, ExtensionRegistryInfo[i],':'); // checking existance is temporary locked to rewrite new icons indexes @@ -2157,12 +2157,12 @@ begin if not RegValueExists(HKEY_LOCAL_MACHINE, 'Software\Classes\.' + ext + '\OpenWithProgids', argsArray[0]) then RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.' + ext + '\OpenWithProgids', argsArray[0], ''); - - if RegValueExists(HKEY_CURRENT_USER, 'Software\Classes\.' + ext, '') then + + if RegValueExists(HKEY_CURRENT_USER, 'Software\Classes\.' + ext, '') then RegQueryStringValue(HKEY_CURRENT_USER, 'Software\Classes\.' + ext, '', progId2); - if ((Length(progId2) <> 0) and (CompareText(progId2, argsArray[0]) <> 0)) or - ((Length(progId1) <> 0) and (CompareText(progId1, argsArray[0]) <> 0)) then + if ((Length(progId2) <> 0) and (CompareText(progId2, argsArray[0]) <> 0)) or + ((Length(progId1) <> 0) and (CompareText(progId1, argsArray[0]) <> 0)) then begin RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.' + ext + '\UserChoice'); RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Classes\.' + ext, '', argsArray[0]) @@ -2189,7 +2189,7 @@ begin extensionInfo[0] := prefix + 'Docxf:' + ExpandConstant('{cm:extDOCXF}') + ':' + '13'; for i := 0 to GetArrayLength(cleanExts) - 1 do - begin + begin Explode(argsArray, extensionInfo[i],':'); RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, 'Software\Classes\' + argsArray[0]); @@ -2208,7 +2208,7 @@ begin RegQueryStringValue(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.' + ext + '\UserChoice', 'Progid', str); if CompareText(str, argsArray[0]) = 0 then RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.' + ext + '\UserChoice'); - + //RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\Applications\{#NAME_EXE_OUT})')); RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\.' + ext + '\OpenWithList\{#NAME_EXE_OUT}')); end; @@ -2234,7 +2234,7 @@ begin initExtensions(); for i := 0 to GetArrayLength(AudioExts) - 1 do - begin + begin Explode(argsArray, ExtensionRegistryInfo[i],':'); RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, 'Software\Classes\' + argsArray[0]); @@ -2253,7 +2253,7 @@ begin RegQueryStringValue(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.' + ext + '\UserChoice', 'Progid', str); if CompareText(str, argsArray[0]) = 0 then RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.' + ext + '\UserChoice'); - + //RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\Applications\{#NAME_EXE_OUT})')); RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\.' + ext + '\OpenWithList\{#NAME_EXE_OUT}')); end; diff --git a/win-linux/package/windows/common.iss b/win-linux/package/windows/common.iss index c7dcb7ffd..d4e968583 100644 --- a/win-linux/package/windows/common.iss +++ b/win-linux/package/windows/common.iss @@ -168,10 +168,11 @@ Name: en_GB; MessagesFile: compiler:Languages\EnglishBritish.isl; LicenseFile: { lo.LanguageName=ພາສາລາວ ;ga_IE.LanguageName=Gaeilge ar_SA.LanguageName=الْعَرَبِيَّة +en_US.LanguageName=English (United States) [CustomMessages] ;====================================================================================================== -en.PrevVer=The previous version of {#sAppName} detected, please click 'OK' button to uninstall it, or 'Cancel' to quit setup. +en_US.PrevVer=The previous version of {#sAppName} detected, please click 'OK' button to uninstall it, or 'Cancel' to quit setup. en_GB.PrevVer=The previous version of {#sAppName} detected, please click 'OK' button to uninstall it, or 'Cancel' to quit setup. ru.PrevVer=Обнаружена предыдущая версия {#sAppName}, нажмите кнопку 'OK', чтобы удалить её, или 'Отмена', чтобы выйти из программы инсталляции. it_IT.PrevVer=È stata rilevata la versione precedente di {#sAppName}. Fai clic sul pulsante "OK" per disinstallarla oppure su "Annulla" per uscire dalla configurazione. @@ -183,7 +184,7 @@ ja.PrevVer=旧バージョンの{#sAppName}が検出されました。「OK」 es.PrevVer=Se ha detectado la versión anterior de {#sAppName}. Por favor, haga clic en el botón 'OK' para desinstalarla, o en 'Cancelar' para salir de la instalación. de.PrevVer=Die vorherige Version von {#sAppName} wurde erkannt. Bitte klicken Sie auf 'OK', um sie zu deinstallieren, oder auf 'Abbrechen', um das Setup zu beenden. ;====================================================================================================== -en.Launch =Launch %1 +en_US.Launch =Launch %1 en_GB.Launch =Launch %1 ar_SA.Launch =بدء تشغيل %1 bg.Launch =Пускане %1 @@ -229,7 +230,7 @@ zh_TW.Launch =啓動 %1 sr_Latn_RS.Launch =Lansiraj %1 sr_Cyrl_RS.Launch =Лансирај %1 ;====================================================================================================== -en.CreateDesktopIcon =Create %1 &desktop icon +en_US.CreateDesktopIcon =Create %1 &desktop icon en_GB.CreateDesktopIcon =Create %1 &desktop icon ar_SA.CreateDesktopIcon =إنشاء %1 &أيقونة سطح المكتب bg.CreateDesktopIcon =Създаване на %1 &икона на работния плот @@ -275,7 +276,7 @@ zh_TW.CreateDesktopIcon =建立 %1 和桌面圖示 sr_Latn_RS.CreateDesktopIcon =Kreiraj %1 &desktop ikonicu sr_Cyrl_RS.CreateDesktopIcon =Креирај %1 &десктоп иконицу ;====================================================================================================== -en.InstallAdditionalComponents =Installing additional system components. Please wait... +en_US.InstallAdditionalComponents =Installing additional system components. Please wait... en_GB.InstallAdditionalComponents =Installing additional system components. Please wait... ar_SA.InstallAdditionalComponents =جاري تثبيت مكونات نظام إضافية. الرجاء الانتظار... ca.InstallAdditionalComponents =Instal·lació de components de sistema addicionals. Si us plau, espereu... @@ -321,7 +322,7 @@ zh_TW.InstallAdditionalComponents =正在安裝附加系統元件,請稍候... sr_Latn_RS.InstallAdditionalComponents =Instaliranje dodatnih sistemskih komponenti. Molimo sačekajte... sr_Cyrl_RS.InstallAdditionalComponents =Инсталирање додатних системских компоненти. Молимо сачекајте... ;====================================================================================================== -en.AdditionalTasks =Tasks: +en_US.AdditionalTasks =Tasks: en_GB.AdditionalTasks =Tasks: ar_SA.AdditionalTasks =المهام: bg.AdditionalTasks =Задачи: @@ -367,7 +368,7 @@ zh_TW.AdditionalTasks =工作: sr_Latn_RS.AdditionalTasks =Zadaci: sr_Cyrl_RS.AdditionalTasks =Задаци: ;====================================================================================================== -en.Uninstall =Uninstall +en_US.Uninstall =Uninstall en_GB.Uninstall =Uninstall ar_SA.Uninstall =إزالة التثبيت bg.AdditionalTasks =Деинсталиране @@ -413,7 +414,7 @@ zh_TW.Uninstall =解除安裝 sr_Latn_RS.Uninstall =Deinstaliraj sr_Cyrl_RS.Uninstall =Деинсталирај ;====================================================================================================== -en.WarningWrongArchitecture =You are trying to install the %1-bit application version over the %2-bit version installed. Please uninstall the previous version first or download the correct version for installation. +en_US.WarningWrongArchitecture =You are trying to install the %1-bit application version over the %2-bit version installed. Please uninstall the previous version first or download the correct version for installation. en_GB.WarningWrongArchitecture =You are trying to install the %1-bit application version over the %2-bit version installed. Please uninstall the previous version first or download the correct version for installation. ar_SA.WarningWrongArchitecture =أنت تحاول تثبيت نسخة %1-bit من التطبيق على نسخة %2-bit المثبتة. فضلًا قم بإزالة النسخة السابقة أولًا أو قم بتحميل النسخة الصحيحة ليتم تثبيتها. bg.WarningWrongArchitecture =Опитвате се да инсталирате %1-битовата версия на приложението над инсталираната %2-битова версия. Моля, деинсталирайте първо предишната версия или изтеглете правилната версия за инсталиране. @@ -460,7 +461,7 @@ sr_Latn_RS.WarningWrongArchitecture =Pokušavate da instalirate %1-bit aplikacij sr_Cyrl_RS.WarningWrongArchitecture =Покушавате да инсталирате %1-бит апликација верзију преко %2-бит инсталиране верзије. Молимо прво деинсталирајте претходну верзију или преузмите тачну верзију за инсталацију. ;====================================================================================================== -en.UpdateAppRunning=Setup has detected that %1 is currently running.%n%nIt'll be closed automatically. Click OK to continue, or Cancel to exit. +en_US.UpdateAppRunning=Setup has detected that %1 is currently running.%n%nIt'll be closed automatically. Click OK to continue, or Cancel to exit. en_GB.UpdateAppRunning=Setup has detected that %1 is currently running.%n%nIt'll be closed automatically. Click OK to continue, or Cancel to exit. ar_SA.UpdateAppRunning=تم اكتشاف أن %1 قيد التشغيل.%n%nسيتم إغلاقه بشكل تلقائي. اضغط حسنًا للإكمال، أو إلغاء. bg.UpdateAppRunning=Настройката установи, че %1 в момента работи.%n%nТова ще бъде затворено автоматично. Щракнете върху OK, за да продължите, или Отказ, за да излезете. @@ -506,7 +507,7 @@ zh_TW.UpdateAppRunning=安裝程式偵測到 %1 正在執行中。%n%n將會自 sr_Latn_RS.UpdateAppRunning=Setup je detektovao da %1 se trenutno izvršava.%n%nBiće zatvoreno automatski. Kliknite OK da nastavite, ili Otkaži da izađete. sr_Cyrl_RS.UpdateAppRunning =Сетуп је детектовао да %1 се тренутно извршава.%n%nБиће затворено аутоматски. Кликните ОК да наставите, или Откажи да изађете. ;====================================================================================================== -en.WarningClearAppData =Do you want to clear the user settings and application cached data? +en_US.WarningClearAppData =Do you want to clear the user settings and application cached data? en_GB.WarningClearAppData =Do you want to clear the user settings and application cached data? ar_SA.WarningClearAppData =هل تريد مسح إعدادات المستخدم وبيانات التطبيق المؤقتة؟ bg.WarningClearAppData =Искате ли да изчистите потребителските настройки и кешираните данни на приложението? @@ -554,7 +555,7 @@ sr_Cyrl_RS.WarningClearAppData =Да ли желите да обришете к ;====================================================================================================== -;en.AssociateDescription =Associate office document file types with %1 +;en_US.AssociateDescription =Associate office document file types with %1 ;en_GB.AssociateDescription =Associate office document file types with %1 ;ar_SA.AssociateDescription =هل تريد ربط صيغة المستند بـ %1 ;bg.AssociateDescription =Свържете типовете файлове на офис документи с %1 @@ -580,7 +581,7 @@ sr_Cyrl_RS.WarningClearAppData =Да ли желите да обришете к ;sr_Latn_RS.AssociateDescription =Poveži vrste ofis fajl dokumenata sa %1 ;sr_Cyrl_RS.AssociateDescription =Повежи врсте офис фајл докумената са %1 ;====================================================================================================== -en.UpdateService =Update service for {#sAppName} +en_US.UpdateService =Update service for {#sAppName} en_GB.UpdateService =Update service for {#sAppName} ar_SA.UpdateService =خدمة التحديث لـ {#sAppName} cs.UpdateService =Služba aktualizace {#sAppName} From aa10fe7cc1def596176d65bd0537fa101cc6172e Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sat, 7 Sep 2024 09:39:08 +0300 Subject: [PATCH 36/97] [win] updatesvc: debug msi package launch --- .../extras/update-daemon/src/classes/csvcmanager.cpp | 11 +++++++++-- .../extras/update-daemon/src/platform_win/utils.cpp | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 7ec7fa36e..42106d462 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -906,13 +906,20 @@ void CSvcManager::startInstallPackage(const tstring &advArgs) NS_Logger::WriteLog(_TR("Update cancelled. The file signature is missing:") + _T(" ") + m_packageData->fileName, true); return; } - tstring args = m_packageData->packageArgs; + tstring args; + if (m_packageData->fileType == _T("msi")) { + args = _T("/i \"") + NS_File::toNativeSeparators(m_packageData->fileName) + _T("\""); + if (!m_packageData->packageArgs.empty()) + args += _T(" ") + m_packageData->packageArgs; + } else { + args = m_packageData->packageArgs; + } if (!advArgs.empty()) { if (!args.empty()) args += _T(" "); args += advArgs; } - if (!NS_File::runProcess(m_packageData->fileName, args)) + if (!NS_File::runProcess(m_packageData->fileType == _T("msi") ? _T("msiexec.exe") : m_packageData->fileName, args)) NS_Logger::WriteLog(_TR("An error occurred while start install updates!"), true); } #endif diff --git a/win-linux/extras/update-daemon/src/platform_win/utils.cpp b/win-linux/extras/update-daemon/src/platform_win/utils.cpp index 647726ba4..2c5b6e5a2 100644 --- a/win-linux/extras/update-daemon/src/platform_win/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/utils.cpp @@ -301,7 +301,7 @@ namespace NS_File si.cb = sizeof(STARTUPINFO); PROCESS_INFORMATION pi; ZeroMemory(&pi, sizeof(pi)); - if (CreateProcess(fileName.c_str(), &_args[0], + if (CreateProcess(NULL, &_args[0], NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT, NULL, NULL, &si, &pi)) { @@ -340,7 +340,7 @@ namespace NS_File si.cb = sizeof(STARTUPINFO); si.lpDesktop = const_cast(L"Winsta0\\Default"); PROCESS_INFORMATION pi; - if (CreateProcessAsUser(hTokenDup, fileName.c_str(), + if (CreateProcessAsUser(hTokenDup, NULL, &_args[0], NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT, From 8713f91dd936e93e87a39b977c33bc0e31283bf2 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sat, 7 Sep 2024 09:42:16 +0300 Subject: [PATCH 37/97] [win] updmanager: exclude passing additional installation arguments --- .../extras/update-daemon/src/classes/csvcmanager.cpp | 8 +++----- win-linux/extras/update-daemon/src/classes/csvcmanager.h | 2 +- win-linux/src/cupdatemanager.cpp | 8 +------- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 42106d462..2fbee9624 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -371,7 +371,7 @@ void CSvcManager::init() case MSG_StartInstallPackage: if (!m_packageData->fileName.empty() && NS_File::getFileHash(m_packageData->fileName) == m_packageData->hash) { __GLOBAL_LOCK - startInstallPackage(params[1]); + startInstallPackage(); __UNLOCK } else { m_socket->sendMessage(MSG_OtherError, _T("SVC_TXT_ERR_MD5")); @@ -899,7 +899,7 @@ void CSvcManager::startReplacingService(const bool restartAfterUpdate) } #ifdef _WIN32 -void CSvcManager::startInstallPackage(const tstring &advArgs) +void CSvcManager::startInstallPackage() { // Verify the signature of executable files if (!NS_File::verifyEmbeddedSignature(m_packageData->fileName)) { @@ -913,11 +913,9 @@ void CSvcManager::startInstallPackage(const tstring &advArgs) args += _T(" ") + m_packageData->packageArgs; } else { args = m_packageData->packageArgs; - } - if (!advArgs.empty()) { if (!args.empty()) args += _T(" "); - args += advArgs; + args += _T("/LANG=") + NS_Utils::GetAppLanguage(); } if (!NS_File::runProcess(m_packageData->fileType == _T("msi") ? _T("msiexec.exe") : m_packageData->fileName, args)) NS_Logger::WriteLog(_TR("An error occurred while start install updates!"), true); diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.h b/win-linux/extras/update-daemon/src/classes/csvcmanager.h index 607fd2097..e9412836c 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.h +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.h @@ -67,7 +67,7 @@ private: void startReplacingFiles(const tstring &packageType, const bool restartAfterUpdate); void startReplacingService(const bool restartAfterUpdate); #ifdef _WIN32 - void startInstallPackage(const tstring &advArgs); + void startInstallPackage(); #endif struct PackageData; diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index d63f3a5be..53e5f2406 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -747,13 +747,7 @@ void CUpdateManager::handleAppClose() if ( m_startUpdateOnClose ) { #ifdef _WIN32 if (m_packageData->fileType != "archive") { - wstring args; - if (m_packageData->fileType == "iss") { - GET_REGISTRY_SYSTEM(reg_system) - QString prev_inst_lang = "/LANG=" + reg_system.value("locale", "en").toString(); - args += prev_inst_lang.toStdWString(); - } - if (!m_socket->sendMessage(MSG_StartInstallPackage, WStrToTStr(args))) { + if (!m_socket->sendMessage(MSG_StartInstallPackage)) { criticalMsg(nullptr, QObject::tr("An error occurred while start install updates: Update Service not found!")); } } else { From 93273a6f5d591ece337dd89e928dafe73be7479c Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sat, 7 Sep 2024 09:43:09 +0300 Subject: [PATCH 38/97] [win] updatesvc: debug GetAppLanguage --- win-linux/extras/update-daemon/src/platform_win/utils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/extras/update-daemon/src/platform_win/utils.cpp b/win-linux/extras/update-daemon/src/platform_win/utils.cpp index 2c5b6e5a2..782b6a7ff 100644 --- a/win-linux/extras/update-daemon/src/platform_win/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/utils.cpp @@ -145,7 +145,7 @@ namespace NS_Utils { wstring lang = TEXT("en_US"), subkey = TEXT("SOFTWARE\\" REG_GROUP_KEY "\\" REG_APP_NAME); HKEY hKey = NULL, hRootKey = isRunAsApp() ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE; - if (RegOpenKeyEx(hRootKey, subkey.c_str(), 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) { + if (RegOpenKeyEx(hRootKey, subkey.c_str(), 0, KEY_READ, &hKey) == ERROR_SUCCESS) { DWORD type = REG_SZ, cbData = 0; if (RegGetValue(hKey, NULL, TEXT("locale"), RRF_RT_REG_SZ, &type, NULL, &cbData) == ERROR_SUCCESS) { wchar_t *pvData = (wchar_t*)malloc(cbData); From 71061fc59a423e087602ffb220dbb9a3dd64483f Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Sat, 7 Sep 2024 16:54:46 +0000 Subject: [PATCH 39/97] [win] fix app package build --- win-linux/package/windows/common.iss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/package/windows/common.iss b/win-linux/package/windows/common.iss index d4e968583..81e80fe78 100644 --- a/win-linux/package/windows/common.iss +++ b/win-linux/package/windows/common.iss @@ -108,11 +108,11 @@ LZMAUseSeparateProcess=yes [Languages] #define sLicenseFile BRANDING_DIR + "\..\..\..\common\package\license\" + LIC_FILE + ".rtf" #ifdef _ONLYOFFICE -Name: en; MessagesFile: compiler:Default.isl; LicenseFile: {#sLicenseFile}; +Name: en_US; MessagesFile: compiler:Default.isl; LicenseFile: {#sLicenseFile}; Name: ru; MessagesFile: compiler:Languages\Russian.isl; LicenseFile: {#sLicenseFile}; #else Name: ru; MessagesFile: compiler:Languages\Russian.isl; LicenseFile: {#sLicenseFile}; -Name: en; MessagesFile: compiler:Default.isl; LicenseFile: {#sLicenseFile}; +Name: en_US; MessagesFile: compiler:Default.isl; LicenseFile: {#sLicenseFile}; #endif Name: bg; MessagesFile: compiler:Languages\Bulgarian.isl; LicenseFile: {#sLicenseFile}; Name: ca; MessagesFile: compiler:Languages\Catalan.isl; LicenseFile: {#sLicenseFile}; From d8c92ea91687a852e6a1b59dde0175ea461fef62 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Sat, 7 Sep 2024 18:25:59 +0000 Subject: [PATCH 40/97] [win] fix app package build --- win-linux/package/windows/uninstall_page.iss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/package/windows/uninstall_page.iss b/win-linux/package/windows/uninstall_page.iss index 37b2649f6..bc5cae7f2 100644 --- a/win-linux/package/windows/uninstall_page.iss +++ b/win-linux/package/windows/uninstall_page.iss @@ -1,6 +1,6 @@  [CustomMessages] -en.UninstallPageLabel=Press Uninstall to proceed with uninstallation. +en_US.UninstallPageLabel=Press Uninstall to proceed with uninstallation. en_GB.UninstallPageLabel=Press Uninstall to proceed with uninstallation. cs.UninstallPageLabel=Stisknutím Odinstalovat pokračujte v odinstalování. sk.UninstallPageLabel=Stlačením Odinštalovať pokračujte v odinštalácii. @@ -22,7 +22,7 @@ sr_Latn_RS.UninstallPageLabel=Pritisnite Deinstaliraj da nastavite da deinstalac sr_Cyrl_RS.UninstallPageLabel=Притисните Деинсталирај да наставите да деинсталацијом -en.UninstallOptionClearData=Clear all user settings and application cached data +en_US.UninstallOptionClearData=Clear all user settings and application cached data en_GB.UninstallOptionClearData=Clear all user settings and application cached data cs.UninstallOptionClearData=Vymažte všechna uživatelská nastavení a data uložená v paměti sk.UninstallOptionClearData=Vymazať všetky používateľské nastavenia a údaje uložené vo vyrovnávacej pamäti From cda95b5b963bddee777b2e8aaaadae6785fe0bf9 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 9 Sep 2024 11:23:53 +0300 Subject: [PATCH 41/97] [macos] fix bug 69400 --- macos/ONLYOFFICE/Base.lproj/Main.storyboard | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macos/ONLYOFFICE/Base.lproj/Main.storyboard b/macos/ONLYOFFICE/Base.lproj/Main.storyboard index 1db35d069..9c0490a23 100644 --- a/macos/ONLYOFFICE/Base.lproj/Main.storyboard +++ b/macos/ONLYOFFICE/Base.lproj/Main.storyboard @@ -167,7 +167,7 @@ - + From 93fe7c588ab792e2e8c156494fb5d2d35d952225 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 10 Sep 2024 08:47:44 +0300 Subject: [PATCH 42/97] [win] for bug 70036 --- win-linux/package/windows/common.iss | 10 ++++++---- win-linux/package/windows/utils.iss | 11 +++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/win-linux/package/windows/common.iss b/win-linux/package/windows/common.iss index 81e80fe78..e481ff347 100644 --- a/win-linux/package/windows/common.iss +++ b/win-linux/package/windows/common.iss @@ -858,6 +858,7 @@ var begin if CurStep = ssPostInstall then begin DoPostInstall(); + CreateLaunchBatch(); GetWindowsVersionEx(version); if (version.Major > 6) or ((version.Major = 6) and (version.Minor >= 1)) then begin #ifdef _ONLYOFFICE @@ -1083,11 +1084,11 @@ Name: desktopicon; Description: {cm:CreateDesktopIcon,{#sAppName}}; GroupDescrip Name: {commondesktop}\{#sAppIconName}; FileName: {app}\{#iconsExe}; WorkingDir: {app}; Tasks: desktopicon; IconFilename: {app}\app.ico; AppUserModelID: {#APP_USER_MODEL_ID}; Name: {group}\{#sAppIconName}; Filename: {app}\{#iconsExe}; WorkingDir: {app}; IconFilename: {app}\app.ico; AppUserModelID: {#APP_USER_MODEL_ID}; Name: {group}\{cm:Uninstall}; IconFilename: {app}\{#iconsExe}; IconIndex: 25; Filename: {uninstallexe}; WorkingDir: {app}; -Name: "{group}\{cm:jumpDOCX}"; IconFilename: "{app}\{#iconsExe}"; IconIndex: 14; Filename: "{app}\{#iconsExe}"; Parameters: "--new:word"; -Name: "{group}\{cm:jumpXLSX}"; IconFilename: "{app}\{#iconsExe}"; IconIndex: 15; Filename: "{app}\{#iconsExe}"; Parameters: "--new:cell"; -Name: "{group}\{cm:jumpPPTX}"; IconFilename: "{app}\{#iconsExe}"; IconIndex: 16; Filename: "{app}\{#iconsExe}"; Parameters: "--new:slide"; +Name: "{group}\{cm:jumpDOCX}"; IconFilename: "{app}\{#iconsExe}"; IconIndex: 14; Filename: "{app}\launch.bat"; Parameters: "--new:word"; Flags: runminimized; +Name: "{group}\{cm:jumpXLSX}"; IconFilename: "{app}\{#iconsExe}"; IconIndex: 15; Filename: "{app}\launch.bat"; Parameters: "--new:cell"; Flags: runminimized; +Name: "{group}\{cm:jumpPPTX}"; IconFilename: "{app}\{#iconsExe}"; IconIndex: 16; Filename: "{app}\launch.bat"; Parameters: "--new:slide"; Flags: runminimized; #ifdef _ONLYOFFICE -Name: "{group}\{cm:jumpDOCXF}"; IconFilename: "{app}\{#iconsExe}"; IconIndex: 17; Filename: "{app}\{#iconsExe}"; Parameters: "--new:form"; +Name: "{group}\{cm:jumpDOCXF}"; IconFilename: "{app}\{#iconsExe}"; IconIndex: 17; Filename: "{app}\launch.bat"; Parameters: "--new:form"; Flags: runminimized; #endif [Run] @@ -1117,4 +1118,5 @@ Root: HKLM; Subkey: "SOFTWARE\Classes\{#sAppProtocol}\Shell\Open\Command"; Value [UninstallDelete] Type: filesandordirs; Name: {commonappdata}\{#APP_PATH}\*; AfterInstall: RefreshEnvironment; Type: filesandordirs; Name: "{app}\..\{#UPD_PATH}"; +Type: files; Name: "{app}\launch.bat"; Type: files; Name: "{app}\svcrestart.bat"; diff --git a/win-linux/package/windows/utils.iss b/win-linux/package/windows/utils.iss index 424365d92..689a173bd 100644 --- a/win-linux/package/windows/utils.iss +++ b/win-linux/package/windows/utils.iss @@ -105,6 +105,17 @@ begin Result := msiproductupgrade(upgradecode, '14.27.29114.0'); end; +procedure CreateLaunchBatch(); +var + fileName: String; + lines: TArrayOfString; +begin + SetArrayLength(lines, 1); + fileName := ExpandConstant('{app}\launch.bat'); + lines[0] := ExpandConstant('start "" "{app}\{#iconsExe}" %*'); + SaveStringsToFile(fileName, lines, False); +end; + function ReadBinFile(fileName: String; list: TStringList): Boolean; var fs: TFileStream; From 5531c3fb45370c6eb034076cf130378ac7315411 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Tue, 10 Sep 2024 23:59:26 +0300 Subject: [PATCH 43/97] [macos] fix bug 67689 --- .../Code/Controllers/Common/ASCCommonViewController.mm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm index 795a4dc87..fbe1649df 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm @@ -989,6 +989,10 @@ [self.tabsControl removeTab:tab]; } } + } else if ( keyCode == 81 ) { // Q + if ( pData->get_IsCommandMac() ) { + [NSApp terminate:self]; + } } } } From 00d5bc4978b8fb81da2e6e3d4bcf09bdd7e11769 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 11 Sep 2024 11:09:57 +0300 Subject: [PATCH 44/97] [win-linux] fix default light theme --- win-linux/src/cthemes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/src/cthemes.cpp b/win-linux/src/cthemes.cpp index bf53c67b8..277ef7dd9 100644 --- a/win-linux/src/cthemes.cpp +++ b/win-linux/src/cthemes.cpp @@ -22,7 +22,7 @@ #define REGISTRY_THEME_KEY "UITheme" #define REGISTRY_THEME_KEY_7_2 "UITheme2" #define THEME_DEFAULT_DARK_ID "theme-dark" -#define THEME_DEFAULT_LIGHT_ID "theme-gray" +#define THEME_DEFAULT_LIGHT_ID "theme-classic-light" #define THEME_ID_SYSTEM "theme-system" namespace NSTheme { From 4b73d2fcd1aadba99fe1748b9433d57f3de86660 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 11 Sep 2024 11:11:12 +0300 Subject: [PATCH 45/97] [win] updatesvc: debug restartService --- win-linux/extras/update-daemon/src/classes/csvcmanager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 2fbee9624..63f00612a 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -170,7 +170,7 @@ auto replace(tstring &str, const tstring &from, const tstring &to)->void { #ifdef _WIN32 auto restartService()->void { - const wstring fileName = NS_File::appPath() + RESTART_BATCH; + wstring fileName = NS_File::appPath() + RESTART_BATCH; if (NS_File::fileExists(fileName) && !NS_File::removeFile(fileName)) { NS_Logger::WriteLog(_TR("An error occurred while deleting:") + _T(" ") + fileName, true); return; @@ -195,7 +195,7 @@ auto restartService()->void ZeroMemory(&si, sizeof(si)); ZeroMemory(&pi, sizeof(pi)); si.cb = sizeof(si); - if (!CreateProcess(NULL, const_cast(fileName.c_str()), NULL, NULL, FALSE, + if (!CreateProcess(NULL, &fileName[0], NULL, NULL, FALSE, CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT, NULL, NULL, &si, &pi)) { NS_Logger::WriteLog(_TR("An error occurred while restarting the service!"), true); From bffb15443f3a2c3fdaa51a3122b850775c29a452 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 11 Sep 2024 11:16:06 +0300 Subject: [PATCH 46/97] [macos] for bug 9638 --- macos/ONLYOFFICE/AppDelegate.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macos/ONLYOFFICE/AppDelegate.mm b/macos/ONLYOFFICE/AppDelegate.mm index 56d5949fc..7f63c1417 100644 --- a/macos/ONLYOFFICE/AppDelegate.mm +++ b/macos/ONLYOFFICE/AppDelegate.mm @@ -68,7 +68,7 @@ // Remove 'Start Dictation' and 'Special Characters' from menu [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSDisabledDictationMenuItem"]; - [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSDisabledCharacterPaletteMenuItem"]; + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSDisabledCharacterPaletteMenuItem"]; [[NSUserDefaults standardUserDefaults] synchronize]; From dac8fe868a84ba4b76c794552db5875ddf783b6c Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 11 Sep 2024 11:19:06 +0300 Subject: [PATCH 47/97] [win-linux] fix bug 70048 --- win-linux/src/clangater.cpp | 25 ++++++++++++++++--------- win-linux/src/clangater.h | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/win-linux/src/clangater.cpp b/win-linux/src/clangater.cpp index ef6642764..93f79b5fd 100644 --- a/win-linux/src/clangater.cpp +++ b/win-linux/src/clangater.cpp @@ -107,7 +107,11 @@ public: } QString langName(const QString& code) { - return m_langs.value(code).first; + foreach (const auto &lang, m_langs) { + if (lang.first == code) + return lang.second.first; + } + return ""; } bool reload(const QString& lang) { @@ -140,10 +144,10 @@ public: } QString findCloseLang(const QString& n) { - QMap>::iterator i = m_langs.begin(); + auto i = m_langs.begin(); while ( i != m_langs.end() ) { - if ( i.key().startsWith(n) ) - return i.key(); + if ( i->first.startsWith(n) ) + return i->first; ++i; } @@ -155,7 +159,7 @@ private: std::list m_list; std::list m_dirs; - QMap> m_langs{ + QVector>> m_langs{ {"en-US", {"English (United States)", ""}}, {"en-GB", {"English (United Kingdom)", ""}}, {"ru-RU", {"Русский", "Russian"}}, @@ -165,8 +169,8 @@ private: {"sk-SK", {"Slovenčina", "Slovak"}}, {"cs-CZ", {"Čeština", "Czech"}}, {"it-IT", {"Italiano", "Italian"}}, + {"pt-PT", {"Português (Portugal)", "Portuguese (Portugal)"}}, {"pt-BR", {"Português Brasileiro", "Portuguese (Brazil)"}} - ,{"pt-PT", {"Português (Portugal)", "Portuguese (Portugal)"}} ,{"pl-PL", {"Polski", "Polish"}} ,{"zh-CN", {"简体中文", "Chinese (Simplified)"}} ,{"zh-TW", {"繁體中文", "Chinese (Traditional)"}} @@ -318,7 +322,7 @@ void CLangater::reloadTranslations(const QString& lang) #endif } -void CLangater::refreshLangs(const QMap>& map) +void CLangater::refreshLangs(const QVector>>& map) { getInstance()->m_intf->m_langs = {map}; } @@ -340,9 +344,12 @@ QString CLangater::getLangName(const QString& code) QJsonObject CLangater::availableLangsToJson() { QJsonObject _out_obj; + QMap> langMap; + foreach (const auto &lang, getInstance()->m_intf->m_langs) + langMap.insert(lang.first, lang.second); - QMap>::const_iterator i = getInstance()->m_intf->m_langs.constBegin(); - while ( i != getInstance()->m_intf->m_langs.constEnd() ) { + auto i = langMap.constBegin(); + while ( i != langMap.constEnd() ) { _out_obj.insert(i.key(), QJsonObject{{"name", i.value().first},{"enname", i.value().second}}); ++i; } diff --git a/win-linux/src/clangater.h b/win-linux/src/clangater.h index f6a61b721..de2a3ffe1 100644 --- a/win-linux/src/clangater.h +++ b/win-linux/src/clangater.h @@ -15,7 +15,7 @@ public: static CLangater * getInstance(); static void init(); static void reloadTranslations(const QString&); - static void refreshLangs(const QMap>&); + static void refreshLangs(const QVector>>&); static QString getCurrentLangCode(); static QString getLangName(const QString& code = QString()); static void addTranslation(const QString& dir, const QString& name); From 98c4a1f5dec030ac97729c0a4fd2ded2615bc467 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 11 Sep 2024 11:51:18 +0300 Subject: [PATCH 48/97] [macos] revert last commit --- macos/ONLYOFFICE/AppDelegate.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macos/ONLYOFFICE/AppDelegate.mm b/macos/ONLYOFFICE/AppDelegate.mm index 7f63c1417..56d5949fc 100644 --- a/macos/ONLYOFFICE/AppDelegate.mm +++ b/macos/ONLYOFFICE/AppDelegate.mm @@ -68,7 +68,7 @@ // Remove 'Start Dictation' and 'Special Characters' from menu [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSDisabledDictationMenuItem"]; - [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSDisabledCharacterPaletteMenuItem"]; + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSDisabledCharacterPaletteMenuItem"]; [[NSUserDefaults standardUserDefaults] synchronize]; From d58301450d2ea994188700980708bfb1d5732871 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 11 Sep 2024 11:52:22 +0300 Subject: [PATCH 49/97] [macos] for bug 69638 --- macos/ONLYOFFICE/AppDelegate.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macos/ONLYOFFICE/AppDelegate.mm b/macos/ONLYOFFICE/AppDelegate.mm index 56d5949fc..7f63c1417 100644 --- a/macos/ONLYOFFICE/AppDelegate.mm +++ b/macos/ONLYOFFICE/AppDelegate.mm @@ -68,7 +68,7 @@ // Remove 'Start Dictation' and 'Special Characters' from menu [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSDisabledDictationMenuItem"]; - [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSDisabledCharacterPaletteMenuItem"]; + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSDisabledCharacterPaletteMenuItem"]; [[NSUserDefaults standardUserDefaults] synchronize]; From c4cc709bb8543c4f38098bc988dda2ec10441b11 Mon Sep 17 00:00:00 2001 From: Konstantin Kireyev Date: Wed, 11 Sep 2024 14:32:18 +0500 Subject: [PATCH 50/97] fix: bug 45511 additional allowed characters --- common/loginpage/src/panelsettings.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index efbfe8231..64a25f082 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -380,14 +380,17 @@ * that version has no support for unicode in regexp */ if (window.utils.inParams.osver == 'winxp' || /windows nt 5/i.test(navigator.appVersion)) return true; - else return (new RegExp('^[\\p{L}\\p{M}\\p{N}\'"\\.\\- ]+$', 'iu')).test(name) + else return (new RegExp('^[\\p{L}\\p{M}\\p{N}\'"«»()_+=&^%$#@!~*\\/.\\- ]+$', 'iu')).test(name) }; function _on_btn_apply(e) { let _user_new_name = $userName.val(); if ( _user_new_name && _user_new_name.length && - _validate_user_name(_user_new_name) ) + _validate_user_name(_user_new_name) ) { + _user_new_name = _user_new_name.trim(); + $userName.val(_user_new_name); + let _doc_open_mode = $chOpenMode.prop('checked') ? 'view' : 'edit'; let _new_settings = { username:_user_new_name, From db6647093d199ce4d90d081a6f423ea3812cad59 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 13 Sep 2024 10:50:21 +0300 Subject: [PATCH 51/97] [win] fix top border width for win10 --- win-linux/src/windows/cwindowbase.cpp | 4 +++- win-linux/src/windows/platform_win/cwindowplatform.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/win-linux/src/windows/cwindowbase.cpp b/win-linux/src/windows/cwindowbase.cpp index 88e653f23..9306b5319 100644 --- a/win-linux/src/windows/cwindowbase.cpp +++ b/win-linux/src/windows/cwindowbase.cpp @@ -140,7 +140,9 @@ void CWindowBase::setWindowColors(const QColor& background, const QColor& border } else if (Utils::getWinVersion() == Utils::WinVer::Win10) { int brdWidth = 0; - SystemParametersInfo(SPI_GETBORDER, 0, &brdWidth, 0); + HDC hdc = GetDC(NULL); + brdWidth = GetSystemMetrics(SM_CXBORDER) * GetDeviceCaps(hdc, LOGPIXELSX)/96; + ReleaseDC(NULL, hdc); QColor brdColor = WindowHelper::getColorizationColor(isActive, background); css = QString("QMainWindow{border-top: %1px solid %2; background-color: %3;}").arg(QString::number(brdWidth), brdColor.name(), background.name()); } else { diff --git a/win-linux/src/windows/platform_win/cwindowplatform.cpp b/win-linux/src/windows/platform_win/cwindowplatform.cpp index f5e020d25..d1ae48711 100644 --- a/win-linux/src/windows/platform_win/cwindowplatform.cpp +++ b/win-linux/src/windows/platform_win/cwindowplatform.cpp @@ -247,7 +247,9 @@ void CWindowPlatform::adjustGeometry() } else if (Utils::getWinVersion() == WinVer::Win10) { int brdWidth = 0; - SystemParametersInfo(SPI_GETBORDER, 0, &brdWidth, 0); + HDC hdc = GetDC(NULL); + brdWidth = GetSystemMetrics(SM_CXBORDER) * GetDeviceCaps(hdc, LOGPIXELSX)/96; + ReleaseDC(NULL, hdc); mrg = QMargins(0, brdWidth, 0, 0); } m_resAreaWidth = mrg.top(); From f88884257d39b126e9ab4e2ca0cb04ccea3face5 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 13 Sep 2024 11:26:38 +0300 Subject: [PATCH 52/97] [win] fix top border color for win10 --- win-linux/src/utils.cpp | 79 +++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 22 deletions(-) diff --git a/win-linux/src/utils.cpp b/win-linux/src/utils.cpp index 4eb2de7fc..872d61cc5 100644 --- a/win-linux/src/utils.cpp +++ b/win-linux/src/utils.cpp @@ -55,6 +55,7 @@ #ifdef _WIN32 # include #include +# include #include "shlobj.h" #include "lmcons.h" #else @@ -1012,6 +1013,33 @@ namespace WindowHelper { // } else AdjustWindowRectEx(rect, (GetWindowStyle(handle) & ~WS_DLGFRAME), FALSE, 0); // } + QString user_sid; + + auto GetCurrentUserSID() -> QString + { + if (user_sid.isEmpty()) { + HANDLE hToken = NULL; + if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) { + DWORD tokenLen = 0; + GetTokenInformation(hToken, TokenUser, NULL, 0, &tokenLen); + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { + if (PTOKEN_USER pTokenUser = (PTOKEN_USER)malloc(tokenLen)) { + if (GetTokenInformation(hToken, TokenUser, pTokenUser, tokenLen, &tokenLen)) { + LPWSTR sid = NULL; + if (ConvertSidToStringSid(pTokenUser->User.Sid, &sid)) { + user_sid = QString::fromWCharArray(sid); + LocalFree(sid); + } + } + free(pTokenUser); + } + } + CloseHandle(hToken); + } + } + return user_sid; + } + auto bringToTop(HWND hwnd) -> void { DWORD appID = ::GetCurrentThreadId(); @@ -1027,29 +1055,36 @@ namespace WindowHelper { auto getColorizationColor(bool isActive, const QColor &bkgColor) -> QColor { - QSettings reg("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\DWM", QSettings::NativeFormat); - if (isActive && reg.value("ColorPrevalence", 0).toInt() != 0) { - DWORD dwcolor = 0; - BOOL opaque = TRUE; - static HRESULT(WINAPI *DwmGetColorizationColor)(DWORD*, BOOL*) = NULL; - if (!DwmGetColorizationColor) { - if (HMODULE module = GetModuleHandleA("dwmapi")) - *(FARPROC*)&DwmGetColorizationColor = GetProcAddress(module, "DwmGetColorizationColor"); - } - if (DwmGetColorizationColor && SUCCEEDED(DwmGetColorizationColor(&dwcolor, &opaque))) { - return QColor((dwcolor & 0xff0000) >> 16, (dwcolor & 0xff00) >> 8, dwcolor & 0xff); - } - } -#define BORDER_ACTIVE_DARK "#2f2f2f" // Dark theme -#define BORDER_INACTIVE_DARK "#3a3a3a" -#define BORDER_ACTIVE_LIGHT_V1 "#585858" // Light theme and colored background -#define BORDER_ACTIVE_LIGHT_V2 "#777777" // Light theme and white background -#define BORDER_INACTIVE_LIGHT_V1 "#606060" -#define BORDER_INACTIVE_LIGHT_V2 "#aaaaaa" int lum = int(0.299 * bkgColor.red() + 0.587 * bkgColor.green() + 0.114 * bkgColor.blue()); - return QColor(lum < 85 ? (isActive ? BORDER_ACTIVE_DARK : BORDER_INACTIVE_DARK) : - lum < 170 ? (isActive ? BORDER_ACTIVE_LIGHT_V1 : BORDER_INACTIVE_LIGHT_V1) : - (isActive ? BORDER_ACTIVE_LIGHT_V2 : BORDER_INACTIVE_LIGHT_V2)); + if (isActive) { + QSettings reg("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\DWM", QSettings::NativeFormat); + if (reg.value("ColorPrevalence", 0).toInt() != 0) { + DWORD dwcolor = 0; + BOOL opaque = TRUE; + static HRESULT(WINAPI *DwmGetColorizationColor)(DWORD*, BOOL*) = NULL; + if (!DwmGetColorizationColor) { + if (HMODULE module = GetModuleHandleA("dwmapi")) + *(FARPROC*)&DwmGetColorizationColor = GetProcAddress(module, "DwmGetColorizationColor"); + } + if (DwmGetColorizationColor && SUCCEEDED(DwmGetColorizationColor(&dwcolor, &opaque))) { + return QColor((dwcolor & 0xff0000) >> 16, (dwcolor & 0xff00) >> 8, dwcolor & 0xff); + } + } else { + QSettings reg_lt("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", QSettings::NativeFormat); + if (reg_lt.value("SystemUsesLightTheme", 0).toInt() != 0) { + QString userSid = GetCurrentUserSID(); + if (!userSid.isEmpty()) { + QSettings reg_ac("HKEY_USERS\\" + userSid + "\\Control Panel\\Desktop", QSettings::NativeFormat); + if (reg_ac.value("AutoColorization", 0).toInt() != 0) + return bkgColor.lighter(95); + } + } + } + int res = -0.002*lum*lum + 0.93*lum + 6; + return QColor(res, res, res); + } + int res = -0.0007*lum*lum + 0.78*lum + 25; + return QColor(res, res, res); } auto toggleLayoutDirection(HWND hwnd) -> void From 6dfdab24ec4a461650754ebc5db328f6ed6c0052 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 16 Sep 2024 15:50:25 +0300 Subject: [PATCH 53/97] [start page] fix bug 70195 --- common/loginpage/src/css/component.less | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/loginpage/src/css/component.less b/common/loginpage/src/css/component.less index 7a36b5943..464c2c950 100644 --- a/common/loginpage/src/css/component.less +++ b/common/loginpage/src/css/component.less @@ -369,6 +369,10 @@ input[type="radio"] { small { float: right; padding-top: 2px; + + .rtl & { + float: left; + } } } } From 256b94685295d904cdc145b14f3cefea30b91422 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 16 Sep 2024 17:18:36 +0300 Subject: [PATCH 54/97] [win] fix top border accent color for win10 --- win-linux/src/utils.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/win-linux/src/utils.cpp b/win-linux/src/utils.cpp index 872d61cc5..fa45ec540 100644 --- a/win-linux/src/utils.cpp +++ b/win-linux/src/utils.cpp @@ -1067,7 +1067,11 @@ namespace WindowHelper { *(FARPROC*)&DwmGetColorizationColor = GetProcAddress(module, "DwmGetColorizationColor"); } if (DwmGetColorizationColor && SUCCEEDED(DwmGetColorizationColor(&dwcolor, &opaque))) { - return QColor((dwcolor & 0xff0000) >> 16, (dwcolor & 0xff00) >> 8, dwcolor & 0xff); + float a = (float)((dwcolor >> 24) & 0xff)/255; + int r = (int)(((dwcolor >> 16) & 0xff) * a + 255 * (1 - a)); + int g = (int)(((dwcolor >> 8) & 0xff) * a + 255 * (1 - a)); + int b = (int)((dwcolor & 0xff) * a + 255 * (1 - a)); + return QColor(r, g, b); } } else { QSettings reg_lt("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", QSettings::NativeFormat); From aa33f9f296f74b26ba0cc19c176e554cc9eaf396 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 17 Sep 2024 10:36:32 +0300 Subject: [PATCH 55/97] [win-linux] change dev-channel parameter --- win-linux/extras/update-daemon/src/classes/csvcmanager.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 63f00612a..f4016090d 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -82,7 +82,6 @@ #ifndef URL_APPCAST_DEV_CHANNEL # define URL_APPCAST_DEV_CHANNEL "" #endif -#define CMD_ARGUMENT_UPDATES_CHANNEL _T("--updates-appcast-channel") #define UPDATE_PATH _T("/" REG_APP_NAME "Updates") #define BACKUP_PATH _T("/" REG_APP_NAME "Backup") #define SUCCES_UNPACKED _T("/success_unpacked.txt") @@ -258,8 +257,7 @@ CSvcManager::CSvcManager(): m_pDownloader(new CDownloader), m_pUnzip(new CUnzip) { - m_checkUrl = (NS_Utils::cmdArgContains(CMD_ARGUMENT_UPDATES_CHANNEL) && NS_Utils::cmdArgValue(CMD_ARGUMENT_UPDATES_CHANNEL) == _T("dev")) - ? _T(URL_APPCAST_DEV_CHANNEL) : _T(URL_APPCAST_UPDATES); + m_checkUrl = NS_Utils::cmdArgContains(_T("--appcast-dev-channel")) ? _T(URL_APPCAST_DEV_CHANNEL) : _T(URL_APPCAST_UPDATES); NS_Logger::WriteLog(m_checkUrl.empty() ? _T("Updates is off, URL is empty.") : _T("Updates is on, URL: ") + m_checkUrl); init(); } From 4da0846d9213f119f359585c17922e4dfc157931 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Tue, 17 Sep 2024 20:04:28 +0300 Subject: [PATCH 56/97] [win-nix] added panel with templates --- common/loginpage/src/css/component.less | 9 ++ common/loginpage/src/paneltemplates.js | 111 +++++++++++++++++- common/loginpage/src/sdk.js | 3 + common/loginpage/src/styles.less | 47 +++++++- .../cascapplicationmanagerwrapper_private.h | 14 +++ win-linux/src/main.cpp | 1 + 6 files changed, 182 insertions(+), 3 deletions(-) diff --git a/common/loginpage/src/css/component.less b/common/loginpage/src/css/component.less index 464c2c950..07de6a6ea 100644 --- a/common/loginpage/src/css/component.less +++ b/common/loginpage/src/css/component.less @@ -472,3 +472,12 @@ input[type="radio"] { ::-webkit-input-placeholder { color: @text-tertiary; } + +/* +* nav-item +*/ + +.nav-item { + color: @text-normal; + cursor: pointer; +} diff --git a/common/loginpage/src/paneltemplates.js b/common/loginpage/src/paneltemplates.js index 98639818b..eba0468c4 100644 --- a/common/loginpage/src/paneltemplates.js +++ b/common/loginpage/src/paneltemplates.js @@ -31,6 +31,17 @@ */ +function(){ 'use strict' + function FileTemplateModel(attributes) { + Model.prototype.constructor.call(this); + Object.assign(this, attributes); + + this.name = attributes.name || ''; + this.descr = attributes.descr || ''; + }; + + FileTemplateModel.prototype = new Model(); + FileTemplateModel.prototype.constructor = FileTemplateModel; + const ControllerTemplates = function(args={}) { args.caption = 'Templates'; args.action = @@ -60,9 +71,27 @@ var _lang = utils.Lang; const msg = 'Oops! Something went wrong :(
Check internet connection'; - this.emptyPanelContent = `
`; + this.emptyPanelContent = `
`; - args.tplPage = `
${this.emptyPanelContent}
`; + const _html = `
`; + + args.tplPage = _html; args.menu = '.main-column.tool-menu'; args.field = '.main-column.col-center'; args.itemindex = 0; @@ -74,8 +103,20 @@ ViewTemplates.prototype = Object.create(baseView.prototype); ViewTemplates.prototype.constructor = ViewTemplates; + utils.fn.extend(ViewTemplates.prototype, { + listitemtemplate: function(info) { + return `
+ +

${info.name}

+
`; + } + }); + utils.fn.extend(ControllerTemplates.prototype, (function() { let iframe; + let panel_local, + panel_cloud; + let templates; // TODO: for tests only. uncomment static url before release let test_url = localStorage.templatesdomain ? localStorage.templatesdomain : 'https://oforms.onlyoffice.com'; @@ -101,6 +142,62 @@ } } + const _on_nav_item_click = function(e) { + $('.nav-item', this.view.$panel).removeClass('selected'); + const $item = $(e.target); + $item.addClass('selected'); + + this.view.$panel.removeClass('local cloud').addClass($item.data('value')); + } + + + function _init_collection() { + templates = new Collection({ + view: $('section.local', this.view.$panel), + list: $('.table-templates.list', this.view.$panel), + }); + + templates.events.erased.attach(collection => { + collection.list.parent().addClass('empty'); + }); + + templates.events.inserted.attach((collection, model) => { + let $item = this.view.listitemtemplate(model); + + collection.list.append($item); + collection.list.parent().removeClass('empty'); + }); + + templates.events.click.attach((collection, model) => { + sdk.command('create:new', JSON.stringify({'template': {'id':model.id, type:model.type}})); + }); + + templates.events.contextmenu.attach(function(collection, model, e){ + // ppmenu.actionlist = 'recent'; + // ppmenu.hideItem('files:explore', (!model.islocal && !model.dir) || !model.exist); + // ppmenu.show({left: e.clientX, top: e.clientY}, model); + }); + + templates.events.changed.attach(function(collection, model){ + // let $el = collection.list.find('#' + model.uid); + // if ( $el ) $el[model.exist ? 'removeClass' : 'addClass']('unavail'); + }); + + templates.empty(); + } + + const _on_update_template = function(index) { + + } + + const _on_add_templates = function(tmpls) { + for (let item of tmpls) { + var model = new FileTemplateModel(item); + + templates.add(model); + } + } + return { init: function() { baseController.prototype.init.apply(this, arguments); @@ -111,6 +208,9 @@ page: 'templates', }); + this.view.$panel.addClass('local'); + $('.nav-item[data-value=local]', this.view.$panel).addClass('selected'); + const _check_url_avail = () => { if ( !iframe ) { fetch(_url_templates.replace('{0}', 'en'), {mode: 'no-cors'}). @@ -168,6 +268,13 @@ // }); // } + $('.nav-item', this.view.$panel).click(_on_nav_item_click.bind(this)); + window.sdk.on('onupdatetemplate', _on_update_template.bind(this)); + window.sdk.on('onaddtemplates', _on_add_templates.bind(this)); + + _init_collection.call(this); + window.sdk.GetLocalTemplates(); + return this; } }; diff --git a/common/loginpage/src/sdk.js b/common/loginpage/src/sdk.js index 89ca1a3e3..9596984a0 100644 --- a/common/loginpage/src/sdk.js +++ b/common/loginpage/src/sdk.js @@ -142,6 +142,9 @@ sdk.CryptoMode = e; }; + sdk.GetLocalTemplates = () => { + } + var notifySubscribers = function(action, type, arg, context) { var pubtype = type || 'any', pubsubscribers = subscribers[pubtype], diff --git a/common/loginpage/src/styles.less b/common/loginpage/src/styles.less index 134e13b6f..0ffdbea4b 100644 --- a/common/loginpage/src/styles.less +++ b/common/loginpage/src/styles.less @@ -352,7 +352,7 @@ li.menu-item { } &.templates { - padding: 20px; +/* padding: 20px;*/ } } @@ -1299,6 +1299,51 @@ li.menu-item { justify-content: center; position: relative; } + + &.local { + section[panel=cloud] { + display: none; + } + } + + &.cloud { + section[panel=local] { + display: none; + } + } + + section { + height: 100%; + overflow-y: auto; + } + + .nav-item { + &.selected { + text-decoration: underline; + } + } + + .item { + padding: 10px; + cursor: pointer; + + .title { + color: @text-normal; + } + + &:hover { + background-color: @highlight-button-hover; + } + } + + .table-templates { + display: grid; + grid-auto-flow: row; + grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); + grid-template-rows: repeat(auto-fill, 1fr); + column-gap: 10px; + row-gap: 10px; + } } #idx-update-cnt { diff --git a/win-linux/src/cascapplicationmanagerwrapper_private.h b/win-linux/src/cascapplicationmanagerwrapper_private.h index 1429d9adc..5b1d5c188 100644 --- a/win-linux/src/cascapplicationmanagerwrapper_private.h +++ b/win-linux/src/cascapplicationmanagerwrapper_private.h @@ -46,6 +46,7 @@ #include "clogger.h" #include "common/File.h" #include +#include #ifdef _WIN32 # define APP_LAUNCH_NAME "\\DesktopEditors.exe" # define RESTART_BATCH "/apprestart.bat" @@ -313,6 +314,19 @@ public: openDocument(opts); } + } else if ( format.rfind(L"{\"template", 0) == 0 ) { + QJsonParseError jerror; + QJsonDocument jdoc = QJsonDocument::fromJson(QString::fromStdWString(format).toUtf8(), &jerror); + + if( jerror.error == QJsonParseError::NoError ) { + QJsonObject obj = jdoc.object().value("template").toObject(); + int _f = obj.value("type").toInt(); + + COpenOptions opts{m_appmanager.newFileName(_f), etTemplateFile}; + opts.format = _f; + + CMessage::info(m_appmanager.mainWindow()->handle(), "create new file with name " + opts.name + ". format is " + QString::number(opts.format)); + } } else { int _f = format == L"word" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX : format == L"cell" ? AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX : diff --git a/win-linux/src/main.cpp b/win-linux/src/main.cpp index c50726ad4..d9e594be0 100644 --- a/win-linux/src/main.cpp +++ b/win-linux/src/main.cpp @@ -84,6 +84,7 @@ int main( int argc, char *argv[] ) Utils::makepath(user_data_path.append("/data")); manager->m_oSettings.cookie_path = (user_data_path + "/cookie").toStdWString(); manager->m_oSettings.recover_path = (user_data_path + "/recover").toStdWString(); + // manager->m_oSettings.templates_path = (user_data_path + "/templates").toStdWString(); manager->m_oSettings.fonts_cache_info_path = (user_data_path + "/fonts").toStdWString(); Utils::makepath(QString().fromStdWString(manager->m_oSettings.fonts_cache_info_path)); From ba61ef81a727c26c8d020be2b1d4f9c786f6f629 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 18 Sep 2024 00:08:21 +0300 Subject: [PATCH 57/97] [start page] custom themes added twice --- common/loginpage/src/panelsettings.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index 64a25f082..fff3de598 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -603,12 +603,6 @@ } - if ( nativevars.localthemes ) { - for ( const t of nativevars.localthemes ) { - const _theme_title = t.l10n[utils.Lang.id] || t.name; - _combo.append(``); - } - } if ( !$optsUITheme ) { ($optsUITheme = _combo) From e29ab0906fd631bf53c3e816a66a0eb2a9881d61 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 18 Sep 2024 01:03:32 +0300 Subject: [PATCH 58/97] [templates] added some templates --- .../Amortization_schedule_template.xlsx | Bin 0 -> 15795 bytes common/templates/Certificate_template_3.docx | Bin 0 -> 1037754 bytes common/templates/Checklist_template_2.docx | Bin 0 -> 430795 bytes .../templates/Daily_schedule_template_7.docx | Bin 0 -> 1455864 bytes ...izational_chart_(horizontal)_template.docx | Bin 0 -> 54343 bytes .../templates/Purchase_order_template_2.docx | Bin 0 -> 101627 bytes common/templates/Sales pipeline template.xlsx | Bin 0 -> 18457 bytes common/templates/Staff schedule template.xlsx | Bin 0 -> 13868 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 common/templates/Amortization_schedule_template.xlsx create mode 100644 common/templates/Certificate_template_3.docx create mode 100644 common/templates/Checklist_template_2.docx create mode 100644 common/templates/Daily_schedule_template_7.docx create mode 100644 common/templates/Organizational_chart_(horizontal)_template.docx create mode 100644 common/templates/Purchase_order_template_2.docx create mode 100644 common/templates/Sales pipeline template.xlsx create mode 100644 common/templates/Staff schedule template.xlsx diff --git a/common/templates/Amortization_schedule_template.xlsx b/common/templates/Amortization_schedule_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..eebc5511c81b6e590f3f7abd0a4696cf512a4813 GIT binary patch literal 15795 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 literal 0 HcmV?d00001 diff --git a/common/templates/Certificate_template_3.docx b/common/templates/Certificate_template_3.docx new file mode 100644 index 0000000000000000000000000000000000000000..c0f07e13629c6f7c9730bd6098b28e1e01ee95b7 GIT binary patch literal 1037754 zcmc$F1z4O}vUcMx!6CSX;1DdqJ%r%y?(Xgu+}$CB;O_43?(Xgme>1x?JF|Cp=kC3G zpFj0e;B#I+~esa0A~6?e(l}j4aGKi5Y0=i3#=0bu4s^%ndk+hyrOSmZKh=l{L$Kg z&QeRqM9V;rj**_8g-+)$G-zyJX%KU92HUR?gPA@t;a~Z_>f$6e zGJ6GZqYFkcg~~vtK(>aD}O<^F*LHYq52mpw2jRFJq;H6`bIi>x)wTiX29H_ zwJ_C_&^Ff7v3<2c0+<=rM!I^0gpyj;w&Gf5z&OwWZo#G@^44}&z$fZvYD2V`JWT9 z1y&n9x?kS^_et>!%%AHtFtxC;(Xw`;bI{Y4(X+J$CeZ&uD1Hb2=alr!bynXv!JI)NP+?YuP@*{572m> zCFx%0LYx2L5KqV<{rjQve>lwlVK61;`XeZzh%P6wwTLbQG2vf^_&?t%{AEZG`0F_O zmkq-obkP0r4j{6YwSk^3C-E;y^oMZK{S!Kj|9v`t*tq!-w%7gJ|C2m=5R+fZQM4 zd^x8g1>sZoPg)YWY^<-Zmk^O!d3Jw$+mF@*lexw#dSXZe5rAkX!p3FzWMwygTodD) zIV#A7aK?Lp_^xPWrKt(Keo_Psmk|Qs+jmNCji`*;ot2qSJ`4^;u?OB6XvD`kZDp7t zJwk#gZ((?t@BhPu7`FViw8N*cOHQBvY@g>6-W{NB4aE9#C*Y6h8hEQenR+ynyvS5ryMMEES$u^PDbVSU+)i@~*XmyKo!f%8X zv^8M{bmIaR+G+~gb`9udca{A37pGQdA#m5_S2>UpVLdzbj&;c>gv1qMZv^4RBpLJg zR70)o3IGn6mN*c@r?$A`SfQ?-;0494?e9TLiQo6Mpw(f0;eznHPzg>Be`9xY%lh_i zZpJBvjCL*+iN{}Nlc3UBxg|#*ojU_r7A1kAcUh30_6s&mz68Gli{Z_~QhBILa1c3x zCZguSa+91v1+jzwv0;CZJAPf4`PfCs_yO*_A{PqF)6XfTaIhr%90%Fd3i9|;+z9Po z+|&t^d@nDcN(%*#8wU4WCGFzK)3w*nH?f*Q{8Mt5r(96l616*~>&d<~zKhOShu3|? zjz06*9Xo4w=5pM{Sc0TM`VjEFX0aZkxD zQ`UM}$iLYECx_q~r<42^c8lr}*8yZQOg=2vG=>?tR_{e@Tom?C2z;2KA;u zd134NTw40EiuBv9uRpbya||0e^*wf7T1JF~u{9R?2M8?i9eSdl%G;!R;+|se+d6ht zS-TW<3P1HX3c6(1Kdr^+fX`oz26Vx_0rU6LgHNR3NRpK7?}vD1^{et-Ypp`rXS$Fg z#72m!O{PnM9H%Y~Nrp*Vt?M^K-x-;~e0w`YgxjakkJXP0!m*Y-p` za&gEhI2-b#QKp02zN${1j$7ucL+GI$^H@eCA@1y2GOky4)Kv z==k)JuHJVH5Cki4l$&B}?zWv^^iSsN^OU+{4`Gk z(Qf4nw8OD2@|r%u>2e0C3nJGunZvY_-TX2{hh|HCKqc9)#SbE#DiJ3p#1$z1?c}1& zQ8_Sx4a+JpR6v( zHj($kGK~m7i}M$QBQru2yr^TnbrB)adCQ^7$(Y`(xRUa6oPuy`ow7TE>Vx~DW@qdv zwabdM6pFBflT!AAzXW2SvlMKT#f$3Eg$QebO}0xzXIp_9hc&!yw*(7rbYaIM=P=z| z_E`;Vv0%P^NWP*@K!s3CjY#KVpVm+IarpV~NwRK_)Dht?9Rl=)mtrq^q>x2kcBi%E&AQn(e#(4xYcBn@L{C|hxV)b`#uvun5d?D09PTSg$>tE-LhdSW zaHaPP1VNHxkObdgk;qSh)uIQ3h$miE7AfC)N@a4RjK&!>H{LSH7nhO|G@nfC*c(VD zR*abBAi{6BlJM7xBu1$iMBo%OyQXy5bvLKIp!(b<*__iJ*wXd#ei_3kX(bGWT$WBL z=Lr1HH1cRz<7Ap2!DY@EyPY~SwV)qq)h0tO{H|DHOwzF6FzUB9XjyeeaQ7^cS9XC}^`(E1=YUbrOGkD6J2hCQxijGq1-f zf4~^8lnU$Pq(}^C-%wo@ab3^0s(xq-^uV9^)~$`oxxna!6>#874L+Pij=EmPO*Bzf zs~WH8A=ht=ZoFN&6X>n8-$^Cbcvt8sbK)STL%uqBjboVv*08d`SDROaW_aCz@yLA< zhLD|nv}#V;&y+-Qp(l{I%Adrk(;BX=!IO|@!7=FS?)bj5C*@5#d9|tb0D1MIf@$7J zPu%^5w&)t2DMK|AdwrQ-Z#l{`Cyv6rea|$dR?gDi%?*wm7fHCv?l#T%-^V;6q)f zqP9#Gkp*$&3^6h78)w%nA&DBo1L?GzcmO%9z?SAs^bBa9nAk=QIB!lgM)r=wk1g4c>GY{>umRW%Sma*(N?8h~;uhx}f~7uElqu z2%Q(L`~$K+pI2tE;6_yfuWxo6MMaj8Zw^6>%?Vf>`|j;pmOa^TWHLo%vDuYNXe3D0IcZsd zwnb=@al^-y)iE#JXrUXTzsbd8>wCzvw}_tK!}(>1AkM(-PsAl7EEb}`^-}_2$4*}O z9itQqQ}0=eempT9zk#m?{5NH`^h%i0zA(b8nyd|;q5pe@$+vgXjqpO3$@ zu37YR8?~eLyc@3KOK30Ifz285xB)L1HFCUZCa9Wga2c9@;;KHLGFWzDx^K@kHs_i) zv0`-w_AGVzl$F7Tk&+YZ%~pKsdWg9x4D{q`Ij_gcfk^unC)?|-&QNaxV>FiI6W;j% z+yFtV?6Q^gbdIh>rF|-Vixc9te%XbG-49&+*+u(>MZSsodDZi?sf{6}?eC0^zIIK~ z<1X`7)(VE~SAf);INO?73f+v?8RqSAz1Ta|*9E7lWN%F)ovEMxklrwuTpB^PvJiU; z(YS>@lmBWwQo-C*@Ui!81}*-soA6tr8rE}Di&eJArJsJ)SImvh4HBrS;Z4(2Riv9G zvZiaX^HBJ)G%L|lo6-5P3epJttY%GgD^8VWE*Z&G+|kNTSW~9>LT=bd*@%!oxONkl z+JYUirhblf{FK&qMh|4TzGBRmCFlFVOqb0_|$mYLg16-A`s zQD|#uRMd?C_ro!@kx)&M-GaYc&H?`ruJQbfz-|xN(Wqe81pWqAxY1WhipX_OabK!* zR%p;EyD9eDfvw~h)b4V`fFo{Nn;6F#wc;Vsd0Y+mAlE`ljpm>I8mFukcuS_wEXgf& zGu1`zy^FY{E%-i)+#$z_yF}+Ol=q+MC72huaJ0Bjly@QUr*-v=C|+_3hSCK;Fr{_X zeN0tf0Hi-!+5d3md^|5JYc^3_(UrdS4MSqA%y(LQYi%PYA+YvUw2I-%?!(nV+QoVN z#OH)48cMo|^P+;n!fq&a->Ek&P&tp)Ql zU(fh#`RPT@bBXmqu!fF!8iHBsnTN<`FQnP%tT3kMaZ{;rAYGv^@gkic+96KjdlX(S zwab!92n1iZoM8gwoRgh*_G5%{5Xy@jM2*GEkI&|b!T#QejTKBx*mH7W2`=yWP4>To z)Cjyl{d#Khm(43yeF|1T2mnw4`Mb^Quctt-=Sy8N3+5Yy$o?8#>s)PN<8pdaMU^Uc zQw_!q4*;|ctgb=A*0b#+cCMT6{bIDv9jmRb7cXB|_qSW}vV5%7Npz`|dZ?ud8D>fc zW?Nbu3PdsP2njLKz58dSoa}AfroO{kw`RBs08W8lv32(&oA%em=P=I5>q9GTpzTU7sNz(E4?t+oyVk1E!?~I z0ToK7EDxgZx)Fcz)0kv}m+0n>TU4I&Ryu05Bd@S>XH1zu`$1AR3JKGopTwsm%z$K7 zSABYDGlL|qaC@YOz^UZ}x>A4gk?Bqtk7$LVvS*GD;W?$YKA~Sv96ZH2 z00!jxCTCoR~I zEGT)Y+-YW?v+!ZjG&h{vj*52@M5%Lu1Hp;g3W?J)gg+CXi*o%bPRlDi`>4CEM>vj@ zZ&cC&X>3Eq<&3rAL2{8X_hM0l8|;sPH>?r45CI0B9Si_K`SsM|x3lus$j6Q@8Mo7; zL7ghV)TN6(X`>Y!f@#s)Gc1C2Cd_M!i;HBXTD0g?nXi6Qvl$}|xY+PuOmy?sV?XlY zjlZaT$2K9p)?aHk%#Cr;;4;h?V@^i%DfOZW(Um22Qpt-JQfP@*H^W-JTTxF0MK+Ju zA76f6s*DGTaeS-HS|J|wo>m#@Lmq*SW(*AGy2YSMpBM{c`qtjN-|gJ#)T3|2NiRVni250{&T zoy0Bp0@KHCOSY1u^eLo}pQtI(G;%+R?MiG^6u?GR#TLNecNj+?w-+qJgfmHZOq zN%`5CcATqT>WS#Mc)M?;dIn&|6L-obo@k9*8}J6};r$qNc+hRFp7Ls07604NMx!qo zF#VMsDwntOn)m5XP4CTfW}*XI?%@6y`vLG7fgoV)jUfO4VKo}g_{qMoi<9Q69@Q7DO2sV@P-M(;@3A{9 z@p*X2q+p_z;9Iy>4Cs&*1N6M>qL}>O8Lv546=rcTwC;R)E0@$s?;tJ=trR8Wb)-tK z9V3^Qj7k>qMMj7sKSpGf7}}?MLgR5v3cwoRH>@hL}G%OAp@& zhnh|gV#o)F^TXA=o}XA4LPB`jEKIVw0%rWFdmjd4>dpFvBKaiul7f0Ak6k3kx4(w# zEPlCYYYd2q_osje@Bv@zaKkZ$FK)#4l9`v7Cv968rbF$}^d@H3?oAkPcN%I&^-9Er zTd8DjVPSP`L@d398=Z4ocg2$1jqE^Bw%+n)3 zQBkA|gH_tf$Wq!J<=Yw85?Xx|Ygs1B7WqmPZhAR)IXH8*HZQ12c$R!jY>ADVk=7^Kg| z_nbBnX{FREG&izZ!GI40s*EW^-~rcE&a*n}EVQh>R1otsZ)D)2m@@2h=xNLIJoHF( zutnld$jW3H(^L?kgugfNshDzvMPlNH2qF$kdBuc)`W=I&HxbQua%Ik%1u>)7AwgXk ztK8k5KnuBmi{nR&=+tA%3>-SMBXm_X)CmpzKp}_8nIIAD+v=ip5tMC`({HuTA0ov@ zgcQMnUuJA}^vP-z)^4spc?h+}NU`BlE(|7kK`;MXzMwNreO+N_3Sq|aNH?dd(N_IK(<5U#(Op8bv zUkm!+8?+Z5Y|(LIvf`6{iB~qXx+m}Sp|e-;0|e3Zw5D^bx3W&GoILKzVIO&>m1($7 zq$SLB5NH}d+>SfVTHN_y7nSPXy6{#bVZSq%8&7)!EKk5_%kC6s3Bn@i1-jktOOSkv zx61oLpHhsYRNCDfH#X(@SXn(S@Bqf#rKmK{H`59(BgV{CA9kNlI3z)Ap8H`~MAQeK zuSOEQDxHu)kp>eYz*AF(117t))$g?|FDt2bdkUAo?qpB1NUd#v#}YPM+c8XHk6#*PY@9O+SHDmTe+#eY7~FL;{0wQl98Hzzm8^eV zHvnhqX^&OE%;qBMhO#%~BKY-=Z?C^zZ*2< z^EES4cmRO%As7JCuQl&)zoT=MsuI86TXxd&rO27h!rq4m^!{+!;VHawnoJQ|x;j$W$1*dy(& z9V|WU+y(UHK0R+eH8?cf$((a6Jy~5u6;5c-vMlWEaXnc*JS|<=J}evz5Ns#!#P7L( zR4I;o@MwZ_ZrVMwO)BbFVhQfDPJ66PY~gx$@U(X8u%H{8W>vAwNuy!EQ_+-{a%5H! zs!^TnRKAd-;;xQ2a>JokOqaWdB>K)-eYhrhNx$qxr#^8a2r>5y(#Z|ti?h0#1oF5z zva0wghsR6q$-$8QCzYIf35D~Bv_l3NkH*B81nM6p1y8gORu31~mm7Pz9WTwM(+^7> z3lF(l&M#{WT+eMf_uaOv8nhlF@lk14PKmI$_f}0R`YlfV&qPmRj7vw{$8j=ybUO`h z$43NlR`lPeuU7(^0+y~YdmhR z&n!0^Cd^j?KRLef`1E)ZaC=+R%B_!(t$-`x+kX7vEv~q6i6IapGR^|1h@k(rA@+XJ={gtpc@y{$u zkCllpah)sIdvxN`6RaLj6C(>-`pH650X==2m)kX)PIq?LJt7#(JKU<=G#i^9X;D`t z4W!M@FDn{|kyf8JTrZO9#E?S~@oVP0(mm4O(J7_mw5UmZuz4Y4*NlC-qJ6hxd3$hP zpS1DTd$J?>#RX%|!&Tw^*84<#n7vF7h0)Hi3?66o@%ND1xmZc*#7x|Ry6!=dckjEm za}##cwObMiQt3QyHLZ8PMPV*+W^FP#gj3x0E|GkpwYvEh1+~bTrF+^S9CPRb{OO|w zK0`XbJ1rh6d~U!Yv3ivC2KfB7|SIyC?EA;Pa352Z%Ls!v6_}p5%=a4cG3tJMoak-|9Obm;4 zNg$k4@CNbnk$q+uE(BNVeji6TKs|#39vOYS66HbbuyY@$yR23`-Plmd>jx=o68z%6 zba;aK!%GYECHIO;=_Cq@*$Awoyv(wRWOnwjT^L!{9)c8_u>lPQd`|;)$}d3!7p8o$ zI0~FsKVHep>!=!UYW6-A-iXxAqF=5Xn$wV4K)lBQUO+PeUWls#UKsf6LMrI;=tgw# zIgw>p??Y0HT&6E--@F&d=@nzY*mH*r_ zty;u2ueej#Tg+CeA$z%+=$P5GZb-H4aS?fJsA-?^E1$q`&X0dyd)AVckeX{EfnwsO<_ z&F+?D?LjJ@u97Ca<*AbW(IZXpUP<190T+)dt^;!nQE9bf;}ZFKrlvw5er`SZcB#w< zf6|V*cyemWA+Z08+FWtDeh)-SOqEMov3&Xux;WYRm+i$h(#%AmiQxF3QVcC9S99r; zJFXq-*C@=j67C~=C-EH)^kSTJO{YQ5<6*;T{1AH<^c3vvXD;NEM|C0Zo{kXmA62=n zW{1mJr3KlB)G5QB$C!xVMT7d)3iBv&*oKO_1~pk3!i322(DEJ>}f^xmORriZpEk>=u2pDAD7I%nW1j+D-$FV(5VO-%e@*!^n4I`xpWMdtbV z{!Vni!>Z)g?V{!;dB*M9?=t>stsh=?C5%CjzdVp58%>C5Gh4jfbC&`Lh%X0p>SJu(%mN12*7;OyAPz+lL^A=jl zf|(g&+F3$$NO5cfh6}htXZQCEcrU$$O8b!lGH%p@0C_AeMTVyEmqW>DnHJMt1!gR%b1sUxWyGBI=lqA%eg9nJfrmX)hx?bVz^JP}jDn7F zE{10S1aQ~NoEV1J)z(M`lpx8hq2Pg?ZNqh1xg<9biK_C0IV9Ro~KH<=c z6y`3UJtGWMI;V5w<*h@WuE+CYY&;*H>RRp182REi)0x!W>m%r6_@i(4-bHFg5Bd*1 z%y1>Q5t;s2gx@5$>s=~1N5P;ho~J*ZI2x3X_jufsd~Qq?w_h}Te7LNQy1d~wtu|7h zUn=Gl&z_AvAjyZxf)Ui* zTqnEQ8Lf7UH!<9jVT|gz2TuA)ig^~00)gDoY+(OJ+ji|7e4cMgzQ-F->9=>ztHPtQ zI2w13`sKVb$9TDa$slU-iwdHOgv=e1QP-2%-N}IXJ?66YZSdu|;uB_nXLnE^~Lfs`K-6n^`S z1z8PZp2r`O|LrcX3h5<`D3ssD!h^@)$UAm~oIEN*f$*!t4JFKZ^Uo!>;MG&)MIWR| zpIn10oevJ)+~6%y4B`Z#0DqYiD2OT=)swRd@Ub zaW#^PU!9^)Q$p@}Id4uM3gjCMbB7in?f^hpErr0j`-axr(?NjGHN4a3EJ1(=0!`dN zErB#|yR5MHZH)4RE%@H0{3q*6&2P=5l!%$4pvYzNvLv=o2x^{hJR`Sxc>_Mp(|Wye z`UHvt0+h8X*NitAZ&(d=1^7rd-=p%7Okr+kq&)|bcV~=dz>J@i7+QZF{T4>b$;1~4 z&ZJ#bD71V3ww{NChh!+*8_}+EiJwIKzhHgkBf)~vdJ_u2zgJ?Y4G)WuMEC@R>;Vtm z{XEW3f+oU4GTm?NTilWf#{|kW&Ox~=DZIeRMErx~l}yGP^#Ld#H!B|@a#AMmNGy!8 z-qQaSrFVv;yOE>N-JOa8BwCzL=wczfnY^gqS2V^p6Efc5i8vej62lmFDl3JKUa{JG z33&=72}9uR8#V+8b=rahDS|S!o7}w`Z9e)r-B*Y>ooJ=jdz?sXOXzG7CByDfQ$$|$5_gW)0` ziNFGIA45DJdIS`Msgf>DVuEGK5YNq5v77}B-Gn!f!u^U}jbyi}bIj#oYnSUEM#>Im zV<7@MZ>5Tzhea_0yH1)&Q=EQ}r{v{`b&41Q*|{-+=;`RXWC4Xd(lo$DD4}Bo+N+}u z2Xh4P_xSg&1Sp^gdpq$74*Kkk z*fWH)xt|UgC?p6AN2T(1|ArjX!ay2W5g&sE4|}q1j*o?q&=ZdbxVWuf8P-hOAK;>Y zWjpxyYy;64kjRx5x;S#Af`*$bb4dDzCAU?gJe_c7geW2VQGG5mGA=za&*(LOLCpPg zMC|w4_+PiGgPm|Ww3O~TAvdzyOdE|}y4te*4646IX-YMwXS-r0AcR2b1Krtb3UsGI z0s?;8qN^fcECNmi8QWYOkr)gpBt(olg2X;rtM-9kH-ma9Qf4)cnZJdw4mGijRGu~^ z6DoD08rf*LR?~ii4}m1!7(nFFeMS2=xJ8LXJfW!Q+57i+(JBIv;dNzxTJ(XqgWX13 zHY*%l2-T1!TKe>*I7qX8qcOC2!2ct8^1{HKemH8xF^z$|jDkQ*gL8|~xJKS(9ZA0m zubKjq2r>+anYlgpI`=$J$!O#~A@A>?a1P1pp}5D$AV!oKYP-S0K?p$#L261~X?lxA z&P%|CHXKO^Y~w-?>J{z}SOha$K4)HMby}`qg59j( z8>pc>hNd-U-MJ(p;b&5$US}VR9cAHTdIa})dH34P*R?cV>2a{qCD;KQ{3npzP!@m< zpAVjAZP=~1wX_64n@12f-cm9)BZo*ZrKK{QR7a-ye8h2(fY;oqb_=J+$|I>Ozroi$c>nM|Oa)NtGX^+xodfa2!(jlhI|6Z1Kw1%p z0h&E_cK~~Uy}75FE!=Em%cr;Yp5t4zxIwKZ>5uA3Dj%hqTiH;v{NCp>Tl!|yd3hw7;~8{y)#9AAL-C6g3A;smN9foBpb<~ z&=AmycnLri!GN*>?5&D#sl2NInqo|8?!$=tASO%*`*_DyZpAI2#R$ zWi*`%$;S7++L@00h^;uS%067+rI0}B)`DXyWsw3m0rO-YbG-lPLbz?psu>Dwzv@{q z<0bLH_S>2SY`>*Kk>I7%JTqiCKTokLfEnCSyv_vb`hX$?rU=YnfC<2)ro1bDWX6;M zp(6fos?~wk>Xb<~()6ll0w<5ZQ%zbLr{8*ba_qy*(LG44_;wm>8rZM*$$;cgPEX-089{U)v~bQWjyO%gx|DnX1GPW{ zB9?B@EpvCjAcKh)15VHt9Zhpc;`fd|06H4^ua53YIf5)4>%^KAW#YXD`a29paU$|N z)HFpDU>aw)UI1(hTZ}`*Tkx#g?_3LDLXXp$1bohbA*0d@*0IJy6mD}>jKw`9su)%4 z+R1OVksSeX0C8YGV$4u^72Il`Y!xr!r68UfU{2-k{=~0;ZP|~&maV`KY}vM=!1}P1 z^%-=@IOFOKg6yraMg;YGU?pY{?1{H|n_-4Z^C7?%&bA^?@hid!J?^G5RU)9~~2koom~gbcEjdk-Gel>n$eAHYYc1+`%^K@7ml&h`Y-HRU3jzY6bEC!}!hprXqlL*yT<*GOsMG@ywz{^tP zh78b(y-dud4IXo)N9PtVoPLKKx6%*Z4%&XsZK5m;@5bj*LxtfLZMekaJ@AHA#Edb zcuVWQly)k0IC;n7qYWC2@AI;F;(`OQ+uitsNhvt<^OVyG72T;&!QsFM9(F%M4KzM7 zB@SqKX;#gX6Dq1FflFzxkkUGnAXEPsfNBG6v*s`Dj!7=%BcvYlrX6QOmREQ)eRV<8 zmtFcx2N;v)f`>l%!F4gI_bHJ~WQ+PLip#6?QJx$b13B(y%mzMg%@S>p$_E0vV2TB# z{d}DC8_EN@)!17QEnpRWz3Htlb0%RSG_+`CMlchC@06Uc-4l7-ri(9c`L}oD=b5(< zw1kCU+%WKY@Ovuu6qV9>Ug<-_LBG<69Qer^8gL$f1M~+?%|CQ~3SnWX1Duv1Qb1?9 zqnejm;E##Ek#dI1jWoSDLCmbK>RoMHMNG9I{D<*aemyPOkMbzKOnK;DF+yANKj-|L z4s)6pI^M3N{jjQ!66tN8jy7WoC)lYtB#UwH^7(Q)Ha!)LPJN*k2|^4>7!G|-N^@+P z)D#jjvM|nAJFU$5F|YLAYv@`XbXwU2v7r>s7?k?lAwJTVXTKVEuCR z6x0k#(e016s!gziqG%dC2IbiJFhacg91`Jhi#^dS6xw>y<&cAE_b2gg@{7EJ=J!dY z6@HI_yM$_wF?&h&XQ6nfv?wPymqHUtriSjz)$*k3W@9ng{RJ@lQy9@~JL-~Xy_mi6 zZRbuVEg0uhnNgA5&7hPIu&vDkRLw>ebXMa}x|_akz{)1839M{~!Q?%@Zoqn~qk$%3 zrm1oMbe|d`2C1@RC1yT;r5z_w_IUlAae90;YFq!xQb9)ndkA+ppn2C=r9twrFVOc{M+1!V0msuVP~LSyUjwX- zsKwR3y%|{2De034-L3_rb=sSOeXNWw=sQa(-Q6#?qn1&b%Y9itBHI^a(0Fqk+G z;ZU?$qb0hmkNOB!H5wl+2492>AM(0OF!8FCF02gfT2NcV$^vDA7QN^o2z^dLg=y>O zxv{rfRTt^-93~pXHN>@EDe#!3B+|_;OZR(ONko4$Un$*Kkj4BVm92NZdD>J)bG?(g zTZG+3CHdl)wNB@R{qDd8o*cfHimX1SLs)YZiPxc<{iiDyAsVLMG*~8p8ET%UkPf-TQ3Qh^%~pnwP;aF@N|+APebu%aWf1|sc;r@5>)w3Um2Z&ka_C6|2nZ~3*Oez z6ZiHGDjw}lc-0mRL&VB?x@r+{Z&;WF6-q4z_`N(<)tw9oHt?av}c zpBo#@vULqSI_(|q^XZX;J-Bbdm753O@I#|Ijr^+ZPLzPEX$G z0CiRLM1ljJr*&`l7@Iyj=jszAs8?oXgB;kO1Qdcz9f*!M=#+=nF86QR4_~Fb7WmQm zk@uNOHLjJoVjbsgW_@*8Z8j?dvps=ddf1}$yxF46$8aoB5We*}d9v1-uKWhl%6g2& zM)HVQ@4SJm(X-}wF7|-c;`6*u$;^H!Zvl&u;X1W-;orw|$8%>c`Rp5X4wm6M79`|X z=ZahVWFHHhYqk!6=MZ;jBC3+lt~lLKp5-fXa-Qc!h~BDVY@%7W^;aBjw98-IIV%?^ zRxI@9`R~kv@iJTuC|2kcK>Fzvq?of@jq%oy`fmn8l`e=`C{{9bRzuF&clXmWT$4J^ zHj}TV+@YSP}s~?&m{R(Pa z776e%NHHgnTQ_+W9?&s#%40w231Ah{`h;1JD1j4L|4iiffb;iJwHc4Ktbs-kW=aqg zE5>PDxlj-ni7{MAa3`Q!Hj+O$V^*qXLHZs1&!4Q(GajwcY^S`;H~o9lHZL_9m!BD_(J zF$!P&fQ0VpY>?3`H3EpIix*(Fb~2V)MT$2_8}VFAm48TKaDCuhK;0L=pi83|=d!bC zajE~(h?qK&ybl(kW_Q=fKu5?<*zmTOD}(PEIzp{7OKJ`;vY6w(=^fA^xf<4 zbFIY<>(kftRGqsTtx|q!83){HDTHp;Sz1L<60$?-&HEe<@i8Qxxl2(jT!oPF*;~t><8k|A6Uc}yG z$Z{mnh^O2wa}V#sr+{=sG2+sCxCRloqR*zBEs7`6E28|<;n(cyjRwJoWU7t9P-;%g zr3%d%4iI7Y#l0Cs;ot#<+Y#mZnek1^JYjmk>Ex-Ip@S>_aZRa!NQ+~6VVU;Bse6M3 zPUy9o1HZ!1klmPEc7c!r&0apgU-7;3iZTI0H7cq+3z#X+AxTQ}6n3{13QdqiI5mMk zd2%r0n4!z4qy5i2o@}*+Cv?NAw>Q_tmGiKO0s6_w7g=*c6`}enGzRM@`!J4~x{SKo|9s-9P*bVEbDZ_an7am&njg9r3*fI9 z8gd#l%?4u87*zw2Ts-v`0%54$g6a=dv%zt!5Rh*ik{uxhOK1yK4Dlu!R&yG1u}`{Z z%oP{S;r}bF9w64Y-(eM1oN65szxQZU3Izd*$i@5Nl^ zHQ11SlaB%C0r#k>OUn{#g;u&@HPGrZ*H@@iriE;LAc&>}5G2pr@7XeLP{+xGBAF6M z&*Bd}Ky3fUW0dZXJf4g6-;VH8T}^*dK$`=9*Y7K1pdELx#3QpSLZXG*P)fa&^7WBU#Wo_wXk!@;ZBcR7J?7o5V#LX(1RhiLCI0M0!t z`t8iJq^elhCXtqbB)q9_Xp;z0+XW-R+x4Q5l|TAp_y%W=@ziqguo$ND)~a3(SB__n zVfQrO3=^u#nh||@lS8OVsOlOwqVixyu9^uXm7*W)E1J@A5Mnt7o`_5vM2bus?K|2( zH$tci9}3yN1yas?0N=iqQ>dUitrm}&JvU6J(S>~*Vk=NyX8=TU*15K;;{+~x zZ^K5`ioHAxUhj4#vD}~Yhy2HB7;J6Q-IkkK<|#0r+ulnXGA4MT&mIF5K@>C5_Jm83 zhsi5yZ`CFiH9%+pKyhqw&49>&cxR}!C?fy|GWrVXqC+Jtt_UU;G6WLO3bDsZkM^+@ zHLhG-&0IbD1w?ZaK<_FB&4X*|0O$niwBo*$7>Okq_AX0t0{3$$2>|s400oHaiR_8Y zO8C75n(tH&A(-$x6RYJRxbJA^Y>JPgOoaOieP_WOg$t!?Hz0-nzZgq<_K0OWRi zC;$3aiV<$5dCJq?<9Z^Xg`1mXg@M2 zvNiW*IH7LJ*W9zOuzb2;dw(ISNc}4!r8hGCP8ATbBY)AA*`K_7`;b?-VbNodw9lV%-OTM>ZxZ| zS9krp>Q|iiR<}PuNb1y!-dX>)nl=_BvYuWb^@OdnJkPc^^_UE4W2ia?$@>fi?sk@q zda5V@edb$T(Fyz6_8liEV17MV7Mvu_VdzY=Gb@^NPv&5J?{C#6dQ-;^RIyArd6hp# z6BcC4fHfA^H7DUwt-%hwUA6STGY~&$VuI~i-D2QOa1lbD$*xRGE zUTkV%1ccZ+7-s37@nt~-Afn*B1VRYu_~@ZRaS)-Cf^!%z5rzgVO|!DtS0U4Jky9k$zyFCLF~;A ztLE~WM(xcWWcI_xkn+VwRBZ&rwPy#GF}90bPz6 zx7a}p9FwqeB4QWbeULVz2|5&rtr2SnxFCWc5L-^lkT;oP8+im4lzF5cKD5j1zIDk0 z_!5BwC9e{OnTctJw3iC;(FvT{!pH`x>=OhtpmY*LiJ=jTgJV`$WD5)M0Kl{Qc*ovFxq)^)*`Mg(4)i(<~L^t4YW?rrO~e-2KeSF*j}}rkegkI zHJ)-dIaV(Kf)usJ`)1@<&Ri|zH4+Sg3ib&0$T0$qJ0z=($FOi|0yLs5 z@=1W@$e0TU&k|*#I#>C=jZLZU!1HCgv)Kd0ScS4l&&L98zs>}LYQx@stm{GzP*Cwm z|I-I-{`D5|8y7V#&^;F}bDl$pPV+;VMXME5UmF5hu@VuGkAGT=po=7E4XAIKh0wFd zcUDvH-@y}T+t|d~x#Z6@LF7NNekH;4@nO3Hs`Uk~HhTvz&yUN!xpw|2Je+T5VK~Gt zcCPkXGzKQUJO&@uh{0{@K{BkV;DoZ`4xaaeK*|q;XMek(V6-5iP|T1}vHxN9y5R)M zR5u_P+CQ?r#n@0P+l)CdGN=Z8jnFCfQ|QTs>Z$5=_NrO46lzj_uo7Xcwh=D6hui9B z^_L?ll=MX!@ieq>@L^H0ZxUc+*vI-AX=l%~VFYE*OJ2WR31`oLR9vsMwXFLHj7Brx>**{cV(NnkJ?ZDI?s_2JM-s z<)2&sU&)kEiOS_4nZj9OCb{4VB^nD>hs9qFW5p9|V`wv6X{N^{?6ZE8lDRbMLJB`t z{BM?$P=(3`;?Gis_gYuxy$?s(##Xcee$AS%=sx5UJ#2YlUy6*z|s)^5gH@tt4L8L4w;d*GW}o^;SjP2C+sf+yD=!YYB}>OLOP)00;K{3Y~OA&!Hs(?s!)TkJBh&a3R3^WQM)e_V3Xn8 z-ycKwj(vW5-?p~83)*>xG<5LEZK+<7UzJl&J%ygBJL5@6{h;Dc{qBX$3Hr{o*$mP~ z81l)t7unyC6K~*8sYk`21Uu!ON0EWw_x8*ls6r1% zAGzKYNWB?g6459SVv2aFfnFWnu6pTT>KbRf^xGsGxKjk8$f#Q3CA);ut_9%$Azl+Khiu*SX5;9 zk?9{Ar3snsq-yz0fC~E*Rs^RxnXQs4-!|Jk%=C6Zly6j{AsILg9*%!hsQNF3)tP`V z^tGtr+3Z!QfD(9eN;gW%xO`A0Iiz4${7npreX{`&0?7a&&?c}~d~=n&P?zS(CS$oa zuHK?#_MnRz&oV;nEAWY`&#QUTfRyz>`;Q&-Q6`JueB=g?78K zmi_F7wf)QhLa9mh9Dk!E&d-oJH4e={aeAi>C{ zzedRxawNMG8F`l-8+K>cw)XJEBU5RYo$srORM$;h#2?=5On3#wD<7(h8El0c*?zRj zDKjpM5K@zN*Sa=m6(3MTyZ|*M+s?eW1yDnl_!C*LYi(1=@(DU^cJ|?~7Jt6e4lG?d z{TX#>3F*2ib#Mf}f8&`~`on7cUE6nj->+&Z<9HrmTn#W>AI8_CaV}GbQo)(bCc`P8 zDLykWLhsp_F4jnp6vN8*m17YGX4!q_Pw<}xDkT*wpnv2|0AiVerMc!JAeI&JCyL2A zTD^&7jW>W;M)r=KJY%z*UU-S%(`N-uj?oP_7LmuZmcOWX>yChW2lb7gO#*=b+35snrVu04I4rBMHg%(%P}bxFrA&eMnb<2eD^PNJBpchL^B- z*0;ypn)EBc^t`De(l@t%ad#8xouuH^2D8|>arJ3y_YS{_b!Se1SQi+2?!v2J}E z5bNY@x`u(BmXfztE-t)dhK57_bYMAWFP=Vigz%P<*|x(wB%5**vq7to!Xqw`NRplq zN^eXo?Z(Z0$q2f28He$9Sgmsy*;GlT^{bY|UC;2Fe5n|W$XMiN9pUBLYxxHD$yKdeFxR1oCiY$K|BS?4&g@u{+z2o zAs`^~KPC_eaG{jeFli(e_)O3;L!MVz>tb;?>eggBro&VJM*!mxPaK zePoupSds@dLLjWaKIefVeqXd<8CtM;8)#57S|j2Y%x(K2nd`m19966gLnDu@$Ae)}yd(~et6aB`GOm#!*K<^0 zQ+uSCog=@5U=dm{h+0)YUBFjjR83m}DG1BHthPg35$`f9 z+F)<9O*4cZL5LMt-C- z;&T5y_-vMJxsCE(-#Y%%b-+pRIlV*A_rdQ02jiYUCJOr8*o%n}H(m)7*qjCAN(%0GhV@uqk-K@am$-HEI`iEi)DQH0}*eT;! zsN7;~Wf2TXlgl}jSjkw)fLTHQL#`1v=zXFqX^T>iS!as|K9DFAK!1|*7MT&ExL-gp ziT}rMEDQ_SAds0b4hpO(i0}ePPAfaJ9V`WK3!OtQJ@r0O6wscOWfBQ<$iu*LY+i7| zfCDU-2}8*SfXDlMe?Hz9k!E-DLeaEE7No)fR6OMwvjn9vv!0Jk$pQu1WL+YlHJbQToRDE85%bBWP~zf(xZD8`HWDYE+@g62Tvu-YM4 zC^5R@8@$~R2|3Dxf7^h`^HZF%x!Jy)F`H)cq+S9lc3{mkJ9v(XC5tEyZGxYoKVVM4 zI7daKus|o6Kgx&X;3Pv8=7a!4p%l-bLk`D6lBkt?1w$c)0b>fp5JehAdh2E#_u6#+ z&*%R)*_n}5xB^n9Nl9Jy%V1OpzR*>M0v{pzf$riAxqF`KhBvNc9U(#8Zq zCTJV3Xi`A@N)ZqZT!bLAtZJ;lV!>iBEdLOZiP@AultFzHEjXW_=%R65f6YwwVq<6n zkL`8ofu}#QQ^3=od_eff$7L)>X+GhAAciEK;Wgiv%|IqrgN{W*U;iBsB2=7CtonH| zPXyJdw8F_0iHYvbkhF=J%Y+pC3=uo4M0@t%+c;v^<%y>P1HAb2V5jT@EuCbslYs$V z!GLHTJmXd#H1WBE1URs4XHwQ&5CmJD06|99H-Q;jJprLq-t!Zcu+5BG#RzCHBw&5O z$r?PPVW26(L^tX10IQ9!aa4?27{**YZsC80X9!4F!3DsWMMFS*He}PYCi%2t4}$=Y zQ0mS)je`ObtOnil<~!N{IB`rWrZN-+8P>1f-B<&)JXV30!1%Ba!1yqr2m^tJZ{ry> zF{BJMqvo_=bZ_y%dcbMlLoaT2cyt1~#`Jk%NVBh$34Pk6*rA*GH$;hJV=R7bjU zwoj%c{B&u5I3YWtDnFvntXALtW>AEEy3T(m^P5Lj`N72wadT0t?nUcUbL5sudFe1b zM6165DJ1Xyvxm}A3?`fAww#hwfc_Zn6UEGWPtg@;TC=bUsn#5n#0*1?9M&NF$MJ;b zt(`2(r8~#EC-3vY6>D6ImV1}`8ji@&3+yQq0&B?L{C?jmEM%ea3Ed%;5BynIt{?FG z*@6Q0UxK&a(|mgt;ldp`UR88J7}oDwv)@TlaaT~P9y?-a|2R7)D4?O!O^m;d|J+NW z(B)`=B0xa;8=J^dBGnp0?+Qb?y^=>oaz+&!3J$g(TqG$`fO14t`8rk!iUu|>E=PI@ z)4VXg#9W<8agdW0@vGBD+V}heS`-A;snepUpfvfR0+Ygol9*pydnWT7h?!2;Y5OL< zn(y=U))e1wqp?j7rdG>S8c)wtr(~wdQ+j2wwiWqYG2a_7a}gL7uzIsZ!Z zc~#S;q-Pfw(`l?hOqKA<{j%a8Q;qf}RjAMDS7*1l&dOIo4>MpLL?kYGsFo+XT)=l@ z;<)UHeYC;muAOHE_;34nSMQcHdaz0kudfd;=@!iB^{UN?R?8QNytPhlMiUROc8Xm6kFP)@bjZU@z4XWxdutj=%m50^+fR*BK803>tvf z+ZsZDaGw9N_QD$nL@i1R2>`f=Rie2osAvLBRIKI|SSP5k^`c}H!2&9%yh3mEcGjwW zh{pT~x)`4d^kWHB0PFdY<^H-0f$Mvwbo@~}<8GwYVy3IYQMvv{NEI3}Hb~*c-$=8G zM#kmxv`|Hu68Z6bn*K6kLq;El@q^y0(oa_{i0Bg8I(%CX*-rI3Bf|eU*8Ne*=KOd~ z|MhS1q5b==1W&;C4B&MfR>2FT|m1h2j)8#XR@;yu_Q0p4iJMv$DD8gAS!V4c@c7r#b zo1lgfEcC=T43NqtfYou{advE-7ttk*p48gT^WbV*CkdnVbt-Oa&6db+Pn4!#NdDyT8BCP$Jdu zJrB=tN9H^oykUW?O@XZ{J3SL<`>gbfi+}H_TujUdzl;7lYO7W@6^%M5Ct8Qd;OX@8 zozS=hsjL33zwss;od_=f+1XPBGkjb8VQjoG?NDz{*Pvr~Yj{R1oRg=y|EUuUI-?OL zniBh>mf^#B`rwBO2X~!|T)Q5AB01^lrvNT7y*}=Iu%stHZ1lN8URv5Dc(?a*~|fuiHT#s7a&Y5q!z``@e5 z{MBiKf3NBPT5{p-jQ!u&YrKE=`Y)KM|Gj)xK^%mGdpkXW*BjL8Ur_&l0Q58CCf_)6 z!TJTiR}1ZoL%*tv>n;d>GQf1fiJxYtlLJn>_Gjhbnd%nZm)CdgUlTeHrb>TDj>+UX zvnYIs&)yN2T-o`ps8I_kBVV02^q#826pT`6=aZ-=&@=z?uA<& zozGlhP9i?1Jk1)vwRoly!#xo~=UM0mTMQYVmKpeappiG^RXS*6%j-oGnf(FIty*1b zOnA9^-j*Y)rNo0#f1fn7C}tmh!V_t-PQu%X1wjnzioaVMgPYoWs`*Pne1Nh-?&%K3UR!8Nyh)d_xsx-2De)9AaORpGf z|K6-kD5G{U12Llp7OZ$%H{f4!`{!Z^wsE=&Z-ILqntCi>5}Yuj4a2od>=ljdZz<#x z?0JZ*XS%y}L8laDP*~mN<=g#{PN14_)a7pZDJq;!0@lJV@Yf;k7rNbjK4~CuRs9yl zlc>Duli}LkQ2`w0bdAJa?_eVeRh1{|TVvKNW48E@leWxdd5+m`@-8*Jq zulyd~CAOsdHLhZ~OV1@s^gSPQ;*6zvuDlmo2t`L}X5RSZ^rcg@MOw-htB+*Fe$B|> zN@8Tu+KSs8*rI^LbKBM5(3T^CkU#f<*b)G1GvNO7T>9ryB5#Yd{kfhS&;}f*4B9O* z0gOwr3BEXtQ{k`KVbj}Y*$flf%%s#|Fz@^lkMHKMrku0#snD|bROanft?Iu1@JqQ; z{!NM~^g?95^Pc|h>M8hxwRmEoGJ@^td>uV$Y_F=Q$Yam%Yo)dNPjF!13H}Jjkdrs} z3;WA4slRZ48IeyWqQ_}Lk^c}-n3#y3W<4j6$V+vY82Cy`QHL;XOx{G+6HB@|QqVmX zcG%>eNEH@3Yc?l?@?pXyY%9i+g``_HSlLl>R8b5G`ZJ$gGyF{`j330G3rm#)vg+~ z)9hOQkx^@uCxpz?&E&7sRj{d*}015_FK z;jUYstdaT<$GitwL2!#WSHql?uV)5-#0n#D+o8GgH0l-g)4R=*ML)U5#lnG^N%nsp z#x~zJDBaV!se$`YRsuoGWAAc<(}fl#RM3pd(Oo?R1=i?y|G_|{WyabSs(9KeN2n-j z`6YY$(4GEBxM2-+4$)?KkQ_!CO{&g~sw45Mj1oh*FLN%|j7~R5oFp0X_h4Q4zko4|QearLabq6b%FEay1MAW@&Hlb;#`m48zu zy5J5JR-KYxgkV&J+Dwb;Zp>3&=3%637-@PjPW3ngj@XE=uT5yhqFqTw%bgh)-?3X>GWQ- zzUZyIj4t}DJ24(L>n(|)AZ5!z=@B)7uIr(=^neO~yEVFfb#j-eq|{)vfjj1PGV>Yg-y5L6vS0u61o`Ww{r^B<|Gx==l~)YU;sGu}=Rh<0uiK4( zHIaX#!O8$=O5n!2RC872D~ci}sv?o_L19EVVJ9|pnFnvOtz^@eBEJbpF-7-{0So@; zZ~IU1bW4XQh|TG{B3)@NaC7~(Rxi~$2!xywQq6Tg_CAdwb6?!sEUF_mW8i#l(ex|1 zXQ$9N{iv#q$bvL!Ezt)B{!?_WYEUqEJd=nDf-&JEj`b7?ZD8sdI{JxHm1X1R`EB|X z<7U%GFgk+cQ|W3<8pT1_x1rc8xyewUOzfLYPhqBXN#Lb9Nb8UGCd)qwZv4hP2;o#t z5SYqDa=bzO_p|P={MY{~=Klu-`~L$FtZ@?cz$I|f{Q!WX|Jn5Z*JRN(OW$O>aOr{y z0|J84`tce9s^@E-_spPLYBn=>{?B8#Cz+>S4%K7$Zj4vm*LsP+7*xFC z6IV0nTw;S1d$23H*1YLW+orA_K zma?u!W@#%&g*k36EfW?Cvfbo4pFHxZnp!o@D?>{f#t<~+>(a=3x`?F$y0rUK6sph| zetnHD!?sNQuwR^XfG(yzArV37W)X!I!d05@V^+JI7xqmbN?%(*k7e`5z`2KW<&MqD zUa3C-l0UnnFuFlCR(u$L(i-lapwUm2C0Y>OFegQbj&B>wcQ2GUC~lCv#aeG)Lt* zta9w_CvYLGzVuB}RiO>in_B5N?cAm6(WdkMbi<)|`AugKVVSjdTvyKk{728kwK`7g zgjbO8UH)z)Fg^@+%SCj9V6=n6AyKkpEZ`yGs+b8HUt4*QUGx6SkO4xz84*LO`O?8@ z)7**!G57IHkw>B{!I6SO#Dkoa`Y zT8xjlrt}J%VP8ksqn6khL- z-Jj2_TbC;9GfoLZeDHbsdo%jjwQRj#PR_FgzP$AOJ~#A9was1dXbJ1^e4<|!c-hT* zy}I%Cxw9oWC5rFic)T5tI3>(N3Q4&=T|IuMaDHj?I&du0D)r*jw8A%zG)Uws(Bb** z*xUWfeUH)O6AMq-PU-c**%FUE6AaOK(Zb+Y(-xfytn=HYzC-6$F8mmuhKRXAoQ90& z=>t8MUgNbhJ09sd`rMP3R@F-<4Z}S|38P;%KJltK z-8ncsRqkFNLx3JbtX@NmN8I{6yVtIa?i`BV4oVZoC-4;>#MDQeZfzfZ{xVuHY$*Ge2Q?y)PVOH*iUGJqz_X$lxA9+yU>o)an;C$HU<$7Sn zszrwGZe{C}$IFHFQ|m)bcrNGXf?3sc-PUCM2fNHJZwO z5}J3@q5)T-x1ST%EbMa3$vd`nqv=_(a_BD`!=?gAkAf$6fo}zI{to7-v+deYWz^ zk1ag#k*?fBey!6Ma}|TcoJ#{}nvLJ+H;azB!(EXD`qq$sZN1iixqD#IE+faNu$(1Q z7Z4yIZ09FP*wHmK44OL4d<~g-ad`cWsomu2M2#1W>HYD`#cOol%;BXN8`_K{=M=`q z%DWBPaA0VBZIIyZ6WSp%=6KekrrEP`=A}%TPphhC!~;^lq`mzUQA0Omf`6` zGuhwP@+WqhdX{)PwDS3GFSWB`ZZ+BhkEdoKSYLmaHFvz>ZFpema_+N&zd6e99h<;D zMTh4+$KxM$&EN$g;gWAHeX}{@7e#&0dOXvL#O8xuy zOZMb%$Huk-ZoGXLNnsEB5y&slnNnE2{m&$LEdKjR*!(w>aI%v;t<@bs zo@yvULR^_4_7NyMd2TC0d?C~8Z*i-QZA=hWSvL)V2ur`kdNpl%-WEFPKT!$_kc`k8 zohv;)2N<2wyM%Kq$xpX2$oiXy$1XuUt1_EwZQF$Jq!m29=;-c4Le})Acs8=kS{61@ zPNTKuUk@q=#h<#a?h+MfKHR^|EoiMf4v3AJ501UIH$CNT{1mW%tgjhfbKmXYsyw?} zV-z@ve!WexaP_#@zatuymUrb4z<-^zLg#C3;l)n!uI71OJGg2fx*d4c&(HCWW7B-t zQW>_+FNAsa%)DS^Lp;RDqV$ z+WM7OyHa3G4`KhLKKN1!OfKnxA_?mQomx(hrSr)y@|1#7P{^IOxSv4z)b9R|FN{>w z(tLu@SZw+2Jyl0=MdorpA8T=x4<7L}nwrHgm@=)br^J|K1X$W%ggB^WrPGIWY6iJ+ zKgw0z9~rRoQ0~yvY+kywt+w|~ru=SP@u<5GDvR0Y5?DR>HZ3qR!}*{!bU(&=mQs|< zf5mDm-uP=hdpKq>X%LHCF=C11sy)Y;PbPsCwY0Mt`tdev{TuP@O!N2j_+$;zT)IM+Y zc(Vfm&QDHr<8ErS_DX=3wX&QH77X2V-c)W7pupAR;oNK z(9v%-ApX?N6OQ#e5-ZOVLt1pYYS2PD>tYiAs}raXTb1xS#1oi=R!|bN@(F6Y&KjK& zu{dR`QEx&hYULz0s%d}R4QA2usZMzX3a4?fUtYo7kOfW8DC1np(Vm0~)1Dq{)RBaW zpMu_(PIyRuhZkkOdNeY%2VY?uxu)J^0(uQGEk(N{AYn06;;GgXvGg^g{CiTO3Hn$6 zi%K#LqHGB*#nH+}(e&hGTC#Fn!9YsVV?tj8Y)hetxScSs&grNhR>G(>qPTd%h7!X` zaq6SA{gk9pIF+$sKdSa6X`k+lcuq<{2Q*1e=0TzN#0&Q_D8{igWTQ`eOJB=KVpuH>E7?+NBg*D_ zgR*g;Z?5qR3A1)9Z@#OpzK(aC1$$Wa+`@zPi+8fM=*lbPb8NdtL*x0QD|mi`5ikDQ z;L_|fZOHw@1CbA3$?mb&z^SG2WW$0b=-?XA3PfzKytujD#0&_0iJUup{YIdWM058k zcf){`d*-GbcU6TcZ#m_3epSaDN>p1dUb=}z#`P}jGfP2qweKur$D{E4M)|tb9TXI z@3Duq)`Gcr?ZYu28GV3xfu5_2KAwveTPl4+2Jmnz()aI*Ml{32Np&}x0ppuavCqJztcKXoLauK+%zIsU0xzzMe$d7=bo&Z9v&n7h<<&zK$*LbtIA*E zeK~E+S&O+9%4EgTKl#F&3$nUJX5({|oxkgk%|3=(x9Ral4PUYE`XxECRTR!sGAyS%QnZKBSG2~5iWEI0 zrymftl(>9J9lhOs?eI`;<-#-hqN6j_Wyc|b{AJ-}`u4|NUah_f5;wQvHnYfDhK>(s zdniWA4piy6^e)=kHrDB$#(jo@|J0a4|~N9Av7c7pO|if3g9 zo)j6^Wlpr`=e)P71#l?8w*_zBacF5cvfpwhvbpw=-Q8|#A>SJ_v~Cnz}Bm1 z!J1&9OB+Bvow|O3J&>7u9H?Y}BroZ($lA~!GI!Hpf$^4cg(uZG^}RlAyrXY>CRlH{ zs^{=sn>yES9=mXVO^^8F?GaX}oa#Mvs5bhwgI9!yg7$aMQ*;DbRvi!F{3RAX=9)F$#VX$B+A=gmBwP^a2~?Pu zj_z;#9BM$!(-5r;)kAH|C2KPpJ&tK;p*sEe>Fmpc*bDpMrNEun6N``H!^&}|tJzXP zz1Hj)HCkpZc+_rzV_uu`R^li`gI;D43Fb*PO>0_kbu+^k07VLP46%ZQ1ht6?85oIr z!Fzkq&Zz{H5-AAPM2tM7cuhbCwy6=?J{(LUP`eo#ZBZVyv%LtQNUukBa!s|}3MZ_()*nv&n#@@i z^fl8#P`!?9v8b<%)_lR=44_H{f^Ty;m~HqXbAoUh{L12)vj#(A`hdOeTkDXWP~a?Q zzdZP?-VmI*Vi!{uA&wG7j4K3;1!MQ$Zh~A8XA&d}6`v>;aIL5mB>OpHU;#m35eb*s zJtVvjU|`lFh6l$!*rdaS<_>V*pqC@sHsotO!7W)Pu;WnsN4JY;m3vBVw&z&~eUwoG zGXVvx%Mf1FMCsePtJlEG{b*SD>EbDWLvaVx&kjFE{9!%nGFavtq<#IdfCBcG-wmpCRZNHgua_p>=BSWiBm`6FUN&YFQ^dqB*|FsSyhPEDB-Hn@bXtxIz4HEqW8Q$a9^bK+} z#x&|W%$rqig9F<&{mIbL@Vne#5*$o^$%crb=P6lDKzw)AWaZ*^5EYBZ#RpiO_{{2> zWS>?Lbvscz<8BOvVmuaKy5az;DLyD*03j9Fjw<6|BJEFx9b_ zBSb7A4_rc({CgK_IC&?kaS)sE+{y$baGWI()>U!QF%dp>A=z63oo`fAV0$&VL?Jlf z(@*RK2Xc$Tp4_lWDmDxMUp#c__ynA}q*92{isYct*tBJ+%_qSOKv^UotFk5dY+u(U z0e&b@D3EA?9|~*_rQl>C?}|fl=q1L7&DgK9Fk+PkNUPUK5tI_p(Z!O=0RU;$m#iPo zIPW3UXQQ!l%j*v2w;*5>< zY%=j#ued)Nykh98*St0M{k+3luO=fOxV221w2I8rin0#>+FtBjShhO{y|D$Nn!%&2 zV;*SvqnbsF-x;6N!<%v}Mcp~k251dJb9}h2?|dVX2JPVoO(3FK&s283kw}#zeYf8X z7<(PJ9clFu$qY%mlY2AAHH&|~SzAObKJC2eb3BME-JCcJ)XtENP$MRlB@JCl_`pdO9xe1gb;#lT$M#b-m`o?=7s6@Yq2 zMS&&9nV4ZXWRm+54$s6z`iZYb;n3|mVn+pybPj*<D7@ z0rk*|K=&nl*22yX$(RGb0s$;kP=OfMg9(0-X^$F-?CEI`YflMCxy^eR1| zvIHodXfIEK=Yd`|)`0sGYTPd2O{jcXfZnsDmk05_e zC%cGMb8<0Hn;@Dbej=p*ri&IHK{Kv=79q&>S2t1<(`oX$C z7Iqa#fp7S8{Bokhg9RV!?8Ax0Sx4}7FJ~lTLS`C=8@WvQ6!+3YlN!=>g)JM?b*1Yo zhHv&Y;Eb6S7eLMsHFE%SOcnXvz^RD7f+hki(xKgh3n73SM5olAL%w|}ct4`dzv!h( zFjPb;6?FlOp}qK6;ckNPd)C)ekv~`*d>edQ(qi~9)cb+54(sWr_MqiGEcskq$E51ds=i%(nuH5jBd1qfG2r= z7fnCF75P8eXM3GNDFSHJKZ+M~_>ZFT>&IU}W_y`YX9a=cO}$q)cEiruzn4d*~zrsk2{0iKl*r|F$}a`h|d(T5ss#l2twzJGFD2vp0S!gOGl&ZQO@zW z603Yg6WO@~W&jgcIpPKX%vx01hWB4JFW;hlc^JdHHuqWf6eGDQHc9r7H$* zNG!E#5}7SzwimuupK3Oo`6JaV z9E&E^>`zcFa4qY}5Z~E11124X&KAa7*h2g;Ln)66|G0#tl@~TyoC;izXeoi~(T_sl zdQ`4N4q9F};fjfv=$ZL3(L3;qhBpJ~x30iR-&x>Soxq*Y(yhOH+E1o86MBdn!`jc; znMijtoQ3c6V1@$z3GKl3adQb;1I|C70DA-WHZy6_fjDgTjQc}^#i%`0`DCw!sw}I} z0VcX!G?JD|Tz)VB0QH^K+G`1i8d6UGO|7q3|jtXz~n8|azu(rEs(dOLiUx}LjSMw zw7~Toej0_}?(zL2#3_GU1t{K{a$J6Y12D9`LCeA$C?4PXZr`v4%~5do za>Ked6YgCyEf2^V*cy##go+b3vRNFXH=dD2ynWCO4Zk+zw*n6&FLAFwrG z5*6th?#y}l`o`nJ$vc*XbblMzsY~v1Fj<9{b|2+}+?^LoHLLVTb2T#Mn%#nnBG26~ z8lT{<7cSG}pD;j*j6B_y(6cCC;Q$+gD?&q#8RJ989Jn-nIf-o!yV&&S&`(DnUirF3wuMHI&3z*St=x6xRNVDrp@Mq7+ z3GiMpz-nNs!;RA=R?B@g$F`Wz1eS=?SNJbLs-+)BoKm*knA0(RlmXT#aq`j-1hBgk zzXwBr*ubQPCMKP)W@bGsadHBHG)?6Qi&}+20a&A;)gaY$LS?aF)#ARIZ-zyp?nvx( za?A%@%&|~%srMVvWwOWVT*JDr$jTK2=^Bz?Lm@-Ay{^9cn_}f>0ie;|gCBAr)nDI0 zqpealS3o)dXcXAT6xJvTRssFNK=aM8aMT?y9Fh$wpxq;ys=QI6$bhLCdmmg+Cs=Nz zD{V?<-($b|3`}l#^SP^rszYt(p|Z1z+ZLUP?!Sx+`cRZ6C@~gb$zq|OAERW>q{}Ri z=r3LC5|P1sOJ>ZITSf{20Q=W6y{W$jM80bisNPCA|I>g_LmCDBGa$3a?sQ$#fqJcx zh23DJuh{R1)eHEYD@kK=?`=r`9uwYFvG%*|U=m{W0b8)p?R+T|iXAzlJPxp4qh>Eb zIzc)flwrJILS<(gsUMRot>2nqY1Tw<7AD!+J>kSXEZs=B<6Ie~JpB@D15wG07Cfr}PC@AGR*EDG8*sH0N8N%2|`CuRkKpiM>}MOcCKX7B25(+b)t zkzSB(RHbj(gV*N!62o_`^z_}!c0I$U47K7=+V` z3yes|aECU^mcD!xiKQnqk>PD$tdp6nIhuma%H|R`$__ z27miAd+&c_zxPM>-a<;*`q_VG54Eqs_?A7c(*7LG)iCihE~d`K<@^6-{zNUCE(M&@ z0>TCfS;W4c9h_9PI1hcyE`lABSG4%~L~?ID1oG#D@IpE@J==-Oiqu~2Xa8Km4#5uA zHx?J-RHa^Gr0B!8%6 z;<4ptx7gmW88^kzu&w|daqI?-K=^NDmv490q>)bN2vD_e+Kk_=C$zJ7V;GYgE295sivL~PRZ@pRozx(Mo>e-qsbFMS;#RF+kwlC zLTc|&3MxqPhEpZ+nTVp!hrYp_XsnP7a41wk1y@%YwW4CEaavMZU48X*BQUC7#RhMq*l_&N0%b7xR*hR$(FKxxUp zMCao6Y0-9uQM8BqwT9PVck}Hhr9oRWd0h)-3(Qf}h~usfXm~@qCo3z^Cw!9g+3s=B zr+8$tlKd{2|{YInpCP}*GvI&n5{CuXz%sg=O} z(T)naqu+hRM-)W9A#Waa@bCui3l_BvUZlLG+1e*AAD;W;3GW`Sh9pa*9anl6kjwHe zuLd1RrVbr3HkeCbRz45Y8a;=ZT;zPGS5&m$hmq5qQXa5N%Rk%+`5(CheklP?GeY!- zKY87CyO+T7HMGFZ#fU~+KGY>Zs_cAni1ns=Jk~^{TD3Z%Xag=-7rReX@0ZiYh0=Bm zyyuLdnbvSeT!+;_E{D}r1DLY3BpSglR{%&sZz$r(+#WV(&l6#DGZ|CXjsq`jk$dWz zh)-QoI=x5f2S|8>_M;2;Et5{KPA?fIAIYG5euMUpsi*HM_@}s`2{1%wh(`d1=t-wn1HcevHUht7 z0~n%A9U&DbFe7iAfNo2|o!be0+XAzQ)dSfsuvEqtuT@SQCL*Raw2|9lCIOHU4*1J} z&AI{Q9%(?Gxl{wxnKyzc(;B>&J^u2Ny{j~THHEYN=dAu!7M~Qid!{N+h9TC0le7>x z#Wpt8wGwmRkrbI+s6pO3Du;=0CXOQ9Dr zwl8}PI>G=rk^L@}Aaw=Jj7W*u6K2E?t2QLxI>zHxDj_dm0dT_51#lvDg(%pMqpe}> zB+<)AW=C&wvu}8>FpdsqEJhX54B#d>r)IhrgVbvG9F==OF?lwTTcOmdM1Z+6@mzXA zjo8&K?nW-OoGwHgxTO1>2gdC%d)}^0t8doreH~LJ>O86eK(iix3w{gqhAtg}3qG31 z$mS#bUUwVw6kuiA)n6x;E=Fe0hp$Oq)NvcVYu5HJ`1A|2y0?M5zo@#| z#XRWU$t6wL!Z7OK1Foh)UFeK7$4+mfaPFFRkO$HcLAM=OZ_K{?T`ql5v8X$3#(S`` ztB7dF{lfNOrKC?Fc{S7EITvhEJ!v$z!l^QcCvJ$(aA_Y0kVDzu$e~s|6CO7J^Rski zo)62SUi5&ZOS-O@ znJfm2nHemy$YLg2%*@QpvY45fnVHdIW@fO3KBc_}_L-Rzaqq*8I5+ae-O-huE34Y7 z^=H7o}ls%I3FB>qeCmSHs$R#-|I8 zRjY=zJZBGS^Ja0==2`0{r_jOC?G+^EtO6pvkQ5(E)>SK{G12x5!IzbMD2NMZgNw(J zUL=T%rjJEgH(L-OU2t$7eFY-GyJ#xe$ckOHA_BZ#v?0}UwX^;XIA>w_VyexDaPh$l z-Ehu%J68brcWz$+eTa4f;>rYgp_?N%4Qs$Z)dfC+Nm{+2F5MV%1>P%I>1!R1f}YiP zYv0^Vr;l`Av-;nBFgN_Ck7K!i@!`CBL8eyxSH5XuC zbz|rFpKf57{>2Rtir)A3D9-%Ec8f%daMLVwquo+==JH8z%t0NxaWgmxDg=#6njf3k zaxzX{?#qbo|4`3sc0o-4ln5MmbjdkT*`M2`R+X2hmK6-!?G}S^vOSt9nuehkQ-4S7PhZin zlVzoj_dTVV7yvzH&mLqo#|>()ZkB&uDnvD;x^0s`z)qnti0W&Czn!1mjfQ~Dg-e>< zQ(PoGxS_Ovy35v}0e+p_ivi*M!DhLQFf9@kF zD$D;8RJ0EC{}5EU2Y?KX{6L1bcmU+tsL}%fhFUpI1He!_02s;y07E}k z`VU}eG0sv!wA~K5wsFs*lV{aL-Y57z5>lQl*%jV94>DrBT0hsY8Xv zmoEiH$4}G0Li_jAuR94XSRbIVXmt-g!4`aq>xC`I{u?Ev&yXYd-T4dX(8;Z{(1$vU z49F1@$VH9!+s+{qD8#+n1S~}g{sS6LCS_^oq5v&auvdPnWwq~{2UY!w_<8en~}f1!nlGYRTL08C{4T|z`?CV&qwXTNwaJiTbR2? zU7ZAQ7+`?yzTWx?`wG+L#{MLO>qRgwXHB`t0U)9Atc!F`0vOzaB*C|`O4ggPe?f!T ze1)|ENa_b96gU!qgvwDFqD>pmYKIB~BU3)y_zDA%P$~$j0W`Q9as?Q%2Tg(niz84R zz+Zj~-3GGUPjC!V%u`U3Q8YpZ$Z_3q5;9?WbO&I&J zX1&^fOCwo{2#G5V6#92WM|u~zHmTDVs(1az20@aj#bPxJ!?JlL!R)g6CzdyiviVn` z=GFT$WCt(ZB~-B^1gQIMLE6pyXryCMksqKKX{!vrU>^pkFMh)6@EA<{3%jvP=T~6h zw7*qn299Mf6R--nr4%)zaf@@lfwh@7bYbFAt-*_b{B?>^O-2Uq@}2c%0%UX)C=`G+ zshdH^6kK}&W&i>hP?bP6h$Lr*8XDCkptOKC0Fa~jM`o}FGyBK72;pS9kyz&Id46>S zH}+VA@HhQ)d1n4S*uWe!u@_#DA&?=e4>2b+-;NDel^j|Z;lqxSkt0DP^89WwQS?!oT)fQ|yYw^(lg4$1@tSn%CAH1K6L zfy_m5*x-y6H9SKLNJBYc%-mx0XhS)pv%LUtvp@UC!%5pd0L%_nB zSGPa`7r?@`WBPaB9%hw`tpdi`{@Xx2ituOa!40|B}cJ+L`@#a zoB(*vHh1zY`=@8m!vE&kY2eNkHH=q(_MT4{0UHrJ|Bc||#3a-WQgcT_*N+eZirjxm ztg90?sp}u_rWZ(%ewZGVDBKL~^u3=Z!8%kDv*|x+7{x8j%PLY_zKY=Bz;cf^Xzdw2 zQ!6X0kdjcYsAv%5MJMNTIHt}gN)cBnePR2;{%6xH$`5r}n}l(bvrWpq&hoCQB|L)T z>RSe{VBRyT?q^eDn9pIqx3M(m8eK#nbF83iL{Pc81Uch8mEL4GkwbQe`ayUO5+TmX zyb6n^@rN%IkU;RE@U1<7KXE#~{cW7|jy!HCv-igWX+vaI5%CQ&`ev!~r?O)lt1jzb zss+r7ruWWi#TPTQ%g|u>PEhfrDy$St+Ax`P2dH4GBX+?1%8hKa3Nd4?vmKfmWkCX) zS_|lx2tY?Ugj51~AmSkZVeFBHUT|>_zJ`dOSLP<3Y6--?CFFxzg~k0k!-ykRQdgt9 ze+}36xs(}DX);Z7b2q)(sdn=+Z)V}UL1z`U+_;=#Qvn$bb=fxV5`tQ{1mWbA$MF9` zy3jrk530o(RXKV=%;k(uB~>C~Yxz&>$LGzlJxAqg5{l-h`Qb(B%mrXMp@u1>6dAQ8 z{H5(IYiE?~x>AaW^y~!2fVx}5Z~V0mfyQ)#EbR!K;U;SrlQueA%K=_44gfzo%+XVe zM+Mhg`}1_;B&er0{cst;kK(t(VvzqL;o|s*HR(kYC~`F+M_a`jybP9KLG$9LQ;7!{ zpp%z=Vju&Ck~OIxKT*URu^|p}rtVYvZX#Xq4|7z@T^NT@F6j@|R<3QNGQi{G-5^Cz za*p)WBHErqg$vtS7Pz~(lh~dYadWg1Knz=heT8*`iAMZ~S)~}nP~-E040DXsf@{hY zu1laCnA!qR&WAn#%84jVws^lAfi#+-P$D=|&KNZ(@Fk*x?C^~?%;tS4LBsm_A94qOJyX5m z4t(Bov~I4D#|C|LbW6{|@1L=epca+{23VzsATDIAG)-*8Q1Nz41EH#?p?aV#RMH2L z`J84%M`1;K9iId-kVxQ$n*{?P_Wbb4S~jjZAQ+ik`_rF@RIZ;O}ul_tN6>B7f zWR$V(c3VqWVR;BAKdI2)z$}x( zWsOhGX%`jAqpF{Fo9#a;G1MP2mvk=xo1~Xm*Jp;$%Plqo1_vcU;C!D|&R+;n`8A6f zp>9I-T|t@kfc^Lb${Fn&t)53pm>3-?D2_1q^VIJ=_yp#w{HNnk*KTVU*KkBHyYiJ_ zfsZ|l$d@rMc%D9?)X5oCfGx@+oJYDx{AQY#-CRk2BB92%VEUk&80|Rtc@cPpu^{b+ z$kXTeltY?Bnshu8DkbhYgBsvi;672U$0LmT3zFyaX7w6DR_^G2>l#6l-4i0xLj0(Z z_`0ewt7D+Sxo>pru>@O+Si`rV^r(0*o;gezc1?cuLelTGp-#Z7uk1=c0-^y#>M_i5 zC^^rr(uo8JkA7^lGI9)?v^bT2o1pl>i&J|)E87*v@2PO12K7y4N1ILh(+0=n?A0r2p*{=n)X$7-(A(pedxzZ>~sI)!&nLYc+dRPEAr7^;2o96$lB; zmWG06mK335e9~yWpaSM$cD7_3yFPhX(#c_fKhdwTS~cO_G&Y}x1Uq%`0X5eng#G^X zGCTzRe58L@!FDb_tN!^96)cIb5e4}}2eY$vP_zG^WiY?gf7mD7;cWwMglNCx!!TD9 zvE*_D5GSeu9&W32#NUU2XmFkmhz8DD0ULm5aQs+XWR_*UhEHV$YQid~v%RF*wM?SB z;U#XJDgUhnT~5`6P|{@!&#F+xq3c-s0OXhs5HFU|XIe#OQr)1MWl|}X$Iks&@Cqk> zQFr3k)c;%=M}o}#%tLR@{#)wRusos_CDR?)Jmdo7Xz)WWHG#^$7Wlk%E1bkbErWT4 zGBA$DWu{TfdIGntMsEef<^pB?5|Ffn+dm{N+_d4Xe^uCGKNPk+Na8CL;w#PQW|@g% zWqkoKW=^Sz()cxQlsmf*5zC1e29w0bu3TdTPi`&-ry z^Hz-E^*4bJHR9W(rpQ4l>t6<>;E^AC&r~}#jf2c(R9Tv6V`qoh??FTf(hr?|p^!fm0bDiYS z8lY^_^#`W_lueO=jt}*W`9nR6G|fu+SM^N)L%5p28t4E%WWl}3!Th^qfDhs${r!1L z&fArALVOQm@MHgx0i@fhy{}}!9eS5qC=N*fU!>rtZ;H+CvDC=M!Jdi3e#I5g7~iW~ z>F3Dc%bU+Wm8DZzN^2falm^yqZ62=8Otfp0`ZQBKKD7NJ4S7+REex6Y`!k_h26z@Hjay_W@-lh8bJbKxEbEo?77v#x zQ(vJvj+gr#<9b^jysx`qiJ#L8L%?7jR*iuzm`pI0fe}j&$%g?QfPJ~!g!s20As`_w zq{tudRgO*2DjSnBI*gA3nsIFn%N<1G$_P0AY5Oclh@lk+fr;hebf+Y-RsFquPwtO3 z1lxaya&kcc20%GQxiB^ZL`XlJU5{7kK(ANLVVfls(iGSMs z508&e^OMH)#BUO7bo>~$B}*LO`1=1uB!VJ+*hj4#De9`1ga~jI%6kif4~9QiHW3~$ zU7tb1J)$)cl$gp`G652z%hp4pkuLMa&I`yXX=x;~(c?#sl4OB@+EITc_HRX_5n z+nX99@T7trL=XRi@`-8y()VG&o({238k!u&Ar3_x`LE66>n#y-%CL3#2$|1nmv;0P zWx9aIUd9dd@Lx>UF4NC@A$yRze?98D_k753BV*=b(3Wm)b-#~zdT?20S4ONZFOiryp#@4t@M;oEjUR%35_Z+qh!b&ZSc_r9j!AaukmWmupH{dfdpH8lALU)GP; zA25JS`I8sPZ2d+L=60FRjc)4l^_eXq?oJN8|5`yZ8qG&JuE3u-5u#K<0#QL3rIZ+s zuI{ZIMx9K(K+J(S>lNQ{HDI3zLCUt={nkOZNeCnczCg(O$r#on^Oluj^Yz@vu|nzjz_$r-yDW(bs9XQ(+rbTS1BaI}bA- z0x$p|`8gjS73TmZvJO$q&Eu%)yO?A`elGyT`~`e{EKkju-@K-SB zglR7M)Pcn$^`#GrwDV$ z_lB`otwavA=Qx?z>P074`H6wOa)SQ!=l*dco-h6xh!nj_kN9gg%Hu^qtH z_4_cO5@zT}@)I&x*Uze^r-lSe0!SSgkU9-wAa(E`sRIL22lkOVNPkH4C&?b zB?g;vCpm-3b?u|ZzP7`n&E1VLzJz>mMn3ze)^r1=*37HDgJsJ^(8GUTxd&}2p^l9G z8yF0DjB+ooc{~h|@CArL8j7A1X!!~bYSsA1V}-z!vU1B*aNr~G7!mzgp%?()QXTZ4 zt{1KUU%M8RuW{&SwjU$sQ@EPIn0n*MDCyY~EXANU80~7pJ))k8YjQ z9+SrPcRkvwE*#62^mixr@6C-m$lCt6aeBDX(2!D58?%=@g1C#hH&w~;1$Iua7at)Zg{kM0oAs2b} zJy+zW9HmMLUG%i31z9px3TTn6cD59$N6Xxbkwnp;j&Rup#S;ye=rwK#rvx$_zSXZI{%__ExTm279?9VY`hDEgOaYn-W)C z3nH_JCWoYVXh~#A#q!96BZ|G1y)dZeW;7rT;FxX`YGoLYikwH{y1;-gCnh|H6J>{Z zm20j(o7&FgWaLN7#vwsRX1M!WXb@1b?eKk{5assu^&#)>C->Hw@^#__E<-X~$Ii_S zvH{wZR8>;KudJ3i@sKak%xNmxjOEwTS;f=(k;a(mi;g7;=e{u@qf5v|1aiO&a0O57_lLN_`V>4VE%jfRz`+qdW>dPdL~B9 z47S!LmT4;T_|grP278{W<-ypt@s0A?ln~Lp|r!#ik_>2V1Cj zXS`?f`;-gy7z4o>Qgi*q-R~FiHjSNq94sw5j@6lzq=8raOB+uP6z&2-WsrzO()OLcnJ{Z1! zS8(< zU2MYU^J)9Kzza8O^Am2#y$!4SoLWWI>1gLpF z?lDmAA$49A+P1QjdmbPe(0o1nj!ONG?6b?s=7_!Z(`(|mc-y-qK=JB|@^kV0d>v7* zAES2~{TH3!ZbgWJ6sfTKMqL^?LKD7|j=ewcV!OjH`9u)VSGDinrq22gwFR0DNg?Dp?#T2&#OiizxUDuf*FCluOKEtKX2~J*1N}EMGAIYB>I*P z$r0I9`(|y^6U|~urK!)e=SJ+ai4eo(Z0TT)h$)le{uA~cbhF8RWK>8Xb&%CkM6O-oxJ8(gKXH2B zEk$8rRSUBvOY+IMde@$)-EiHsArHnRq*e-r9ZntCIH;DeZ{wPt(C6c!ZM1RzT-TAN zlCe9m7Kb9?A~99D6565!+)C%G8+1Xwk`?rsxi0xG2{PgJ<3(~}8)<77tBf`a!bJRG z+t#+wA6^aIy&Hs{hxYq2#2D(iwon^3EH5WW64|BWr8N9=Rbd{r9I_hR;SHV-&TISD z@_hYOcJ9;0-+WtXBx*!e4EqNnGX)-lp^iXmNy1hvZaGxAi8H1k@8MS+dJ;_*uwAh5 zz=ZD!V{=#-+6~>*5}*Z?zg7$_3^TXT#mOdTG9ep$sv=gE4q~n4U1*Qy%x1lExce7# zvh(c<=anAmkmmR0+ZE@_rORi>?l4^91Q`3-uzw;|pQ0gDQc|1?nKTY@;#+xzx)_(kuZ-U~mSOoi_XooAuuSr%Dc9md|>zsm1D ze>htk{jj(0jP#nav39O%oyfN|cnon$dmvi-p1x<674EP!?VG~fH(vpGYC zWRE0MKCjVNS`m~Q6tOa!dW+NLZ_zk$8sBk#D_cAKg)=C7A!NVM9&aEgD87h<$}8+9 zzR*~$Vz4U1dfGa{YRO8->U=X`b8NGBlXA0JZ3G!%8e>`%ITN`o)HAdo6ed(9bTWHN z1pB$>=R<#DLCP)@NGA3uKY?Qu#xJ8-^`;jqbp~+&MkPCuS1N9EzG)n@J*$Cubq} zX~y=~t1hJNNRv+eEgl?mZ=GUe8hd9&iIj=9C2ohtZ2QcbX{B#lz}q?fMMxS+5n;U` z9$NfmR@Go~PL6-hP6zB>>PdISyc7IU=+6MEB9I76WCd@=O&XW3xALF^!V80~LJ#eA z{Z@q5ky^0o-tqQto~Djx3gz{L(%mD3l^Pwb^FIbfwn&F4k8k+fhmbOlxKT8(F?Zp9vh7jucgtgn8j!fgz#D)HN`%s@CWa!z|h`Y#dqbDDzVg75xl z{Q-5`Z?_`lCyJ48C1r5)v7de-4tS4Ztuk$* z%*t~mCA#Mge+}~=HDhSP*Vq#1sYS?oSz!EO)00#ipO@w;IXLM;i|7bd$A#U=ZAp zRJwc2J@z8j+q0@Sy|$lRsA%Bp+Vswau{D@!>OSBHf9BVt1=Ie7rS7Eklc72z9H{qWPl`#uR=iOD=81sZvn`1-He7E>t)cG@Rm# zV+-Ra+b8sA>9l@=;@;MEOLMbnw*o3yl!LSp7e6l8hmXG1w z_{YL@vwhhV*JqHtO!o~7X;Mw~uN&$Y_)Gt{e@pM`jY6M-0-F_kvK*flZi6Ax-D8M@ z58QYO>VgJeDorVDD@ZXA4cc%sQ~P&V;Pb%Z5ZklH<_UPLAY_obxcgbh-6(4UB{P#g ziRbjtVQyX=K{oRr`q7G<;E2tvBNlrbR{_=NK5yA1`MR~)ot?`Hv*HX+K3eUW!tmDq zoe696C$v-eDS-}ttVhjm?=q3hfhcCC`7hRMPIL}WXW8um_Y!>}5`iN`QrN3Q6V*Q9 z(EE=Y(XP^23+EM}O+HS1sW{%@TmICHJQd%XW1XWLwunsml!em2pZAupGPHP4w)dn? zg$_q*f%!xq@x0|<`3sBtdzy&x3%wSVJN@cAtX6v`fG+qw1nxsI$T&)(D5C8BYoZUz zB}M0bRZGl6)G0@EFeKAijFr0(rt7b61&5T_) zB`G1jbLgKd#<}0`mZn?25`EcOb+cWWMtM&#zb^5_3y0_3rLd&N>lDhcOUKG}S>zne zTIeq)sp+a-QnHbdLlBVzGT0Ydb%Ma(tdmYwMwgcvPZgL-dM73(K-X>Fua*a7gg(Qj zhF(1S3ZPi>SvEyK3FbLX(MVRx7e%NCVr#NP4YThGop`8j=RNOEXQl~1yggsE718oX zsl<3bA_p*RNt{lpS=Z?F3Hp*mh@pWhcGt^Lf{}{Pf zl*d)b^hcyqdOGv8&N_1XJ{!Tiqcbl5qwD*CpWMU*Bf?Y71=F6kT$hXW=5K#9p5G;Z4@+-oJDjiv>I*4`S~S^~A{RPNwL(=5gDm zt1dcfLw6|{oXE@IN3pCN`Py>L=zEnvm_Hwx!0^$cix<3> zh#5Tt?2IWcX4pttFQ8vZ^+8vy?uk#f-WaJeG|aztEI@SHj7gcvD#vz&c3a zMwpDy7@C9@J=e88c6WMQ1(yQ;ActKQ z@{R}5F(BBdToU4Y%7M~YEbOmUH)6-_fS$C5&OkGbZsWrR)yb13Ba=2rUe-xyaXg`| z;V)jMlOIqKj&qAXwd`-tL0^^sc`?sor0$GV+YNf)L#ix3(^2VJu72``bG#<{4HKzCu{DWg%|-6fSL0)85+ z%5>^9jiftkBFk9b^C{IeLb<~!Z7ne)^i~wN6j{&r>HNk%23tOlp5Cm6p4f`+iytYX z?Y6TRSs3LPG2sdqIbUd>D&t)0VzE{pr+0SQw4!{8jdaR>4+zx})|OY?f}Tv9S-QxO zeNB#EDqg8q`uYbO%uhm{_bV95#)RDP{d?blESo2U`#@Q`x25a~oY7WvMH!(|Sb~Oz zjyQE%k+nxz`q=TV@X=5eHYFN3E5jPaJOZp)l=Fl6>jRnZ6L}_+kD~is;P*n*^~0C6mZxNrQ*|kG z+68}JvZ$M&=6Ug`6UWUo5LkRDj-AHS+){;B>oknX!{>INHU!|yO7Xx+uG6*45QO6% zJ4-{^U9z;AXR09o(t`v#ors;iqQG571j|0Eu(MWTHuKk^iqzuUV;QKl$dM8}XLx!+ zO}Z?FfV_4;D568d3v6u3&N(#sN#>VX$=hhQX}63GY)}Nzj%3HM(n~w4#R7NtYleRy zo!U+DMnp|KUw5GS#Wgf%sIS70~v#sfbQo`zfR)&+1kFKJmt6MxS zj;Q>@h2_d>wz{QggAd!2*C$}F&;h0zzbU`#ekJF6Au_)HI68k3wO-qlY}*_#XgV%eNl5-hoE z;LPA@VR!*I@5TfWt6&X9!!nTb3kWmFGsIHkE2O<~80nDI3jRL(>*;%frqRFQ`_UiH zFc-0&&px{lxpo$UC6ALSl3xnKRDSlNPR3P+Xw*P|$^095LMp)p0;Sva`(Rv78(y4f zjrH#NeDAeiTB?*OhTRgB4qR|-e>v_m_7dXU^8yvCiRS8~b%WCWkG-qDUY(~d+-%Bn zt;wHYWpMU(K}Gh*VhY~5R5F1dR4AEp}Qtea}{9=lkG> zn+{!&`F>4BS^|zxuR;?W4$pMc7#)Y@Wn85g`_e)FCynDGG-JhrH;q9iH?7Ix$G4lo zi8069)9pMp93BoVlcH6v2==Z&d?{mKU}v5JJAy_O^#XOqQ6g8k?n+wgCfyi87IW&i zzh)!aN;)3!vqitzEI(XVIWR$5cLdk-1+|7J|K^gl!;E8pj_yVZQlEf(?z^5q%`_sH zYo|Oa?=eVXWzsoSVB25q;*1jzjM2VUbi6ql38_V|(wMtG#t2O>T63FPlwU}(Sc@=` zCsF^Du{>K}eQ>`b)&DvhJx%joiAlbJ;P|q3A)<#LAsK!!G+)I6nRxRE|85whB`KZ8^txLir4pDPw9|T%VpUK~FJeU{5wKu;7lMwbDh{>xr- zt7CqX3D0vaZBs^jcCeTD#5zevF^pYicW)9<<0oRM?43!varb}NM4)t6w?7>dp ztWMYP;D=%JH7_TvN<^(lTbxXp*0beMd3>_XkH)ia7B;d2$U`L3o2|PEblW;Et3;M| zE{g03Gwyg0-~VJ~9(U9ZXuzT!iZd49Rcl4A334>b%r} zai?xq`->Nj)ul=Z;chQk{IzOkogiD96pzeGuBRsI0lp}iyy|sq~1e5V$ z_W#i(Szz8Q-te-N`!lnNV%i(}tA5b@Eo0^rSyfG!{ zA*X9{)A$2Dh>+CWYl-W}zYzcJB z#YS@3blpOr$go#_VnFDylHnlnc;4%vNr;Z?6s^bzkX(`7X~haP1mjOLfP&>FOxPrr zpsVR(CuGksCp|pqsZWmj@>w3VPa9K(ZP5p%X%fp^;Z* zHP3`uBWR+iW^eW>s*=Ip}y69uhnOs|c)=e-yS=*shw z3`sZ`UvJ50#B*z3hmHsT$N*Dat&1qlyVjNlN@67NvMASv?Udp?Oyev``2uibD}sb! zIWnu-wD0>!RinN61V)h%qx;WWm#+uXb&&`U%*HGJtYuhA29@WOJN=Xk8G_nJ_)R-? z?z$~ciJ?cNuyyDb;^fn;<_uZ-I0!!Kvq-SC%Lp~iN<4gY|7$a&m^o%sdIt-PqNTu3 zgYF?N#sSS@#)Hn!>Y#ea5w(-t$}Z*f9=iTY#RaBbR({%oIdfHdk)3Q3LL5Fl>pS1C zybA-p4#XXa$28r%H!PN~)bfaNqHs=j7pO@G$z$8Y6wgn)4g9oM%1f5dFR%@X=!H(W zFh4iFOK06LH}TmQVqC`?jZq3Y@+QA3hW|hYf!yBfAdoPIuM|3c|HVFPOu0sGxuNax z#_G=5l&4ET!ar7^)K(1kkk%ke`1_zVuyskiCB6VwF;+>R`sR1!#kzM!4*O^Mgk;w? z51NTK+^o%FqQu^c-N=14{%lt=T|P*~W6yNmQq7U(x!wn2auewIWCphc+qA)~WDi-~ zMd@D^7}2PywmLf4=bNsV&K83q&6#YIrTJk!2^d(HWMBy+rqsIXleLfgA+@bvAp1ef zR!qb=g_~bF9Im<){mTwJlsoply>Bqv`@V+^k2I)hH}vIb#gIXfpxjeX7gPu93@px^ z;6-*WREc*(Y>{zSuw{`9ptt>Lc$ukyp`W}{Yps&ePr5QrT{_Wf=%Hpy7QwEeJ@@6|!1P;`<8~_&3$mTDQKvUo z4o!tGng)w-*6eV-H_Vri-b<>EI@C}#pIRkjgr;<(yjg2x3RVb)hRW18Q|SN>c6yj& z3`Uua;MA)`a2=RbIhwT|CsbY86Q@Xm)s-)q9hU2Ytmu z#8d2)%uKQ?`j#BQp(^;$d!PZ2Rgj{_V4hEoiLQvuG%J_8oT|0S@FHh3!D14$S>?hM zn-NAC%4eGZF9xrX*?_dk(EoIf@!eHc`K61FESzVg(B2D5O0-|m8E>$QO>ceR?Xz>K0W`@H~RZ^lvv< zmYBaasubnZaLbiZ&h@G~b)NS*rvHuY=FV$O5}_Axf>wC#vqqi{T5-Dsr-OfZubps7 zyi#^)|8Z8M6c>{|R9MSbpSJDlz+0W{RtZ@@4(~jcR-ASsh4e!Sg)7gt)$r$S-3A8d zAG`g$-Zy-r3JT)THED__Z|84>Pb{{LW-5fp()>c#Q+5|16Ncp8k1Fdkw?m!4Lpohq z1}EJU$209;4?#QaFOUcx2*O{{VLMfT$?C=DzO?O0cLvq%PI2rBhfz&q3g^w{aowu5 z)ytQA=)sBRUs{LlhCY!9f))L0 zKbXjn+-fPduHJn;|ZsaFm^?dgG0%%K2<4)j&|l zbkcmClm0eJTdyc#WIz3wyQCG6CkZ9%P=Q##J;yoG_T#;QUCFR5PWY`qXe44l)Y81v zW@6)QXS`6!>2PRpZq&Qm=p;W8LFfHYYy8f9L~1y{bq#H-$#)L>)bq&sZBAHgIx$MR ztMcgK=i`QZ$-&|(wqpO5Hkj>W%xar_&M+vt$z#d@mile&!#rDjH^`d`1@uzG!a%;n zEB;c@lf*Q$HX$+g{1;7*U%O9+p2xKvSLdd!z5B}eiltJfn_WwPo5Y~H zEg>`;%>*mEdkA3-!y!hVG(!zuf%7AQ)|lsd|6D6~z&LVp7!DI`65J8^Gp|%|;46$n zc>@A2w+3a`w^D7UV)+A`oLLI;X4Id!sM75ke^f^%5<6q$sjSfavA4RU#mHE5qex?IJy&T(4)b9WKJTjk`(bPv}lH8(cBfMdHgZa#sy0!CK`g6{9MK zgoIJ%$*rQ*}tsorxd0j+eNG`UEM#k598|R~2SCcjjR@7^%uY z*!O?7dVRsvq@d70-!KNfXlF3j3G$T1&O$1Wee~yo=J)*?F>rxs)O9;-_neWo*k>WW zKTmg*mwk0A>e^(Xn|gM{^g2G;3{`^iqg4OGqO_KK;&WnZS6 zRpyPh*K5_pRLsZ^r%I%tSV2>urq3{Uak{S%e%D(+FO6YiCHa{OLcroaLvCxLdxpH% z?iq7!IXlb3A4)^G7IpmUz_1%Z4z}}(bqeF$GLR>P#NNF7W{Q!=dxyT@Ga_Bmz(fLr zJu!uH$PwSN0+-wv&r0XC8MDK+`O?`neN3*D@?}jotb9x5+wK&!XJ_1Xpw{N&#_OWo z3KfIqlvpN%F~tPxSFHrpt_IF!W4V)&PFl_gc9E|(VJ9(h#Tz3TEb0t8QYmbkoTeFY z*F%AH74P`pBZ+AvWc4|R*Whz|EZ03fcHzY?6kP3M!d&p?AvDgT|Flh2fjX2sy6xpt zH`-b5`NN$^x*{is=XQaV?Oz)m8S{So0p=pA%FCl0rTZ;Wp3Lun>_CLXk)%_7L~L^3 zcWH_Oq0x3O2hA~l`}Kv;&&|j=Z=+RA2jzRqf&IKfG)QrRX)o>fQ?->GlgVC5vTIG+ zQvFM3GrQ5l);h}!5JPMeh28fI{4J#ulk>Ii>U>o`q!BXb@!sE0BVM^211py52=I4Hz! zApIeHzO3ro9cMsHun(6;*akA02A9sU*R|a;==?ULs&4rnJoyb)Kugi}MG&lBlthhPGI*LH~*+UCiGeYG{nv-_M-(g`5g7c-i*a}72O87|y zSZ385VRr-+t4Z;-dwaL((pS722W*K;0hVlGk37|MqMamg4F2{qs@^(D%cC~F?^%ZG zD0UYqTlPBx*{hJT0ejU3tf`h4Td9I?qb{|pxxZt19*>I&f5tK_3igbvWzM(mK ziuk^3z9A}XD=Mv{gEo*fGL)ysF5#Ny9cAq0Ke?-WUv+|N%Q|zg1!;^RhwR&yklx6C z%Nz1iv;7ffg>Bu>{(>ng0`&@xP-(aD_nEo>MLi@|+E}-w|IVlFGe%bqj?kZIrAW^c z#d286RczF`*GmH)y;cVBmvZIy5!YM%r5#vpXT7hi)-k!9)`Uli4lS zE@tkeg?RfGqD@QAz-UNDIVSnnr$n~~nzpT~S_(JWx;!%y;p%bNZ+mw_^SZE3InHjq zOE__h+zqVj>QJ79>Lv>V6G-+|Z=!7_MM$tlzIpI3cZR);sgHGPsfUdX#=mVP2f%g+ z=7@ktNElmPLYx^-D{{bp@i_|NRUducFM2KAt}+M;q)$6g4l5bD!mMMH%zxtzk3bGL z{z36T$jG?X)S@-beRf>h?7^zO;{1BlhH{yWt8n8G$2p%QB%&;`8L6WFVw;%G*-;y} zkfwBJq1|nEv&O{|_T0!Op}5T-!{(4AP7zOaIVPa2?J@O~ef8#2%paVRW(5~aNle7} zB7NU#1EUh8b%2v@)n0hGHp2;JzcF!!VEW`J|K+GbOII@6jd~cQcl00%fvgSL9p?d4 zMA&+Zne4aas&EuHc#ui9;R(j?`t=_SJjVS*^Jn39zb#s;@{&&M=$i@YYR-d_6+dHd z#s!2xb{jRXmx$B#0djOI!J@)wA#<&QN!|T0VpNHYs=|r@7FQ)WJqv41hYz|NGcSL4 zHrgke-6_e-)hsij;z$(La(Lx02X+-=z;%j}L_uH8@ie>c8-$HRu$@EeBbj^w@%H&B~y7tjG zJf73bXSwqb&@i&G96;$T!(UF=T6a8BcdN=H^!<%ueg+1#^+vjU z@{w#dq-}yM->qO(Gg7aJeY=)4vFk0_%xQCA)ca+OQlWJ-sUP*h2lydAvr-r`>>}_^CNFXratwk*-Q@ zY-}7ursf-Cn_nWH11eQu85Oo*$Ghh-^fRpGwkiGlg;`qJhR8U7oz=_E?6ygos_?jS zu%LVn-Y?ECB}O$-hdaqe4U%h7OkFzO3l+Cs3Z4H8KS030lTrQ;P7aEZkbvg);KQF6 zsC2eu_876S6`i{_NnxEe%1lG@tUHAp&fvol;kMs}Eh~vgvQ!J3v)s!X$hA7Bwwv)KIPG~SLiosmHn(tkRY z70X$nXTASjtmfCp)V^l_*X*+(hqcd;lXEYeE0*tferhV2ZmI;In&!7Xz2B|4cu}%+ z@%NaDyGBhfN_1MXDMemo zTbiDy1MfZm#P98B<*=>YaKQ2(FT-pt6Wyar!Y^wpBxRySBv!d?9?$IR3Fij*-badd zwzj3^);{bcVrU*N8UOz;Kpq=N4l-7vjiiVc|6qE%HkQ*}PSrSF2cUF!hRj%&SCo@S z=37+UD6yAklIU87rKr$~ddm|wG%+2&fWfu#*xV24k>##l3-g6z8JRO$3Gj-0f-r{| z0kN-=$ZY8WLrRaDoHZV=8(*As)VhZl2AD<|z3Sfx<11@hM=ekwM?6sE{OoEuZ}(NO zk%Qr~$7R~e%iD(QZ_B!VD)iH8jE-`F#w~jCjk{DA4;(Uj+DhBX5Amfuj?{8)OiDj2 z?C_roSBk(W+SAxQH)6XzPh{_Uvd0`@2@GxPto(cYmX?NAmaUu?HZ|sn=h2NP3hG2T z>!J%8olT)O%6KeOa$ppV&fw>|QehnaN(dX{n##L0_nnfV&jy9i9JCN(G0%XH3^Uxr zx1DXNOEmM^^}rgCSid#WKV3|g5ZXT#ih$mY=Nce7xXYRHX}Q~*TcD*zoW+w&OZrDe z`Aj_WreehOdtreQ3&Cd4Cm9>ae+9>N_Mm|9jX9+Zg|4I|wROF>E6>V)%Wy35xfzOcmtb1u5zz!gSUM?|cH?%NQ8XOQr2D#aB4reRI+Dd~_Y)nH7)FP;$gT zgUe*p?q4$4vMp>9{;3`z4aZ(kS<|^iS*F!;+W9zVD}hVzr%q8kz>8sok{^JxF|a9T zXIt5@A6FPkQ5Q|kJ^lB(x}VGDk9zf1Xioum^nK~G?F<#;V~l0(>~+`+U6nq^lIA55 z+yc`acYL12-|2Z@+w(rQ0EvjEw@)*w4j0XD>t5Tx1Kgu1b}aVu)6EI5G~j zp7LbqsvS6MtG-TO&a;;Z^eZNrt%D1a^OP>QY{Lc!Rgd<;3|<~GDPfHsT5g^g1{~C0 zN^4cm%e4)%ci2}rcIbwq$PI20qB=E&{Y~0xZg$NY%F}bL&Tx!)%hf_5hND>DoH(ma zu&4NcO&t~Eofmz^&=6@w+Qx`R6X^UT`RgU&by>PbtBLTYTh^Mh&`H9|WMA`o_oDE+ zo^>-h9UIb)TUk+!*1g9z()Q)&18jN>{9@E;Nm$3*)@staia37u4eIFOykj#6u z(k?dHwnBKy3f3aGc@lN@47uQ|Z(ZLGNr5sL3Fyo&ZT0^DlJZw+vij$i-0P-==Q$|y z4C!?&bL--?$*&>x>sl=(xbovia?A!4vZg>O?H{>x73Q($z6n>AwboWY>T%935UO2t zt=bos#D|i{!uN(O(5zyLtIcKV;))6LYv>do!%?6jP};cposG{e4zeQ%BUFZeD}@Pq zaK`yD()B_~3uM2u*d>@L5wS|L2_>H7gmlXvw->*DN-N-K6`37+-=q61frUP2ww|Om zb*5?`n*W|nd z1;o{P>$P_yxtAHRwP)W$cFn&3=ccC0&!4>O)k{r~@lugtO(dRgj-r0 z!<9ETd?Q^FR212>*4F!_Lso6Y2fDh941_}+8MyQ7W#Dt-R5$8N_biC_i&7tuk>4=R zTfhE5AWd|uv^BeuD4GBKb0IWr>QuKbDql5;^YN0JX|gYQ;@L4^9>+;MyiBc3IIL*s zn*u91h{Zj)n&(xBXc3{_(1SZZ=aQH*W9F!+sP300f&2mdV||QnAhv*H=;KkEYlLU+)`?RqI?)poivdCkfF7 z`JQswO@_BeWs@%nZ&8=4^!^R0jOSr$bx6R4upisgG`thX|7KACxv7arV=fC{r1g#E zFJ1QVs1;Bk5Td-=bG`m+R|67AM(sZMC;D6Sf~VK@*`}h{{L0PruY4_ECA)3JO4896 z=O@32c9`MtIBQQq2M5Cied7!Wca=}h}wD`5a@wdIt!Jp$q!<$qQw_1GUe zcz2cw5omOU7CBS}#6Pru7*&_ytRp60<|*2s1J$j2 z1B)xLh_^rqn;;DBgszNn#&^e-P;s*Gy<*UlZqMRGp=F@AaaQfs)XljrEaKfRZ1v9^ zB45Bh6zg6v(ikptq%+JXl#NivV0)KoPhAFz@n6Y`e;9T;wN|E(_Xhg`y|Q-^of9qd z&$L^S=3Q(QO$mYus6dxJn#4|4w^rsTIoP9x58VHWuVc{VStt4_voOhRWp~+=thf4& z(n*nsmPg<#&i+m?bg$$R&%DgRm9T!zRP^>QF@Hxa|D%}PvF^619mFPcOWG_m0xUGL zb{TroW77H-CWmf;`5cZHf86^1pF)cVZ!w1#wflOb3%l#tVI8$5;6$Uv$EO0fiA*Q! zcURZJ>-}pscUfsYL#7Y8Y@-$EKApOZk^0-WHq+Xi2CG~P4A@{(@4l+k($$A{t_K<< zZCXErwY$7w=jOGj2%R5uJ4Z1+)00Nao*z*X6M{cq_&T@w_IyMckKOlosIbTWW~Ayt zHuj6Rj@vS2w(XwgHdVDG`Ad2tipJ8Zyq#^8<&|XP6b+>5kOubMB0~b@_r8El0M@wQ z5RRI)I925NOVv3B-3$b4^*q#?D3ye0{@c!hyq(+xNtb2m#nP5ZlHn|~<_9Re-2WoA zCU~*ipWY5WR_{I3fa9P~Vah$&bF@JBEhpMb(OK89|MEO4vAi}bZSM-PmznoH6Kjv@ zqS|Y@z2zlus~fwek?A*BjqZF#I3QU+Pj9CYvRJ<=a~DIp{%-Mmr|35aP9)`qjYuC5 z%WsO?k!BcOq~kP#7m4YkP(?#GQ}P;vY;;2cLJQpL8Gj_SP^CYOo%Xy^7CX(3-({NP zN14F=VOtd=XA_7TBlAMO(o98MNJ(K;1|X>``)W0Opx2=Dh|KvNGiSFZy&c}|yF>PL z-8tq6?TJv&02b&#uVcTj2xI*maBz_s+AI}2#a|i{@jgcl^dmwIq69h}1+COD`O|(7IS$&AGz(RW@733&){@r`=Bcl8VtF?ucc|1ROI9_FfdzK&b z2=lRhWs!26M^Yaf9=^M_D`itrJ*`T6{L=ntrPB&rVKvz`ba3U%2Sb+QeBDK}#vG1R zMPSGG13B0ar?IcN9h(9Ykl~X{Dq}UAs``#7sP7V;@U0A|WakUTTxwg!z*@B6d3`wf!s!PyP z$J>8|8K4ww(l?mMr|grfU}k#zC*WIhrU|J|j>?r{-r^nMcS&noJ>+XNg3wNd6G2@| zxWq57Pg?;(F4qE2dnZ1V?_)&S#@Woi6c{3h?D%bw=-*;vGy4N&mVSdau4J#ecF>J< zSR`k|+^lPNY*jUESIKicVwiLr%y67j(zb|ZdM?vzc5Ij6Z-dPKA;RCJ`EJ1laezM8 zvUiiOm;QGnx2J!6Na$|y8{f(JU@CUJm5Ba>rg;o5y`z)UbmgKCA(a6L-2cTvD){I= zkXKi(;rQi~nt?o8oBpH_vzgZvS#+5qQ`8ui^}Xd3nK!I{1pwgiT=cul+}2dzmNYfM zHvcq!f1JjhFiLtA1)3t6WiVwP)B*Q8wZ!5exZJI#1{PV@2a#4xF@MEVbaP<&cIhdAO^TODtZVRjwa?s zq&E}1JsJ?otNKP?BT%%OPsQu%{oa0_0D_nWDW@xp;e5Ws-L4AFZbMBMeDtOe?w3y( zCX8$8k-&zXKLxlDq)f5}g0kMf+h*Sis3fT&Rc9Bv{UR1 z^9K;@T^uen`K>kHf+mvf;s-OSsv_1#KV-r`UwZ8G<5!89VeeoDyL@bxnxant%J|&N zRtgjLIJ~Q*b`2$xe7qwsOFtr1bYUHp%31>}>SqPR{djOrTf=%wG)MVxR+)x;q;yUp zV^t26L~b3v3~EGMt`{i{ZP%aj>olxjHJtAABq(*R^xi%R$p=2Uo{3fkpBDpIV904L z(;LJF4lP8JJv@h5F$1yoI!*tU+Obi%2JIhTrvvVN@7B8mggah9kgdL3l7nE~w?WA4 z`P6rTUhc2l)!I|`2^i*pVapeWkOyk`D|8txg---I>)`|LxXn~Y*F=&+Q` zat#{HKp@~I?_ktch=9;gxUueXaKZrq6%#NSzW-hXX;NSqr`MqG4V85^S@m@G&SskM zBRGalkTqMwMAx?Jd>AuPDn;B`b}!p~QgaDa~MWmUvlgiIoir!Pl@C1o=eZSswg9sKBQeV_Ejg7|l`7uk_?4ifRVqC&3eeb7Uc%+}f?C05~S!39uI z7&WJZ2R*>$b_QUR`c{!GCI%ES2i|vBxZ9vLa94<^b(AG)dQ`Y?mz6)S#-%cBJ<4YP z^Ws4$rwP3yTAW_-pfZ^=drmG`+W1iJhCNG$Y5~N~5w0UTCH5A7{?0`aM73i}Sh>lsG*TL&;%gmh;r^FteNW-q;A z$JcdFxVxugH+IIrRb@cLx(tnpD5~3JMNv3F!wM ziD!$6NanRJ+kux9wH@QbN><;tQ;e;>b{-n^Ko+hPDiPCJb!3?+DPCjVI(r-da`W+k zP@41bF*O^r57z1%+97maH8rt7EJv*=n!N0N`87V8J_t^@L4DUXrvsM=!l~(ZC?vAy zn2<4Tt5^2o`}WcS;pQG0+}1^G?-No{S~YT879AFmHc6kj>?LiWn!@I(%=(G-MXNG9ZnG<#X$E z4qHoEgD{Uhepju#1t*sVWM;!G#`Yq4{=}Hk4lSdgWnrS1ACEsXO@q7QnH%VzZ#d$D z{w!#W+!N!dj`tp_&+EBdF{~`)e-h zyI_*-S}#rk1N8>q6v`hwY%6HEs*sGyWG)Y{s)i*AXk{vq0Yj=;5p;ORf>2>I;$Sg# z_m1oGnj%HWK_w%lrFplh$?lg{t#yQ66X)q@*7dqj6N}*wa~Tr|6U|1)`FQxZ+b)fFm&8fR|P&;kTMby{-$P!_#SWqbs-y zg;;vMldM*wTj=*p46pE3qg;cBlgZe%3kG8LUgmTSBLf&ArGAIMTPEeSIaQzQDpK)J zl!nAGj1R+HBxH&YLk91pZLRQkjtD^(jI!aR0u|&0*fGsW^v_l|i5%TYvUA*=s&_6& z7rqK=IOK_P3)my$@vTTey(qG}2uMwp6#ea&wnQ7PNF#3sK z(e){3P0kbASTogFjxzy8`v;#HK3z0b2LB}WyZdMu{eqNAlf)1&O#pBS{MPk(It*k< zZ10gVtNQ3xyKJVh*|0d7O4%r=kP=fiRdfHSq2A=4#bIrmyCKBp=L?LD>n;Q;cdY_P zikH507%5}eWI+b}lF#g5I^I}k177V7W+CK8?0@>IXIic2tJ-(H zn!wNCPH&8^=b8;vVZY~?|0rlx{eaJnsc@46dNWx#it#fElaqs2LSS+@3@=vbHyLfu zv|{yL1~9C=_;&~)X3$=j)2Q_D`Dm^E-wPE=jLJApq7TFc-;gM8q(^wPb5!LOPN(Wo zOZ80GvE9#&COCPZS6!vs+`l8fu?7%cQ8WefvWm*t!6L+>PP}&GMcmNk?J@zn@``7* z+mK9GU0nrfqQcq4E!KKwG%tw@i5g~F?~9c0lz%_uz-{X(y$(s|=_$8mWd{=gS%^Rm%(ia!F6yO27UjuRlpH4dm+p~yS}Nbird39!ET)E={*G$IYbd)FOvb7%_kCIU zmD!Syo<)8sjBFl9bTcI)Ou5aUK01;kG7`(Xs*INtQe3<}z(aAn^li@t^;gzYC;5|i z|1P*W?!vO$JpeCHU_I1}wN>f8yg_qty|rTpJE?P*E^D2)77Z7x>@)aj^m?4y zrt8Oh9g~}^JO4j^ipk{x9K)BV`SVn(e2n$SBIpM2_4L`<$0)L#eKWZWiSE83sXWoF zaTgl4K)r_(bQ(^=M4*SWQV$zo2tE@+B1%&cS0clAs<)XN8YCt$pwW-{$+NQDoaprN za&1AAx)}|`^lahH&@kaPri)wOiewf%XbL2YyP5q@E*`b?U0n~iv8S)=>0tb_j~961 z`#?iZaA61@Jwge0U3zkKUNTcBJ(^Qgd6sThem`_c}>ZZb?w zMAnstbf68hT?ZYrEjMu8=^8r|-;e*c`U6Wgvl^YmR5@SoIW=y6-iL`SFh*wAP*-35q#Mbn z0zu3u>PUPPA0Iw%;2nH1zvENj-6`xLSK=r^Gdl}?KGIIy^$>?H!@%pc?PzC+ zw{NL3PMZx-WaP_rXPQWRdfLhO+As}L%7#5RwUF;;2`+EhuQWZ>MSKS0s0y74U_T#B zyC4T%jtZ8r)ujlz66#R}t{&}f1pa%diQV^q@qp)Ct3N3D;7{v!_)ZZ5ttmfGG!wLt zCEO**bRwD5lO%hzzwB9Ou$B>Kj1Cn49#ehGBc-Oa07c$b+(E@PXz+?M= zzam_|(St*RBJW-9jmp%-hl<*|56q31rwA|_b(V*+q9!GI;ZoR2T0UWbl#^KzsNzXR zM4{R-_~Wrt+(5~VOxs=@`>k(_IAh_c(D|oKrj}#c^_J)g}|29 zlK>b!sQR%AAfbs@ku#Je%ya;A%lj4hvscbO*{{W~HBtxP$f?`Uty(E{g=3z{b$fby z$dQ_LiBAuKX-EDftqd5FUvIJ2&1@9aB?6oqTXPrGw;7z{0G~oOXMWf0PiYrZjIB{uc;>RYkoMkx zD~Fdtdl&2yw6*|XZZJoeyICsXGcgzW02O>YgP3dXr`eK>xQG$`=E!=l9N`N}hZ2s_ z=MLZije*B9YvoT+6Fp_ImS%AF zRSaA7uZf!rQ~4wvbV95sRd_~{w7io8_O;~(jcmS`|59#zaVQ|~u6mg+V9f2~cy(ll z!Xmp$VE$5q_hFbyO~td++|;3_KCcJ4VO(pU9D50H3I|7|b@x0?i0XQP3?SnT-gdXc|S3Ofm_uNh!z+8)JIyC|K5`^*XsaAhO(^_QM?l)wwbv#^s8ZA5+k;8*o_5@#z3 zXKT^tl?kzKS8AUu#RV25TW$*8*$?rI_Dyy2mPut(gneuKw_D;DQk;g}zx0tmX>28t zqD|XZI=t(R?OoZb95ZC217Lg@4z8Oi0d3$DuD zv*OCh3S|4($RTrOO?b{WhwF}OG+`3p`#wiHMVBOi!no+V58XBdk@0x<%YXQL0xhduRwW!{s%dCD0h#Yd&KM4Mt1Ej# zcf?lB_DRYxw~nhTY9riF6MAn?t=6uK6V4Jymm>sAi{tikvO%CI8q+oMrbb`9`F7Td zJ%N`J5TMGo*)8UKdQHWFWzRM_^nO_)5G!{k)D}-<0#aw!fr~fo}aVKTpivaH0 zy;`>c=bLZ#?B5b5{wauml_To!#9vJ@kdqfhzN_O{Q-^zVa>%H4GJT;a8O51Q+d_Ac z)vV5cD6@B=$-!&@VG6pgn{PCDh8T(bCoukVB3dl<&0sO>qo?5~(NrGf4ZkAFT+C+9 z6-ssVSo{_Wk*rvA2+>-EUmlLx@FZ}pr$f}jYsrp8Bw|=uKdeC-o?uW<+e8i^<)!rB|*#NiDmU)QWjVPMQ#v+XOQVYPd655dSw? ztpiR({As)HmZQ&OU*RXtk0*#GRUewUDQSEi?He6+=ubIWvv{-h)L zE%s~6pf1Y4d6p^8-9ocNsVu7TJrbC1?XHTG?bTEv4>X~__r>3dRlkq20libi0`%k0 zmu+QXMQ``Z^bZ}Ps!&5*VD{ex(;cuZhI|_*xyZe`9!icj>cB2~$~k-2C_>kUBk2Wb z_ri72`r0uAS~^x{an?MEIK8bd0I>v`d4PfL0V);x{ayF@kJ`F<5_WztpHPy%Y>#Pm zn{exHvPSs6Jy{w5WR#!}%M4_?EcvE^yN*eOx})Pp_lN>zChf{@1W0S&HP9`{(LFo8 zz~xl(M8D!*DV5b)BQm_PGDIizGq5L|m=ZZ-eb>W$gvGp~w;02%M?3mwN9lx79Ul+B zfGJOlq%dSPJoZ=XEnvE>gqX?0_?M56!%a%;@mAlZ7TLXbakDkkxnzNUyNBWEzuZkp2HOlJ+T zEQ?Dy7?5kjh=~5r<(>DY&yGkNUcg@9oy6T%;ESg>JhpS=#o%6fxfQD;>bIHIOjznt zT1c1HD6(vvi59$W13O#oQFGfSH7LJ`(nxc3G^kC==wcf?&;H9w@lrFjs8S=7KPfT5 z$Ejl^9_=ye_fF6j?}X~;>Ow}LU4=o--*%}tE{*(XwT@Rki1G0(f2iujt&RY)PNsTQ z>-$;;kq&l4KWasy93)92z<+Kqw`^;~x!PHjY}?=UEmyU7Ju0;gOg1XxToU=#5|kJLtRXcP?~fe^!--&t!~?CnT*V|AGqNT|2c8coj1#oykkWUivOP<3r z5+hxQ^bkv$=4OY#h>`b0I3a0%3fS-U98TLO%qT&i=1gi&hS+Ba9uuCQO>TNIl7r!Mhw7)l(O@-j<9ZcmvgMVb zr=X*2_vHb&YI$T4uMVTh{r2y%$Srv-k<7+no~sb3`{V}sxSiqazXcLGre`m-=X$*x z2Mk9%i#Q8>)@*y84CymUqMIVgx(xZ2!_T_-Qru;(+)>H;mz@JMjzdRU?KdXB_>p}t+0&v@RKTI2wZ?e=FHGHl+g zHY%MRkmTQHj);InEU0z;^-4cLtEa)({Fa|~0w( z9J`M)mK;rdz%nT8E{Gtd$Md!Rok6o}xM6@>7675cX;w<&Qn7kLJ8#wV$!7|7qV|V3 z|37oJti^W2vly=ZU{egRsmZ*R%p;(Mt)`jl?tU<(d?sub`$dNBW@v7dEn>eUHkay; zi)@hSU~w(eSlJEd0p*i!)zNT#H~_|@g*o?-)|{p$nUyrkt_;E18ia?Yng`^VD;L}$ z_enQ;SM8%zl1qUHx0a^F6=QpaE%tKIDsC${)sXv`V-M~Pf-K!F#fbNGnvaktYN@+C zwN|n#z%AUCgDGtr7ey0Y*(XHrpQ%JnwD3;1NB4=h1!uKGj2P+!hr{MDmA^wnqw1#?t0zK@_673nm4#GPr_>W%&l@VGZUIbU4?r1oe6Arz6vchx@F zxUUMMXOm)1&-;#T@Y4_#Zr3zY;-D#aYg${YFGk4wNM!1&#<@ye@j<}d(8~j2=ML1NRkaSlWr!eW1xqT*FFq~T&LsUq=%K*s z#`IoYZbbfSC#qiE{ak4>^XB`XJ42Y##Q}sx7*-1QPV2x?UyE8ouQPqLF<{-&(Hv4e zaOvg!ha_jO&CIfzc}nfpRfny9VflyqdjspSk+o?-YhdB`(vhe%daE*NG?57JjL@UM z|DM&vljPrR&YxdJvxP49crrarUkls675OkKCw+kND9npYJf?57Syb?FV-+aVA zI0>e%(k!vSa|qs5OvrYpT49h@9-@3653pWK%PD_~Uv2(_rQC>sf_^~3J#wnqnx$OG zRl4U+(r@civ?N< zH2p$z-FIDjQH5L7HW}{BK81c^-+N17$0`f(xO3%@9wx=gykmQ4071=kJyrwHZGuki zf9v9nS}#MNm2u?P!gN9D$LbCh2EqRiyiotofCcW63lSUMT}j@(EILKxg9GRU+w?Jg z8gr>I7Ny>nmQP}WE>qc=c0zGN+YB|MoaB1%S+ZK+qRJ>#yfYr?&*vDPr}IL7(u`ns zl6MR~|9Heu+5I+iDBCjz^(`5~F&ZV8y&ZHut(hLv^@o%D?5|k?M|JT$fpGh8fvAf1 zC@;di$a#T|!F5|rzx^f>nzj7}`5R)7=B_?kJym`;{@syfPA8IF6GD@HEXXPT|E>T>XNid$rI)O3c)oSK;#z26sL=P;7&*y}zkeGKKK#{BF)L zt9R~}1zOhTf&SpdHU@A;X5~1Jm(>=SW>F+@fRwxO`6k(ea5E|SN@BFLNsd%mrT3gs zFU3B`X8428ip^+T;k?F&&Xm+q z3uW$SZ;l90@TYB!$b)etg72{4_Oe`9v#XjZaWhXOw*O=XXVpuBjP;|BTIQ~-62T65 zFTso$EAD;KNzYn~tAOC%Nd!p5>qPMB=~C21UT>^AUJeUd3`~w4bLx_gBzCd$Mc=;DbEo7dF{5aoU^NtA3r`X z+sFH7W8-hp7|x%vfNS6X>wGTMQA8KfJ^g~>N+HBM7w7=UC^@0J;tN;Q>eMl<-3ua#oFa8&GHpm!*P*x z((PS8Quo4%NeG zN&P8XI}>>Gnz3^)Y9ClJ zKs-9EQ6t%i80S_8xqhCe%+`<}vNno8-b2QNn8lw;Wu`g)8#`2xiF8O``s>ET`TyEd z*L5&tk^42$|2QX=n-00%G1--_g?roFWz>PnP^bItU0eY@=f_buJ#FpJeY^W?OvV); zf5~s7d@Oj;zQ=;z-KemL{Nw#?D@aO0UUx86Oc=$&Gt+(;j!f2t6 zaqCF$JUX$U05SiY&XteK&W7=ge8DgHCc^^M%o1=wo%%j*B5fHCeQm7?%DeMO5iOpe zuh=*1U)N{+LZFxOUkb6BH%{fZG3Cf&X+)%4SD;1YQJ5#=ybPl$zLw_v;l=aFB_GqP^cQP>RBM6 zF{FWR8mdp_wvgd?iM#MEuV(`-%}{-_{E4@Hro-K@$HdPUS)C*{sQlc`w7G# z1bkHvuMy2^&ugra02jwI^Ub9_pP9!O%g=l#V1znRj`uCO)@$d{RJ*R$(u;T=$nAy5 zfR(SCTk!BnXZ>X=3u;9DzTp+p*x}MnHzqLdos(Z<2oPK|HdMfg%qEjZZ8REIXTXL2 z6S*ZjtKC-KyC_;b+2<9}jps0oR*mUV<^w^l^XexT3Hd|!o=2NK6`Nk8;(~M?pADSZ z3)SdEPn|O{`6t%`hbEw48m1(e1nUP?W&9Q5|Xn51j;xk6YIvJ*))5R)5 z2hP9oV%9qlt9W-+cj9O#fZ^nK6mtGR4nw{@TM%^uj{gq8`??%8UJp`s#W_~ZVHuUN zEoyCc2t|D-TUT>zt$sAf8M4_@|6Mi#n*{$_cT$oVx^bND@L4k6kGnz zjk0r?Cn;F-!!tv>BC2i~Hl%%$HWSgGdCJFn%CghFW59l^%^=$8Vo$5|e6@`APi{{a z+}Ut}d){#hYt9Pl@b1w{_K5&xS%|sYb#+%HiuRcM0S0w3d)3 z>r1Cpp@y2MF<7w*PP|MWRh;%T`ZMO^AEovwGj`tP+2_v6=q&Op4e3wSu{4JL^!5{y zJqmbWH3-(3RBb{0OsLVL15hvGAKholl=SvQ{%Nfm-SQg*n%5iX7oP2Q+@Ox%9@qCET{JkbzWr4fF|y2_cC=7@s0lt= zfYG@j!94pnBUpe5D0YvFMF{^Kz}(%jhn76(q#jgt!dDJ=!Zw+wQVm(6D z^%@fJ;rK=Z(nV5OE>(5W<`dIi*o#bLbUbH2K18o3A++1Aw+m%vtec zK}-qfPnemG^Y5`IY1QT5Q59^(l-z*q;J3s?u`}aPFAs7?VQTBQH{hTu`;Vc(4;ULX zIFjiA=XVCvEtj6P8L!EViR(g<7#q9+^C#(2uwDM))nX=LuCx)Xc{6}8Bw$m{8~*6k zx6^GN$f&h$E)^20;guAeiKdrr(Qms&X&HYc&6TU!(O#p&dN75x6O#?qCGnS$nX1pm z0u|XIohcxC5V1H5Dd*nj5SA68MNc}f6<#OVjuitWE!y3fM=Y~tX3#Y3c2vI0dN25% z@JjD8{>fvi1zs(#Is9BIxsLWJMH=#3@i!&bTdd02kadQ63*JuUYrgx$otB^Jox4C2 zt6NB1mmHDFLWh0OX%2LcX|9Udm_y(D@^=FFatu#wu^@RX7PC?4mjL+zB#`= zvik2&sk46cr4mi02RN3VLtWIb z^PNAFH(Y00GIv*Y;AYTkYC@q1SnUnAb zt(Nny9`P+tT}hQI86qEp%ggn5U*vU0C&%nvw>(S~VXduX@n`NfJ<3(xbX#RO{HfDe zA2%ic$y}IL$sWCW*^^6T>jt>3y9JZ`n|LV4hq(e6f-3JVDV=G~)GQzY4N}oH0`-7$ce0a{dzsj*CWH?Z<-YZ!NMino7&=4@~!b92f2tE94a-} z-)00<_vHMs#=0E~u~k=wMz)?vg?Lyg?upl#x;^j@{XM+op|G)#K)Ex`4PI#jrd?z` zWJ0PP{}dOmrvhI*pQISlgxbciR)aEYk)edMEU;hWS+kc`ggx_`*69`NbSnEIJJra| z%0{XWBi@MD%_7c8p&=~!A{$vX=HG)E!AvplhXMFG`AhQNpE9tYkl*vGH`A(*k*qC> zXqQWbpdhjX?dQ3-+n}zN>IDY}zO><}`NK%;$otWI=tk z&sIY!=#k-tLEU+tM7dfY3Yl6w5OW2f%dU-wo~TSy>n2(n-rrR!c}6Ey7gGDNw5K@y zX%V_b4*LPZwJWi@5$2I!q@JRW!nVhlGmPN4izoKQjA-TQ+b->=e~*LU)t?vDmpS9B z!8hh^2!I8{$C(AjyJLwwy+|~oyzLf$*VNMDLy$~ZpcBe4hNLv;(5slNkK1D?PIV~qJM zvrl8Ks*F6Xkw^IX@v&da(ddPgk8fbh4nV=PsKA(S3EJgUTOFRjhTSMe;LIYb2D)Bg zadDT}@9Hlf2OzRv?QAxlwW!P0eF7FM3tXFs4LV(8L)*JUxjulPLzi?0jLd`rv>pG^ zZpD_B&2jl^pSHyGS^G!?0$XWpqRSbKw8)d~{5a!XhVih<#dNiKF%bV*IvF2ed{TNsRxi~pH@KQt zs6W&zp`B0jI@-Okv?R!rq@UZ09`Y5mWB0%n^k+UA`mqX�ax`@8>-|G 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 z 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

Y$XcGSwViL$iK;@4u64tpssr)21D{Cg$;} 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

+
+ +
+
+
+
+
+
${this.emptyPanelContent}
+
+